zoukankan      html  css  js  c++  java
  • servlet的监听器

    说明:web.xml的加载顺序是:【Context-Param】->【Listener】->【Filter】->【Servlet】,而同个类型之间的实际程序调用的时候的顺序是根据对应的Mapping的顺序进行调用。

    Servlet Listener接口和事件(Event)对象

    Servlet API为不同类型的事件提供了不同类型的侦听器。侦听器接口声明方法来处理一组类似的事件,例如我们有ServletContext Listener监听上下文的启动和关闭事件。侦听器界面中的每个方法都将事件对象作为输入。事件对象作为一个包装器,为侦听器提供特定的对象。

    Servlet API提供以下事件对象:

    1. javax.servlet.AsyncEvent - 在ServletRequest(通过调用ServletRequest#startAsync或ServletRequest#startAsync(ServletRequest,ServletResponse))启动的异步操作已完成,超时或产生错误时触发的事件。
    2. javax.servlet.http.HttpSessionBindingEvent - 将此类型的事件发送到实现HttpSessionBindingListener的对象,当该对象从会话绑定或解除绑定时,或者发送到在web.xml中配置的HttpSessionAttributeListener,当绑定任何属性时,在会话中取消绑定或替换。会话通过对HttpSession.setAttribute的调用来绑定对象,并通过调用HttpSession.removeAttribute解除对象的绑定。当对象从会话中删除时,我们可以使用此事件进行清理活动。
    3. javax.servlet.http.HttpSessionEvent - 这是表示Web应用程序中会话更改的事件通知的类。
    4. javax.servlet.ServletContextAttributeEvent - 关于对Web应用程序的ServletContext的属性进行更改的通知的事件类。
    5. javax.servlet.ServletContextEvent - 这是关于Web应用程序的servlet上下文更改的通知的事件类。
    6. javax.servlet.ServletRequestEvent - 此类事件表示ServletRequest的生命周期事件。事件的源代码是这个Web应用程序的ServletContext。
    7. javax.servlet.ServletRequestAttributeEvent - 这是事件类,用于对应用程序中servlet请求的属性进行更改的通知。

    Servlet API提供了以下监听器接口:

    1. javax.servlet.AsyncListener - 如果在添加了侦听器的ServletRequest上启动的异步操作已完成,超时或导致错误,将会通知侦听器。
    2. javax.servlet.ServletContextListener - 用于接收关于ServletContext生命周期更改的通知事件的接口。
    3. javax.servlet.ServletContextAttributeListener - 接收关于ServletContext属性更改的通知事件的接口。
    4. javax.servlet.ServletRequestListener - 用于接收关于进入和超出Web应用程序范围的请求的通知事件的接口。
    5. javax.servlet.ServletRequestAttributeListener - 接收关于ServletRequest属性更改的通知事件的接口。
    6. javax.servlet.http.HttpSessionListener - 接收关于HttpSession生命周期更改的通知事件的接口。
    7. javax.servlet.http.HttpSessionBindingListener - 使对象从会话绑定到绑定或从其绑定时被通知。
    8. javax.servlet.http.HttpSessionAttributeListener - 用于接收关于HttpSession属性更改的通知事件的接口。
    9. javax.servlet.http.HttpSessionActivationListener - 绑定到会话的对象可能会侦听容器事件,通知他们会话将被钝化,该会话将被激活。需要在VM或持久化会话之间迁移会话的容器来通知绑定到实现HttpSessionActivationListener的会话的所有属性。

    Servlet的Listener有2种方式配置

          1、我们可以使用@WebListener注解来声明一个类作为Listener,但是该类应该实现一个或多个Listener接口。

     1 package com.journaldev.listener;
     2 
     3 import javax.servlet.ServletContext;
     4 import javax.servlet.ServletContextEvent;
     5 import javax.servlet.ServletContextListener;
     6 import javax.servlet.annotation.WebListener;
     7 
     8 import com.journaldev.db.DBConnectionManager;
     9 
    10 @WebListener
    11 public class AppContextListener implements ServletContextListener {
    12 
    13     public void contextInitialized(ServletContextEvent servletContextEvent) {
    14         ServletContext ctx = servletContextEvent.getServletContext();
    15         
    16         String url = ctx.getInitParameter("DBURL");
    17         String u = ctx.getInitParameter("DBUSER");
    18         String p = ctx.getInitParameter("DBPWD");
    19         
    20         //create database connection from init parameters and set it to context
    21         DBConnectionManager dbManager = new DBConnectionManager(url, u, p);
    22         ctx.setAttribute("DBManager", dbManager);
    23         System.out.println("Database connection initialized for Application.");
    24     }
    25 
    26     public void contextDestroyed(ServletContextEvent servletContextEvent) {
    27         ServletContext ctx = servletContextEvent.getServletContext();
    28         DBConnectionManager dbManager = (DBConnectionManager) ctx.getAttribute("DBManager");
    29         dbManager.closeConnection();
    30         System.out.println("Database connection closed for Application.");
    31         
    32     }
    33     
    34 }

          2、我们可以在web.xml中定义listener:

    <listener>  
            <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
    </listener>
    
  • 相关阅读:
    quota磁盘配额
    lvm管理
    快照
    分区工具
    课下测试03!03!03!题目截图及解析(不完全正确)第四周--信息安全系统设计基础
    2017-2018-1 20155307《信息安全技术李冬冬》实验二——Windows口令破解
    2017-2018-1 20155301 20155307 20155339 《信息安全系统设计基础》 实验一 开发环境的熟悉
    2017-2018-1 20155307 《信息安全系统设计基础》第5周学习总结
    PGP的原理与使用
    2017-2018-1 20155307 《信息安全系统设计基础》第四周学习总结
  • 原文地址:https://www.cnblogs.com/javalyy/p/8979885.html
Copyright © 2011-2022 走看看