12. Servlet 页面点击计数器

来源:互联网 发布:床垫哪个品牌好 知乎 编辑:程序博客网 时间:2024/06/02 06:59
Servlet 页面点击计数器

实现Servlet上某个页面的总点击量,使用 Servlet 来计算这些点击量是非常简单的,因为一个 Servlet 的生命周期是由它运行所在的容器控制的。

以下是实现一个简单的基于 Servlet 生命周期的网页点击计数器需要采取的步骤:
  • 在 init() 方法中初始化一个全局变量;
  • 每次调用 doGet() 或 doPost() 方法时,都增加全局变量;
  • 如果需要,可以在destroy() 中可以使用一个数据库表来存储全局变量的值。在下次初始化 Servlet 时,该值可在 init() 方法内被读取,这样处理可以实现该数据的持久化;
  • 如果只想对一个 session 会话计数一次页面点击,那么请使用 isNew() 方法来检查该 session 会话是否已点击过相同页面;

在这里,假设 Web 容器将无法重新启动。如果是重新启动或 Servlet 被销毁,计数器将被重置。



以下是实现一些页面计数器的思路;

网站所有页面的总访问量
使用 Filter 过滤器实现,设置某个过滤器,映射到所有页面(HTML,Servlet,JSP),在该 Filter 的doFilter()过程中 对储存在数据库中的计数值进行增加(也可以将该计数值储存在 web.xml 中<filter><init-param>中);

某个页面的总访问量
如果该页面是Servlet,可以在其 init() 时对计数值进行初始化(从数据库读取),在service()对该计数值进行自增,在destroy()将该计数值写入数据库(如果考虑到数据同步问题,在destory时不直接将计数值写入数据库,而是直接在数据库中对该数据进行自增,以保持数据同步);
如果该页面是 JSP 或 HTML,可以直接使用Filter映射到指定页面实现(也适用与Servlet);

网站的总在线量
通过 HttpSessionListener实现;
OlineCount.java :记录在线信息
(也可以实现为一个记录所有在线人数信息的列表,此时要在OnlineListener实现 HttpSessionAttributeListener后在其 attributeAdded ,attributeRemoved方法进行相应的实现,同时要在负责登录登出的Sevlet进行session添加,删除相应属性 );
1
//应该实现 count 数据的同步性,这里略过
2
public class OnlineCount{
3
    private static int count = 0;
4
    public static void add(){
5
        count ++;
6
    }
7
    public static void reduce(){
8
        count --;
9
    }
10
    public static int value(){
11
        return count;
12
    }
13
}

OnlineListener.java : HttpSessionListener 监听器类
web.xml 中添加 listener的配置
1
<listener>  
2
    <listener-class>listener.OnlineListener</listener-class>  
3
</listener>   
在 Servlet 或 JSP 中要获取在线总人数 直接调用 OnlineCount.value();