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