应用程序生命周期侦听器和事件
使用应用程序生命周期侦听器和事件(现在是 Servlet API 的一部分),您可以在 Servlet 上下文和会话更改时通知感兴趣的侦听器。例如,在属性更改时,或者如果会话或 Servlet 上下文被创建或销毁时,可以通知用户。
生命周期侦听器让应用程序开发者可以更好地控制与 ServletContext 和 HttpSession 对象的交互。Servlet 上下文侦听器在应用程序级别管理资源。会话侦听器管理与来自单台客户机的一系列请求相关的资源。侦听器可用于生命周期事件和属性修改事件。侦听器开发者创建实现 javax 侦听器接口的类,它对应于您想要的侦听器功能。
在应用程序启动时,容器使用自省创建您的侦听器类的实例,并向适当的事件生成器注册该实例。
创建 Servlet 上下文时,会调用您的侦听器类的 contextInitialized 方法,这将创建数据库连接以供应用程序中的 Servlet 使用(如果该上下文用于应用程序)。在初始化 Web 应用程序中的所有 servlet 之前,通知所有 servlet 上下文侦听器上下文的初始化。
销毁 Servlet 上下文时,调用 contextDestroyed 方法,这会释放数据库连接(如果该上下文用于应用程序)。在通知任何 Servlet 上下文侦听器有关上下文销毁前,必须销毁所有 Servlet。
会话侦听器通知先于上下文侦听器通知。
Servlet 上下文和会话更改的侦听器类
- void contextInitialized(ServletContextEvent)
通知 Web 应用程序正准备处理请求。将代码放置在此方法中,以查看创建的上下文是否用于您的 Web 应用程序,如果它用于 Web 应用程序,那么分配数据库连接并将此连接存储在 servlet 上下文中。
- void contextDestroyed(ServletContextEvent)
通知 Servlet 上下文将要关闭。将代码放置在此方法中,以查看创建的上下文是否用于您的 Web 应用程序,如果它用于 Web 应用程序,那么关闭存储在 servlet 上下文中的数据库连接。
- public void requestInitialized(ServletRequestEvent re)
- 通知请求将要进入作用域
定义请求为进入作用域是指请求进入处理它的过滤器链中第一个过滤器。
- 通知请求将要进入作用域
- public void requestDestroyed(ServletRequestEvent re)
- 通知请求将要离开作用域
定义请求为离开作用域是指请求离开它的过滤器链的最后一个过滤器。
- 通知请求将要离开作用域
以下侦听器接口定义为 javax.Servlet 包的一部分:
- ServletContextListener
- ServletContextAttributeListener
以下过滤器接口定义为 javax.Servlet 包的一部分:
- FilterChain 接口 - 方法:doFilter()
以下事件类定义为 javax.Servlet 包的一部分:
- ServletContextEvent
- ServletContextAttributeEvent
以下接口定义为 javax.Servlet.http 包的一部分:
- HttpSessionListener
- HttpSessionAttributeListener
- HttpSessionActivationListener
以下事件类定义为 javax.Servlet.http 包的一部分:
- HttpSessionEvent
示例:通过 com.ibm.websphere.DBConnectionListener.java 创建 Servlet 上下文侦听器
以下示例显示了如何创建 Servlet 上下文侦听器:
package com.ibm.websphere; import java.io.*; import javax.servlet.*; public class DBConnectionListener implements ServletContextListener { // implement the required context init method void contextInitialized(ServletContextEvent sce) { } // implement the required context destroy method void contextDestroyed(ServletContextEvent sce) { } }