Servlets - Contador de visitas

Contador de visitas para una página web

Muchas veces le interesaría conocer el número total de visitas a una página en particular de su sitio web. Es muy sencillo contar estos hits utilizando un servlet porque el ciclo de vida de un servlet está controlado por el contenedor en el que se ejecuta.

Los siguientes son los pasos que se deben seguir para implementar un contador de visitas de página simple que se basa en el ciclo de vida de Servlet:

  • Inicializa una variable global en el método init ().

  • Aumente la variable global cada vez que se llame al método doGet () o doPost ().

  • Si es necesario, puede usar una tabla de base de datos para almacenar el valor de la variable global en el método destroy (). Este valor se puede leer dentro del método init () cuando el servlet se inicializaría la próxima vez. Este paso es opcional.

  • Si desea contar solo las visitas a páginas únicas dentro de una sesión, puede usar el método isNew () para verificar si la misma página ya ha sido visitada dentro de esa sesión. Este paso es opcional.

  • Puede mostrar el valor del contador global para mostrar el número total de visitas en su sitio web. Este paso también es opcional.

Aquí asumo que el contenedor web no se reiniciará. Si se reinicia o se destruye el servlet, el contador de visitas se restablecerá.

Ejemplo

Este ejemplo muestra cómo implementar un contador de visitas de página simple:

import java.io.*;
import java.sql.Date;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class PageHitCounter extends HttpServlet {

   private int hitCount; 

   public void init() { 
      // Reset hit counter.
      hitCount = 0;
   } 

   public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {

      // Set response content type
      response.setContentType("text/html");

      // This method executes whenever the servlet is hit 
      // increment hitCount 
      hitCount++; 
      PrintWriter out = response.getWriter();
      String title = "Total Number of Hits";
      String docType = "<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\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() { 
      // This is optional step but if you like you
      // can write hitCount value in your database.
   } 
}

Ahora compilemos el servlet anterior y creemos las siguientes entradas en web.xml

<servlet>
   <servlet-name>PageHitCounter</servlet-name>
   <servlet-class>PageHitCounter</servlet-class>
</servlet>

<servlet-mapping>
   <servlet-name>PageHitCounter</servlet-name>
   <url-pattern>/PageHitCounter</url-pattern>
</servlet-mapping>
....

Ahora llame a este servlet usando la URL http: // localhost: 8080 / PageHitCounter. Esto aumentaría el contador en uno cada vez que esta página se actualice y mostraría el siguiente resultado:

Total Number of Hits

6

Hit Counter for a Website:

Muchas veces le interesaría conocer el número total de visitas en todo su sitio web. Esto también es muy simple en Servlet y podemos lograrlo usando filtros.

A continuación se detallan los pasos que se deben seguir para implementar un contador de visitas de sitios web simple que se basa en el ciclo de vida del filtro:

  • Inicializa una variable global en el método init () de un filtro.

  • Aumente la variable global cada vez que se llame al método doFilter.

  • Si es necesario, puede usar una tabla de base de datos para almacenar el valor de la variable global en el método de filtro destroy (). Este valor se puede leer dentro del método init () cuando el filtro se inicializaría la próxima vez. Este paso es opcional.

Aquí asumo que el contenedor web no se reiniciará. Si se reinicia o se destruye el servlet, el contador de visitas se restablecerá.

Ejemplo

Este ejemplo muestra cómo implementar un contador de visitas de un sitio web simple:

// Import required java libraries
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 {
      // Reset hit counter.
      hitCount = 0;
   }

   public void  doFilter(ServletRequest request, ServletResponse response, FilterChain chain) 
      throws java.io.IOException, ServletException {

      // increase counter by one
      hitCount++;

      // Print the counter.
      System.out.println("Site visits count :"+ hitCount );

      // Pass request back down the filter chain
      chain.doFilter(request,response);
   }
   
   public void destroy() { 
      // This is optional step but if you like you
      // can write hitCount value in your database.
   } 
}

Ahora compilemos el servlet anterior y creemos las siguientes entradas en 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>
....

Ahora llame a cualquier URL como URL http: // localhost: 8080 /. Esto aumentaría el contador en uno cada vez que una página reciba un golpe y mostraría el siguiente mensaje en el registro:

Site visits count : 1
Site visits count : 2
Site visits count : 3
Site visits count : 4
Site visits count : 5
..................