zoukankan      html  css  js  c++  java
  • web.xml监听器 listener

    web.xml监听器 - 函数回调

    (面向事件编程概念)

    <listener> 
        <listener-class>com.kiqi.listener.MyListener</listener-class>
      </listener>

    一、监听器类型 
    1.Listener是Servlet的监听器 
    2.可以监听客户端的请求、服务端的操作等。 
    3.通过监听器,可以自动激发一些操作,如监听在线用户数量,当增加一个HttpSession时,给在线人数加1。 
    4.编写监听器需要实现相应的接口 
    5.编写完成后在web.xml文件中配置一下,就可以起作用了 
    6.可以在不修改现有系统基础上,增加web应用程序生命周期事件的跟踪

    二、监听器类型 
    按监听的对象(环境对象)划分:

    1. 用于监听应用程序环境对象(ServletContext的事件监听器 - application

    //ServletContextListener:用于对Servlet整个上下文进行监听(创建、销毁)。
    public void contextInitialized(ServletContextEvent sce);//上下文初始化
    public void contextDestroyed(ServletContextEvent sce);//上下文销毁
    public ServletContext getServletContext();//ServletContextEvent事件:取得一个ServletContext(application)对象
    
    //ServletContextAttributeListener:对Servlet上下文属性的监听(增删改属性)。
    public void attributeAdded(ServletContextAttributeEvent scab);//增加属性
    public void attributeRemoved(ServletContextAttributeEvent scab);//属性删除
    public void attributeRepalced(ServletContextAttributeEvent scab);//属性替换(第二次设置同一属性)
    //ServletContextAttributeEvent事件:能取得设置属性的名称与内容
    public String getName();//得到属性名称
    public Object getValue();//取得属性的值

    2. 用于监听用户会话对象(HttpSession Listener)的事件监听器 - session

    //HttpSessionListener接口:对Session的整体状态的监听。
    public void sessionCreated(HttpSessionEvent se);//session创建
    public void sessionDestroyed(HttpSessionEvent se);//session销毁
    //HttpSessionEvent事件:
    public HttpSession getSession();//取得当前操作的session
    
    //HttpSessionAttributeListener接口:对session的属性监听。
    public void attributeAdded(HttpSessionBindingEvent se);//增加属性
    public void attributeRemoved(HttpSessionBindingEvent se);//删除属性
    public void attributeReplaced(HttpSessionBindingEvent se);//替换属性
    //HttpSessionBindingEvent事件:
    public String getName();//取得属性的名称
    public Object getValue();//取得属性的值
    public HttpSession getSession();//取得当前的session
    public void invalidate();//使session失效方法 - session.invalidate();

    3. 用于监听请求消息对象(ServletRequest Listener)的事件监听器 - request

    //ServletRequestListener:用于对Request请求进行监听(创建、销毁)
    public void requestInitialized(ServletRequestEvent sre);//request初始化
    public void requestDestroyed(ServletRequestEvent sre);//request销毁
    //ServletRequestEvent事件:
    public ServletRequest getServletRequest();//取得一个ServletRequest对象
    public ServletContext getServletContext();//取得一个ServletContext(application)对象
    
    //ServletRequestAttributeListener:对Request属性的监听(增删改属性)。
    public void attributeAdded(ServletRequestAttributeEvent srae);//增加属性
    public void attributeRemoved(ServletRequestAttributeEvent srae);//属性删除
    public void attributeReplaced(ServletRequestAttributeEvent srae);//属性替换(第二次设置同一属性)
    
    //ServletRequestAttributeEvent事件:能取得设置属性的名称与内容
    public String getName();//得到属性名称
    public Object getValue();//取得属性的值

    按监听的事件类项划分

    1. 用于监听域对象自身的创建和销毁的事件监听器

    2. 用于监听域对象中的属性的增加和删除的事件监听器

    3. 用于监听绑定到HttpSession域中的某个对象的状态的事件监听器

     1 import javax.servlet.ServletContextEvent;    
     2 import javax.servlet.ServletContextListener;    
     3 
     4 public class MyListener implements ServletContextListener {    
     5     public void contextDestroyed(ServletContextEvent sce) {    
     6            System.out.println("die");    
     7     }    
     8 
     9     public void contextInitialized(ServletContextEvent sce) {    
    10            System.out.println("init");     
    11     }    
    12 }
     1 public class HttpSessionListenerImpl implements HttpSessionListener {
     2     public void sessionCreated(HttpSessionEvent event) {
     3         ServletContext app = event.getSession().getServletContext();
     4         int count = Integer.parseInt(app.getAttribute("onLineCount").toString());
     5         count++;
     6         app.setAttribute("onLineCount", count);
     7         int maxOnLineCount = Integer.parseInt(app.getAttribute("maxOnLineCount").toString());
     8         if (count > maxOnLineCount) {
     9             //记录最多人数是多少
    10             app.setAttribute("maxOnLineCount", count);
    11             DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    12             //记录在那个时刻达到上限
    13             app.setAttribute("date", df.format(new Date()));
    14         }
    15     }
    16     //session注销、超时时候调用,停止tomcat不会调用
    17     public void sessionDestroyed(HttpSessionEvent event) {
    18         ServletContext app = event.getSession().getServletContext();
    19         int count = Integer.parseInt(app.getAttribute("onLineCount").toString());
    20         count--;
    21         app.setAttribute("onLineCount", count);    
    22     }
    23 }

    参考:Listener 监听器


    欢迎疑问、期待评论、感谢指点 -- kiqi,愿同您为友

    -- 星河有灿灿,愿与之辉

  • 相关阅读:
    ThinkPHP 3.2 调用自定义函数库
    phpstorm 2017版代码提示功能开启解决方案
    phpstorm 2017激活
    JavaScript返回上一页和返回上一级页面并刷新
    PHP处理Ajax请求与Ajax跨域
    13个能快速开发android的经典项目
    分享6款优秀的 AR/VR 开源库
    Android-----购物车(包含侧滑删除,商品筛选,商品增加和减少,价格计算,店铺分类等)
    Android------视频播放器(包含全屏播放,快退,快进,腾讯新闻的列表播放等)
    吴恩达课后作业学习2-week1-2正则化
  • 原文地址:https://www.cnblogs.com/kiqi/p/10455344.html
Copyright © 2011-2022 走看看