`
jinnianshilongnian
  • 浏览: 21441668 次
  • 性别: Icon_minigender_1
博客专栏
5c8dac6a-21dc-3466-8abb-057664ab39c7
跟我学spring3
浏览量:2406627
D659df3e-4ad7-3b12-8b9a-1e94abd75ac3
Spring杂谈
浏览量:2998825
43989fe4-8b6b-3109-aaec-379d27dd4090
跟开涛学SpringMVC...
浏览量:5632404
1df97887-a9e1-3328-b6da-091f51f886a1
Servlet3.1规范翻...
浏览量:257847
4f347843-a078-36c1-977f-797c7fc123fc
springmvc杂谈
浏览量:1593567
22722232-95c1-34f2-b8e1-d059493d3d98
hibernate杂谈
浏览量:249106
45b32b6f-7468-3077-be40-00a5853c9a48
跟我学Shiro
浏览量:5848545
Group-logo
跟我学Nginx+Lua开...
浏览量:698467
5041f67a-12b2-30ba-814d-b55f466529d5
亿级流量网站架构核心技术
浏览量:780948
社区版块
存档分类
最新评论

Servlet3.1规范翻译——应用生命周期事件

 
阅读更多

应用生命周期事件

11.1 介绍

应用事件设施给Web应用开发人员更好地控制ServletContextHttpSessionServletRequest的生命周期,可以更好地代码分解,并在管理Web应用使用的资源上提高了效率。

 

11.2 事件监听器

应用事件监听器是实现一个或多个Servlet事件监听器接口的类。它们是在部署Web应用时,实例化并注册到Web容器中。它们由开发人员在WAR包中提供。

Servlet事件监听器支持在ServletContextHttpSessionServletRequest状态改变时进行事件通知。Servlet上下文监听器是用来管理应用的资源或JVM级别持有的状态。HTTP会话监听器是用来管理从相同客户端或用户进入web应用的一系列请求关联的状态或资源。Servlet请求监听器是用来管理整个Servlet请求生命周期的状态。异步监听器是用来管理异步事件,例如超时和完成异步处理。

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

11.2.1 事件类型和监听器接口

事件类型和监听器接口用于监控下表所示的:

 11-1  Servlet上下文事件

事件类型

描述

监听器接口

生命周期

Servlet上下文刚刚创建

并可用于服务它的第一个请求,

或者Servlet上下文即将关闭

javax.servlet.

ServletContextListener

更改属性

Servlet上下文的属性已添加、删除、或替换。

javax.servlet.

ServletContextAttributeListener

 

 11-2  HTTP会话事件

事件类型

描述

监听器接口

生命周期

会话已创建、销毁或超时。

javax.servlet.http.

HttpSessionListener

更改属性

已经在HttpSession上添加、移除、或替换属性。

javax.servlet.http.

HttpSessionAttributeListener

会话迁移

HttpSession已被激活或钝化。

javax.servlet.http.

HttpSessionActivationListener

对象绑定

对象已经从HttpSession绑定或解除绑定

javax.servlet.http.

HttpSessionBindingListener

 

 11-3  Servlet请求事件

事件类型

描述

监听器接口

生命周期

一个servlet请求已经开始由Web组件处理。

javax.servlet.

ServletRequestListener

更改属性

已经在ServletRequest上添加、移除、或替换属性。

javax.servlet.

ServletRequestAttributeListener

异步事件

超时、连接终止或完成异步处理

javax.servlet.AsyncListener

 

11.2.2 监听器使用的一个例子

为了说明事件使用方案,考虑一个包含一些使用数据库的Servlet的简单Web应用。开发人员提供了一个Servlet上下文监听器类用于管理数据库连接。

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

2. 应用中的Servlet根据需要,在Web应用的活动期间访问连接。

3. Web服务器关闭时,或应用从Web服务器移除时,监听器类得到通知且关闭数据库连接。

11.3 监听器类配置

11.3.1 提供监听器类

Web应用的开发人员提供实现了一个或多个在javax.servlet API中的监听器接口的监听器类。每一个监听器类必须有一个无参构造器。监听器类打包到WAR包中,或者在WEB-INF/classes归档项下,或者在WEB-INF/lib目录的一个JAR内部。

11.3.2 部署声明

监听器类在Web应用部署描述符中使用listener元素声明。它们根据类名列出的顺序就是它们被调用的顺序。与其他监听器不同,AsyncListener类型的监听器可能仅通过编程式注册(使用一个ServletRequest)。

11.3.3 监听器注册

Web容器创建每一个监听器类的一个实例,并在应用处理第一个请求之前为事件通知注册它。Web容器根据他们实现的接口注册监听器实例,且按照它们出现在部署描述符中的顺序。在Web应用执行期间,监听器按照它们注册的顺序被调用。

11.3.4 关闭时通知

在应用关闭时,监听器以它们声明时相反的顺序得到通知,且通知会话监听器在通知上下文监听器之前。通知会话监听器session失效必须在通知上下文监听器关闭之前。

11.4 部署描述符示例

以下示例是注册两个Servlet上下文生命周期监听器和一个HttpSession监听器的部署语法。

假设com.acme.MyConnectionManagercom.acme.MyLoggingModule两个都实现了javax.servlet.ServletContextListener,且com.acme.MyLoggingModule又实现了javax.servlet.http.HttpSessionListener。此外,开发人员希望com.acme.MyConnectionManagercom.acme.MyLoggingModule得到Servlet上下文生命周期事件的通知。下面是这个应用的部署描述符:

<web-app>
    <display-name>MyListeningApplication</display-name>
    <listener>
        <listener-class>com.acme.MyConnectionManager</listener-class>
    </listener>
    <listener>
        <listener-class>com.acme.MyLoggingModule</listener-class>
    </listener>
    <servlet>
        <display-name>RegistrationServlet</display-name>
        ...etc
    </servlet>
</web-app>
 

 

11.5 监听器实例和线程

容器需要在开始执行进入应用的第一个请求之前完成Web应用中的监听器类的实例化。容器必须保持到每一个监听器的引用直到为Web应用最后一个请求提供服务。

ServletContextHttpSession对象的属性改变可能会同时发生。不要求容器同步到属性监听器类产生的通知。维护状态的监听器类负责数据的完整性且应明确处理这种情况。

11.6 监听器异常

一个监听器里面的应用代码在运行期间可能会抛出异常。一些监听器通知发生在应用中的另一个组件调用树过程中。这方面的一个例子是一个Servlet设置了会话属性,该会话监听器抛出未处理异常。容器必须允许未处理的异常由描述在10.9节“错误处理”的错误页面机制处理。如果没有为这些异常指定错误页面,容器必须确保返回一个状态码为500的响应。这种情况下,不再有监听器根据事件被调用。

有些异常不会发生在应用中的另一个组件调用栈过程中。这方面的一个例子SessionListener接收通知的会话已经超时并抛出未处理的异常,或者ServletContextListenerServlet上下文初始化通知期间抛出未处理异常,或者ServletRequestListener在初始化或销毁请求对象的通知期间抛出未处理异常。这种情况下,开发人员没有机会处理这种异常。容器可以以HTTP状态码500来响应所有后续的到Web应用的请求,表示应用出错了。

开发人员希望发生在监听器产生一个异常且在通知方法里面必须处理它们自己的异常之后的正常处理。

11.7 分布式容器

在分布式Web容器中,HttpSession实例被限到特定的JVM服务会话请求,且ServletContext对象被限定到Web容器所在的JVM。分布式容器不需要传播Servlet上下文事件或HttpSession事件到其他JVM。监听器类实例被限定到每个JVM的每个部署描述符声明一个。

11.8 会话事件

监听器类提供给开发人员一种跟踪Web应用内会话的方式。它通常是有用的,在跟踪会话知道一个会话是否变为失效,因为容器超时会话,或因为应用内的一个Web组件调用了invalidate方法。该区别可能会间接地决定使用监听器和HttpSession API方法。

 

3
9
分享到:
评论
3 楼 jinnianshilongnian 2012-12-29  
amwiacel 写道
与2.X版本的区别在哪?

这系列是翻译的servlet3.1规范  不是开发文档
2 楼 jinnianshilongnian 2012-12-29  
amwiacel 写道
与2.X版本的区别在哪?

最主要的几个区别:
1、异步支持
2、可插拔性
3、注解支持
1 楼 amwiacel 2012-12-29  
与2.X版本的区别在哪?

相关推荐

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

    5.4 一夫当关——配置并应用Servlet过滤器 5.4.1 过滤器的基本原理 5.4.2 过滤器的核心API 5.4.3 过滤器的创建与配置 5.4.4 JavaWeb中字符乱码分析 5.4.5 实现字符编码过滤器 5.5 实战检验 5.5.1 通过Servlet实现...

    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 ...

    从Java走向Java+EE+.rar

    5.1 Servlet的概念和生命周期 65 5.2 如何编写Servlet 67 5.3 使用Eclipse和Tomcat开发Servlet实例——输出字符串响应 72 5.4 小结 77 第6章 JSP——前后台更好地分离 79 6.1 JSP的概念 79 6.2 JSP页面...

    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 数字签名...

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

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

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

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

    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 ...

    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...

    电子商城系统设计实习报告.doc

    Spring MVC优点: 对Spring MVC覆盖绑定(overriding binding)、验证(validation)等提供生命周期管理;与许多表示层技术/框架无缝集 成:JSP/JSTL、Tiles、Velocity、FreeMarker、Excel、XSL、PDF 等。便于测试...

    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 开发实战经典 高清扫描版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 视频、电子书、源码(李兴华老师出版)

    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开发实战经典(高清版) 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、...

Global site tag (gtag.js) - Google Analytics