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 ở Hà Nội có thể tham gia khóa học thứ 9 của vietjackteam (đang tuyển sinh) vào cuối tháng 10/2018 do anh Nguyễn Thanh Tuyền, admin vietjack.com trực tiếp giảng dạy tại Hà Nội. Chi tiết nội dung khóa học tham khỏa link : Khóa học Java.Các bạn học CNTT, điện tử viễn thông, đa phương tiện, điện-điện tử, toán tin có thể theo học khóa này. Số lượng các công việc Java hoặc .NET luôn gấp ít nhất 3 lần Android hoặc iOS trên thị trường tuyển dụng. Khóa online= Đi phỏng vấn, Khóa offline= Đi phỏng vấn+ 1.5 tháng thực tập ngoài doanh nghiệp. .

Mọi người có thể xem demo nội dung khóa học tại địa chỉ Video demo khóa học Offline

Các bạn ở xa học không có điều kiện thời gian có thể tham dự khóa Java online để chủ động cho việc học tập. Từ tháng 4/2018, VietJack khuyến mại giá SỐC chỉ còn 250k cho khóa học, các bạn có thể trả lại tiền nếu không hài lòng về chất lượng trong 1 tháng, liên hệ facebook admin fb.com/tuyen.vietjack để thanh toán chuyển khoản hoặc thẻ điện thoại, khóa học bằng Tiếng Việt với gần 100 video, các bạn có thể chủ động bất cứ lúc nào, và xem mãi mãi. Thông tin khóa học tại Khóa học Java Online trên Udemy

Follow fanpage của team https://www.facebook.com/vietjackteam/ hoặc 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: