Listener监听器-借助session监听器统计当前在线人数

HTTP协议是短链接的,所以无法在服务端根据建立了多少连接来统计当前有多少人在线。 不过可以通过统计session有多少来估计在线人数。 
一旦一个用户访问服务器,就会创建一个session. 如果该用户持续访问,那么该session会持续有效。 
如果经历了30分钟,该用户也没有做任何操作,就表示该用户“下线” 了,其对应的session也会被销毁。 
所以可以通过统计有多少session被保留来估计当前在线人数。

  • 编写 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("一位用户离线");
        }
    }
  • 配置web.xml

    配置 listener.OnlineNumberListener
    <listener>
        <listener-class>listener.OnlineNumberListener</listener-class>
    </listener>
  • checkOnlineNumber.jsp

    通过EL表达式,直接获取application中的值
    <%@ 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的活动


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值