Servlet - Contatore di visite

Contatore visite per una pagina Web

Molte volte saresti interessato a conoscere il numero totale di visite su una particolare pagina del tuo sito web. È molto semplice contare questi hit utilizzando un servlet perché il ciclo di vita di un servlet è controllato dal contenitore in cui viene eseguito.

Di seguito sono riportati i passaggi da eseguire per implementare un semplice contatore di visite di pagine basato sul ciclo di vita dei servlet:

  • Inizializza una variabile globale nel metodo init ().

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

  • Se necessario, è possibile utilizzare una tabella del database per memorizzare il valore della variabile globale nel metodo destroy (). Questo valore può essere letto all'interno del metodo init () quando il servlet verrà inizializzato la prossima volta. Questo passaggio è facoltativo.

  • Se si desidera contare solo gli hit di pagina unici durante una sessione, è possibile utilizzare il metodo isNew () per verificare se la stessa pagina è già stata raggiunta durante quella sessione. Questo passaggio è facoltativo.

  • Puoi visualizzare il valore del contatore globale per mostrare il numero totale di visite sul tuo sito web. Anche questo passaggio è facoltativo.

Qui presumo che il contenitore web non verrà riavviato. Se viene riavviato o il servlet viene distrutto, il contatore di visite verrà ripristinato.

Esempio

Questo esempio mostra come implementare un semplice contatore di visite di pagine:

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.
   } 
}

Ora compiliamo il servlet sopra e creiamo le seguenti voci in 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>
....

Ora chiama questo servlet utilizzando l'URL http: // localhost: 8080 / PageHitCounter. Ciò aumenterebbe il contatore di uno ogni volta che questa pagina viene aggiornata e verrà visualizzato il seguente risultato:

Total Number of Hits

6

Hit Counter for a Website:

Molte volte saresti interessato a conoscere il numero totale di visite su tutto il tuo sito web. Anche questo è molto semplice in Servlet e possiamo farlo usando i filtri.

Di seguito sono riportati i passaggi da eseguire per implementare un semplice contatore di visite del sito Web basato sul ciclo di vita del filtro:

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

  • Aumenta la variabile globale ogni volta che viene chiamato il metodo doFilter.

  • Se necessario, è possibile utilizzare una tabella di database per memorizzare il valore della variabile globale nel metodo di filtro destroy (). Questo valore può essere letto all'interno del metodo init () quando il filtro verrà inizializzato la prossima volta. Questo passaggio è facoltativo.

Qui presumo che il contenitore web non verrà riavviato. Se viene riavviato o il servlet viene distrutto, il contatore di visite verrà ripristinato.

Esempio

Questo esempio mostra come implementare un semplice contatore di visite del sito Web:

// 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.
   } 
}

Ora compiliamo il servlet sopra e creiamo le seguenti voci in 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>
....

Ora chiama qualsiasi URL come URL http: // localhost: 8080 /. Ciò aumenterebbe il contatore di uno ogni volta che una pagina riceve un hit e visualizzerà il seguente messaggio nel registro:

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