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;

}

}

以上是 java web监听器统计在线用户及人数 的全部内容, 来源链接: utcz.com/z/351141.html

回到顶部