HTTP协议是短链接的,所以无法在服务端根据建立了多少连接来统计当前有多少人在线。 不过可以通过统计session有多少来估计在线人数。
一旦一个用户访问服务器,就会创建一个session. 如果该用户持续访问,那么该session会持续有效。
如果经历了30分钟,该用户也没有做任何操作,就表示该用户“下线” 了,其对应的session也会被销毁。
所以可以通过统计有多少session被保留来估计当前在线人数。
步骤1:编写 OnlineNumberListener
步骤2:配置web.xml
步骤3:checkOnlineNumber.jsp
步骤4:测试
步骤 1 : 编写 OnlineNumberListener
OnlineNumberListener 实现接口HttpSessionListener
当创建一个session的时候,就把数字+1,并且放在application里。
ServletContext application = e.getSession().getServletContext();
|
这就是jsp里的application
注: 第一次从application里取数据的时候,是空的,要设置为0。
当销毁一个session的时候,把这个数字-1
package listener;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
public class OnlineNumberListener implements HttpSessionListener {
@Override
public void sessionCreated(HttpSessionEvent e) {
ServletContext application = e.getSession().getServletContext();
Integer online_number = (Integer) application.getAttribute( "online_number" );
if ( null == online_number)
online_number = 0 ;
online_number++;
application.setAttribute( "online_number" , online_number);
System.out.println( "新增一位在线用户" );
}
@Override
public void sessionDestroyed(HttpSessionEvent e) {
ServletContext application = e.getSession().getServletContext();
Integer online_number = (Integer) application.getAttribute( "online_number" );
if ( null ==online_number){
online_number = 0 ;
}
else
online_number--;
application.setAttribute( "online_number" , online_number);
System.out.println( "一位用户离线" );
}
}
|
步骤 2 : 配置web.xml
配置 listener.OnlineNumberListener
< listener >
< listener-class >listener.OnlineNumberListener</ listener-class >
</ listener >
|
步骤 3 : checkOnlineNumber.jsp
通过EL表达式,直接获取application中的值
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" isELIgnored="false"%>
当前 在线人数 : ${online_number}
|
步骤 4 : 测试
访问网页
http: //127.0.0.1/checkOnlineNumber.jsp
|
注: 在重启tomcat测试之前, 要删除D: omcatworkCatalinalocalhost\_SESSIONS.ser 这个文件。 这个文件是tomcat存放以前的session的,为了观察到创建session的活动,需要tomcat重启之前把以前的session都清除掉,才能观察到新创建session的活动
更多内容,点击了解: https://how2j.cn/k/listener/listener-online-number/608.html