Hit Counter trong Servlet



Hit Counter cho một WebPage trong Servlet

Nhiều khi bạn quan tâm đến tổng lượt click trên một trang cụ thể trong Website của bạn. Nó là đơn giản để tính toán những lượt click này bởi sử dụng một Servlet, bởi vì vòng đời của một Servlet được điều khiển bởi Container, mà nó chạy trong đó.

Sau đây là các bước để triển khai một Hit Counter đơn giản dựa trên vòng đời của Servlet:

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

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

  • Nếu cần thiết, bạn có thể sử dụng một Database Table để lưu giá trị của biến global này trong phương thức destroy(). Giá trị này có thể được đọc bên trong phương thức init() khi Servlet sẽ được khởi tạo trong lần sau. Bước này là tùy ý.

  • Nếu bạn chỉ muốn tính toán lượng click trên page duy nhất bên trong một Session, thì bạn có thể sử dụng phương thức isNew() để kiểm tra nếu cùng một page đó đã được click bên trong Session đó. Bước này là tùy ý.

  • Bạn có thể hiển thị giá trị của biến global để chỉ tổng lượt click trên Website của bạn. Bước này là tùy ý.

Tại đây, tôi giả sử Web container sẽ không được restart. Nếu nó được restart hoặc Servlet bị hủy, thì hit counter sẽ được reset.

Ví dụ

Ví dụ sau minh họa cách triển khai một hit counter đơ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.
  } 
} 
Quảng cáo

Biên dịch Servlet trên và tạo các entry 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ờ, chúng ta gọi Servlet này bởi sử dụng http://localhost:8080/PageHitCounter. Nó sẽ tăng lượng đếm thêm 1 mỗi khi trang được refresh và nó sẽ cho kết quả:

Total Number of Hits

6

Hit Counter cho một Website trong Servlet

Nhiều khi bạn quan tâm đến tổng lượt click trên toàn bộ Website của bạn. Điều này cũng đơn giản trong Servlet và chúng ta có thể thực hiện nó bởi sử dụng các Filter:

Sau đây là các bước để triển khai một Hit Couter trên một Website dựa trên vòng đời của Filter:

  • Khởi tạo một biến global trong phương thức init() của một Filter.

  • Tăng giá trị biến global này mỗi khi phương thức doFilter được gọi.

  • Nếu cần thiết, bạn có thể sử dụng Database table để lưu giữ giá trị của biến global này trong phương thức destroy() của Filter. Giá trị này có thể được đọc bên trong phương thức init() khi Filter sẽ được khởi tạo lần tiếp theo. Bước này là tùy ý.

Tại đây, tôi giả sử Web container sẽ không được restart. Nếu nó được restart hoặc Servlet bị hủy, thì hit counter sẽ được reset.

Quảng cáo

Ví dụ

Sau đây là ví dụ minh họa cách triển khai một Hit counter trên một Website trong Servlet:

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

Biên dịch Servlet trên và tạo các entry 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ờ gọi bất kỳ URL nào chẳng hạn như http://localhost:8080/. Nó sẽ tăng lượng đếm thêm 1 mỗi khi bất kỳ trang nào nhận một click và sẽ hiển thị thông báo sau:

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

Các bạn có thể mua thêm khóa học JAVA CORE ONLINE VÀ ỨNG DỤNG cực hay, giúp các bạn vượt qua các dự án trên trường và đi thực tập Java. Khóa học có giá chỉ 300K, nhằm ưu đãi, tạo điều kiện cho sinh viên cho thể mua khóa học.

Nội dung khóa học gồm 16 chuơng và 100 video cực hay, học trực tiếp tại https://www.udemy.com/tu-tin-di-lam-voi-kien-thuc-ve-java-core-toan-tap/ Bạn nào có nhu cầu mua, inbox trực tiếp a Tuyền, cựu sinh viên Bách Khoa K53, fb: https://www.facebook.com/tuyen.vietjack

Follow facebook cá nhân Nguyễn Thanh Tuyền https://www.facebook.com/tuyen.vietjack để tiếp tục theo dõi các loạt bài mới nhất về Java,C,C++,Javascript,HTML,Python,Database,Mobile.... mới nhất của chúng tôi.

Các bài học SEO phổ biến khác tại VietJack: