APP或者网页应用经常需要检测当前活跃用户数,利用监听器 HttpSessionListener ,可以在用户创建 session 的时候以此作为用户数+1的标志, session销毁时判断用户数-1.
步骤:
创建监听器类SessionCounter.java:
package com.dgh.listener;
import javax.servlet.http.*;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public class SessionCounter implements HttpSessionListener {
private static Log log = LogFactory.getLog(SessionCounter.class);
private static int onlineNumber = 0;//在线人数
//session创建时会执行这个方法
public void sessionCreated(HttpSessionEvent arg0) {
//设置session的超时时间为60S,如果该用户60S未使用则认为用户已下线
arg0.getSession().setMaxInactiveInterval(60);
onlineNumber++;
log.info("人数增加,当前人数:" + onlineNumber);
}
//session销毁的时候会执行这个方法
public void sessionDestroyed(HttpSessionEvent arg0) {
if (onlineNumber > 0){
onlineNumber--;
log.info("人数减少,当前人数:" + onlineNumber);
}
}
//获取在线人数
public static int getonlineNumber() {
return onlineNumber;
}
}
在web.xml中配置监听(监听类的全路径)
<listener>
<listener-class>
com.dgh.listener.SessionCounter
</listener-class>
</listener>
需要获取当前用户人数时就可以直接调用SessionCounter 类 的 getonlineNumber() 方法,就可以获取当前人数信息了。
我这里就不写控制器了,用jsp页面直接显示用户人数:
peopleCount.jsp:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ page import="com.dgh.listener.SessionCounter"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>当前用户人数</title>
</head>
<body>
在线人数为:<%=SessionCounter.getonlineNumber() %>
</body>
</html>
启动web项目,打开http://127.0.0.1:8080/项目名/jsp页面路径/peopleCount.jsp,查看结果: