Servlet – Contador de visitas

A veces, querrá saber el número total de visitantes a una página específica de su sitio web. Debido a que el ciclo de vida de un servlet se rige por el contenedor en el que se ejecuta, contar estos hits con un servlet es bastante sencillo. Los siguientes pasos se basan en la implementación de un contador de visitas de página de ciclo de vida de Servlet básico:

  1. En la función init(), cree una variable global.
  2. Cada vez que se utilizan los métodos doGet() o doPost(), la variable global aumenta.
  3. Puede utilizar una tabla de base de datos para guardar el valor de una variable global en el método destroy() si es necesario. La próxima vez que se inicialice el servlet, este valor se puede leer desde la función init(). Este paso es opcional.
  4. Si desea contar solo las visitas únicas a la página dentro de una sesión, puede usar la función isNew() para verificar si la misma página ya ha sido visitada dentro de esa sesión. Este es un paso opcional.
  5. El valor del contador global puede mostrarse para representar el número total de visitas a su sitio web. Este también es un paso opcional.

Supondremos que el contenedor web no se puede reiniciar en este caso. El contador se restablecerá si reinicia o si se elimina el Servlet.

Ejemplo

Este ejemplo demuestra cómo crear un contador de visitas de página simple.

Java

import java.io.*;
import java.sql.Date;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
  
public class GfgServletExample 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 = "Count of 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 an optional step,
        // however you may store the hitCount value in your
        // database if you like.
    }
}

Ahora compile el Servlet anterior y agregue el siguiente elemento al archivo web.xml :

XML

<?xml version="1.0" encoding="UTF-8"?>
<web-app>
  <display-name>HitCounter</display-name>
<servlet>
   <servlet-name>GfgServletExample</servlet-name>
   <servlet-class>GfgServletExample</servlet-class>
</servlet>
  
<servlet-mapping>
   <servlet-name>GfgServletExample</servlet-name>
   <url-pattern>/GfgServletExample</url-pattern>
</servlet-mapping>
</web-app>

Ahora visitando http: para llamar al Servlet localhost:8080/HitCounter/GfgServletExample. Esto actualizará la página cada vez, para aumentar el valor del contador 1, el resultado es el siguiente:

Contador de visitas al sitio web

Puede que te interese saber el número total de visitas en todo tu sitio web en muchas ocasiones. En Servlet, esto también es bastante sencillo y podemos hacerlo usando filtros. Como resultado, se describen los métodos para crear un contador de visitas de sitio web básico basado en el ciclo de vida del filtro.

  • En el método init() de un filtro, establezca una variable global.
  • Cada vez que se ejecuta el método doFilter, la variable global aumenta.
  • Puede utilizar una tabla de base de datos para guardar el valor de una variable global en la función destroy() del filtro si es necesario. Cuando el filtro se inicializa la siguiente vez, este valor se puede leer desde la función init(). Este es un paso opcional.

Suponemos que el contenedor web no se reiniciará en este punto. El contador de visitas se restablecerá si se reinicia o si se destruye el servlet.

Java

import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
  
public class GfgServletExample 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("Visits count is :" + hitCount);
  
        // Pass request back down the filter chain
        chain.doFilter(request, response);
    }
  
    public void destroy()
    {
        // This is an optional step,
        // however you may store the hitCount value in your
        // database if you like.
    }
}

Ahora compile el Servlet anterior y agregue el siguiente elemento al archivo web.xml:

XML

...
<filter>
   <filter-name>GfgServletExample</filter-name>
   <filter-class>GfgServletExample</filter-class>
</filter>
  
<filter-mapping>
   <filter-name>GfgServletExample</filter-name>
   <url-pattern>/GfgServletExample</url-pattern>
</filter-mapping>
...

Ahora visitando http: para llamar al Servlet localhost:8080/HitCounter/GfgServletExample. Esto actualizará la página cada vez, para aumentar el valor del contador 1, el resultado es el siguiente:

Visits count is : 1
Visits count is : 2
Visits count is : 3
Visits count is : 4
Visits count is : 5
...........

Publicación traducida automáticamente

Artículo escrito por sanketnagare y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *