Servlet Compteur de visites

Compteur de visites de page

Bien souvent, vous pouvez souhaiter connaître le nombre total de visites sur une page spécifique d'un site web. L'utilisation de Servlet pour compter ces visites est très simple, car le cycle de vie d'un Servlet est contrôlé par le conteneur dans lequel il s'exécute.

Voici les étapes nécessaires pour implémenter un simple compteur de visites de page basé sur le cycle de vie d'un Servlet :

  • Initialisez une variable globale dans la méthode init().
  • Incrémentez la variable globale chaque fois que la méthode doGet() ou doPost() est appelée.
  • Si nécessaire, vous pouvez utiliser une table de base de données pour stocker la valeur de la variable globale dans destroy(). La valeur peut être lue dans la méthode init() la prochaine fois que le Servlet est initialisé. Cette étape est facultative.
  • Si vous souhaitez compter une visite de page une seule fois par session, utilisez la méthode isNew() pour vérifier si la session a déjà cliqué sur la même page. Cette étape est facultative.
  • Vous pouvez afficher le nombre total de visites de pages sur le site Web en affichant la valeur du compteur global. Cette étape est facultative.

Ici, nous supposons que le conteneur Web ne sera pas redémarré. S'il est redémarré ou si le Servlet est détruit, le compteur sera réinitialisé.

Exemple

Cet exemple montre comment implémenter un simple compteur de visites de pages :

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

}

Maintenant, compilons le Servlet ci-dessus et créons les entrées suivantes dans le fichier 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>

Maintenant, appelez ce Servlet en accédant à http://localhost:8080/TomcatTest/PageHitCounter. Cela incrémentera la valeur du compteur de 1 à chaque actualisation de la page, et le résultat est le suivant :

Total des visites

6


Compteur de visites du site Web

Souvent, vous pouvez souhaiter connaître le nombre total de visites de l'ensemble du site Web. En Servlet, c'est également très simple, et nous pouvons utiliser un filtre pour y parvenir.

Voici les étapes nécessaires pour implémenter un simple compteur de visites de site Web basé sur le cycle de vie d'un filtre :

  • Initialisez une variable globale dans la méthode init() du filtre.
  • Incrémentez la variable globale chaque fois que la méthode doFilter est appelée.
  • Si nécessaire, vous pouvez utiliser une table de base de données dans la méthode destroy() du filtre pour stocker la valeur de la variable globale. La valeur peut être lue dans la méthode init() la prochaine fois que le filtre est initialisé. Cette étape est facultative.

Ici, nous supposons que le conteneur Web ne sera pas redémarré. S'il est redémarré ou si la Servlet est détruite, le compteur de visites sera réinitialisé.

Exemple

Cet exemple montre comment implémenter un simple compteur de visites de site Web :

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

Maintenant, compilons le Servlet ci-dessus et créons les entrées suivantes dans le fichier 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>

....

Maintenant, visitez n'importe quelle page du site Web, par exemple http://localhost:8080/. Cela incrémentera la valeur du compteur de 1 chaque fois qu'une page est visitée, et cela affichera le message suivant dans le journal :

网站访问统计: 1
网站访问统计: 2
网站访问统计: 3
网站访问统计: 4
网站访问统计: 5
..................
Autres extensions