用servlet监听器实现jsp中在线人数统计的方法
然后,编写 HttpSessionListener 实现类,在这个实现类的 sessionCreated 方法中调用 OnlineCounter 的 raise 方法,在 sessionDestroyed 方法中调用 OnlineCounter 的 reduce 方法,代码如下:
再然后,把这个 HttpSessionListener 实现类注册到网站应用中,也就是在网站应用的 web.xml 中加入如下内容:
在网站中经常需要进行在线人数的统计。过去的一般做法是结合登录和退出功能,即当用户输入用户名密码进行登录的时候计数器加
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 中测试通过。
首先,编写一个简单的计数器,代码如下:
我们可以利用 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;
6.
OnlineCounter.raise();
7.
}
9.
OnlineCounter.reduce();
10.
}
11.
}
再然后,把这个 HttpSessionListener 实现类注册到网站应用中,也就是在网站应用的 web.xml 中加入如下内容:
OK,在线人数统计功能已经实现,只要在JSP页面中加入下面这样的脚本就能显示但前在线人数了:
xml 代码
- <web-app>
- ……
- <listener>
- <listener-class>
- accp.OnlineCounterListener
- </listener-class>
- </listener>
- ……
- </web-app>
xml 代码
- <%@ page language="java" pageEncoding="GB2312" %>
- <%@ page import="accp.OnlineCounter" %>
- <html>
- <head><title>On Line Counert</title></head>
- <body bgcolor="#FFFFFF">
- On line:<%=OnlineCounter.getOnline()%>
- </body>
- </html>