java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的 Java 程序设计语言和 Java 平台(即 JavaEE(j2ee), JavaME(j2me), JavaSE(j2se))的总称。
本文主要介绍了 java web 监听器统计在线用户及人数的方法解析。具有很好的参考价值。下面跟着小编一起来看下吧
在线用户使用 HttpSessionListener 监听器统计
每当一个 session 会话建立 在线用户人数 + 1
每当一个 session 会话销毁 在线用户人数 - 1
使用 ServletRequestListener 监听器统计用户信息
每当一个 request 建立 将当前用户放入集合
每当 session 会话销毁 将当前用户移出集合
我使用的是 Servlet3.0 监听器直接使用注解 @webListener 即可 不用在 web.xml 中布局
在 web.xml 中配置 session-timeout 标签 标志 session 过期时间为 1 分钟 0 为不过期
- <session-config>
- <session-timeout>1</session-timeout>
- </session-config>
servlet3.0 使用条件
运行结果:
由于 session 对话关闭时间并不一定以设置的 1 分钟为准 所以 gif 图像中最后等待时间较长
User 实体类
- 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监听器
- 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监听器
- 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);
- }
- }
- 工具类
- 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;
- }
- }
- 以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持PHPERZ!
- 相关阅读 :
- java web监听器统计在线用户及人数
- 利用java监听器实现在线人数统计
- Java Web用户登录实例代码
- java web实现用户权限管理
- 深入浅析java web log4j 配置及在web项目中配置Log4j的技巧
- Java web含验证码及权限登录实例代码
- Java Web之限制用户多处登录实例代码
- java web中使用cookie记住用户的账号和密码
- 使用java web 在jsp文件及Class中连接MySQL和SQLsever 的驱动方法
- Java 实现遍历指定目录及子目录下的文件示例代码
- 在linux下配置java Web项目.sh部署脚本
- Java Web开发过程中登陆模块的验证码的实现方式总结
来源: http://www.phperz.com/article/17/1224/357731.html