Java实现在线用户显示


OnlineUser

  1. package com.www.bjjssc.util;  
  2.   
  3. import java.util.Collection;  
  4. import java.util.HashMap;  
  5. import java.util.Map;  
  6. import javax.servlet.http.HttpSession;  
  7. import javax.servlet.http.HttpSessionBindingEvent;  
  8. import javax.servlet.http.HttpSessionBindingListener;  
  9.   
  10. /** 
  11.  * 在线用户统计 
  12.  */  
  13. public class OnlineUsers implements HttpSessionBindingListener {  
  14.   
  15.     private Map<String, OnlineUser> users = new HashMap<String, OnlineUser>();  
  16.   
  17.     private static OnlineUsers onlineUsers = new OnlineUsers();  
  18.   
  19.     public static OnlineUsers getInstance() {  
  20.         return onlineUsers;  
  21.     }  
  22.       
  23.     /** 
  24.      * @return 
  25.      */  
  26.     public Collection getUsers() {  
  27.         return users.values();  
  28.     }  
  29.   
  30.     public void addUser(OnlineUser user) {  
  31.         users.put(user.getId(), user);  
  32.     }  
  33.   
  34.     public void removeUser(String userId) {  
  35.         users.remove(userId);  
  36.     }  
  37.   
  38.     /** 
  39.      * 对象实例(即OnlineUserListener的实例)作为一个属性被设置到session的 
  40.      * 时候,会调用本方法,这种情况一般发生在点击登录按钮以后的处理过程中 设置 
  41.      *  
  42.      * @see javax.servlet.http.HttpSessionBindingListener#valueBound(javax.servlet.http.HttpSessionBindingEvent) 
  43.      */  
  44.     public void valueBound(HttpSessionBindingEvent event) {  
  45.         // 现在暂时不需要额外处理,你可以在这里记录日志等   
  46.     }  
  47.   
  48.     /** 
  49.      * 当Session超时,或本实例被从session中移除的时候被调用,这种情况一般 发生在注销方法的处理过程中 
  50.      *  
  51.      * @see javax.servlet.http.HttpSessionBindingListener#valueUnbound(javax.servlet.http.HttpSessionBindingEvent) 
  52.      */  
  53.     public void valueUnbound(HttpSessionBindingEvent event) {  
  54.         try {  
  55.             HttpSession session = event.getSession();  
  56.             OnlineUser u = (OnlineUser) session.getAttribute("currentUser");  
  57.             System.out.println("删除用户:"+u.getName());  
  58.             this.removeUser(u.getId());  
  59.         } catch (RuntimeException e) {  
  60.              e.printStackTrace();  
  61. //          throw e;   
  62.         }  
  63.     }  
  64.   
  65. }  

OnlineUserListener

  1. package com.www.bjjssc.util;  
  2.   
  3. import javax.servlet.http.HttpSessionEvent;  
  4. import javax.servlet.http.HttpSessionListener;  
  5.   
  6. /** 
  7.  * 在线用户监听 
  8.  */  
  9. public class OnlineUserListener implements HttpSessionListener {  
  10.   
  11.     public void sessionCreated(HttpSessionEvent event) {  
  12.         OnlineUser u = new OnlineUser();  
  13.         System.out.println("你登录网站========="+u.getId());  
  14.         u.setName("---");  
  15.         u.setId(event.getSession().getId());  
  16.         event.getSession().setAttribute("currentUser",u);  
  17.         OnlineUsers.getInstance().addUser(u);  
  18.     }  
  19.   
  20.     public void sessionDestroyed(HttpSessionEvent event) {  
  21.         System.out.println("删除用户:"+event.getSession().getAttribute("currentUser"));  
  22.         OnlineUsers.getInstance().removeUser(event.getSession().getId());  
  23.     }  
  24. }  

OnlineUsers

  1. package com.www.bjjssc.util;  
  2.   
  3. import java.util.Collection;  
  4. import java.util.HashMap;  
  5. import java.util.Map;  
  6. import javax.servlet.http.HttpSession;  
  7. import javax.servlet.http.HttpSessionBindingEvent;  
  8. import javax.servlet.http.HttpSessionBindingListener;  
  9.   
  10. /** 
  11.  * 在线用户统计 
  12.  * author: 
  13.  */  
  14. public class OnlineUsers implements HttpSessionBindingListener {  
  15.   
  16.     private Map<String, OnlineUser> users = new HashMap<String, OnlineUser>();  
  17.   
  18.     private static OnlineUsers onlineUsers = new OnlineUsers();  
  19.   
  20.     public static OnlineUsers getInstance() {  
  21.         return onlineUsers;  
  22.     }  
  23.       
  24.     /** 
  25.      * @return 
  26.      */  
  27.     public Collection getUsers() {  
  28.         return users.values();  
  29.     }  
  30.   
  31.     public void addUser(OnlineUser user) {  
  32.         users.put(user.getId(), user);  
  33.     }  
  34.   
  35.     public void removeUser(String userId) {  
  36.         users.remove(userId);  
  37.     }  
  38.   
  39.     /** 
  40.      * 对象实例(即OnlineUserListener的实例)作为一个属性被设置到session的 
  41.      * 时候,会调用本方法,这种情况一般发生在点击登录按钮以后的处理过程中 设置 
  42.      *  
  43.      * @see javax.servlet.http.HttpSessionBindingListener#valueBound(javax.servlet.http.HttpSessionBindingEvent) 
  44.      */  
  45.     public void valueBound(HttpSessionBindingEvent event) {  
  46.         // 现在暂时不需要额外处理,你可以在这里记录日志等   
  47.     }  
  48.   
  49.     /** 
  50.      * 当Session超时,或本实例被从session中移除的时候被调用,这种情况一般 发生在注销方法的处理过程中 
  51.      *  
  52.      * @see javax.servlet.http.HttpSessionBindingListener#valueUnbound(javax.servlet.http.HttpSessionBindingEvent) 
  53.      */  
  54.     public void valueUnbound(HttpSessionBindingEvent event) {  
  55.         try {  
  56.             HttpSession session = event.getSession();  
  57.             OnlineUser u = (OnlineUser) session.getAttribute("currentUser");  
  58.             System.out.println("删除用户:"+u.getName());  
  59.             this.removeUser(u.getId());  
  60.         } catch (RuntimeException e) {  
  61.              e.printStackTrace();  
  62. //          throw e;   
  63.         }  
  64.     }  
  65.   
  66. }  

web.xml配置

  1. <!-- 设置网站访问监听器 -->  
  2.     <listener>   
  3.         <listener-class>   
  4.              com.estone.www.aqjgws.util.bean.OnlineUserListener  
  5.         </listener-class>   
  6.     </listener>  

相关内容