第使用過濾器和監(jiān)聽器演示文稿_第1頁
第使用過濾器和監(jiān)聽器演示文稿_第2頁
第使用過濾器和監(jiān)聽器演示文稿_第3頁
第使用過濾器和監(jiān)聽器演示文稿_第4頁
第使用過濾器和監(jiān)聽器演示文稿_第5頁
已閱讀5頁,還剩25頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第使用過濾器和監(jiān)聽器演示文稿當(dāng)前第1頁\共有30頁\編于星期三\9點(diǎn)(優(yōu)選)第使用過濾器和監(jiān)聽器當(dāng)前第2頁\共有30頁\編于星期三\9點(diǎn)1Filter在Web開發(fā)中的應(yīng)用

過濾器(Filter)是在Servlet2.3規(guī)范中引入的新功能,并在Servlet2.4規(guī)范中得到增強(qiáng)。Servlet過濾器是一種Web組件,它們攔截請求和響應(yīng),以便查看、提取或以某種方式操作客戶機(jī)和服務(wù)器之間交換的數(shù)據(jù)。當(dāng)前第3頁\共有30頁\編于星期三\9點(diǎn)1.1過濾器概述對Web應(yīng)用來說,過濾器就是駐留在服務(wù)器端,在源數(shù)據(jù)和目的數(shù)據(jù)間,對Web請求和Web響應(yīng)的頭屬性(Header)和內(nèi)容體(Body)進(jìn)行操作的一種特殊Web組件。如圖13-1所示。過濾器目標(biāo)資源瀏覽器請求響應(yīng)Web容器當(dāng)前第4頁\共有30頁\編于星期三\9點(diǎn)在一個(gè)Web應(yīng)用程序中,可以部署多個(gè)過濾器,這些過濾器組成一個(gè)過濾器鏈。過濾器鏈中的每個(gè)過濾器都有特定的操作,請求和響應(yīng)在瀏覽器和目標(biāo)資源之間按照部署描述符中聲明的過濾器的順序,在過濾器之間進(jìn)行傳遞。如圖13-2所示。過濾器1目標(biāo)資源瀏覽器請求響應(yīng)Web容器過濾器3過濾器4過濾器2當(dāng)前第5頁\共有30頁\編于星期三\9點(diǎn)1.2FilterAPI與過濾器開發(fā)相關(guān)的接口和類包含在javax.servlet和包中,主要的接口和類如表13-1所示。接口/類說明javax.servlet.Filter接口過濾器是執(zhí)行過濾任務(wù)的對象,這些任務(wù)是針對對某一資源(servlet或靜態(tài)內(nèi)容)的請求或來自某一資源的響應(yīng)執(zhí)行的,抑或同時(shí)針對這兩者執(zhí)行。javax.servlet.FilterConfig接口servlet容器使用的過濾器配置對象,該對象在初始化期間將信息傳遞給過濾器。javax.servlet.FilterChain接口FilterChain是

servlet容器為開發(fā)人員提供的對象,它提供了對某一資源的已過濾請求調(diào)用鏈的視圖。過濾器使用

FilterChain調(diào)用鏈中的下一個(gè)過濾器,如果調(diào)用的過濾器是鏈中的最后一個(gè)過濾器,則調(diào)用鏈末尾的資源。當(dāng)前第6頁\共有30頁\編于星期三\9點(diǎn)javax.servlet.ServeltRequestWrapper類extendsjava.lang.ObjectimplementsServletRequest提供

ServletRequest接口的便捷實(shí)現(xiàn),希望將請求適配到

Servlet的開發(fā)人員可以子類化該接口。默認(rèn)情況下,方法通過包裝的請求對象調(diào)用。javax.servlet.ServeltResponseWrapper類extendsjava.lang.ObjectimplementsServletResponse提供

ServletResponse接口的便捷實(shí)現(xiàn),希望根據(jù)

Servlet適配響應(yīng)的開發(fā)人員可以子類化該接口。默認(rèn)情況下,方法通過包裝的響應(yīng)對象調(diào)用。javax.servlet.HttpServeltRequestWrapper類extendsServletRequestWrapperimplementsHttpServletRequest提供

HttpServletRequest接口的便捷實(shí)現(xiàn),希望將請求適配到

Servlet的開發(fā)人員可以子類化該接口。此類實(shí)現(xiàn)

Wrapper或

Decorator模式。默認(rèn)情況下,方法通過包裝的請求對象調(diào)用。javax.servlet.HttpServeltResponseWrapper類extendsServletResponseWrapperimplementsHttpServletResponse提供

HttpServletResponse接口的便捷實(shí)現(xiàn),希望根據(jù)

Servlet適配響應(yīng)的開發(fā)人員可以子類化該接口。此類實(shí)現(xiàn)

Wrapper或

