2017.7.07 学习笔记 监听统计在线及人数

xiaoxiao2021-02-27  158

在线用户使用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 ? <session-config>       <session-timeout>1</session-timeout>   </session-config>  

servlet3.0使用条件

运行结果:

由于session对话关闭时间并不一定以设置的1分钟为准 所以 gif图像中最后等待时间较长

User 实体类

[java]  view plain  copy  print ? package com.scx.entity;         /**   * 用户实体类   *   */   public class User {       //当前用户的session id       private String sessionId;       //当前用户的ip地址       private String ip;       //当前用户第一次访问的时间       private String firstTime;       public User() {           super();                  }       public String getIp() {           return ip;       }       public void setIp(String ip) {           this.ip = ip;       }       public String getFirstTime() {           return firstTime;       }       public void setFirstTime(String firstTime) {           this.firstTime = firstTime;       }       public String getSessionId() {           return sessionId;       }       public void setSessionId(String sessionId) {           this.sessionId = sessionId;       }          }   HttpSessionListener监听器

[java]  view plain  copy  print ? package com.scx.listener;      import java.util.ArrayList;   import javax.servlet.annotation.WebListener;   import javax.servlet.http.HttpSessionEvent;   import javax.servlet.http.HttpSessionListener;      import com.scx.entity.User;   import com.scx.util.SessionUtil;   /**   * HttpSessionListener 监听器   *   */   @WebListener   public class MyHttpSessionListener implements HttpSessionListener{       //当前用户数       private int userCounts=0;       @Override       public void sessionCreated(HttpSessionEvent se) {           //sessionCreated  用户数+1           userCounts++;           //重新在servletContext中保存userCounts           se.getSession().getServletContext().setAttribute("userCounts", userCounts);                  }       @Override       public void sessionDestroyed(HttpSessionEvent se) {           //sessionDestroyed  用户数-1           userCounts--;           //重新在servletContext中保存userCounts           se.getSession().getServletContext().setAttribute("userCounts", userCounts);                      @SuppressWarnings("unchecked")           ArrayList<User> userList=(ArrayList<User>) se.getSession().getServletContext().getAttribute("userList");           String sessionId=se.getSession().getId();           //如果当前用户在userList中  在session销毁时  将当前用户移出userList           if(SessionUtil.getUserBySessionId(userList, sessionId)!=null){               userList.remove(SessionUtil.getUserBySessionId(userList, sessionId));           }           //将userList集合  重新保存到servletContext           se.getSession().getServletContext().setAttribute("userList", userList);       }      }  

ServletRequestListener监听器

[java]  view plain  copy  print ? package com.scx.listener;      import java.text.SimpleDateFormat;   import java.util.ArrayList;   import java.util.Date;   import javax.servlet.ServletRequestEvent;   import javax.servlet.ServletRequestListener;   import javax.servlet.annotation.WebListener;   import javax.servlet.http.HttpServletRequest;   import com.scx.entity.User;   import com.scx.util.SessionUtil;      /**   * ServletRequestListener 监听器   *   */   @WebListener   public class MyServletRequestListener implements ServletRequestListener {       //用户集合       private ArrayList<User> userList;       @Override       public void requestDestroyed(ServletRequestEvent arg0) {                      }          @SuppressWarnings("unchecked")       @Override       public void requestInitialized(ServletRequestEvent arg0) {           //从servletContext中获的userList           userList=(ArrayList<User>) arg0.getServletContext().getAttribute("userList");           //如果servletContext中没有userList对象  初始化userList           if(userList==null){               userList=new ArrayList<User>();           }           HttpServletRequest request=(HttpServletRequest) arg0.getServletRequest();                      //sessionId           String sessionId=request.getSession().getId();           //如果当前sessionId不存在集合中  创建当前user对象           if(SessionUtil.getUserBySessionId(userList,sessionId)==null){               User user=new User();               user.setSessionId(sessionId);               user.setIp(request.getRemoteAddr());               SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd hh:MM:ss");               user.setFirstTime(sdf.format(new Date()));               userList.add(user);           }           //将userList集合 保存到ServletContext           arg0.getServletContext().setAttribute("userList", userList);       }   }   工具类

[java]  view plain  copy  print ? package com.scx.util;      import java.util.ArrayList;      import com.scx.entity.User;      public class SessionUtil {       //根据sessionId判断当前用户是否存在在集合中  如果存在 返回当前用户  否则返回null       public static User getUserBySessionId(ArrayList<User> userList,String sessionId) {           for (User user : userList) {               if(sessionId.equals(user.getSessionId())){                   return user;               }           }           return null;       }   }  

在线用户使用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 ? <session-config>       <session-timeout>1</session-timeout>   </session-config>  

servlet3.0使用条件

运行结果:

由于session对话关闭时间并不一定以设置的1分钟为准 所以 gif图像中最后等待时间较长

User 实体类

[java]  view plain  copy  print ? package com.scx.entity;         /**   * 用户实体类   *   */   public class User {       //当前用户的session id       private String sessionId;       //当前用户的ip地址       private String ip;       //当前用户第一次访问的时间       private String firstTime;       public User() {           super();                  }       public String getIp() {           return ip;       }       public void setIp(String ip) {           this.ip = ip;       }       public String getFirstTime() {           return firstTime;       }       public void setFirstTime(String firstTime) {           this.firstTime = firstTime;       }       public String getSessionId() {           return sessionId;       }       public void setSessionId(String sessionId) {           this.sessionId = sessionId;       }          }   HttpSessionListener监听器

[java]  view plain  copy  print ? package com.scx.listener;      import java.util.ArrayList;   import javax.servlet.annotation.WebListener;   import javax.servlet.http.HttpSessionEvent;   import javax.servlet.http.HttpSessionListener;      import com.scx.entity.User;   import com.scx.util.SessionUtil;   /**   * HttpSessionListener 监听器   *   */   @WebListener   public class MyHttpSessionListener implements HttpSessionListener{       //当前用户数       private int userCounts=0;       @Override       public void sessionCreated(HttpSessionEvent se) {           //sessionCreated  用户数+1           userCounts++;           //重新在servletContext中保存userCounts           se.getSession().getServletContext().setAttribute("userCounts", userCounts);                  }       @Override       public void sessionDestroyed(HttpSessionEvent se) {           //sessionDestroyed  用户数-1           userCounts--;           //重新在servletContext中保存userCounts           se.getSession().getServletContext().setAttribute("userCounts", userCounts);                      @SuppressWarnings("unchecked")           ArrayList<User> userList=(ArrayList<User>) se.getSession().getServletContext().getAttribute("userList");           String sessionId=se.getSession().getId();           //如果当前用户在userList中  在session销毁时  将当前用户移出userList           if(SessionUtil.getUserBySessionId(userList, sessionId)!=null){               userList.remove(SessionUtil.getUserBySessionId(userList, sessionId));           }           //将userList集合  重新保存到servletContext           se.getSession().getServletContext().setAttribute("userList", userList);       }      }  

ServletRequestListener监听器

[java]  view plain  copy  print ? package com.scx.listener;      import java.text.SimpleDateFormat;   import java.util.ArrayList;   import java.util.Date;   import javax.servlet.ServletRequestEvent;   import javax.servlet.ServletRequestListener;   import javax.servlet.annotation.WebListener;   import javax.servlet.http.HttpServletRequest;   import com.scx.entity.User;   import com.scx.util.SessionUtil;      /**   * ServletRequestListener 监听器   *   */   @WebListener   public class MyServletRequestListener implements ServletRequestListener {       //用户集合       private ArrayList<User> userList;       @Override       public void requestDestroyed(ServletRequestEvent arg0) {                      }          @SuppressWarnings("unchecked")       @Override       public void requestInitialized(ServletRequestEvent arg0) {           //从servletContext中获的userList           userList=(ArrayList<User>) arg0.getServletContext().getAttribute("userList");           //如果servletContext中没有userList对象  初始化userList           if(userList==null){               userList=new ArrayList<User>();           }           HttpServletRequest request=(HttpServletRequest) arg0.getServletRequest();                      //sessionId           String sessionId=request.getSession().getId();           //如果当前sessionId不存在集合中  创建当前user对象           if(SessionUtil.getUserBySessionId(userList,sessionId)==null){               User user=new User();               user.setSessionId(sessionId);               user.setIp(request.getRemoteAddr());               SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd hh:MM:ss");               user.setFirstTime(sdf.format(new Date()));               userList.add(user);           }           //将userList集合 保存到ServletContext           arg0.getServletContext().setAttribute("userList", userList);       }   }   工具类

[java]  view plain  copy  print ? package com.scx.util;      import java.util.ArrayList;      import com.scx.entity.User;      public class SessionUtil {       //根据sessionId判断当前用户是否存在在集合中  如果存在 返回当前用户  否则返回null       public static User getUserBySessionId(ArrayList<User> userList,String sessionId) {           for (User user : userList) {               if(sessionId.equals(user.getSessionId())){                   return user;               }           }           return null;       }   }  
转载请注明原文地址: https://www.6miu.com/read-13471.html

最新回复(0)