Servlets - Bộ đếm lượt truy cập

Lượt truy cập cho một trang web

Nhiều khi bạn muốn biết tổng số lượt truy cập trên một trang cụ thể trên trang web của mình. Rất đơn giản để đếm những lần truy cập này bằng cách sử dụng một servlet vì vòng đời của một servlet được kiểm soát bởi vùng chứa mà nó chạy.

Sau đây là các bước cần thực hiện để triển khai một bộ đếm lượt truy cập trang đơn giản dựa trên Vòng đời của Servlet:

  • Khởi tạo một biến toàn cục trong phương thức init ().

  • Tăng biến toàn cục mỗi khi phương thức doGet () hoặc doPost () được gọi.

  • Nếu được yêu cầu, bạn có thể sử dụng bảng cơ sở dữ liệu để lưu trữ giá trị của biến toàn cục trong phương thức hủy (). Giá trị này có thể được đọc bên trong phương thức init () khi servlet sẽ được khởi tạo vào lần sau. Bước này là tùy chọn.

  • Nếu bạn chỉ muốn đếm số lần truy cập trang duy nhất trong một phiên thì bạn có thể sử dụng phương thức isNew () để kiểm tra xem cùng một trang đã được truy cập với-trong phiên đó hay chưa. Bước này là tùy chọn.

  • Bạn có thể hiển thị giá trị của bộ đếm toàn cầu để hiển thị tổng số lượt truy cập trên trang web của bạn. Bước này cũng là tùy chọn.

Ở đây tôi giả định rằng vùng chứa web sẽ không được khởi động lại. Nếu nó được khởi động lại hoặc servlet bị phá hủy, bộ đếm lượt truy cập sẽ được đặt lại.

Thí dụ

Ví dụ này cho thấy cách triển khai bộ đếm lượt truy cập trang đơn giản -

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

Bây giờ chúng ta hãy biên dịch servlet ở trên và tạo các mục sau trong 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>
....

Bây giờ gọi servlet này bằng URL http: // localhost: 8080 / PageHitCounter. Điều này sẽ tăng bộ đếm lên một lần mỗi khi trang này được làm mới và nó sẽ hiển thị kết quả sau:

Total Number of Hits

6

Hit Counter for a Website:

Nhiều khi bạn muốn biết tổng số lượt truy cập trên toàn bộ trang web của mình. Điều này cũng rất đơn giản trong Servlet và chúng ta có thể đạt được điều này bằng cách sử dụng các bộ lọc.

Sau đây là các bước cần thực hiện để triển khai một bộ đếm lượt truy cập trang web đơn giản dựa trên Vòng đời của Bộ lọc -

  • Khởi tạo một biến toàn cục trong phương thức init () của bộ lọc.

  • Tăng biến toàn cục mỗi khi phương thức doFilter được gọi.

  • Nếu được yêu cầu, bạn có thể sử dụng bảng cơ sở dữ liệu để lưu trữ giá trị của biến toàn cục trong phương thức hủy () của bộ lọc. Giá trị này có thể được đọc bên trong phương thức init () khi bộ lọc sẽ được khởi tạo lần sau. Bước này là tùy chọn.

Ở đây tôi giả định rằng vùng chứa web sẽ không được khởi động lại. Nếu nó được khởi động lại hoặc servlet bị phá hủy, bộ đếm lượt truy cập sẽ được đặt lại.

Thí dụ

Ví dụ này cho thấy cách triển khai bộ đếm lượt truy cập trang web đơn giản -

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

Bây giờ chúng ta hãy biên dịch servlet ở trên và tạo các mục sau trong 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>
....

Bây giờ hãy gọi bất kỳ URL nào như URL http: // localhost: 8080 /. Điều này sẽ tăng số lượt truy cập mỗi khi bất kỳ trang nào có lượt truy cập và nó sẽ hiển thị thông báo sau trong nhật ký -

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