Servlet 3.1 网站访问计数器
Java Servlet 3.0 以上版本过滤器可以不需要配置到 web.xml 文件
只需要使用 @WebFilter 注解就能实现 web.xml 同样的功能
@WebFilter(filterName="过滤器名称",urlPatterns="/*")
@WebFilter 是一个实现了 javax.servlet.Filter 接口的类的过滤器组件
网站访问统计
很多时候,我们可能有兴趣知道整个网站的总访问量
在 Servlet 中,这也是非常简单的,我们可以使用过滤器做到这一点
下面是实现一个简单的基于过滤器生命周期的网站访问计数器的步骤:
- 在过滤器的 init() 方法中初始化一个全局变量
- 每次调用 doFilter 方法时,都增加全局变量
- 如果需要,您可以在过滤器的 destroy() 中使用一个数据库表来存储全局变量的值
在下次初始化过滤器时,该值可在 init() 方法内被读取, 这一步是可选的
在这里,我们假设 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.annotation.WebFilter; import javax.servlet.http.*; import java.util.*; @WebFilter(filterName="SiteHitCounterFilter",urlPatterns="/*") public class SiteHitCounterFilter 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 的值写入到数据库 } }
现在访问网站的任意页面,比如 http://localhost:8080/servlet/page_hit
这将会在每次任意页面被点击时,把计数器的值增加 1,然后在日志中显示以下消息
网站访问统计: 1 网站访问统计: 2 网站访问统计: 3 网站访问统计: 4 网站访问统计: 5