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、付费专栏及课程。

余额充值