Java Web应用开发案例|使用监听器统计Web站点的在线用户数
【摘要】 HttpSessionListener监听器,主要用于监听HttpSession对象的生命期变化,如创建session和释放session事件。一个session代表一个在线用户,因此常用HttpSessionListener监听器跟踪管理在线用户。
HttpSessionListener监听器,主要用于监听HttpSession对象的生命期变化,如创建session和释放session事件。一个session代表一个在线用户,因此常用HttpSessionListener监听器跟踪管理在线用户。
public interface HttpSessionListener {
default void sessionCreated( HttpSessionEvent se){}
[]default void sessionDestroyed(HttpSessionEvent se) {}
}
01、在线用户数统计
使用监听器,统计Web站点的在线用户数,操作步骤如下所述。
(1) 定义监听器OnlineUserListerner。
aWebListener
public class OnlineUserListerner
implements HttpSessionlistener []
(2) 定义成员变量userCount,用于记录在线用户数。
为了防止高并发产生影响,userCount的数据类型为原子整数AtomicInteger。
public class OnlineUserListerner
implements HttpSessionListener{
private AtomicInteger userCount;
public OnlineUserListerner(){
userCount = new AtomicInteger(0);
}
}
(3) 新用户上线,触发sessionCreated事件。
public void sessionCreated(HttpSessionEvent se){
int user = userCount.incrementAndGet();
System.out.println("在线用户数:” + user);
}
(4) 当session超时失效时,会触发sessionDestroyed事件。
public void sessionDestroyed(HttpSessionEvent se){
int user = userCount.decrementAndGet();
System.out.println("在线用户数:" + user);
}
小结
HttpSessionListener监听器默认为单例模式,在Tomcat启动时会自动创建监听器对象。因此,在线用户数可以使用成员变量记录。有些监听器不是单例模式,使用成员变量要非常小心。
用户主动退出系统,调用HttpSession的invalidate()方法会销毁当前的session,但是Web应用会自动创建另外一个会话对象,因此在线人数不会变。只有用户超时未操作,服务器主动删除session对象时,在线用户数才会减少。
【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)