用户操作
[留言]  [发消息]  [加为好友] 
订阅我的博客
XML聚合    FeedSky
订阅到鲜果
订阅到Google
订阅到抓虾
wocongdongfanglai的公告
自即日起,非技术文章不再在此发表,有兴趣者访问<a href="http://blog.sina.com.cn/u/1432000507">http://blog.sina.com.cn/u/1432000507</a><br> MSN:<br> wocongdongfanglai@hotmail.com <br> <EMBED SRC=http://www.butabon.com/Clock/digiwide019.swf WIDTH=150 HEIGHT=15 wmode=transparent quality=high loop=true menu=false> <p><b>今日天气</b><br> <center><iframe width=157 height=240 frameborder=0 scrolling=NO src='http://appnews.qq.com/cgi-bin/news_qq_search?city='></iframe></center> <p>总访问量: <script>var a="wocongdongfanglai";</script> <script src="http://www.cnstat.com/stat.js"></script> <p> <script type="text/javascript"><!-- google_ad_client = "pub-3777928464131481"; google_ad_width = 180; google_ad_height = 150; google_ad_format = "180x150_as"; google_ad_type = "text_image"; google_ad_channel =""; //--></script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script> <script type="text/javascript"><!-- google_ad_client = "pub-3777928464131481"; google_ad_width = 125; google_ad_height = 125; google_ad_format = "125x125_as_rimg"; google_cpa_choice = "CAAQjefnzwEaCANioAR5GlCqKN2_93M"; //--></script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script> <script src="http://club.book.csdn.net/people/javascript/wocongdongfanglai2.js"></script>
文章分类
常逛的网站
CSDN读书频道
中华灯谜网——我如今最职业的兴趣
体苑沙龙——体评写手的大本营
柒零派——70一代的家园
技术论坛
ERP沙龙
IT人
Java视线论坛
他人的博客
水中天
存档

翻译  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方法。

 

发表于 @ 2007年02月11日 09:06:00 | 评论( loading... ) | 编辑| 举报| 收藏

旧一篇:servlet2.3规范之八——转发请求 | 新一篇:关于IE、Firefox、Opera页面呈现异同

  • 发表评论
  • 评论内容:
  •  
Copyright © wocongdongfanglai
Powered by CSDN Blog