Servlets - Trefferzähler

Hit Counter für eine Webseite

Oft wären Sie daran interessiert, die Gesamtzahl der Treffer auf einer bestimmten Seite Ihrer Website zu erfahren. Es ist sehr einfach, diese Treffer mit einem Servlet zu zählen, da der Lebenszyklus eines Servlets von dem Container gesteuert wird, in dem es ausgeführt wird.

Im Folgenden sind die Schritte aufgeführt, die zur Implementierung eines einfachen Seitenzugriffszählers ausgeführt werden müssen, der auf dem Servlet-Lebenszyklus basiert:

  • Initialisieren Sie eine globale Variable in der Methode init ().

  • Erhöhen Sie die globale Variable jedes Mal, wenn die Methode doGet () oder doPost () aufgerufen wird.

  • Bei Bedarf können Sie eine Datenbanktabelle verwenden, um den Wert der globalen Variablen in der destroy () -Methode zu speichern. Dieser Wert kann innerhalb der init () -Methode gelesen werden, wenn das Servlet das nächste Mal initialisiert wird. Dieser Schritt ist optional.

  • Wenn Sie in einer Sitzung nur eindeutige Seitentreffer zählen möchten, können Sie mit der isNew () -Methode überprüfen, ob dieselbe Seite in dieser Sitzung bereits getroffen wurde. Dieser Schritt ist optional.

  • Sie können den Wert des globalen Zählers anzeigen, um die Gesamtzahl der Treffer auf Ihrer Website anzuzeigen. Dieser Schritt ist ebenfalls optional.

Hier gehe ich davon aus, dass der Webcontainer nicht neu gestartet wird. Wenn es neu gestartet oder das Servlet zerstört wird, wird der Trefferzähler zurückgesetzt.

Beispiel

Dieses Beispiel zeigt, wie ein einfacher Seitenzugriffszähler implementiert wird -

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

Lassen Sie uns nun das obige Servlet kompilieren und die folgenden Einträge in web.xml erstellen

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

Rufen Sie dieses Servlet nun unter der URL http: // localhost: 8080 / PageHitCounter auf. Dies würde den Zähler jedes Mal um eins erhöhen, wenn diese Seite aktualisiert wird, und es würde folgendes Ergebnis anzeigen -

Total Number of Hits

6

Hit Counter for a Website:

Oft wären Sie daran interessiert, die Gesamtzahl der Treffer auf Ihrer gesamten Website zu erfahren. Dies ist auch in Servlet sehr einfach und wir können dies mithilfe von Filtern erreichen.

Im Folgenden sind die Schritte aufgeführt, die zur Implementierung eines einfachen Website-Trefferzählers ausgeführt werden müssen, der auf dem Filterlebenszyklus basiert:

  • Initialisieren Sie eine globale Variable in der init () -Methode eines Filters.

  • Erhöhen Sie die globale Variable jedes Mal, wenn die doFilter-Methode aufgerufen wird.

  • Bei Bedarf können Sie eine Datenbanktabelle verwenden, um den Wert der globalen Variablen in der Filtermethode destroy () zu speichern. Dieser Wert kann innerhalb der init () -Methode gelesen werden, wenn der Filter beim nächsten Mal initialisiert wird. Dieser Schritt ist optional.

Hier gehe ich davon aus, dass der Webcontainer nicht neu gestartet wird. Wenn es neu gestartet oder das Servlet zerstört wird, wird der Trefferzähler zurückgesetzt.

Beispiel

Dieses Beispiel zeigt, wie ein einfacher Website-Trefferzähler implementiert wird -

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

Lassen Sie uns nun das obige Servlet kompilieren und die folgenden Einträge in web.xml erstellen

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

Rufen Sie nun eine beliebige URL wie die URL http: // localhost: 8080 / auf. Dies würde den Zähler jedes Mal um eins erhöhen, wenn eine Seite einen Treffer erhält, und die folgende Meldung im Protokoll anzeigen -

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