Decorator模式。默認(rèn)情況下,方法通過包裝的響應(yīng)對象調(diào)用。當(dāng)前第7頁\共有30頁\編于星期三\9點(diǎn)1.3Filter接口所有的過濾器在開發(fā)中必須實(shí)現(xiàn)接口,并且提供一個(gè)公開的不帶參數(shù)的構(gòu)造方法。接口定義了init()、doFilter()和destroy()三方法,和Servelt接口類似,這三個(gè)方法分別對應(yīng)Servlet過濾器生命周期中的初始化、響應(yīng)和銷毀三個(gè)階段當(dāng)前第8頁\共有30頁\編于星期三\9點(diǎn)1.4FilterConfig接口當(dāng)容器對Filter對象進(jìn)行初始化時(shí),容器調(diào)用Filter的init方法,并傳入一個(gè)實(shí)現(xiàn)FilterConfig接口的對象。Filter可使用該對象獲得一些有用的信息。PublicStringgetFilterName()PublicStringgetInitParamter()PublicServletContextgetServletContext()當(dāng)前第9頁\共有30頁\編于星期三\9點(diǎn)1.5FilterChain接口

接口由容器實(shí)現(xiàn),容器將其實(shí)例作為參數(shù)傳入過濾器對象的doFilter()方法中。過濾器對象使用FilterChain對象調(diào)用過濾器鏈中的下一個(gè)過濾器或者是將調(diào)用目標(biāo)資源。當(dāng)前第10頁\共有30頁\編于星期三\9點(diǎn)1.7過濾器的部署在創(chuàng)建過濾器之后必須將它添加到部署描述符中,這樣容器才會(huì)將過濾器投入到服務(wù)中去。配置工作由兩部分組成:1.聲明過濾器<filter>元素用于在Web應(yīng)用中聲明一個(gè)過濾器。<filter>元素的結(jié)構(gòu)如圖13-6所示。當(dāng)前第11頁\共有30頁\編于星期三\9點(diǎn)filterdescriptionfilter-namedisplay-namefilter-classiconinit-paramdescriptionparam-nameparam-value當(dāng)前第12頁\共有30頁\編于星期三\9點(diǎn)2.設(shè)置過濾器映射<filter-mapping><filter-mapping>元素用于指定過濾器關(guān)聯(lián)的URL樣式或者Servlet。<filter-mapping>結(jié)構(gòu)如圖所示。filter-mappingfilter-nameservlet-nameurl-pattern0..4dispatcheror當(dāng)前第13頁\共有30頁\編于星期三\9點(diǎn)使用<filter-mapping>元素使用<servlet-name>元素將過濾器連接到一個(gè)servlet中。使用<url-pattern>將過濾器映射到某個(gè)URL模式使用<url-pattern>將過濾器映射到某個(gè)URL模式的方法會(huì)獲得更大的靈活性,它能夠使開發(fā)人員將過濾器應(yīng)用于一組servlet、JSP或任何靜態(tài)資源。當(dāng)前第14頁\共有30頁\編于星期三\9點(diǎn)1.8對請求數(shù)據(jù)進(jìn)行處理的過濾器

【例13-2】使用過濾器校驗(yàn)表單數(shù)據(jù)在Web應(yīng)用,常要求用戶注冊成功后才能使用。有時(shí)用戶在注冊時(shí)輸入不合法。在過濾器中攔截客戶端請求,獲得輸入的參數(shù)數(shù)據(jù),對輸入的參數(shù)數(shù)據(jù)的合法性進(jìn)行校驗(yàn),將不合法的請求重新定位到一個(gè)錯(cuò)誤頁面。第一步:開發(fā)3個(gè)jsp頁面:CheckForm.jsp、CheckFormSuccess.jsp和CheckFormFail.jsp第二步:編寫過濾器類

:過濾器類的名字為CheckFormFilter.java,第三步:在web.xml文件中添加配置過濾器CheckFormFilter第四步:驗(yàn)證過濾器CheckFormFilter運(yùn)行效果當(dāng)前第15頁\共有30頁\編于星期三\9點(diǎn)當(dāng)前第16頁\共有30頁\編于星期三\9點(diǎn)【例】使用過濾器改變請求的編碼在應(yīng)用開發(fā)中,經(jīng)常使用過濾功能對客戶端的請求進(jìn)行統(tǒng)一編碼。當(dāng)沒有指定request的編碼方式時(shí),從客戶端得到的數(shù)據(jù)是ISO-8859-1編碼的。當(dāng)前第17頁\共有30頁\編于星期三\9點(diǎn)解決辦法之一就是開發(fā)一個(gè)過濾器對請求進(jìn)行統(tǒng)一編碼,一次性解決所有頁面請求的編碼轉(zhuǎn)換問題。第一步:編寫CheckForm.jsp和CheckFormSuccess.jsp頁面。第二步:編寫過濾器類

:過濾器類的名字為Encoding.java第三步:在web.xml文件中配置過濾器EncodingFilter。為了保證過濾器EncodingFilter在CheckFormFilter之前處理請求,必須在過濾器CheckFormFilter之前配置過濾器EncodingFilter。當(dāng)前第18頁\共有30頁\編于星期三\9點(diǎn)當(dāng)前第19頁\共有30頁\編于星期三\9點(diǎn)2Servlet監(jiān)聽器

