Servlet 3.1 网页访问计数器
很多时候,我们可能有兴趣知道某个特定页面上的总点击量
使用 Servlet 来统计这些访问量是非常简单的,因为 Servlet 的生命周期是由它运行所在的容器控制的
下面是实现一个简单的基于 Servlet 生命周期的网页访问计数器的步骤:
- 在 init() 方法中初始化一个全局变量
- 每次调用 doGet() 或 doPost() 方法时,都增加全局变量
当然可以增加以下步骤
- 如果需要,可以使用一个数据库表来存储全局变量的值在 destroy() 中,在下次初始化 Servlet 时,该值可在 init() 方法内被读取,这一步是可选的
- 如果只想对一个 session 会话计数一次页面点击,那么请使用 isNew() 方法来检查该 session 会话是否已点击过相同页面,这一步是可选的
- 通过显示全局计数器的值,在网站上展示页面的总访问量,这一步是可选的
这里,我们假设 Web 容器将无法重新启动
因为如果是重新启动或 Servlet 被销毁,计数器将被重置
范例
下面的范例演示了如何实现一个简单的网页访问计数器
// author: 简单教程(www.twle.cn) // Copyright © 2015-2065 www.twle.cn. All rights reserved. package cn.twle.demo; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; @WebServlet(name = "PageHitCounterServlet", urlPatterns = {"page_hit"}, loadOnStartup = 1) public class PageHitCounterServlet 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 = "网页访问量 | 简单教程(www.twle.cn)"; String docType = "<!DOCTYPE html>"; out.println(docType + "<title>" + title + "</title>" + "<body bgcolor=\"#f0f0f0\">" + "<p>" + title + "</p>" + "<p>" + hitCount + "</p>"); } public void destroy() { // 这一步是可选的,但是如果需要,可以把 hitCount 的值写入到数据库 } }
在浏览器上输入 http://localhost:8080/servlet/page_hit 来访问网页
它会在每次页面刷新时,把计数器的值增加 1