zoukankan      html  css  js  c++  java
  • Lisener 监听器

    Listener时Servlet的监听器
    监听客户端的请求和服务器的操作
    通过实现Listener接口的类可以在监听到特定事件后激发一些操作
    HttpSessionBindingListener监听器
    HttpSessionBindingListener
    当一个实现了该接口的对象捆绑到session中或从session中被解放的时候启用此监听
    session创建和销毁时分别触发valueBound()和ValueUnbound()方法
    HttpSessionBindingListener监听器实现在线用户的统计步骤
    创建实现HttpSessionBindingListener接口
    在valueBound()和ValueUnbound()方法中实现用户数量统计
    将其实例添加到session作用域

    public class User implements HttpSessionBindingListener {
    private String name;
    public String getName() {
    return name;
    }
    public void setName(String name) {
    this.name = name;
    }
    @Override
    public void valueBound(HttpSessionBindingEvent event) {
    OnlineNum.NUMBERS++;
    }
    @Override
    public void valueUnbound(HttpSessionBindingEvent event) {
    OnlineNum.NUMBERS--;
    }
    }

    session创建
    当服务器接受到浏览器的第一次会话时就会立刻创建会话的session, 运用session.setAttribut();只不过是向已经存在色session里放入一个属性

    HttpSessionListener统计在线人数
    HttpSessionBindingListener统计:她统计的是绑定某一个特定对象的单个session
    HttpSessionListener统计:它统计的是该项目的所有session
    创建监听类UserCountListener, 重写session创建和销毁的方法
    重写session创建方法
    通过session事件获取session对象, 在通过session对象获取ServletContext对象,再获取ServletContext里的count值(第一次值为空,为空的话需要自己设置初始值,并把count属性设置到ServletContext里)
    session销毁方法 如果为空count设置为0, 如果不为空count--, 然后在把count重新设置进ServletContext属性里
    然后配置web.xml,把你写的监听器类全名配置到里边
    ServletContext对象作用与整个web容器,整个web容器共享的数据,当一个客户端发起第一次会话时创建一个session对象的时候ServletContext的count属性加一,当有session对象销毁时count属性的值减一,通过这种思想来统计整个web容器的存在session对象的个数来确定在线人数
    再登录成功页面可以输入<%=session.getServletContext().getAttribute("count")%> 来获取ServletContext的属性值,来显示在线人数

     1 public class UserCountListener implements HttpSessionListener {
     2 
     3 @Override
     4 public void sessionCreated(HttpSessionEvent se) {
     5 Integer count = (Integer) se.getSession().getServletContext().getAttribute("count");
     6 if (count == null) {
     7 count = 1;
     8 } else {
     9 count++;
    10 }
    11 se.getSession().getServletContext().setAttribute("count", count);
    12 System.out.println("+++++++++++++++session创建,在线人数加1+++++++++++++++++++");
    13 }
    14 
    15 @Override
    16 public void sessionDestroyed(HttpSessionEvent se) {
    17 Integer count = (Integer) se.getSession().getServletContext().getAttribute("count");
    18 if (count == null) {
    19 count = 0;
    20 } else {
    21 count--;
    22 }
    23 se.getSession().getServletContext().setAttribute("count", count);
    24 System.out.println("+++++++++++++++session销毁,在线人数减1+++++++++++++++++++");
    25 
    26 }
    27 
    28 }
    29 
    30  
  • 相关阅读:
    flutter-常见的基础组件(一)
    flutter-dart语言初识
    从零开始配置安装Flutter开发环境
    vue路由vue-router
    css秘密花园一
    mvvm实现一个简单的vue
    js常见的设计模式一
    es6 generator函数的异步编程
    es6 async和await
    模块--random
  • 原文地址:https://www.cnblogs.com/MrliBlog/p/11002564.html
Copyright © 2011-2022 走看看