Javaweb 监听器 HttpSessionListener统计当前在线人数

HttpSessionListener统计当前在线人数

写法

@WebListener
public class SessionListener implements HttpSessionListener {
    @Override
    public void sessionCreated(HttpSessionEvent httpSessionEvent) {
        
    }

    @Override
    public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
   
    }
}

实例————统计在线人数————

1.contextListener(在contextListener 中添加人数统计配置信息【“onlineNum”,0】)

@WebListener
public class contextListener implements ServletContextListener {
    @Override
    public void contextInitialized(ServletContextEvent servletContextEvent) {
        System.out.println(" contextListener  contextInitialized");
       ServletContext servletContext= servletContextEvent.getServletContext();
       String url=servletContext.getInitParameter("url");
       String topic=servletContext.getInitParameter("topic");

        Config config=new Config();
        config.setTopic(topic);
        config.setUrl(url);
        servletContext.setAttribute("config",config);
		//添加在线人数配置信息
        servletContext.setAttribute("onlineNum",0);
    }

    @Override
    public void contextDestroyed(ServletContextEvent servletContextEvent) {
        System.out.println(" contextListener  contextDestroyed");
    }
}

2.SessionListener

@WebListener
public class SessionListener implements HttpSessionListener {
    @Override
    public void sessionCreated(HttpSessionEvent httpSessionEvent) {
        System.out.println("SessionListener  sessionCreated");

        ServletContext servletContext=httpSessionEvent.getSession().getServletContext();
        //获取在线人数
        Integer onlineNum= (Integer) servletContext.getAttribute("onlineNum");

        //新增
        servletContext.setAttribute("onlineNum",++onlineNum);

    }

    @Override
    public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
        System.out.println("SessionListener  sessionDestroyed");

        //获取在线人数
        ServletContext servletContext=httpSessionEvent.getSession().getServletContext();
        Integer onlineNum=(Integer) servletContext.getAttribute("onlineNum");

        //减少在线人数
        servletContext.setAttribute("onlineNum",--onlineNum);
    }
}

3.add.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <titl统计e>ys在线人数</titl统计e>
</head>
<body>
近三十分总在线人数:${applicationScope.onlineNum}
</body>
</html>

4.delete.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>ys在线人数</title>
</head>
<body>
销毁session
<% request.getSession().invalidate();%>
</body>
</html>

截图:

未访问页面
在这里插入图片描述
访问页面后
在这里插入图片描述
在这里插入图片描述
再用其他浏览器或隐身模式新开一个网页访问
在这里插入图片描述
——————————————————————————————————————————
访问delete界面
在这里插入图片描述
刷新第一个浏览器
在这里插入图片描述

注意:

关闭启动tomcat自动打开浏览器,因为会触发会触发多个session
使用多个浏览器测试 粗略统计,如果是多机器分布式情况,需要用到分布式缓存

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值