??xml version="1.0" encoding="utf-8" standalone="yes"?>一区二区三区久久网,97在线影院,97久久香蕉国产线看观看http://www.aygfsteel.com/qiyadeng/category/4302.htmlif(log.itWillForget()){ <br>&nbsp;&nbsp; log.blog("log4deng!"); <br> }<br> else if(log.isYourExperience){ <br>&nbsp;&nbsp; log.blog("log4deng!"); <br> }<br> ......zh-cnMon, 26 Mar 2007 19:39:13 GMTMon, 26 Mar 2007 19:39:13 GMT60关于Servlet中的事g监听http://www.aygfsteel.com/qiyadeng/articles/106407.htmlqiyadengqiyadengMon, 26 Mar 2007 06:35:00 GMThttp://www.aygfsteel.com/qiyadeng/articles/106407.htmlhttp://www.aygfsteel.com/qiyadeng/comments/106407.htmlhttp://www.aygfsteel.com/qiyadeng/articles/106407.html#Feedback0http://www.aygfsteel.com/qiyadeng/comments/commentRss/106407.htmlhttp://www.aygfsteel.com/qiyadeng/services/trackbacks/106407.html 关于 Servlet 中的事g监听

?/span> Servlet2.3 规范中添加了一些监?/span> web 应用中重要事件的能力。这功能可以让我们Ҏ事g的状态更有效的对资源q行理和自动化q行。这部分描述?/span> servlet 的事件监听,包含以下部分Q?/span>

1Q?/font>   事g的分cd Listener 接口

2Q?/font>   典型的事件监听过E?/font>

3Q?/font>   事g监听的声明和调用

4Q?/font>   事g监听~码和发布向?/font>

5Q?/font>   事g监听的方法和相关的类

事g的分cd Listener 接口

Servlet 事g有两个别:

1Q?/font>   Application U别事g

包含着q行应用E序的虚拟机U别的相兌源和状态,卛_ servlet ?/span> Context 对象相关?/span>

2Q?/font>   Session U别的事?/font>

包含着一个单一用户?/span> session 的一pdh的相兌源和状态,?/span> Http ?/span> Session 对象?/span>

在上面两个别的事gQ又可分别分ZU:

1Q?/font>   生命周期的改?/font>

2Q?/font>   属性的改变

你可以ؓ上面四种事g创徏一个或多个监听cR一个单一的监听类可以监视多种事g?/font>

创徏一个事件类可以?/span> javax.servlet 包或 javax.servlet.http 包中实现合适的接口。下表中列出了四U事件相关的接口?/span>

事gU类

事g描述

接口

Context 生命周期的改?/span>

context 的徏立和卛_关闭 context

Javax.servlet.ServletContextListener

Context 属性值的改变

dQ删除,修改 context 的属性?/span>

Javax..servlet.ServletContextAttributeListener

Session 生命周期的改?/span>

Session 的创建,注销Q超?/span>

Javax.servlet.http.HttpSessionListener

Session 属性值的改变

dQ删除,修改 session 的属性?/span>

Javax.servlet.htpp.HttpSessionAttributeListener

典型的事件监听过E?/font>

考虑一?/span> web 应用是由一l访问数据库?/span> servlet l成的。一个典型的事g监听机制是这LQ创Z?/span> context 生命周期的事件来理数据库连接,q个监听器可以有如下的功能:

1Q?/font>   q个监听器监视着应用E序的启?/font>

2Q?/font>   q个应用E序写入日志到数据库中ƈ且把q接对象存储?/span> context ?/span>

3Q?/font>   Servelt 使用q接对象来执?/span> SQL

4Q?/font>   监听器监听应用程序的卛_关闭

5Q?/font>   在关闭应用程序之前,先关闭连接对?/font>

事g监听的声明和调用

事g监听的声明在应用E序?/span> web.xml 里,?/span> <listener> 元素Q该元素?/span> <web-app> 的子元素。每个监听器都对应一?/span> <listener> Q有一?/span> <listener-class> 子元素用来指定对应的cd。在每种事g中,你需要指定你惌用的序?/span>

在应用程序启动之后,q且在第一ơ请求之前, servlet 容器会创建ƈ注册每个监听cȝ实例。每U事Ӟ监听器是按照他们声明的顺序来注册的。然后,当应用程序开始运行,每种事g监听器安装他们的序调用。在最后一ơ请求之前,所有的监听器都保持zd状态?/span>

一旦应用程序关闭, session 事g首先发生Q以他们声明的顺序相反。然?/span> context 事g发生也是以声明的序相反?/span>

下面是一个例子:

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

      ...

   </servlet>

</web-app>

假设 MyConnectionMnanager ?/span> MyLoggingModule 都是实现 ServletContextListener 接口Q?/span> MyLoggingModule 也是实现?/span> HttpSessionListener 接口?/span>

当应用程序运行,两个监听器都会监?/span> context 生命周期事gQ?/span> MyLoggingModule 监听器还会监?/span> session 生命周期。在 context 生命周期中, MyConnectionMananger 会首先开始监听,因ؓ它声明在前面?/span>

事g监听器的~码和发布指?/font>

h意事件监听器cȝ以下规则和指南:

l          在多U程的应用程序中Q属性可能同时改变。这是不需?/span> Servlet 容器来同步结果――在q种情况下监听类本n负责保持数据的完整性?/span>

l          每个监听c都必须有一?/span> public 的零参数的构造函数?/span>

l          每个监听cL件必L包到 WAR 文gQ也可以是在 /WEB-INF/classes 或是包含?/span> /WEB-INF/lib 下的 JAR 文g中?/span>

注意Q在分布式的环境中,事g监听cȝ作用域是包含q个部v描述文g的虚拟机。不需要分布式?/span> Web 容器来传?/span> servlet ?/span> context 事g或是 session 事g到其他的虚拟机。这个在 Sun Microsystem ?/span> Java Servlet 规范Q?/span> 2.3 版本?/span>

事g监听器的Ҏ和相关的c?/font>

q部分列Z事g监听器的ҎQ当 servlet ?/span> context 事g或是 servlet ?/span> session 事g发生Ӟ容器会调用他们。这些方法的输入的事件对象的cd不一P因此一下讨Z件类和他们的Ҏ?/span>

ServletContextListener ҎQ?/span> ServletContextEvent c?/span>

ServletContextListener 接口规范以下的方法:

       void contextInitialized(ServletContextEvent sce)

              servlet 容器调用q个Ҏ来通知监听器, servlet ?/span> context 已经建立q且应用E序准备处理h?/span>

       void contextDestory(ServletContextEvent sce)

              servlet 容器调用q个Ҏ来通知监听器应用程序即关闭?/span>

Servlet 容器创徏一?/span> java.servlet.ServletContextEvent 对象作ؓ调用 ServletContextListener Ҏ的输入?/span> ServletContextEvent cd含以下方法,你的监听器可以调?/span>

ServletContext getServletContext()

用这个方法返回已创徏的或是将要销毁的 servlet context 对象Q从中你可以得到你想要的信息。(未完待箋Q?/span>

 

 

 

 

 

 



qiyadeng 2007-03-26 14:35 发表评论
]]>
վ֩ģ壺 | ½| | Ӫ| 㶫ʡ| ƽ| | ʷ| ɽ| | ذ| | ɽ| | | Ԫ| | | ƽ| | | | | | Ϫ| | ɿ| ˳| | ɰ| | ƽ| | ˳| բ| | | Т| | ɽ| |