实训笔记第十天

                                                                                                   servlet续

在线用户使用HttpSessionListener监听器统计  

每当一个session会话建立  在线用户人数+1

每当一个session会话销毁 在线用户人数-1


使用ServletRequestListener监听器统计用户信息

每当一个request建立  将当前用户放入集合

每当session会话销毁  将当前用户移出集合


我使用的是Servlet3.0  监听器直接使用注解@webListener即可 不用在web.xml中布局

在web.xml中配置session-timeout标签  标志session过期时间为1分钟  0为不过期

[html]  view plain  copy
 print ?
  1. <session-config>  
  2.     <session-timeout>1</session-timeout>  
  3. </session-config>  

User 实体类

[java]  view plain  copy
 print ?
  1. package com.scx.entity;  
  2.   
  3.   
  4. /** 
  5.  * 用户实体类 
  6.  * 
  7.  */  
  8. public class User {  
  9.     //当前用户的session id  
  10.     private String sessionId;  
  11.     //当前用户的ip地址  
  12.     private String ip;  
  13.     //当前用户第一次访问的时间  
  14.     private String firstTime;  
  15.     public User() {  
  16.         super();  
  17.           
  18.     }  
  19.     public String getIp() {  
  20.         return ip;  
  21.     }  
  22.     public void setIp(String ip) {  
  23.         this.ip = ip;  
  24.     }  
  25.     public String getFirstTime() {  
  26.         return firstTime;  
  27.     }  
  28.     public void setFirstTime(String firstTime) {  
  29.         this.firstTime = firstTime;  
  30.     }  
  31.     public String getSessionId() {  
  32.         return sessionId;  
  33.     }  
  34.     public void setSessionId(String sessionId) {  
  35.         this.sessionId = sessionId;  
  36.     }  
  37.       
  38. }  

HttpSessionListener监听器

[java]  view plain  copy
 print ?
  1. package com.scx.listener;  
  2.   
  3. import java.util.ArrayList;  
  4. import javax.servlet.annotation.WebListener;  
  5. import javax.servlet.http.HttpSessionEvent;  
  6. import javax.servlet.http.HttpSessionListener;  
  7.   
  8. import com.scx.entity.User;  
  9. import com.scx.util.SessionUtil;  
  10. /** 
  11.  * HttpSessionListener 监听器 
  12.  * 
  13.  */  
  14. @WebListener  
  15. public class MyHttpSessionListener implements HttpSessionListener{  
  16.     //当前用户数  
  17.     private int userCounts=0;  
  18.     @Override  
  19.     public void sessionCreated(HttpSessionEvent se) {  
  20.         //sessionCreated  用户数+1  
  21.         userCounts++;  
  22.         //重新在servletContext中保存userCounts  
  23.         se.getSession().getServletContext().setAttribute("userCounts", userCounts);  
  24.           
  25.     }  
  26.     @Override  
  27.     public void sessionDestroyed(HttpSessionEvent se) {  
  28.         //sessionDestroyed  用户数-1  
  29.         userCounts--;  
  30.         //重新在servletContext中保存userCounts  
  31.         se.getSession().getServletContext().setAttribute("userCounts", userCounts);  
  32.           
  33.         @SuppressWarnings("unchecked")  
  34.         ArrayList<User> userList=(ArrayList<User>) se.getSession().getServletContext().getAttribute("userList");  
  35.         String sessionId=se.getSession().getId();  
  36.         //如果当前用户在userList中  在session销毁时  将当前用户移出userList  
  37.         if(SessionUtil.getUserBySessionId(userList, sessionId)!=null){  
  38.             userList.remove(SessionUtil.getUserBySessionId(userList, sessionId));  
  39.         }  
  40.         //将userList集合  重新保存到servletContext  
  41.         se.getSession().getServletContext().setAttribute("userList", userList);  
  42.     }  
  43.   
  44. }  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值