<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    qiyadeng

    專注于Java示例及教程
    posts - 84, comments - 152, trackbacks - 0, articles - 34

    關(guān)于Servlet中的事件監(jiān)聽

    Posted on 2007-03-26 14:35 qiyadeng 閱讀(495) 評論(0)  編輯  收藏 所屬分類: 翻譯

    關(guān)于 Servlet 中的事件監(jiān)聽

    Servlet2.3 規(guī)范中添加了一些監(jiān)聽 web 應(yīng)用中重要事件的能力。這項(xiàng)功能可以讓我們根據(jù)事件的狀態(tài)更有效的對資源進(jìn)行管理和自動(dòng)化進(jìn)行。這部分描述了 servlet 的事件監(jiān)聽,包含以下部分:

    1. ? 事件的分類和 Listener 接口

    2. ? 典型的事件監(jiān)聽過程

    3. ? 事件監(jiān)聽的聲明和調(diào)用

    4. ? 事件監(jiān)聽編碼和發(fā)布向?qū)?/font>

    5. ? 事件監(jiān)聽的方法和相關(guān)的類

    事件的分類和 Listener 接口

    Servlet 事件有兩個(gè)級別:

    1. ? Application 級別事件

    包含著運(yùn)行應(yīng)用程序的虛擬機(jī)級別的相關(guān)資源和狀態(tài),即和 servlet Context 對象相關(guān)。

    2. ? Session 級別的事件

    包含著一個(gè)單一用戶的 session 的一系列請求的相關(guān)資源和狀態(tài),即 Http Session 對象。

    在上面兩個(gè)級別的事件,又可分別分為兩種:

    1. ? 生命周期的改變

    2. ? 屬性的改變

    你可以為上面四種事件創(chuàng)建一個(gè)或多個(gè)監(jiān)聽類。一個(gè)單一的監(jiān)聽類可以監(jiān)視多種事件。

    創(chuàng)建一個(gè)事件類可以從 javax.servlet 包或 javax.servlet.http 包中實(shí)現(xiàn)合適的接口。下表中列出了四種事件相關(guān)的接口。

    事件種類

    事件描述

    接口

    Context 生命周期的改變

    context 的建立和即將關(guān)閉 context

    Javax.servlet.ServletContextListener

    Context 屬性值的改變

    添加,刪除,修改 context 的屬性值

    Javax..servlet.ServletContextAttributeListener

    Session 生命周期的改變

    Session 的創(chuàng)建,注銷,超時(shí)

    Javax.servlet.http.HttpSessionListener

    Session 屬性值的改變

    添加,刪除,修改 session 的屬性值

    Javax.servlet.htpp.HttpSessionAttributeListener

    典型的事件監(jiān)聽過程

    考慮一個(gè) web 應(yīng)用是由一組訪問數(shù)據(jù)庫的 servlet 組成的。一個(gè)典型的事件監(jiān)聽機(jī)制是這樣的,創(chuàng)建一個(gè) context 生命周期的事件來管理數(shù)據(jù)庫連接,這個(gè)監(jiān)聽器可以有如下的功能:

    1. ? 這個(gè)監(jiān)聽器監(jiān)視著應(yīng)用程序的啟動(dòng)

    2. ? 這個(gè)應(yīng)用程序?qū)懭肴罩镜綌?shù)據(jù)庫中并且把連接對象存儲(chǔ)在 context

    3. ? Servelt 使用連接對象來執(zhí)行 SQL

    4. ? 監(jiān)聽器監(jiān)聽?wèi)?yīng)用程序的即將關(guān)閉

    5. ? 在關(guān)閉應(yīng)用程序之前,先關(guān)閉連接對象

    事件監(jiān)聽的聲明和調(diào)用

    事件監(jiān)聽的聲明在應(yīng)用程序的 web.xml 里,用 <listener> 元素,該元素是 <web-app> 的子元素。每個(gè)監(jiān)聽器都對應(yīng)一個(gè) <listener> ,有一個(gè) <listener-class> 子元素用來指定對應(yīng)的類名。在每種事件中,你需要指定你想調(diào)用的順序。

    在應(yīng)用程序啟動(dòng)之后,并且在第一次請求之前, servlet 容器會(huì)創(chuàng)建并注冊每個(gè)監(jiān)聽類的實(shí)例。每種事件,監(jiān)聽器是按照他們聲明的順序來注冊的。然后,當(dāng)應(yīng)用程序開始運(yùn)行,每種事件監(jiān)聽器安裝他們的順序調(diào)用。在最后一次請求之前,所有的監(jiān)聽器都保持活動(dòng)狀態(tài)。

    一旦應(yīng)用程序關(guān)閉, session 事件首先發(fā)生,以他們聲明的順序相反。然后 context 事件發(fā)生也是以聲明的順序相反。

    下面是一個(gè)例子:

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

    假設(shè) MyConnectionMnanager MyLoggingModule 都是實(shí)現(xiàn) ServletContextListener 接口, MyLoggingModule 也是實(shí)現(xiàn)了 HttpSessionListener 接口。

    當(dāng)應(yīng)用程序運(yùn)行,兩個(gè)監(jiān)聽器都會(huì)監(jiān)聽 context 生命周期事件, MyLoggingModule 監(jiān)聽器還會(huì)監(jiān)聽 session 生命周期。在 context 生命周期中, MyConnectionMananger 會(huì)首先開始監(jiān)聽,因?yàn)樗暶髟谇懊妗?/span>

    事件監(jiān)聽器的編碼和發(fā)布指南

    請注意事件監(jiān)聽器類的以下規(guī)則和指南:

    l ???????? 在多線程的應(yīng)用程序中,屬性可能同時(shí)改變。這是不需要 Servlet 容器來同步結(jié)果――在這種情況下監(jiān)聽類本身負(fù)責(zé)保持?jǐn)?shù)據(jù)的完整性。

    l ???????? 每個(gè)監(jiān)聽類都必須有一個(gè) public 的零參數(shù)的構(gòu)造函數(shù)。

    l ???????? 每個(gè)監(jiān)聽類文件必須打包到 WAR 文件,也可以是在 /WEB-INF/classes 或是包含在 /WEB-INF/lib 下的 JAR 文件中。

    注意:在分布式的環(huán)境中,事件監(jiān)聽類的作用域是包含這個(gè)部署描述文件的虛擬機(jī)。不需要分布式的 Web 容器來傳遞 servlet context 事件或是 session 事件到其他的虛擬機(jī)。這個(gè)在 Sun Microsystem Java Servlet 規(guī)范, 2.3 版本。

    事件監(jiān)聽器的方法和相關(guān)的類

    這部分列出了事件監(jiān)聽器的方法,當(dāng) servlet context 事件或是 servlet session 事件發(fā)生時(shí),容器將會(huì)調(diào)用他們。這些方法的輸入的事件對象的類型不一樣,因此一下討論事件類和他們的方法。

    ServletContextListener 方法, ServletContextEvent

    ServletContextListener 接口規(guī)范以下的方法:

    ?????? void contextInitialized(ServletContextEvent sce)

    ????????????? servlet 容器調(diào)用這個(gè)方法來通知監(jiān)聽器, servlet context 已經(jīng)建立并且應(yīng)用程序準(zhǔn)備處理請求。

    ?????? void contextDestory(ServletContextEvent sce)

    ????????????? servlet 容器調(diào)用這個(gè)方法來通知監(jiān)聽器應(yīng)用程序即將關(guān)閉。

    Servlet 容器創(chuàng)建一個(gè) java.servlet.ServletContextEvent 對象作為調(diào)用 ServletContextListener 方法的輸入。 ServletContextEvent 類包含以下方法,你的監(jiān)聽器可以調(diào)用

    ServletContext getServletContext()

    用這個(gè)方法返回已創(chuàng)建的或是將要銷毀的 servlet context 對象,從中你可以得到你想要的信息。(未完待續(xù))

    ?

    ?

    ?

    ?

    ?

    ?


    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲色精品aⅴ一区区三区| 在线a毛片免费视频观看| 亚洲欧洲精品无码AV| 日日摸夜夜添夜夜免费视频| 国产精品成人免费综合| 久久精品国产亚洲AV未满十八| 成年在线观看网站免费| 亚洲一区二区三区91| 成人影片麻豆国产影片免费观看| 久久精品国产亚洲αv忘忧草| 毛片免费视频在线观看| 亚洲精品无码久久久久秋霞 | 日韩免费无码一区二区三区| 亚洲AV午夜福利精品一区二区| 日韩视频免费在线观看| 亚洲综合综合在线| 久久精品女人天堂AV免费观看| 亚洲中文字幕一区精品自拍| 日韩免费a级在线观看| 免费毛片毛片网址| 亚洲自偷自偷偷色无码中文| 国产精品白浆在线观看免费| 亚洲卡一卡2卡三卡4麻豆| 在线观看免费毛片| 成年免费a级毛片| 亚洲成在人线av| 99热在线精品免费全部my| 国产成人 亚洲欧洲| 亚洲国产一成人久久精品| 四虎精品视频在线永久免费观看| 亚洲日韩一区二区一无码| 亚洲色一色噜一噜噜噜| 日本一卡精品视频免费| 亚洲一本到无码av中文字幕| 亚洲国产一区二区视频网站| 鲁大师在线影院免费观看 | 亚洲毛片αv无线播放一区| 最近2019中文字幕免费直播| 亚洲爆乳精品无码一区二区| 亚洲人成影院在线无码按摩店| 美女内射毛片在线看免费人动物 |