English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Servlet-Klickzähler

Webseiten-Klickzähler

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 被销毁,计数器将被重置。

Online-Beispiel

本示例演示了如何实现一个简单的网页点击计数器:

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 Klicks

6

Website-Klickzähler

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.

Online-Beispiel

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
..................