Latest web development tutorials

Hit Counter Servlet

Page hit counter

Plusieurs fois, vous pourriez être intéressé de connaître le montant total de clics sur une page particulière de votre site. l'utilisation de Servlet pour calculer ces clics sont très simples, parce que le cycle de vie d'un conteneur de servlet par son contrôle est en cours d'exécution.

Ce qui suit est basé sur la réalisation d'une simple vie de Servlet cycle de page hit counter mesures à prendre:

  • Initialiser une variable globale dans la méthode init ().
  • Chaque méthode doGet d'appel () ou doPost (), nous avons augmenté les variables globales.
  • () Si vous le souhaitez, vous pouvez utiliser une table de base de données pour stocker la valeur de la variable globale détruire. Lors de la prochaine Servlet d'initialisation, cette valeur peut être lue dans la méthode init (). Cette étape est facultative.
  • Si vous voulez une session une fois que le nombre de pages de session résultats, utilisez la méthode isNew () pour vérifier si la conversation de la session a été cliqué sur la même page. Cette étape est facultative.
  • Vous pouvez afficher la valeur globale du compteur, pour afficher les pages totales de trafic sur votre site. Cette étape est facultative.

Ici, nous supposons que le conteneur Web ne peut pas être redémarré. Si vous redémarrez ou Servlet est détruite, le compteur sera remis à zéro.

Exemples

Cet exemple montre comment implémenter une simple page web hit counter:

package com.w3big.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, nous allons compiler les Servlet ci-dessus, et de créer l'entrée suivante dans le fichier web.xml:

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

Maintenant, en visitant http: pour appeler le Servlet 8080 / TomcatTest / PageHitCounter: // localhost. Ce actualiser la page à chaque fois, d'augmenter la valeur du compteur 1, le résultat est le suivant:

Nombre total de hits

6


Site Web Hit Counter

Plusieurs fois, vous pourriez être intéressé à connaître le trafic total de l'ensemble du site. Dans Servlet, ce qui est très simple, nous pouvons utiliser le filtre pour ce faire.

Ce qui suit est de mettre en place un site web simple à base de filtre Cycle de vie a frappé contre les mesures à prendre:

  • () Méthode pour initialiser un filtre d'initialisation variable globale.
  • Chaque appel de méthodes doFilter, ont augmenté les variables globales.
  • Si vous le souhaitez, vous pouvez utiliser une table de base de données () dans le filtre détruire variable globale pour stocker la valeur. initialisation suivante du filtre, la valeur peut être lue dans la méthode init (), cette étape est facultative.

Ici, nous supposons que le conteneur Web ne peut pas être redémarré. Si vous redémarrez ou Servlet est détruite, le compteur d'accès sera réinitialisé.

Exemples

Cet exemple montre comment implémenter un compteur simple site hit:

// 导入必需的 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, nous allons compiler les Servlet ci-dessus, et de créer l'entrée suivante 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 accéder une page de votre site, par exemple http: // localhost: 8080 /. Cette volonté sur une page à chaque fois qu'il est cliqué, l'augmentation de la valeur du compteur 1, il affiche le message suivant dans le journal:

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