English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Oft haben Sie Interesse daran, die Gesamtzahl der Klicks auf einer bestimmten Seite der Website zu wissen. Die Berechnung dieser Klicks mit einem Servlet ist sehr einfach, da der Lebenszyklus eines Servlets von dem Container kontrolliert wird, in dem es läuft.
Hier sind die Schritte, die Sie unternehmen müssen, um einen einfachen Pageview-Zähler basierend auf dem Servlet-Lebenszyklus zu implementieren:
Initialisieren Sie eine globale Variable im init()-Methoden.
Bei jedem Aufruf der Methoden doGet() oder doPost() wird der globale Variable hinzugefügt.
Wenn erforderlich, können Sie eine Datenbanktabelle verwenden, um den Wert der globalen Variablen in der destroy()-Methode zu speichern. Beim nächsten Initialisieren des Servlets kann dieser Wert im init()-Methoden gelesen werden. Dieser Schritt ist optional.
Wenn Sie nur einen Pageview pro Session zählen möchten, verwenden Sie bitte die Methode isNew() zur Überprüfung, ob die Session bereits die gleiche Seite angeklickt hat. Dieser Schritt ist optional.
Sie können den Wert des globalen Zählers anzeigen, um die Gesamtanzahl der Klicks auf der Seite auf der Website anzuzeigen. Dieser Schritt ist optional.
在这里,我们假设 Web 容器将无法重新启动。如果是重新启动或 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() { // Zähler zurücksetzen 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() { // Dieser Schritt ist optional, aber falls erforderlich, können Sie den Wert von hitCount in die Datenbank schreiben } }
Lassen Sie uns nun den obigen Servlet kompilieren und den folgenden Eintrag in der Datei web.xml erstellen:
<?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>
Jetzt können Sie http://localhost:8080/TomcatTest/PageHitCounter diesen Servlet aufrufen. Dies wird den Wert des Zählers jedes Mal erhöhen, wenn die Seite neu geladen wird 1, wie in folgendem Beispiel gezeigt:
Gesamtzahl der Klicks6 |
Oft sind Sie daran interessiert, die Gesamtzahl der Klicks auf die gesamte Website zu kennen. In Servlets ist dies ebenfalls sehr einfach, und wir können dies mit einem Filter erreichen.
Hier sind die Schritte, die zur Implementierung eines einfachen Website-Klickzählers basierend auf dem Lebenszyklus des Filters erforderlich sind:
Eine globale Variable wird im init()-Methodenaufruf des Filters initialisiert.
Der globale Zähler wird bei jedem Aufruf der doFilter-Methode erhöht.
Wenn erforderlich, können Sie in der destroy()-Methode eines Datenbanktabells die Werte globaler Variablen speichern. Diese Werte können im init()-Methodenaufruf beim nächsten Initialisieren des Filters gelesen werden, was optional ist.
Wir gehen davon aus, dass der Web-Container nicht neu gestartet werden kann. Wenn er neu gestartet wird oder der Servlet zerstört wird, wird der Klickzähler zurückgesetzt.
Dieses Beispiel zeigt, wie ein einfacher Website-Klickzähler implementiert wird:
// Erforderliche java-Bibliotheken importieren 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{ // Zähler zurücksetzen hitCount = 0; } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws java.io.IOException, ServletException { // Den Wert des Zählers erhöhen 1 hitCount++; // Zähler ausgeben System.out.println("Website-Besuchszählung:")+ hitCount); // Übergeben Sie die Anfrage an die Filterkette chain.doFilter(request,response); } public void destroy() { // Dieser Schritt ist optional, aber falls erforderlich, können Sie den Wert von hitCount in die Datenbank schreiben } }
Lassen Sie uns nun den obigen Servlet kompilieren und den folgenden Eintrag in der Datei web.xml erstellen:
.... <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> ....
Besuchen Sie jetzt eine beliebige Seite der Website, z.B. http://localhost:8080/。Das Zählerwert wird jedes Mal erhöht, wenn eine beliebige Seite geklickt wird 1,es wird die folgende Nachricht im Logfile angezeigt:
Website-Besuchszählung: 1 Website-Besuchszählung: 2 Website-Besuchszählung: 3 Website-Besuchszählung: 4 Website-Besuchszählung: 5 ..................