`
isiqi
  • 浏览: 16020649 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

servlet2.3规范之十——应用生命周期事件

阅读更多

10 应用生命周期事件

10.1 简介

规范2.3中新增了对应用级事件的支持。应用事件工具使得web应用开发人员在与ServletContextHttpSession对象交互时有了更大的控制权,代码更清晰,提高了管理web应用使用资源的效率。

10.2 事件监听器

应用事件监听器是一些实现了一个或多个servlet事件监听器接口的类。在web应用发布时实例化,并注册到web容器中,由开发人员提供给WAR

Servlet事件监听器支持ServletContextHttpSession对象状态变化的事件通知。Servlet上下文监听器用来管理应用VM级所持有的资源或状态。HTTP会话监听器用来管理web应用中同一个客户端或用户发出的一系列请求相关的状态或资源。

可能有多个监听器类监听每一个事件类型,开发人员可以指定容器调用每一个事件类型监听器bean的顺序。

10.2.1 事件类型和监听器接口

事件类型和用于监听的监听器接口如10-1中所示。

10-1 事件和监听器接口

事件类型

描述

接听器接口

ServletContext事件

生命周期

servlet上下文刚被创建,可以处理第一个请求,或者servlet上下文要被关闭

javax.servlet.ServletContextListener

属性变更

Servlet上下文的属性被添加,删除或者替换

javax.servlet.ServletContextAttributesListener

HttpSession事件

生命周期

HttpSession被创建,失效或超时

javax.servlet.http.HttpSessionListener

属性变更

HttpSession属性被添加,删除或者替换

javax.servlet.HttpSessionAttributesListener

关于API细节,参见第14章和第15API参考。

10.2.2 监听器使用示例

用一个简单的web应用说明事件的使用,它包括一些使用了数据库的servlet。开发人员提供提供了一个servlet上下文监听器来管理数据库连接。

1. 当应用启动时,通知监听器类时,应用在数据库中记录日志,并且在servlet上下文中存储连接。

2. 应用中的servletweb应用活动期间必要时访问连接。

3. web服务器关闭时,或者应用从web服务器中清除,通知监听器类,并关闭数据库连接。

10.3 监听器类配置

10.3.1 提供监听器类

Web应用的开发人员提供servlet API中一个或多至4个监听器类的实现。每一个监听器类必须有一个无参的公共构造函数。监听器类被打包至WAR中,可以位于WEB-INF/classes目录中,也可以位于WEBINF/lib目录下的JAR中。

10.3.2 部署声明

监听器类web应用部署描述符中使用listener元素声明,按调用的顺序列出类名。

10.3.3 监听器注册

在处理应用的第一个请求之前,web容器创建每一个监听器类的实例,并注册为事件通知。Web容器根据监听器实例实现的接口,以及部署描述符中的顺序进行注册。在web应用执行时,以注册的顺序调用监听器。

10.3.4 关闭通知

当应用关闭时,按声明的相反顺序通知监听器,先通知会话监听器,后通知上下文监听器。会话失效通知会话监听器必须优先于应用关闭时通知上下文监听器。

10.4 部署描述符示例

下面是一个注册两个servlet上下文声明周期监听器和一个HttpSession监听器部署语法的例子。

假定com.acme.MyConnectionManagercom.acme.MyLoggingModule都实现了javax.servlet.ServletContextListenercom.acme.MyLoggingModule还实现了javax.servlet.HttpSessionListener,并且开发人员想让com.acme.MyConnectionManagercom.acme.MyLoggingModule之前得到上下文生命周期事件的通知。那么该应用的部署描述符为:

<web-app>

<display-name>MyListeningApplication</display-name>

<listener>

<listener-class>com.acme.MyConnectionManager</listenerclass>

</listener>

<listener>

<listener-class>com.acme.MyLoggingModule</listener-class>

</listener>

<servlet>

<display-name>RegistrationServlet</display-name>

...etc

</servlet>

</web-app>

10.5 监听器实例与线程

要求容器在开始执行应用的第一个请求之前完成对web应用监听器类的实例化。容器必须维持每一个监听器实例的引用,直到web应用处理完最后一个请求。

ServletContextHttpSession对象的属性变更可能同时发生。不要求容器对属性监听器类的结果通知进行同步。维护状态的监听器类负责数据的完整性,并且应当显式处理该情况。

10.6 分布式容器

在分布式web容器中,HttpSession实例只作用于处理会话请求的特定VM中,ServletContext对象作用于web容器的VM中。不要求分布式容器将servlet上下文事件或HttpSession事件传递给其他VM。每一个VM的每一个部署描述符对应一个监听器类实例。

10.7 会话事件

监听器类给开发人员提供了一种跟踪web应用内会话的方式。知道一个会话是否因为超时,或者因为应用内的web组件调用invalidate方法而失效,这是很有用的。区别在于是间接使用监听器和还是直接使用HTTPSession API方法。

分享到:
评论

相关推荐

    Java Web编程宝典-十年典藏版.pdf.part2(共2个)

    主要包括Java Web开发环境、JSP语法、JSP内置对象、Java Bean技术、Servlet技术、EL与JSTL标签库、数据库应用开发、初识Struts2基础、揭密Struts2高级技术、Hib锄劬e技术入门、Hibernate高级应用、Spring核心之IoC、...

    Java Web程序设计教程

    3.3.3servlet的生命周期 49 3.3.4load-on-startupservlet 50 3.4自定义标签库 51 3.5预处理用户请求:filter 53 3.6使用listener 56 3.7项目实战——用户登录 59 本章小结 62 课后练习 63 第4章sql与jdbc ...

    Spring3.x企业应用开发实战(完整版) part1

     《Spring3.x企业应用开发实战》是在《精通Spring2.x——企业应用开发详解》的基础上,经过历时一年的重大调整改版而成的,本书延续了上一版本追求深度,注重原理,不停留在技术表面的写作风格,力求使读者在熟练...

    Spring.3.x企业应用开发实战(完整版).part2

     《Spring3.x企业应用开发实战》是在《精通Spring2.x——企业应用开发详解》的基础上,经过历时一年的重大调整改版而成的,本书延续了上一版本追求深度,注重原理,不停留在技术表面的写作风格,力求使读者在熟练...

    OPhone应用开发权威指南(黄晓庆)

    3.2.2 Activity的生命周期 48 3.2.3 启动Activity 55 3.2.4 Activity和Task 58 3.3 Content Provider 61 3.4 BroadcastReceiver 64 3.5 Service 66 3.6 安全与许可 66 3.6.1 安全架构 66 3.6.2 许可 67 3.7 数字签名...

    JAVA程序开发大全---上半部分

    11.1.2 JSF框架的请求处理生命周期 201 11.1.3 JSF应用程序结构 202 11.2 MyEclipse创建基于JSF框架的项目 202 11.2.1 创建JSF项目 202 11.2.2 JSF配置文件编辑器 203 11.2.3 创建Managed Bean 204 11.2.4 创建JSP...

    Java开发技术大全 电子版

    3.2.4对象的生命周期106 3.2.5对象的创建106 3.2.6对象的使用108 3.2.7对象的释放和垃圾收集机制108 3.3成员变量的定义与使用109 3.3.1成员变量的定义109 3.3.2成员变量的访问权限110 3.3.3实例成员变量和...

    李兴华 Java Web 开发实战经典_带源码_高清pdf 带书签 上

    9.4、Servlet生命周期 9.5、取得初始化配置信息 9.6、取得其他内置对象 9.6.1、取得HttpSession实例 9.6.2、取得ServletContext实例 9.7、Servlet跳转 9.7.1、客户端跳转 9.7.2、服务器端跳转 9.8、WEB开发...

    MLDN+李兴华+Java+Web开发实战经典.part3.rar )

    9.4、Servlet生命周期 9.5、取得初始化配置信息 9.6、取得其他内置对象 9.6.1、取得HttpSession实例 9.6.2、取得ServletContext实例 9.7、Servlet跳转 9.7.1、客户端跳转 9.7.2、服务器端跳转 9.8、...

    李兴华 java_web开发实战经典 源码 完整版收集共享

    9.4、Servlet生命周期 9.5、取得初始化配置信息 9.6、取得其他内置对象 9.6.1、取得HttpSession实例 9.6.2、取得ServletContext实例 9.7、Servlet跳转 9.7.1、客户端跳转 9.7.2、服务器端跳转 9.8、WEB开发...

    李兴华 Java Web 开发实战经典_带源码_高清pdf 带书签 下

    9.4、Servlet生命周期 9.5、取得初始化配置信息 9.6、取得其他内置对象 9.6.1、取得HttpSession实例 9.6.2、取得ServletContext实例 9.7、Servlet跳转 9.7.1、客户端跳转 9.7.2、服务器端跳转 9.8、WEB开发...

    李兴华Java Web开发实战经典.pdf (高清版) Part1

    9.4、Servlet生命周期 9.5、取得初始化配置信息 9.6、取得其他内置对象 9.6.1、取得HttpSession实例 9.6.2、取得ServletContext实例 9.7、Servlet跳转 9.7.1、客户端跳转 9.7.2、服务器端跳转 9.8、...

    java web 视频、电子书、源码(李兴华老师出版)

    9.4、Servlet生命周期 9.5、取得初始化配置信息 9.6、取得其他内置对象 9.6.1、取得HttpSession实例 9.6.2、取得ServletContext实例 9.7、Servlet跳转 9.7.1、客户端跳转 9.7.2、服务器端跳转 9.8、...

    李兴华 Java Web 开发实战经典 高清扫描版Part3

    9.4、Servlet生命周期 9.5、取得初始化配置信息 9.6、取得其他内置对象 9.6.1、取得HttpSession实例 9.6.2、取得ServletContext实例 9.7、Servlet跳转 9.7.1、客户端跳转 9.7.2、服务器端跳转 9.8、WEB开发...

    李兴华Java Web开发实战经典(高清版) Part2

    9.4、Servlet生命周期 9.5、取得初始化配置信息 9.6、取得其他内置对象 9.6.1、取得HttpSession实例 9.6.2、取得ServletContext实例 9.7、Servlet跳转 9.7.1、客户端跳转 9.7.2、服务器端跳转 9.8、...

    Python编程入门经典

    12.5 软件生命周期中的正规 测试 210 12.6 本章小结 210 第13章 使用Python编写GUI 213 13.1 Python的GUI编程工具箱 213 13.2 Tkinter简介 215 13.3 用Tkinter创建GUI 小组件 215 13.3.1 改变小组件的尺寸 215 ...

Global site tag (gtag.js) - Google Analytics