Serwlety - licznik trafień

Licznik trafień dla strony internetowej

Wiele razy chciałbyś poznać całkowitą liczbę odwiedzin na określonej stronie Twojej witryny. Liczenie tych trafień za pomocą serwletu jest bardzo proste, ponieważ cykl życia serwletu jest kontrolowany przez kontener, w którym działa.

Poniżej przedstawiono kroki, które należy wykonać, aby zaimplementować prosty licznik odwiedzin strony oparty na cyklu życia serwletu -

  • Zainicjuj zmienną globalną w metodzie init ().

  • Zwiększaj zmienną globalną za każdym razem, gdy wywoływana jest metoda doGet () lub doPost ().

  • W razie potrzeby możesz użyć tabeli bazy danych do przechowywania wartości zmiennej globalnej w metodzie niszczenia (). Wartość tę można odczytać wewnątrz metody init (), gdy serwlet miałby zostać zainicjowany następnym razem. Ten krok jest opcjonalny.

  • Jeśli chcesz liczyć tylko niepowtarzalne odwiedziny strony w ramach sesji, możesz użyć metody isNew (), aby sprawdzić, czy ta sama strona została już odwiedzona w tej sesji. Ten krok jest opcjonalny.

  • Możesz wyświetlić wartość globalnego licznika, aby pokazać całkowitą liczbę odwiedzin w Twojej witrynie internetowej. Ten krok jest również opcjonalny.

Tutaj zakładam, że kontener WWW nie zostanie zrestartowany. Jeśli zostanie ponownie uruchomiony lub serwlet zniszczony, licznik trafień zostanie zresetowany.

Przykład

Ten przykład pokazuje, jak zaimplementować prosty licznik odwiedzin strony -

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

Teraz skompilujmy powyżej serwlet i utwórzmy następujące wpisy w 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>
....

Teraz wywołaj ten serwlet, używając adresu URL http: // localhost: 8080 / PageHitCounter. To zwiększyłoby licznik o jeden za każdym razem, gdy ta strona zostanie odświeżona i wyświetli następujący wynik -

Total Number of Hits

6

Hit Counter for a Website:

Wiele razy chciałbyś poznać całkowitą liczbę odsłon w całej witrynie. Jest to również bardzo proste w Servlecie i możemy to osiągnąć za pomocą filtrów.

Poniżej przedstawiono kroki, które należy podjąć, aby wdrożyć prosty licznik odwiedzin w witrynie oparty na cyklu życia filtra -

  • Zainicjuj zmienną globalną w metodzie init () filtru.

  • Zwiększaj zmienną globalną przy każdym wywołaniu metody doFilter.

  • Jeśli jest to wymagane, możesz użyć tabeli bazy danych do przechowywania wartości zmiennej globalnej w metodzie filtru destru (). Wartość tę można odczytać wewnątrz metody init (), gdy filtr zostanie zainicjowany następnym razem. Ten krok jest opcjonalny.

Tutaj zakładam, że kontener WWW nie zostanie zrestartowany. Jeśli zostanie ponownie uruchomiony lub serwlet zniszczony, licznik trafień zostanie zresetowany.

Przykład

Ten przykład pokazuje, jak zaimplementować prosty licznik odwiedzin w witrynie -

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

Teraz skompilujmy powyższy serwlet i utwórzmy następujące wpisy w 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>
....

Teraz wywołaj dowolny adres URL, taki jak URL http: // localhost: 8080 /. Zwiększyłoby to licznik o jeden za każdym razem, gdy jakakolwiek strona otrzyma trafienie i wyświetli następujący komunikat w dzienniku -

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