<!-- 在线用户监听器 --> <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;
}
}