Latest web development tutorials

hit counter Servlet

เคาน์เตอร์หน้าตี

หลายครั้งคุณอาจจะสนใจที่จะทราบจำนวนของการคลิกบนหน้าหนึ่งของเว็บไซต์ของคุณ ใช้ในการคำนวณ Servlet คลิกเหล่านี้ได้ง่ายมากเพราะวงจรชีวิตของภาชนะ Servlet โดยการควบคุมของตนกำลังทำงานอยู่

ต่อไปนี้จะขึ้นอยู่กับสำนึกของชีวิต Servlet ขั้นตอนวงจร page hit counter ง่ายที่จะถูกนำไปนี้:

  • เริ่มต้นตัวแปรระดับโลกใน init () วิธีการ
  • การโทรแต่ละ doGet () หรือ doPost () วิธีการเราได้เพิ่มตัวแปรทั่วโลก
  • () หากต้องการคุณสามารถใช้ตารางฐานข้อมูลเพื่อเก็บค่าของตัวแปรโลกทำลาย ที่ Servlet เริ่มต้นถัดไปค่านี้สามารถอ่านได้ใน init () วิธีการ ขั้นตอนนี้เป็นตัวเลือก
  • ถ้าคุณต้องการที่เซสชั่นที่ครั้งหนึ่งเคยฮิตหน้านับเซสชั่นให้ใช้ isNew () วิธีการตรวจสอบว่าการสนทนาเซสชั่นที่ได้รับการคลิกบนหน้าเดียวกัน ขั้นตอนนี้เป็นตัวเลือก
  • คุณสามารถแสดงค่าระดับโลกของเคาน์เตอร์เพื่อแสดงหน้าเข้าชมทั้งหมดบนเว็บไซต์ของคุณ ขั้นตอนนี้เป็นตัวเลือก

ที่นี่เราคิดว่าเว็บคอนเทนเนอร์ไม่สามารถเริ่มต้นใหม่ หากคุณเริ่มต้นหรือ Servlet จะถูกทำลายเคาน์เตอร์จะถูกรีเซ็ต

ตัวอย่าง

ตัวอย่างนี้แสดงให้เห็นถึงวิธีการใช้เคาน์เตอร์ตีหน้าเว็บง่าย:

package com.w3big.test;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class PageHitCounter
 */
@WebServlet("/PageHitCounter")
public class PageHitCounter extends HttpServlet {
	private static final long serialVersionUID = 1L;
	private int hitCount; 
    
	public void init() 
	{ 
		// 重置点击计数器
		hitCount = 0;
	} 
    
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

		response.setContentType("text/html;charset=UTF-8");
		// 增加 hitCount 
		hitCount++; 
		PrintWriter out = response.getWriter();
		String title = "总点击量";
		String docType = "<!DOCTYPE html> \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() 
	{ 
		// 这一步是可选的,但是如果需要,您可以把 hitCount 的值写入到数据库
	} 

}

ตอนนี้ขอรวบรวม Servlet ข้างต้นและสร้างรายการต่อไปนี้ในไฟล์ web.xml ไปนี้:

<?xml version="1.0" encoding="UTF-8"?>
<web-app>
  <servlet>
    <servlet-name>PageHitCounter</servlet-name>
    <servlet-class>com.w3big.test.PageHitCounter</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>PageHitCounter</servlet-name>
    <url-pattern>/TomcatTest/PageHitCounter</url-pattern>
  </servlet-mapping>
</web-app>

ตอนนี้โดยไปที่ http: จะเรียก Servlet 8080 / TomcatTest / PageHitCounter: // localhost นี้จะรีเฟรชหน้าทุกครั้งเพื่อเพิ่มมูลค่าของเคาน์เตอร์ 1 ผลที่ได้จะเป็นดังนี้:

จำนวนผู้ชมทั้งหมด

6


เว็บไซต์นับจำนวนเยี่ยมชม

หลายครั้งคุณอาจจะสนใจที่จะรู้ว่าการจราจรรวมของทั้งเว็บไซต์ ใน Servlet นี้เป็นเรื่องง่ายมากที่เราสามารถใช้ตัวกรองการทำเช่นนี้

ต่อไปนี้คือการใช้เว็บไซต์วงจรชีวิตที่เรียบง่ายกรองตามขั้นตอนตีเคาน์เตอร์จะต้องดำเนินการ:

  • () วิธีการเริ่มต้น init กรองตัวแปรทั่วโลก
  • แต่ละวิธีการโทร doFilter ได้เพิ่มตัวแปรทั่วโลก
  • หากต้องการคุณสามารถใช้ตารางฐานข้อมูล () ในตัวกรองทำลายตัวแปรทั่วโลกในการจัดเก็บค่า เริ่มต้นถัดไปของตัวกรองค่าที่สามารถอ่านได้ใน init () วิธีการขั้นตอนนี้เป็นตัวเลือก

ที่นี่เราคิดว่าเว็บคอนเทนเนอร์ไม่สามารถเริ่มต้นใหม่ หากคุณเริ่มต้นหรือ Servlet จะถูกทำลายเคาน์เตอร์ตีจะถูกรีเซ็ต

ตัวอย่าง

ตัวอย่างนี้แสดงให้เห็นถึงวิธีการใช้เคาน์เตอร์เว็บไซต์ตีง่าย:

// 导入必需的 java 库
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{
     // 重置点击计数器
     hitCount = 0;
  }

  public void  doFilter(ServletRequest request, 
              ServletResponse response,
              FilterChain chain) 
              throws java.io.IOException, ServletException {

      // 把计数器的值增加 1
      hitCount++;

      // 输出计数器
      System.out.println("网站访问统计:"+ hitCount );

      // 把请求传回到过滤器链
      chain.doFilter(request,response);
  }
  public void destroy() 
  { 
      // 这一步是可选的,但是如果需要,您可以把 hitCount 的值写入到数据库
  } 
} 

ตอนนี้ขอรวบรวม Servlet ข้างต้นและสร้างรายการต่อไปนี้ในไฟล์ 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>

....

ตอนนี้เข้าถึงหน้าใด ๆ ของเว็บไซต์ของคุณเช่น http: // localhost: 8080 / นี้จะอยู่ในหน้าเว็บใด ๆ ในแต่ละครั้งที่มีการคลิกเพิ่มมูลค่าของเคาน์เตอร์ที่ 1 ก็จะแสดงข้อความต่อไปนี้ในบันทึก:

网站访问统计: 1
网站访问统计: 2
网站访问统计: 3
网站访问统计: 4
网站访问统计: 5
..................