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对象时,在线用户数才会减少。