监听器简单实现

用servlet监听器实现jsp中在线人数统计的方法      CSDN Blog推出文章指数概念,文章指数是对Blog文章综合评分后推算出的,综合评分项分别是该文章的点击量,回复次数,被网摘收录数量,文章长度和文章类型;满分100,每月更新一次。    CSDN Blog推出文章指数概念,文章指数是对Blog文章综合评分后推算出的,综合评分项分别是该文章的点击量,回复次数,被网摘收录数量,文章长度和文章类型;满分100,每月更新一次。
在网站中经常需要进行在线人数的统计。过去的一般做法是结合登录和退出功能,即当用户输入用户名密码进行登录的时候计数器加 1 ,然后当用户点击退出按钮退出系统的时候计数器减 1 。这种处理方式存在一些缺点,例如:用户正常登录后,可能会忘记点击退出按钮,而直接关闭浏览器,导致计数器减 1 的操作没有及时执行;网站上还经常有一些内容是不需要登录就可以访问的,在这种情况下也无法使用上面的方法进行在线人数统计。
  我们可以利用 Servlet 规范中定义的事件监听器( Listener )来解决这个问题,实现更准确的在线人数统计功能。对每一个正在访问的用户, J2EE 应用服务器会为其建立一个对应的 HttpSession 对象。当一个浏览器第一次访问网站的时候, J2EE 应用服务器会新建一个 HttpSession 对象,并触发 HttpSession 创建事件,如果注册了 HttpSessionListener 事件监听器,则会调用 HttpSessionListener 事件监听器的 sessionCreated 方法。相反,当这个浏览器访问结束超时的时候, J2EE 应用服务器会销毁相应的 HttpSession 对象,触发 HttpSession 销毁事件,同时调用所注册 HttpSessionListener 事件监听器的 sessionDestroyed 方法。
  可见,对应于一个用户访问的开始和结束,相应的有 sessionCreated 方法和 sessionDestroyed 方法执行。这样,我们只需要在 HttpSessionListener 实现类的 sessionCreated 方法中让计数器加 1 ,在 sessionDestroyed 方法中让计数器减 1 ,就轻松实现了网站在线人数的统计功能。
  下面就是利用 HttpSessionListener 实现在线人数统计的一个例子,这个例子已经在中创软件的 J2EE 应用服务器 InforWeb 中测试通过。
  首先,编写一个简单的计数器,代码如下:
1.    package  accp.onlinecounter;
2.    public  class  OnlineCounter {
3.         private  static  long  online = 0;    
4.         public  static  long  getOnline() {
5.             return  online;
6.        }    
7.         public  static  void  raise(){
8.            online++;
9.        } 
10.        public  static  void  reduce(){
11.           online--;
12.      }
13.   }

  然后,编写 HttpSessionListener 实现类,在这个实现类的 sessionCreated 方法中调用 OnlineCounter raise 方法,在 sessionDestroyed 方法中调用 OnlineCounter reduce 方法,代码如下:
1.    package  accp.onlinecounter;
2.    import  javax.servlet.http.HttpSessionEvent;
3.    import  javax.servlet.http.HttpSessionListener;
4.    public  class  OnlineCounterListener  implements  HttpSessionListener {
5.         public  void  sessionCreated(HttpSessionEvent hse) {
6.            OnlineCounter.raise();
7.        }
8.         public  void  sessionDestroyed(HttpSessionEvent hse) {
9.            OnlineCounter.reduce();
10.       }
11.   }

  再然后,把这个 HttpSessionListener 实现类注册到网站应用中,也就是在网站应用的 web.xml 中加入如下内容:

  OK,在线人数统计功能已经实现,只要在JSP页面中加入下面这样的脚本就能显示但前在线人数了:

xml 代码
  1.  <web-app>    
  2.   
  3.      ……    
  4.   
  5.  <listener>    
  6.   
  7.           <listener-class>    
  8.   
  9.          accp.OnlineCounterListener    
  10.   
  11.          </listener-class>    
  12.   
  13.    </listener>    
  14.   
  15.      ……    
  16.   
  17. </web-app>    

xml 代码
  1. <%@ page language="java" pageEncoding="GB2312" %>    
  2.   
  3.  <%@ page import="accp.OnlineCounter" %>    
  4.   
  5.  <html>    
  6.   
  7.       <head><title>On Line Counert</title></head>    
  8.   
  9.      <body bgcolor="#FFFFFF">    
  10.   
  11.          On line:<%=OnlineCounter.getOnline()%>    
  12.   
  13.      </body>    
  14.   
  15.  </html>    
 
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值