统计在线人数
来源:互联网 发布:高效程序员的45个习惯 编辑:程序博客网 时间:2024/05/24 16:14
利用HttpSessionListener实现网站在线人数统计功能
这是一边很经典的文章.....
------------------------------------------------------
在网站中经常需要进行在线人数的统计。过去的一般做法是结合登录和退出功能,即当用户输入用户名密码进行登录的时候计数器加1,然后当用户点击退出按钮退出系统的时候计数器减1。这种处理方式存在一些缺点,例如:用户正常登录后,可能会忘记点击退出按钮,而直接关闭浏览器,导致计数器减1的操作没有及时执行;网站上还经常有一些内容是不需要登录就可以访问的,在这种情况下也无法使用上面的方法进行在线人数统计。
我们可以利用Servlet规范中定义的事件监听器(Listener)来解决这个问题,实现更准确的在线人数统计功能。对每一个正在访问的用户,J2EE应用服务器会为其建立一个对应的HttpSession对象。
当一个浏览器第一次访问网站的时候
// (同一客户端测试)每当打开一个浏览器, 计数增加 1 ,
用世界之窗 在同一浏览器打开多个 标签页,计数不变。
但是-------关闭浏览器后 计数不会 立即 减少。。
J2EE应用服务器会新建一个HttpSession对象,并触发HttpSession创建事件,如果注册了HttpSessionListener事件监听器,则会调用HttpSessionListener事件监听器的sessionCreated方法。相反,当这个浏览器访问结束超时的时候(此时计数 减少 1),J2EE应用服务器会销毁相应的HttpSession对象,触发HttpSession销毁事件,同时调用所注册HttpSessionListener事件监听器的sessionDestroyed方法。
可见,对应于一个用户访问的开始和结束,相应的有sessionCreated方法和sessionDestroyed方法执行。这样,我们只需要在HttpSessionListener实现类的sessionCreated方法中让计数器加1,在sessionDestroyed方法中让计数器减1,就轻松实现了网站在线人数的统计功能。
----------------------------------------------------
具体实现代码 如下
package online.counter;
public class OnlineCounter {
private static long online = 0;
public static long getOnline()
{
return online;
}
public static void raise()
{
online++;
}
public static void reduce()
{
online--;
}
}
-------------------------------------------------------------
编写HttpSessionListener实现类,在这个实现类的sessionCreated方法中调用OnlineCounter的raise方法,在sessionDestroyed方法中调用OnlineCounter的reduce方法,代码如下:
package online.counter;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
public class OnlineCounterListener implements HttpSessionListener
{
public void sessionCreated(HttpSessionEvent arg0) {
OnlineCounter.raise();
}
public void sessionDestroyed(HttpSessionEvent arg0) {
OnlineCounter.reduce();
}
}-----------------------------------------------------------------
再然后,把这个HttpSessionListener实现类注册到网站应用中,也就是在网站应用的web.xml中加入如下内容:
<web-app>
.......
<listener>
<listener-class>
online.counter.OnlineCounterListener
</listener-class>
</listener>
....
</web-app>
---------------------------------------------------------------
<%@ page import="online.counter.OnlineCounter"%>
<%@ page pageEncoding="GB2312"%>
在线人数
<%=OnlineCounter.getOnline()%>
-------------------------------------------------------------
- 在线人数统计
- HttpSessionListener统计在线人数
- 在线人数统计
- 如何统计在线人数
- HttpSessionListener统计在线人数
- HttpSessionListener统计在线人数
- HttpSessionListener统计在线人数
- 统计在线人数
- HttpSessionListener统计在线人数
- 在线人数统计方法
- 统计在线人数
- HttpSessionListener统计在线人数
- jsp在线人数统计
- 统计在线人数Web
- httpSessionListener统计在线人数
- 在线统计人数
- 在线人数统计所在位置
- 在线统计人数
- LVM
- 一位女程序员的征婚广告
- waitfor 函数
- lucene 索引非txt文档 (pdf word rtf html xml)
- 线程与消息传递
- 统计在线人数
- C++虚函数表解析(转)
- Wince CE 6.0 - 生成OS映像文件 - 错误报告2 - 缺失kitl.dll
- MFC 程序最小化到系统托盘区的一个简单实例
- 美国名校网上公开课_free online courses of America's top colleges
- MapABC地图API
- Linux常用的网络命令
- 为已编译的apache2添加mod_proxy模块
- Bookshelf题解动态规划DP