Servlet監(jiān)聽器是WEB應(yīng)用程序事件模型的一部分,Servlet監(jiān)聽器用于監(jiān)聽一些WEB應(yīng)用中重要事件的發(fā)生,監(jiān)聽器對象可以在事情發(fā)生前、發(fā)生后Servlet容器就會(huì)產(chǎn)生相應(yīng)的事件,Servlet監(jiān)聽器用來處理這些事件。當(dāng)前第20頁\共有30頁\編于星期三\9點(diǎn)2.1監(jiān)聽器接口

ServletAPI中定義了8個(gè)監(jiān)聽器,根據(jù)監(jiān)聽對象的類型和范圍可以分為3類:ServletContext事件監(jiān)聽器、HTTPSession事件監(jiān)聽器和ServletRequest事件監(jiān)聽器。8個(gè)監(jiān)聽器接口如下表所示。當(dāng)前第21頁\共有30頁\編于星期三\9點(diǎn)接口名稱方法名稱描述ServletContextAttributeListenerattributeAdded(ServletContextAttributeEventscae)增加屬性時(shí)激發(fā)此方法attributeRemoved(ServletContextAttributeEventscae)刪除屬性時(shí)候激發(fā)此方法attributeReplaced(ServletContextAttributeEventscae)修改屬性時(shí)激發(fā)此方法ServletContextListenercontextDestroyed(ServletContextEventsce)銷毀ServletContext時(shí)激發(fā)此方法contextInitialized(ServletContextEventsce)創(chuàng)建ServletContext時(shí)激發(fā)此方法ServletContext事件監(jiān)聽器當(dāng)前第22頁\共有30頁\編于星期三\9點(diǎn)接口名稱方法名稱描述HttpSessionAttributeListenerattributeAdded(HttpSessionBindingEventhsbe)增加屬性時(shí)激發(fā)此方法attributeRemoved(HttpSessionBindingEventhsbe)刪除屬性時(shí)候激發(fā)此方法attributeReplaced(HttpSessionBindingEventhsbe)修改屬性時(shí)激發(fā)此方法HttpSessionListenersessionCreated(HttpSessionEventhse)創(chuàng)建HttpSession時(shí)激發(fā)此方法sessionDestroyed(HttpSessionEventhse)銷毀HttpSession時(shí)激發(fā)此方法HttpSessionActivationListenersessionDidActivate(HttpSessionEventse)激活HttpSession時(shí)激發(fā)此方法sessionWillPassivate(HttpSessionEventse)鈍化HttpSession時(shí)激發(fā)此方法HttpSessionBindingListenervalueBound(HttpSessionBindingEventhsbe)調(diào)用setAttribute()方法時(shí)激發(fā)此方法valueUnbound(HttpSessionBindingEventhsbe)調(diào)用removeAttribute()方法時(shí)激發(fā)此方法HttpSession事件監(jiān)聽器中的接口和方法當(dāng)前第23頁\共有30頁\編于星期三\9點(diǎn)ServletRequest事件監(jiān)聽器對請求消息對象進(jìn)行監(jiān)聽的接口有ServletRequestListener和ServletRequestAttributeListener,其中ServletRequestListener用于監(jiān)聽ServletRequest對象的變化,例如ServletRequest對象的創(chuàng)建和銷毀。ServletRequestAttributeListener用于監(jiān)聽ServletRequest對象中屬性的變化,例如屬性的增加、刪除和修改。ServletRequest事件監(jiān)聽器的接口和方法如表所示:

接口名稱方法名稱描述ServletRequestAttributeListenerattributeAdded(ServletRequestAttributeEventsrae)增加屬性時(shí)激發(fā)此方法attributeRemoved(ServletRequestAttributeEventsrae)刪除屬性時(shí)候激發(fā)此方法attributeReplaced(ServletRequestAttributeEventsrae)修改屬性時(shí)激發(fā)此方法ServletRequestListenerrequestDestroyed(ServletRequestEventsre)銷毀ServletRequest時(shí)激發(fā)此方法requestInitialized(ServletRequestEventsre)創(chuàng)建ServletRequest時(shí)激發(fā)此方法當(dāng)前第24頁\共有30頁\編于星期三\9點(diǎn)2.2ServletContextListener接口

在Web應(yīng)用程序啟動(dòng)時(shí)需要執(zhí)行一些初始化任務(wù)時(shí),可以編寫實(shí)現(xiàn)了ServletContextListener接口的監(jiān)聽器類。在ServletContextListener接口中定義了兩個(gè)事件處理方法,分別是contextInitialize()和contextDestroyed()。ServletContextListener整個(gè)工作過程如圖13-18所示當(dāng)前第25頁\共有30頁\編于星期三\9點(diǎn)2.3ServletContextAttributeListener接口

ServletContext的屬性是由Web應(yīng)用程序中所有的servlet所共享的。為保證屬性在整個(gè)Web應(yīng)用范圍內(nèi)的一致性,有必要監(jiān)視ServletContext對象的任何屬性的改變。ServletContextAttributeListener偵聽器就是為了這一目的而設(shè)立的。該偵聽器是一個(gè)實(shí)現(xiàn)了接口ServletContextAttributeListe

溫馨提示

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

評論

0/150

提交評論