步骤 2 : 配置web.xml 步骤 3 : checkOnlineNumber.jsp 步骤 4 : 测试
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("一位用户离线");
}
}
配置 listener.OnlineNumberListener
<listener>
<listener-class>listener.OnlineNumberListener</listener-class>
</listener>
<listener> <listener-class>listener.OnlineNumberListener</listener-class> </listener>
通过EL表达式,直接获取application中的值
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" isELIgnored="false"%>
当前 在线人数 : ${online_number}
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false"%> 当前 在线人数 : ${online_number}
访问网页
http://127.0.0.1/checkOnlineNumber.jsp 注: 在重启tomcat测试之前, 要删除D:\tomcat\work\Catalina\localhost\_\SESSIONS.ser 这个文件。 这个文件是tomcat存放以前的session的,为了观察到创建session的活动,需要tomcat重启之前把以前的session都清除掉,才能观察到新创建session的活动
HOW2J公众号,关注后实时获知最新的教程和优惠活动,谢谢。
问答区域
2024-08-06
Listener 和 Session 结合的在线人数统计
回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢
2021-06-21
在Listener这个模块中访问的所有jsp页面都会自动跳转到登录页面(http://127.0.0.1/login.html)
2 个答案
四方1 跳转到问题位置 答案时间:2023-08-08 我也蚌埠住了哈哈哈
上一章刚学的过滤器,马上就忘了哈哈哈
标准的狗熊掰棒子
王羲之 跳转到问题位置 答案时间:2021-07-03 服了你了,这个是你学filter自己写的东西啊,Filter登陆验证,回去看看
回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢
2021-04-09
请问,我的online_number为什么会是负数?
2020-11-17
ServletContext 如何保证线程安全?
2019-08-01
使用IDEA完成online number时
提问太多,页面渲染太慢,为了加快渲染速度,本页最多只显示几条提问。还有 11 条以前的提问,请 点击查看
提问之前请登陆
提问已经提交成功,正在审核。 请于 我的提问 处查看提问记录,谢谢
|