<!-- 在线用户监听器 --> <listener> <listener-class>com.yingjun.sharing.web.SessionListener</listener-class> </listener>
package com.yingjun.sharing.web; import java.util.ArrayList; import java.util.List; import javax.servlet.ServletContext; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import javax.servlet.http.HttpSession; import javax.servlet.http.HttpSessionAttributeListener; import javax.servlet.http.HttpSessionBindingEvent; import javax.servlet.http.HttpSessionEvent; import javax.servlet.http.HttpSessionListener; import com.yingjun.sharing.dto.SessionInfo; import com.yingjun.sharing.model.Online; public class SessionListener implements ServletContextListener, HttpSessionListener,HttpSessionAttributeListener { private ServletContext application = null ; @Override public void contextInitialized(ServletContextEvent sce) { //初始化一个application对象 application=sce.getServletContext(); //设置一个列表属性,用于保存在线用户信息 this.application.setAttribute("onlineList", new ArrayList<Online>()) ; } @Override public void contextDestroyed(ServletContextEvent sce) { // TODO Auto-generated method stub } @Override public void sessionCreated(HttpSessionEvent se) { } @Override @SuppressWarnings("unchecked") public void sessionDestroyed(HttpSessionEvent se) { System.out.println("@@@@@sessionDestroyed@@@@@"); //获取当前在线用户列表 List<Online> ols=(ArrayList<Online>) application.getAttribute("onlineList"); SessionInfo sf =(SessionInfo) se.getSession().getAttribute("SessionInfo"); if(sf!=null){ Online ol=new Online(sf.getUsername(), sf.getIp()); ols.remove(ol); System.out.println("向ServletContext中移除用户:"+sf.getUsername()); //将删除后的列表重新设置到application属性中 this.application.setAttribute("online", ols) ; } } @Override @SuppressWarnings("unchecked") public void attributeAdded(HttpSessionBindingEvent se) { System.out.println("@@@@@attributeAdded@@@@@"); //获取当前在线用户列表 List<Online> ols=(ArrayList<Online>) application.getAttribute("onlineList"); if("SessionInfo".equals(se.getName())){ SessionInfo sf =(SessionInfo) se.getValue(); if (sf != null) { Online ol=new Online(sf.getUsername(), sf.getIp()); ols.add(ol); System.out.println("向ServletContext中存入用户:"+sf.getUsername()); //将添加后的列表重新设置到application属性中 application.setAttribute("onlineList", ols); } } } @Override public void attributeRemoved(HttpSessionBindingEvent se) { } @Override public void attributeReplaced(HttpSessionBindingEvent se) { } }
package com.yingjun.sharing.model; public class Online { private String name; private String ip; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getIp() { return ip; } public void setIp(String ip) { this.ip = ip; } public Online() { super(); } public Online(String name, String ip) { super(); this.name = name; this.ip = ip; } }