java session统计在线人数

首先创建监听器,监听器实现ServletContextAttributeListener, HttpSessionAttributeListener两个接口。

public class LoginUserListener implements ServletContextAttributeListener,
HttpSessionAttributeListener {

public void attributeAdded(ServletContextAttributeEvent event) {
}

public void attributeRemoved(ServletContextAttributeEvent event) {
}

public void attributeReplaced(ServletContextAttributeEvent event) {
}

/**
* session创建后触发该方法,将session信息添加到集合中
*/
public void attributeAdded(HttpSessionBindingEvent event) {
if (event.getName().equals(IConstant.SESSION_TUSER)) {
//获取session信息
HttpSession session = event.getSession();
if(session!=null){
//获得用户信息
TUser user=(TUser)event.getValue();
//获得application信息
ServletContext application = session.getServletContext();
//从application中获得session列表
HashSet<TUser> hashSet=(HashSet<TUser>)application.getAttribute(IConstant.APPLICATION_SESSION);
//判断列表数据是否为空 如果为空 需要实例化sessionlist
if(hashSet==null){
hashSet=new HashSet<TUser>();
}
//判断用户的session是否已经存在,如果已经存在则不在添加
hashSet.remove(user);//先删除,避免重复添加
//将新增用户添加到list中
hashSet.add(user);
application.setAttribute(IConstant.APPLICATION_SESSION, hashSet);
}
}
}

/**
* session被清除里触发,一般用户用户退出时
*/
public void attributeRemoved(HttpSessionBindingEvent event) {
if (event.getName().equals(IConstant.SESSION_TUSER)) {
//获取session信息
HttpSession session = event.getSession();
//获得用户信息
TUser user=(TUser)event.getValue();
ServletContext application = session.getServletContext();
//从application中获得session列表
HashSet<TUser> hashSet=(HashSet<TUser>)application.getAttribute(IConstant.APPLICATION_SESSION);
if(hashSet!=null){
hashSet.remove(user);
//将剩余的放置在application中
application.setAttribute(IConstant.APPLICATION_SESSION, hashSet);
}
}
}

/**
* session被替换时触发
*/
public void attributeReplaced(HttpSessionBindingEvent event) {
System.out.println("attributeReplaced");
}

}

在web.xml中添加监听器

<listener>
<listener-class>com.jz.sys.listener.LoginUserListener</listener-class>
</listener>

在绑定session或清除session时会触发以上方法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值