zoukankan      html  css  js  c++  java
  • JavaWeb学习记录(二十六)——在线人数统计HttpSessionListener监听实现

    一、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方法。

  • 相关阅读:
    产品经理的未来在哪里
    如何打造一款成功的产品
    彻底解决Android 应用方法数不能超过65K的问题
    MVC,MVP 和 MVVM 的图示
    oracle最高账号sys的密码认证模式
    Android开发者必须深入学习的10个应用开源项目
    Android程序完全退出的三种方法
    Android-监听网络状态
    Android开发图片分辨率问题解决方案
    Android清除本地数据缓存代码
  • 原文地址:https://www.cnblogs.com/ly-radiata/p/4414396.html
Copyright © 2011-2022 走看看