写在之前:
对于之前的登录验证,利用了session进行验证,确实是实现判断验证,但是,不知道为什么想要运行新建的.jsp文件时 还是默认显固定页面,修改url也不管用
解决方案——过滤器的.xml文件映射路径在搞鬼,过滤器的功能强大 但是得慎用。
正文:
由于session都在服务端,建立的连接数也可通过session个数来判断,再则HTTP协议是短链接的,所以无法在服务端根据建立了多少连接来统计当前有多少人在线。 因此可以通过统计session有多少来估计在线人数。
一旦一个用户访问服务器,就会创建一个session. 如果该用户持续访问,那么该session会持续有效。
如果经历了30分钟,该用户也没有做任何操作,就表示该用户“下线” 了,其对应的session也会被销毁。
所以可以通过统计有多少session被保留来估计当前在线人数。
编写统计在线人数的servlet:
自定义类——OnlineNumberListener
实现接口HttpSessionListener
当创建一个session的时候,就把数字+1,并且放在application里。
servlet中application的定义:
ServletContext application = httpSessionEvent.getSession().getServletContext();
这就是jsp里的application在servlet和JSP文件里的application对象定义不一样,JSP可以直接调用 因为是隐式对象
注: 第一次从application里取数据的时候,是空的,要设置为0。
当销毁一个session的时候,把这个数字-1
package Listener;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
public class OnlineSessionListener implements HttpSessionListener {
@Override
public void sessionCreated(HttpSessionEvent httpSessionEvent) {
ServletContext application=httpSessionEvent.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 httpSessionEvent) {
ServletContext application =httpSessionEvent.getSession().getServletContext();
Integer Online_number=(Integer)application.getAttribute("Online_number");//要转换为数字时 要默认用(Integer)强转
if(null==Online_number)
{
Online_number=0;
}
else
Online_number--;
application.setAttribute("Online_number",Online_number);
System.out.println("一位用户离线");
}
}
配置相应的web.xml映射路径:
<listener>
<listener-class>Listener.OnlineSessionListener</listener-class>
</listener>
新建.jsp文件验证:
<%@page language="java" contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" %>
当前在线人数:${Online_number}

本文介绍了如何利用session监听来统计在线人数。由于HTTP协议的短链接特性,无法直接通过连接数来统计,因此通过session的数量可以间接估计。当用户访问服务器时,会创建session,若30分钟内无操作,session会被销毁。通过实现HttpSessionListener接口的自定义类,可以监听session的创建和销毁,从而动态更新在线人数。最后,配置web.xml映射路径以实现功能。
710

被折叠的 条评论
为什么被折叠?



