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

Servlet 点击计数器

Contatore di clic di pagina web

Spesso, potresti essere interessato a sapere il numero totale di clic su una pagina specifica del sito web. Calcolare questi clic con un Servlet è molto semplice perché il ciclo di vita di un Servlet è controllato dal container in cui è eseguito.

Ecco i passaggi necessari per implementare un contatore di clic di pagina web basato sul ciclo di vita di Servlet:

  • Inizializza una variabile globale nel metodo init().

  • Aumenta la variabile globale ogni volta che viene chiamata la metodo doGet() o doPost().

  • Se necessario, puoi utilizzare un database per memorizzare il valore della variabile globale in destroy(). Il valore può essere letto nel metodo init() durante l'inizializzazione del Servlet. Questo passaggio è opzionale.

  • Se vuoi contare una sessione di sessione di pagina cliccata una volta, utilizza il metodo isNew() per verificare se la sessione di sessione ha già cliccato la stessa pagina. Questo passaggio è opzionale.

  • Puoi mostrare il valore del contatore globale sul sito web per visualizzare il numero totale di clic della pagina. Questo passaggio è opzionale.

Supponiamo che il container web non possa essere riavviato. Se viene riavviato o distrutto il Servlet, il contatore viene reimpostato.

Esempio online

Questo esempio dimostra come implementare un semplice contatore di clic di pagina web:

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() 
    { 
        // reimposta il contatore di clicchi
        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>

Ora chiama questo Servlet tramite http://localhost:8080/TomcatTest/PageHitCounter. Questo aumenterà il valore del contatore di 1 ogni volta che la pagina viene ricaricata, come mostrato di seguito:

Totale clic

6

Contatore di clic del sito web

Spesso potresti essere interessato a sapere il numero totale di clic del sito web. In Servlet, è molto semplice, possiamo farlo con un filtro.

Ecco i passaggi necessari per implementare un semplice contatore di clicchi del sito web basato sul ciclo di vita del filtro:

  • Inizializza una variabile globale nel metodo init() del filtro.

  • Ogni volta che viene chiamato il metodo doFilter, viene aumentato il valore della variabile globale.

  • Se necessario, puoi utilizzare una tabella del database nel metodo destroy() del filtro per memorizzare i valori delle variabili globali. Questo valore può essere letto nel metodo init() durante la prossima inizializzazione del filtro, che è un passaggio opzionale.

Supponiamo che il container web non possa essere riavviato. Se viene riavviato o distrutto il Servlet, il contatore di clicchi viene reimpostato.

Esempio online

Questo esempio dimostra come implementare un semplice contatore di clicchi del sito web:

// importazione delle librerie java necessarie
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) 
                    lancia l'eccezione ServletException{
     // reimposta il contatore di clicchi
     hitCount = 0;
  }
  public void doFilter(ServletRequest request, 
              ServletResponse response,
              FilterChain chain) 
              lancia l'eccezione 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
..................