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

JavaWeb学习记录(二十六)——在线人数统计HttpSessionListener监听实现的更多相关文章

  1. javaweb学习总结(二十六)——jsp简单标签标签库开发(二)

    一.JspFragment类介绍 javax.servlet.jsp.tagext.JspFragment类是在JSP2.0中定义的,它的实例对象代表JSP页面中的一段符合JSP语法规范的JSP片段, ...

  2. JavaWeb学习记录(十六)——防止表单重复提交

    产生随机字符串进行验证,如果产生的和Session存储的相同则可以提交,提交后删除session对应的属性值:否则表单提交不成功 一.产生随机字符串的工具类 package web10.util; i ...

  3. javaweb学习总结二十六(response对象的用法二 下载文件)

    一:浏览器打开服务器上的文件 1:读取服务器上面的资源,如果在web层,可以直接使用servletContext,如果在非web层 可以使用类加载器读取文件 2:向浏览器写数据,实际上是把数据封装到r ...

  4. python3.4学习笔记(二十六) Python 输出json到文件,让json.dumps输出中文 实例代码

    python3.4学习笔记(二十六) Python 输出json到文件,让json.dumps输出中文 实例代码 python的json.dumps方法默认会输出成这种格式"\u535a\u ...

  5. 深度学习(二十六)Network In Network学习笔记

    深度学习(二十六)Network In Network学习笔记 Network In Network学习笔记 原文地址:http://blog.csdn.net/hjimce/article/deta ...

  6. JavaWeb学习记录(十二)——商城购物之数据库操作的接口定义

    一.基本接口,该项目中所有接口都继承它 package blank.dao; import java.util.List; public interface BaseDao<T,PK> { ...

  7. javaweb学习总结(二十五)——jsp简单标签开发(一)

    一.简单标签(SimpleTag) 由于传统标签使用三个标签接口来完成不同的功能,显得过于繁琐,不利于标签技术的推广, SUN公司为降低标签技术的学习难度,在JSP 2.0中定义了一个更为简单.便于编 ...

  8. javaweb学习总结(二十二)——基于Servlet+JSP+JavaBean开发模式的用户登录注册

    一.Servlet+JSP+JavaBean开发模式(MVC)介绍 Servlet+JSP+JavaBean模式(MVC)适合开发复杂的web应用,在这种模式下,servlet负责处理用户请求,jsp ...

  9. Java基础学习笔记二十六 JDBC

    什么是JDBC JDBC(Java DataBase Connectivity)就是Java数据库连接,说白了就是用Java语言来操作数据库.原来我们操作数据库是在控制台使用SQL语句来操作数据库,J ...

随机推荐

  1. string.format

    string.Format("{0:#,0}", c.num), //千分号,有小数就保留2位小数 string.Format("{0:N2}", c.amou ...

  2. Program C 暴力求解

    Description   A ring is composed of n (even number) circles as shown in diagram. Put natural numbers ...

  3. obj.offsetHeight与obj.style.height区别

    我们都知道obj.offsetHeight与obj.style.height都可以获取obj的高度,但是在js使用中,我们通常会使用前者来获取高度,这是为什么,二者有什么样的区别呢. 1.obj.of ...

  4. 创建dialog

    创建一个dialog有一下两种方式: 1.Data属性:DOM添加属性data-toggle="dialog"后,单机触发. a链接打开: <a href="jso ...

  5. Linear Predictors

    In this chapter we will study the family of linear predictors, one of the most useful families of hy ...

  6. IIS 6.0 401 错误

    1.错误号401.1 症状:HTTP 错误 401.1 - 未经授权:访问由于凭据无效被拒绝 分析:  由于用户匿名访问使用的账号(默认是IUSR_机器名)被禁用,或者没有权限访问计算机,将造成用户无 ...

  7. MVC5 烂笔头

    HttpContent Controller:HttpContextBase View:HttpContext.Current View的搜寻顺序:本文件夹.本共享.根共享等 class=" ...

  8. 《JAVA学习笔记(14-10---14-11抽象类)》

    [14-10]面向对象-抽象类的产生 /* 描述狗,行为,吼叫. 描述狼,行为,吼叫. 发现他们之间有共性,可以进行向上抽取. 当然是抽取他们的所属共性类型,犬科. 犬科这类事物,都具备吼叫行为,但是 ...

  9. EasyUI 验证框使用方法

    使用过程中的一积累,备查. EasyUI 验证框使用方法://***************************missingMessage:未填写时显示的信息validType:验证类型见下示例 ...

  10. (转)innerHTML、innerText和outerHTML、outerText的区别

    原文:http://walsh.iteye.com/blog/261966 innerHTML.innerText和outerHTML.outerText的区别          博客分类: CSS/ ...