chap05-過(guò)濾器和監(jiān)聽(tīng)器_第1頁(yè)
chap05-過(guò)濾器和監(jiān)聽(tīng)器_第2頁(yè)
chap05-過(guò)濾器和監(jiān)聽(tīng)器_第3頁(yè)
chap05-過(guò)濾器和監(jiān)聽(tīng)器_第4頁(yè)
chap05-過(guò)濾器和監(jiān)聽(tīng)器_第5頁(yè)
已閱讀5頁(yè),還剩18頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第5章過(guò)濾器和監(jiān)聽(tīng)器

主要內(nèi)容過(guò)濾器

1.監(jiān)聽(tīng)器

2.案例3.5.1過(guò)濾器過(guò)濾器概念Servlet過(guò)濾器是在Servlet2.3規(guī)范中定義的,它是一種可以插入的Web組件,能夠?qū)eb服務(wù)器接收到的客戶端請(qǐng)求和向客戶端發(fā)出的響應(yīng)進(jìn)行攔截過(guò)濾,過(guò)濾器支持對(duì)Servlet程序和JSP頁(yè)面的基本請(qǐng)求處理功能。過(guò)濾器工作流程Servlet過(guò)濾器本身不產(chǎn)生請(qǐng)求和響應(yīng),它只提供過(guò)濾作用。當(dāng)Web請(qǐng)求發(fā)起時(shí),Web服務(wù)器首先判斷是否存在過(guò)濾器和這個(gè)請(qǐng)求的目標(biāo)資源相關(guān),如果存在關(guān)聯(lián)Web服務(wù)器將把請(qǐng)求交給過(guò)濾器去處理,在過(guò)濾器中可以對(duì)請(qǐng)求的內(nèi)容做出改變,然后再將請(qǐng)求轉(zhuǎn)交給被請(qǐng)求的目標(biāo)資源。當(dāng)被請(qǐng)求的資源做出響應(yīng)時(shí),Web服務(wù)器同樣會(huì)將響應(yīng)先轉(zhuǎn)發(fā)給過(guò)濾器,在過(guò)濾器中可以對(duì)響應(yīng)做出處理,然后再將響應(yīng)發(fā)送給客戶端。5.1過(guò)濾器Filter接口

所有的Servlet過(guò)濾器類都必須實(shí)現(xiàn)javax.servlet.filter接口,該接口中定義了3個(gè)過(guò)濾器必須實(shí)現(xiàn)的方法(1)publicvoidinit(FilterConfigfilterConfig):過(guò)濾器的初始化方法(2)publicvoiddoFilter(ServletRequestrequest,ServletResponseresponse,FilterChainchain):用于完成實(shí)際的過(guò)濾操作,(3)publicvoiddestroy():過(guò)濾器在即將被銷毀時(shí)執(zhí)行這個(gè)方法5.1過(guò)濾器過(guò)濾器開發(fā)步驟(1)創(chuàng)建一個(gè)實(shí)現(xiàn)了javax.servlet.Filter接口的類(2)重寫類中的init(FilterConfigfilterConfig)方法,該方法中一般編寫初始化Filter需要執(zhí)行的代碼。(3)重寫類中的方法doFilter(ServletRequestrequest,ServletResponseresponse,FilterChainchain),該方法中編寫實(shí)現(xiàn)過(guò)濾操作的代碼。(4)重寫類中的destroy()方法,大多數(shù)簡(jiǎn)單過(guò)濾器為此方法提供一個(gè)空實(shí)現(xiàn)。(5)針對(duì)被訪問(wèn)的目標(biāo)Web組件(Servlet程序或者JSP頁(yè)面)注冊(cè)過(guò)濾器,在部署描述文件web.xml中使用<filter-apping>和<filter>元素對(duì)過(guò)濾器進(jìn)行配置。5.1過(guò)濾器過(guò)濾器配置

過(guò)濾器配置需要用到部署描述符文件web.xml的兩個(gè)元素<filter>和<filter-mapping>。<filter>元素向Web應(yīng)用注冊(cè)一個(gè)過(guò)濾器對(duì)象,<filter-mapping>元素指定該過(guò)濾器對(duì)象所要過(guò)濾Web組件的URL。(1)<filter>元素<filter>元素位于部署描述符文件web.xml的前部,所有<filter-mapping>、<servlet>或<servlet-mapping>元素之前。<filter-name>:這是一個(gè)必需的元素,它給過(guò)濾器分配一個(gè)選定的名字。<filter-class>:這是一個(gè)必需的元素,它指定過(guò)濾器實(shí)現(xiàn)類的完全限定名即類的全名。<init-param>:這是一個(gè)可選的元素,它定義可利用FilterConfig的getInitParameter方法讀取的初始化參數(shù)。

