Servlet -Zugriffszähler

Seitenzugriffszähler

Häufig möchten Sie vielleicht die Gesamtzahl der Zugriffe auf eine bestimmte Seite einer Website wissen. Die Verwendung eines Servlets zum Zählen dieser Zugriffe ist sehr einfach, da der Lebenszyklus eines Servlets vom Container gesteuert wird, in dem es ausgeführt wird.

Im Folgenden sind die Schritte aufgeführt, die zur Implementierung eines einfachen, auf dem Servlet-Lebenszyklus basierenden Seitenzugriffszählers erforderlich sind:

  • Initialisieren Sie eine globale Variable in der init()-Methode.
  • Erhöhen Sie die globale Variable jedes Mal, wenn die doGet()- oder doPost()-Methode aufgerufen wird.
  • Bei Bedarf können Sie eine Datenbanktabelle verwenden, um den Wert der globalen Variablen in destroy() zu speichern. Der Wert kann in der Methode init() gelesen werden, wenn das Servlet das nächste Mal initialisiert wird. Dieser Schritt ist optional.
  • Wenn Sie einen Seitenaufruf nur einmal pro Sitzung zählen möchten, verwenden Sie die Methode isNew(), um zu prüfen, ob die Sitzung bereits dieselbe Seite angeklickt hat. Dieser Schritt ist optional.
  • Sie können die Gesamtzahl der Seitenaufrufe auf der Website anzeigen, indem Sie den Wert des globalen Zählers ausgeben. Dieser Schritt ist optional.

Hier gehen wir davon aus, dass der Webcontainer nicht neu gestartet wird. Wenn er neu gestartet oder das Servlet zerstört wird, wird der Zähler zurückgesetzt.

Beispiel

Dieses Beispiel zeigt, wie man einen einfachen Seitenaufrufzähler implementiert:

package com.example.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 的值写入到数据库
    } 

}

Jetzt kompilieren wir das obige Servlet und erstellen die folgenden Einträge in der Datei web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app>
  <servlet>
    <servlet-name>PageHitCounter</servlet-name>
    <servlet-class>com.example.test.PageHitCounter</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>PageHitCounter</servlet-name>
    <url-pattern>/TomcatTest/PageHitCounter</url-pattern>
  </servlet-mapping>
</web-app>

Rufen Sie nun dieses Servlet auf, indem Sie http://localhost:8080/TomcatTest/PageHitCounter besuchen. Dadurch wird der Zählerwert bei jedem Aktualisieren der Seite um 1 erhöht, und das Ergebnis sieht wie folgt aus:

Gesamtaufrufe

6


Website-Zugriffszähler

Häufig möchten Sie vielleicht die Gesamtzahl der Zugriffe auf die gesamte Website wissen. In Servlet ist das ebenfalls sehr einfach, und wir können dazu einen Filter verwenden.

Im Folgenden sind die Schritte aufgeführt, die erforderlich sind, um einen einfachen Website-Zugriffszähler auf Basis des Filter-Lebenszyklus zu implementieren:

  • Initialisieren Sie eine globale Variable in der Methode init() des Filters.
  • Erhöhen Sie die globale Variable jedes Mal, wenn die doFilter-Methode aufgerufen wird.
  • Bei Bedarf können Sie eine Datenbanktabelle in destroy() des Filters verwenden, um den Wert der globalen Variable zu speichern. Der Wert kann beim nächsten Initialisieren des Filters in der init()-Methode gelesen werden. Dieser Schritt ist optional.

Hier gehen wir davon aus, dass der Web-Container nicht neu gestartet wird. Wenn er neu gestartet oder das Servlet zerstört wird, wird der Trefferzähler zurückgesetzt.

Beispiel

Dieses Beispiel zeigt, wie man einen einfachen Website-Trefferzähler implementiert:

// 导入必需的 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 的值写入到数据库
  } 
} 

Jetzt kompilieren wir das obige Servlet und erstellen die folgenden Einträge in der Datei 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>

....

Besuchen Sie nun eine beliebige Seite der Website, zum Beispiel http://localhost:8080/. Dadurch wird der Zählerwert bei jedem Aufruf einer beliebigen Seite um 1 erhöht, und die folgende Meldung wird im Log angezeigt:

网站访问统计: 1
网站访问统计: 2
网站访问统计: 3
网站访问统计: 4
网站访问统计: 5
..................
Andere Erweiterungen