1 package sanglp.servlet; 2 3 4 import javax.servlet.ServletContext; 5 import javax.servlet.annotation.WebListener; 6 import javax.servlet.http.HttpSession; 7 import javax.servlet.http.HttpSessionEvent; 8 import java.util.Hashtable; 9 import java.util.Map; 10 11 /** 12 * Created by Administrator on 2016/10/6. 13 */ 14 @WebListener 15 public class HttpSessionListener implements javax.servlet.http.HttpSessionListener { 16 17 //当用户与服务之间开始session时触发该方法 18 @Override 19 public void sessionCreated(HttpSessionEvent httpSessionEvent) { 20 HttpSession session=httpSessionEvent.getSession(); 21 ServletContext application=session.getServletContext(); 22 //获取sessionId 23 String sessionId=session.getId(); 24 //如果是一次新的会话 25 if(session.isNew()){ 26 String user=(String)session.getAttribute("user"); 27 //未登陆用户当游客处理 28 user=(user==null)?"游客":user; 29 Map<String,String> online=(Map<String, String>) application.getAttribute("online"); 30 if(online==null){ 31 online=new Hashtable<String,String>(); 32 //将用户在线信息放入Map中 33 online.put(sessionId,user); 34 application.setAttribute("online",online); 35 } 36 } 37 } 38 39 //当用户与服务器之间session断开时触发该方法 40 @Override 41 public void sessionDestroyed(HttpSessionEvent httpSessionEvent) { 42 HttpSession session=httpSessionEvent.getSession(); 43 ServletContext application=session.getServletContext(); 44 String sessionId=session.getId(); 45 Map<String,String> online=(Map<String,String>)application.getAttribute("online"); 46 if(online!=null){ 47 //删除该用户的在线信息 48 online.remove(sessionId); 49 } 50 application.setAttribute("online",online); 51 } 52 }