5.1過(guò)濾器過(guò)濾器配置(續(xù))(2)<filter-mapping>元素<filter-mapping>元素位于web.xml文件中<filter>元素之后,<serlvet>元素之前。<filter-mapping>元素常用的子元素如下:<filter-name>:這個(gè)一個(gè)必需的元素,該名稱必須與用<filter>元素中聲明過(guò)的過(guò)濾器名稱相匹配。<url-pattern>:此元素聲明一個(gè)以斜杠/開始的模式,它指定過(guò)濾器應(yīng)用的URL。

5.1過(guò)濾器例程:使用過(guò)濾器過(guò)濾未登錄用戶或者登錄失敗用戶使其重新返回到登錄頁(yè)面登錄。程序?yàn)閘ogin.jsp、LoginServlet.java、LoginFilter.java和index.jsp。

LoginFilter.java配置代碼LoginServlet.java配置代碼5.1過(guò)濾器過(guò)濾器執(zhí)行流程5.2監(jiān)聽(tīng)器監(jiān)聽(tīng)器概念監(jiān)聽(tīng)器是一個(gè)實(shí)現(xiàn)了某一特定接口的普通Java類,該類專門用于監(jiān)聽(tīng)某一特定Java對(duì)象的方法調(diào)用或?qū)傩愿淖兪录?,?dāng)被監(jiān)聽(tīng)對(duì)象發(fā)生上述事件后,監(jiān)聽(tīng)器某個(gè)方法將立即被執(zhí)行而做出相應(yīng)的動(dòng)作或者反應(yīng)。監(jiān)聽(tīng)的事件源ServletContext,HttpSession和ServletRequest這三個(gè)作用域?qū)ο?.2監(jiān)聽(tīng)器監(jiān)聽(tīng)器接口

ServletContext對(duì)象監(jiān)聽(tīng)器接口ServletContextListener是用來(lái)監(jiān)聽(tīng)Web應(yīng)用程序生命周期的監(jiān)聽(tīng)器接口ServletContextAttributeListener是監(jiān)聽(tīng)ServletContext對(duì)象中屬性改變的監(jiān)聽(tīng)器接口監(jiān)聽(tīng)接口方法說(shuō)明ServletContextListenerpublicvoidcontextInitialized(ServletContextEventsce)在Web應(yīng)用程序啟動(dòng)初始化后調(diào)用該方法,一般用來(lái)實(shí)現(xiàn)應(yīng)用程序資源的準(zhǔn)備工作publicvoidcontextDestroyed(ServletContextEventsce)在Web應(yīng)用程序即將結(jié)束銷毀前調(diào)用該方法,一般用來(lái)實(shí)現(xiàn)釋放應(yīng)用程序資源的工作ServletContextAttributeListenerpublicvoidattributeAdded(ServletContextAttributeEventscab)當(dāng)ServletContext對(duì)象中屬性增加時(shí)調(diào)用該方法publicvoidattributeRemoved(ServletContextAttributeEventscab)當(dāng)ServletContext對(duì)象中屬性被刪除時(shí)調(diào)用該方法publicvoidattributeReplaced(ServletContextAttributeEventscab)當(dāng)ServletContext對(duì)象中屬性值被改變時(shí)調(diào)用該方法5.2監(jiān)聽(tīng)器監(jiān)聽(tīng)器接口(續(xù))

HttpSession對(duì)象監(jiān)聽(tīng)器接口HttpSessionListener是用來(lái)監(jiān)聽(tīng)會(huì)話對(duì)象生命周期的監(jiān)聽(tīng)器接口HttpSessionAttributeListener是用來(lái)監(jiān)聽(tīng)會(huì)話對(duì)象屬性改變的監(jiān)聽(tīng)器接口HttpSessionBindingListener是用來(lái)監(jiān)聽(tīng)會(huì)話對(duì)象的對(duì)象綁定監(jiān)聽(tīng)器接口HttpSessionActivationListener是用來(lái)監(jiān)聽(tīng)會(huì)話對(duì)象的對(duì)象遷移監(jiān)聽(tīng)器接口

