首先创建监听器,监听器实现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时会触发以上方法
版权声明:本文为daoshud1原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。