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时会触发以上方法

你可能感兴趣的:(session)