English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
غالبًا ما قد تريد معرفة إجمالي عدد ضربات الصفحة لموقع معين على موقعك الإلكتروني. يمكن حساب هذه الضربات بسهولة باستخدام Servlet لأن دورة حياة Servlet يتم التحكم فيها بواسطة المحتوي الذي يستضيفها
هذه هي الخطوات التي يجب اتخاذها لتنفيذ محتسب ضربات صفحة بسيط يعتمد على دورة حياة Servlet
يتم تعيين متغير عالمي في طريقة init()
يزيد المتغير العالمي في كل مرة يتم فيها استدعاء طريقة doGet() أو doPost()
إذا لزم الأمر، يمكنك استخدام جدول قاعدة البيانات لتخزين قيمة المتغيرات العالمية في destroy(). يمكن قراءة هذا القيمة عند تعيين Servlet مرة أخرى في طريقة init(). هذا الخطوة اختيارية
إذا كنت تريد تتبع ضربة الصفحة لجلسة session واحدة فقط، فاستخدم طريقة isNew() للتحقق من whether الجلسة session قد ضربت الصفحة نفسها من قبل. هذا الخطوة اختيارية
يمكنك عرض قيمة المحتسب الكلي على موقعك الإلكتروني لعرض إجمالي عدد ضربات الصفحة. هذا الخطوة اختيارية
في هذا السياق، نفترض أن وحدة التطبيق لن تتمكن من إعادة التشغيل. إذا تم إعادة التشغيل أو تدمير Servlet، سيتم إعادة تعيين المحتسب
هذا المثال يوضح كيفية تنفيذ محتسب ضربات صفحة بسيط
package com.w3codebox.test; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** /* Servlet implementation class PageHitCounter */ */ @WebServlet("/PageHitCounter") public class PageHitCounter extends HttpServlet { private static final long serialVersionUID = 1L; private int hitCount; public void init() { // 重置点击计数器 hitCount = 0; } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); // 增加hitCount hitCount++; PrintWriter out = response.getWriter(); String title = "总点击量"; String docType = "<!DOCTYPE html> \n"; out.println(docType + "<html>\n" + "<head><title>" + title + "</title></head>\n" + "<body bgcolor="#f0f0f0">\n" + "<h1 align="center">" + title + "</h1>\n" + "<h2 align="center">" + hitCount + "</h2>\n" + "</body></html>"); } public void destroy() { // هذا الخطوة اختيارية، ولكن إذا كنت بحاجة إليها، يمكنك كتابة قيمة hitCount إلى قاعدة البيانات } }
الآن دعونا نكتب Servlet أعلاه ونخلق المدخل التالي في ملف web.xml:
<?xml version="1.0" encoding="UTF-8"?> <web-app> <servlet> <servlet-name>PageHitCounter</servlet-name> <servlet-class>com.w3codebox.test.PageHitCounter</servlet-class> </servlet> <servlet-mapping> <servlet-name>PageHitCounter</servlet-name> <url-pattern>/TomcatTest/PageHitCounter</url-pattern> </servlet-mapping> </web-app>
现在通过访问 http://localhost:8080/TomcatTest/PageHitCounter 来调用这个 Servlet。这将会在每次页面刷新时,把计数器的值增加 1,结果如下所示:
总点击量6 |
很多时候,您可能有兴趣知道整个网站的总点击量。在 Servlet 中,这也是非常简单的,我们可以使用过滤器做到这一点。
以下是实现一个简单的基于过滤器生命周期的网站点击计数器需要采取的步骤:
在过滤器的 init() 方法中初始化一个全局变量。
每次调用 doFilter 方法时,都增加全局变量。
如果需要,您可以在过滤器的 destroy() 中使用一个数据库表来存储全局变量的值。在下次初始化过滤器时,该值可在 init() 方法内被读取, 这一步是可选的。
在这里,我们假设 Web 容器将无法重新启动。如果是重新启动或 Servlet 被销毁,点击计数器将被重置。
本示例演示了如何实现一个简单的网站点击计数器:
// 导入必需的 java 库 import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import java.util.*; public class SiteHitCounter implements Filter{ private int hitCount; public void init(FilterConfig config) throws ServletException{ // 重置点击计数器 hitCount = 0; } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws java.io.IOException, ServletException { // زيادة قيمة العدادات 1 hitCount++; // عرض العدادات System.out.println("إحصاءات زيارات الموقع:"+ hitCount ); // تمرير الطلب إلى سلسلة تصفية chain.doFilter(request,response); } public void destroy() { // هذا الخطوة اختيارية، ولكن إذا كنت بحاجة إليها، يمكنك كتابة قيمة hitCount إلى قاعدة البيانات } }
الآن دعونا نكتب Servlet أعلاه ونخلق المدخل التالي في ملف web.xml:
.... <filter> <filter-name>SiteHitCounter</filter-name> <filter-class>SiteHitCounter</filter-class> </filter> <filter-mapping> <filter-name>SiteHitCounter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> ....
الآن يمكنك زيارة أي صفحة على الموقع، مثل http://localhost:8080/، وهذا سيؤدي إلى زيادة قيمة العدادات 1 في كل مرة يتم ضرب أي صفحة، سيتم عرض الرسالة التالية في السجل:
إحصاءات زيارات الموقع: 1 إحصاءات زيارات الموقع: 2 إحصاءات زيارات الموقع: 3 إحصاءات زيارات الموقع: 4 إحصاءات زيارات الموقع: 5 ..................