java web 在线用户_java web监听器统计在线用户及人数

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

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

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

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

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

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

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

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

1

servlet3.0使用条件

60fda9ee155d2b5a7e28d42f95c0fc5d.png

运行结果:

b4dee8f47425a6ef80061839d05c384a.gif

由于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 userList=(ArrayList) 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 userList;

@Override

public void requestDestroyed(ServletRequestEvent arg0) {

}

@SuppressWarnings("unchecked")

@Override

public void requestInitialized(ServletRequestEvent arg0) {

//从servletContext中获的userList

userList=(ArrayList) arg0.getServletContext().getAttribute("userList");

//如果servletContext中没有userList对象 初始化userList

if(userList==null){

userList=new ArrayList();

}

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 userList,String sessionId) {

for (User user : userList) {

if(sessionId.equals(user.getSessionId())){

return user;

}

}

return null;

}

}

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持脚本之家!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值