事件监听器
应用事件监听器是实现一个或多个 Servlet 事件监听器接口的类。它们是在部署 Web 应用时,实例化并注册到 Web 容器中。它们由开发人员在WAR 包中提供。
Servlet 事件监听器支持在 ServletContext、HttpSession 和ServletRequest 状态改变时进行事件通知。Servlet 上下文监听器是用来管理应用的资源或 JVM 级别持有的状态。HTTP 会话监听器是用来管理从相同客户端或用户进入 web 应用的一系列请求关联的状态或资源。Servlet 请求监听器是用来管理整个 Servlet 请求生命周期的状态。异步监听器是用来管理异步事件,例如超时和完成异步处理。
可以有多个监听器类监听每一个事件类型,且开发人员可以为每一个事件类型指定容器调用监听器 bean 的顺序。
事件类型和监听器接口
事件类型和监听器接口用于监控下表所示的:
TABLE 11-1 Servlet Context Events
事件类型 | 描述 | 监听器接口 |
---|---|---|
生命周期 | Servlet上下文刚刚创建并可用于服务它的第一个请求,或者Servlet上下文即将关闭 | javax.servlet.ServletContextListener |
属性更改 | 在 Servlet 上下文的属性已添加、删除、或替换。 | javax.servlet.ServletContextAttributeListener |
TABLE 11-2 HTTP Session Events
事件类型 | 描述 | 监听器接口 |
---|---|---|
生命周期 | 会话已创建、销毁或超时。 | javax.servlet.http.HttpSessionListener |
属性更改 | 已经在HttpSession上添加、移除、或替换属性 | javax.servlet.http.HttpSessionAttributeListener |
改变ID | HttpSession 的 ID 将被改变 | javax.servlet.http.HttpSessionIdListener |
会话迁移 | HttpSession 已被激活或钝化 | javax.servlet.http.HttpSessionActivationListener |
对象绑定 | 对象已经从HttpSession绑定或解除绑定 | javax.servlet.http.HttpSessionBindingListener |
TABLE 11-3 Servlet Request Events
事件类型 | 描述 | 监听器接口 |
---|---|---|
生命周期 | 一个servlet请求已经开始由Web组件处理 | javax.servlet.ServletRequestListener |
更改属性 | 已经在ServletRequest上添加、移除、或替换属性。 | javax.servlet.ServletRequestAttributeListener |
异步事件 | 超时、连接终止或完成异步处理 | javax.servlet.AsyncListener |
监听器使用的一个例子
为了说明事件使用方案,考虑一个包含一些使用数据库的 Servlet 的简单 Web 应用。开发人员提供了一个 Servlet 上下文监听器类用于管理数据库连接。
- 当应用启动时,监听器类得到通知。应用登录到数据库,并在 servlet 上下文中存储连接。
- 应用中的 Servlet 根据需要,在 Web 应用的活动期间访问连接。
- 当 Web 服务器关闭时,或应用从 Web 服务器移除时,监听器类得到通知且关闭数据库连接。