HttpSession對(duì)象監(jiān)聽(tīng)器接口監(jiān)聽(tīng)接口方法說(shuō)明HttpSessionListenerpublicvoidsessionCreated(HttpSessionEventse)當(dāng)HttpSession對(duì)象創(chuàng)建時(shí)執(zhí)行該方法publicvoidsessionDestroyed(HttpSessionEventse)當(dāng)HttpSession對(duì)象銷毀時(shí)執(zhí)行該方法HttpSessionAttributeListenerpublicvoidattributeAdded(HttpSessionBindingEventse)當(dāng)HttpSession對(duì)象中屬性增加時(shí)調(diào)用該方法publicvoidattributeRemoved(HttpSessionBindingEventse)當(dāng)HttpSession對(duì)象中屬性被刪除時(shí)調(diào)用該方法publicvoidattributeReplaced(HttpSessionBindingEventse)當(dāng)HttpSession對(duì)象中屬性值被改變時(shí)調(diào)用該方法HttpSessionBindingListenerpublicvoidvalueBound(HttpSessionBindingEventevent)當(dāng)實(shí)現(xiàn)HttpSessionBindingListener接口的屬性對(duì)象被加入HttpSession時(shí)調(diào)用該方法publicvoidvalueUnbound(HttpSessionBindingEventevent)當(dāng)實(shí)現(xiàn)HttpSessionBindingListener接口的屬性對(duì)象從HttpSession對(duì)象中移除時(shí)調(diào)用該方法HttpSessionActivationListenerpublicvoidsessionDidActivate(HttpSessionEventse)當(dāng)HttpSession對(duì)象要從一個(gè)服務(wù)器遷移至另一個(gè)服務(wù)器后,就會(huì)對(duì)所有屬性對(duì)象作反序列化,此時(shí)會(huì)調(diào)用該方法publicvoidsessionWillPassivate(HttpSessionEventse)當(dāng)HttpSession對(duì)象要從一個(gè)服務(wù)器遷移至另一個(gè)服務(wù)器時(shí),必須先在原來(lái)的服務(wù)器上序列化HttpSession對(duì)象中所有的屬性對(duì)象,此時(shí)會(huì)調(diào)用該方法5.2監(jiān)聽(tīng)器監(jiān)聽(tīng)器接口(續(xù))ServletRequest對(duì)象監(jiān)聽(tīng)器接口ServletRequestListener是用來(lái)監(jiān)聽(tīng)HttpServletRequest生命周期的監(jiān)聽(tīng)器接口ServletRequestAttributeListener是用來(lái)監(jiān)聽(tīng)ServletRequest對(duì)象中屬性改變的監(jiān)聽(tīng)器接口監(jiān)聽(tīng)接口方法說(shuō)明ServletRequestListenerpublicvoidrequestInitialized(ServletRequestEventsce)在ServletRequest對(duì)象生成時(shí)調(diào)用該方法publicvoidrequestDestroyed(ServletRequesttEventsce)在ServletRequest對(duì)象即將結(jié)束銷毀前調(diào)用該方法ServletRequestAttributeListenerpublicvoidattributeAdded(ServletRequestAttributeEventscab)當(dāng)ServletRequest對(duì)象中屬性增加時(shí)調(diào)用該方法publicvoidattributeRemoved(ServletRequestAttributeEventscab)當(dāng)ServletRequest對(duì)象中屬性被刪除時(shí)調(diào)用該方法publicvoidattributeReplaced(ServletRequestAttributeEventscab)當(dāng)ServletRequest對(duì)象中屬性值被改變時(shí)調(diào)用該方法5.2監(jiān)聽(tīng)器監(jiān)聽(tīng)器開發(fā)(1)創(chuàng)建相應(yīng)的監(jiān)聽(tīng)器類,根據(jù)實(shí)際需要實(shí)現(xiàn)相應(yīng)的接口并覆蓋其中相應(yīng)的抽象方法。

publicclassXxxxxListennerimplementsHttpSessionListener{ publicvoidsessionCreated(HttpSessionEventarg0){ ........................; ........................; } publicvoidsessionDestroyed(HttpSessionEventarg0){ ........................; ........................; }}5.2監(jiān)聽(tīng)器監(jiān)聽(tīng)器開發(fā)(續(xù))(2)在部署描述文件web.xml中使用<listener>元素配置監(jiān)聽(tīng)器。實(shí)現(xiàn)接口HttpSessionBindingListener接口的監(jiān)聽(tīng)器例外,不需要在web.xml文件中配置<listener> <listener-class> xxxPackage.xxxPackage.XxxxxListener </listener-class></listener>5.2監(jiān)聽(tīng)器例程:演示監(jiān)聽(tīng)器的開發(fā)步驟,監(jiān)聽(tīng)Web應(yīng)用的初始化和銷毀。MyServletCon

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論