博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaWeb学习记录(二十六)——在线人数统计HttpSessionListener监听实现
阅读量:4931 次
发布时间:2019-06-11

本文共 1806 字,大约阅读时间需要 6 分钟。

一、session销毁控制层代码

public class InvalidateSession extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        request.getSession().invalidate();//执行销毁session的操作
    }
    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        this.doGet(request, response);
    }
}

二、监听代码

public class MyHttpSessionListener implements HttpSessionListener {

    @Override
    public void sessionCreated(HttpSessionEvent arg0) {
        // 当前人数加1
        // 看ServletContext域中是否已经存储了count 如果没有是第一个人访问 ,如果有就加1
        // 获取存储域对 全局
        ServletContext context = arg0.getSession().getServletContext();
        // 获取指定属性名称的参数值
        Object obj = context.getAttribute("count");
        System.out.println(obj);
        if (obj == null) {
            context.setAttribute("count", 1);
        } else {
            int count = (Integer) obj;
            count++;
            context.setAttribute("count", count);
        }
    }
    /**
     * 当浏览器关闭的时候,不会调用此方法
     * 1.当session失效    session默认有效时间 30分钟
     * 2.执行了session.invalidate();
     */
    @Override
    public void sessionDestroyed(HttpSessionEvent arg0) {
        System.out.println("--------sessionDestroyed------");
        // 获取存储域对 全局
        ServletContext context = arg0.getSession().getServletContext();
        // 获取指定属性名称的参数值
        Object obj = context.getAttribute("count");
        if (obj != null) {
            int count = (Integer) obj;
            count--;
            context.setAttribute("count", count);
        }
    }
}
三、显示层代码

<script type="text/javascript">

        //当关闭窗体前
        window.onbeforeunload = function(){
           //调用这个请求  去销毁session 当前会话的session
           window.location.href="http://localhost:8080/count/destorysession.do";
        };
    </script>

 <body>

       <%--
         ServletContext  setAttribute("count",count);
        --%>
       <h1>当前在线的人数是:${count}</h1>
  </body>

 

当一个会话关闭时,在线人数会相应减少。如果没有一中的session销毁控制层代码和三中的javascript代码,则会话增多时,显示在线人数会增加,但会话减少时,没有响应,

这是因为浏览器关闭时不会调用sessionDestroyed方法。

转载于:https://www.cnblogs.com/ly-radiata/p/4414396.html

你可能感兴趣的文章
会话与请求
查看>>
hibernate one2many (单向关联)
查看>>
自制反汇编逆向分析工具
查看>>
MS SQLserver数据库安装
查看>>
第2章 数字之魅——斐波那契(Fibonacci)数列
查看>>
Spark集群基于Zookeeper的HA搭建部署笔记(转)
查看>>
Codeforces Round #106
查看>>
vue循环时设置多选框禁用状态,v-for
查看>>
CSS3 2D 转换
查看>>
视觉跟踪入门概念
查看>>
lumen 在AppServiceProvider 使用Illuminate\Support\Facades\Redis 报错
查看>>
Python随心记--函数之面向对象
查看>>
git上传文件夹报错: ! [rejected] master -> master (fetch first) error: failed to push some refs to 'h...
查看>>
uwp如何建立任何形状的头像,如圆形,方形,六边形等
查看>>
Python之禅与八荣八耻
查看>>
[正能量系列]失业的程序员(三)
查看>>
Windows下Tesseract4.0识别与中文手写字体训练
查看>>
特征工程 —— 特征重要性排序(Random Forest)
查看>>
命名 —— 函数的命名
查看>>
常见矩阵求导
查看>>