![使用過濾器和監(jiān)聽器_第1頁](http://file4.renrendoc.com/view/ad34a1ae594070ef7db726455c32b506/ad34a1ae594070ef7db726455c32b5061.gif)
![使用過濾器和監(jiān)聽器_第2頁](http://file4.renrendoc.com/view/ad34a1ae594070ef7db726455c32b506/ad34a1ae594070ef7db726455c32b5062.gif)
![使用過濾器和監(jiān)聽器_第3頁](http://file4.renrendoc.com/view/ad34a1ae594070ef7db726455c32b506/ad34a1ae594070ef7db726455c32b5063.gif)
![使用過濾器和監(jiān)聽器_第4頁](http://file4.renrendoc.com/view/ad34a1ae594070ef7db726455c32b506/ad34a1ae594070ef7db726455c32b5064.gif)
![使用過濾器和監(jiān)聽器_第5頁](http://file4.renrendoc.com/view/ad34a1ae594070ef7db726455c32b506/ad34a1ae594070ef7db726455c32b5065.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
使用過濾器和監(jiān)聽器第1頁,共32頁,2023年,2月20日,星期三本章學(xué)習(xí)目標(biāo):
理解過濾器和監(jiān)聽器的執(zhí)行過程和作用掌握過濾器和監(jiān)聽器的開發(fā)和部署第2頁,共32頁,2023年,2月20日,星期三13.1Filter在Web開發(fā)中的應(yīng)用
過濾器(Filter)是在Servlet2.3規(guī)范中引入的新功能,并在Servlet2.4規(guī)范中得到增強(qiáng)。Servlet過濾器是一種Web組件,它們攔截請求和響應(yīng),以便查看、提取或以某種方式操作客戶機(jī)和服務(wù)器之間交換的數(shù)據(jù)。第3頁,共32頁,2023年,2月20日,星期三13.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容器第4頁,共32頁,2023年,2月20日,星期三在一個Web應(yīng)用程序中,可以部署多個過濾器,這些過濾器組成一個過濾器鏈。過濾器鏈中的每個過濾器都有特定的操作,請求和響應(yīng)在瀏覽器和目標(biāo)資源之間按照部署描述符中聲明的過濾器的順序,在過濾器之間進(jìn)行傳遞。如圖13-2所示。過濾器1目標(biāo)資源瀏覽器請求響應(yīng)Web容器過濾器3過濾器4過濾器2第5頁,共32頁,2023年,2月20日,星期三13.1.2FilterAPI與過濾器開發(fā)相關(guān)的接口和類包含在javax.servlet和javax.servlet.http包中,主要的接口和類如表13-1所示。接口/類說明javax.servlet.Filter接口過濾器是執(zhí)行過濾任務(wù)的對象,這些任務(wù)是針對對某一資源(servlet或靜態(tài)內(nèi)容)的請求或來自某一資源的響應(yīng)執(zhí)行的,抑或同時針對這兩者執(zhí)行。javax.servlet.FilterConfig接口servlet容器使用的過濾器配置對象,該對象在初始化期間將信息傳遞給過濾器。javax.servlet.FilterChain接口FilterChain是servlet容器為開發(fā)人員提供的對象,它提供了對某一資源的已過濾請求調(diào)用鏈的視圖。過濾器使用FilterChain調(diào)用鏈中的下一個過濾器,如果調(diào)用的過濾器是鏈中的最后一個過濾器,則調(diào)用鏈末尾的資源。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)用。第6頁,共32頁,2023年,2月20日,星期三13.1.3Filter接口所有的過濾器在開發(fā)中必須實(shí)現(xiàn)javax.servlet.Filter接口,并且提供一個公開的不帶參數(shù)的構(gòu)造方法。接口定義了init()、doFilter()和destroy()三方法,和Servelt接口類似,這三個方法分別對應(yīng)Servlet過濾器生命周期中的初始化、響應(yīng)和銷毀三個階段第7頁,共32頁,2023年,2月20日,星期三13.1.4FilterConfig接口當(dāng)容器對Filter對象進(jìn)行初始化時,容器調(diào)用Filter的init方法,并傳入一個實(shí)現(xiàn)FilterConfig接口的對象。Filter可使用該對象獲得一些有用的信息。第8頁,共32頁,2023年,2月20日,星期三13.1.5FilterChain接口
javax.servlet.FilterChain接口由容器實(shí)現(xiàn),容器將其實(shí)例作為參數(shù)傳入過濾器對象的doFilter()方法中。過濾器對象使用FilterChain對象調(diào)用過濾器鏈中的下一個過濾器或者是將調(diào)用目標(biāo)資源。第9頁,共32頁,2023年,2月20日,星期三13.1.7過濾器的部署在創(chuàng)建過濾器之后必須將它添加到部署描述符中,這樣容器才會將過濾器投入到服務(wù)中去。配置工作由兩部分組成:1.聲明過濾器<filter>元素用于在Web應(yīng)用中聲明一個過濾器。<filter>元素的結(jié)構(gòu)如圖13-6所示。第10頁,共32頁,2023年,2月20日,星期三filterdescriptionfilter-namedisplay-namefilter-classiconinit-paramdescriptionparam-nameparam-value第11頁,共32頁,2023年,2月20日,星期三2.設(shè)置過濾器映射<filter-mapping><filter-mapping>元素用于指定過濾器關(guān)聯(lián)的URL樣式或者Servlet。<filter-mapping>結(jié)構(gòu)如圖13-7所示。filter-mappingfilter-nameservlet-nameurl-pattern0..4dispatcheror第12頁,共32頁,2023年,2月20日,星期三使用<filter-mapping>元素使用<servlet-name>元素將過濾器連接到一個servlet中。使用<url-pattern>將過濾器映射到某個URL模式使用<url-pattern>將過濾器映射到某個URL模式的方法會獲得更大的靈活性,它能夠使開發(fā)人員將過濾器應(yīng)用于一組servlet、JSP或任何靜態(tài)資源。第13頁,共32頁,2023年,2月20日,星期三13.1.8對請求數(shù)據(jù)進(jìn)行處理的過濾器
【例13-2】使用過濾器校驗(yàn)表單數(shù)據(jù)在Web應(yīng)用,常要求用戶注冊成功后才能使用。有時用戶在注冊時輸入不合法。在過濾器中攔截客戶端請求,獲得輸入的參數(shù)數(shù)據(jù),對輸入的參數(shù)數(shù)據(jù)的合法性進(jìn)行校驗(yàn),將不合法的請求重新定位到一個錯誤頁面。第一步:開發(fā)3個jsp頁面:CheckForm.jsp、CheckFormSuccess.jsp和CheckFormFail.jsp第二步:編寫過濾器類:過濾器類的名字為CheckFormFilter.java,第三步:在web.xml文件中添加配置過濾器CheckFormFilter第四步:驗(yàn)證過濾器CheckFormFilter運(yùn)行效果第14頁,共32頁,2023年,2月20日,星期三第15頁,共32頁,2023年,2月20日,星期三【例13-3】使用過濾器改變請求的編碼在應(yīng)用開發(fā)中,經(jīng)常使用過濾功能對客戶端的請求進(jìn)行統(tǒng)一編碼。當(dāng)沒有指定request的編碼方式時,從客戶端得到的數(shù)據(jù)是ISO-8859-1編碼的。第16頁,共32頁,2023年,2月20日,星期三解決辦法之一就是開發(fā)一個過濾器對請求進(jìn)行統(tǒng)一編碼,一次性解決所有頁面請求的編碼轉(zhuǎn)換問題。第一步:編寫CheckForm.jsp和CheckFormSuccess.jsp頁面。第二步:編寫過濾器類:過濾器類的名字為Encoding.java第三步:在web.xml文件中配置過濾器EncodingFilter。為了保證過濾器EncodingFilter在CheckFormFilter之前處理請求,必須在過濾器CheckFormFilter之前配置過濾器EncodingFilter。第17頁,共32頁,2023年,2月20日,星期三第18頁,共32頁,2023年,2月20日,星期三13.1.9對響應(yīng)內(nèi)容進(jìn)行壓縮的過濾器
提高網(wǎng)站的訪問速度,從軟件角度來說首先就是要盡可能地提高web應(yīng)用程序的執(zhí)行速度,可以優(yōu)化代碼的執(zhí)行效率和使用緩存來實(shí)現(xiàn)。如果在此基礎(chǔ)上還需進(jìn)一步提高網(wǎng)頁的瀏覽速度,那就可以對響應(yīng)內(nèi)容進(jìn)行壓縮,以節(jié)省網(wǎng)絡(luò)的帶寬,提高訪問速度。第19頁,共32頁,2023年,2月20日,星期三利用請求和響應(yīng)的包裝類(wrapper)來間接改變請求和響應(yīng)的信息。在Servlet規(guī)范中定義了4個包裝類:publicclassjavax.servlet.ServeltRequestWrapperextendsjava.lang.ObjectimplementsServletRequestpublicclassjavax.servlet.ServeltResponseWrapperextendsjava.lang.ObjectimplementsServletResponsepublicclassjavax.servlet.HttpServeltRequestWrapperextendsServletRequestWrapperimplementsHttpServletRequestpublicclassjavax.servlet.HttpServeltResponseWrapperextendsServletResponseWrapperimplementsHttpServletResponse這4個包裝類分別實(shí)現(xiàn)了請求或響應(yīng)的接口,它們在構(gòu)造方法中接受真正的請求和響應(yīng)對象,然后利用該對象的方法來完成自己需要實(shí)現(xiàn)的方法。包裝類是裝飾設(shè)計模式的運(yùn)用,它給我們提供了一種不使用繼承而修改或增加現(xiàn)有對象功能的方法。第20頁,共32頁,2023年,2月20日,星期三【例13-5】利用包裝類改變請求和響應(yīng)信息。我們只需要編寫一個包裝類的子類,然后覆蓋需要修改的方法就可以了。使用java.util.zip.GZIPOutputStream作為響應(yīng)內(nèi)容的輸出流對象。GZIPOutputStream是過濾流類,使用GZIP壓縮格式寫入壓縮數(shù)據(jù)。第一步:編寫GZIPServletOutputStream.java第二步:編寫CompressionResponseWrapper.java第三步:編寫CompressionFilter.java第四步:部署過濾器
編輯web.xml文件,配置過濾器第五步:運(yùn)行web應(yīng)用程序,測試CompressionFilter第21頁,共32頁,2023年,2月20日,星期三第22頁,共32頁,2023年,2月20日,星期三13.2Servlet監(jiān)聽器
Servlet監(jiān)聽器是WEB應(yīng)用程序事件模型的一部分,Servlet監(jiān)聽器用于監(jiān)聽一些WEB應(yīng)用中重要事件的發(fā)生,監(jiān)聽器對象可以在事情發(fā)生前、發(fā)生后Servlet容器就會產(chǎn)生相應(yīng)的事件,Servlet監(jiān)聽器用來處理這些事件。第23頁,共32頁,2023年,2月20日,星期三13.2.1監(jiān)聽器接口
ServletAPI中定義了8個監(jiān)聽器,根據(jù)監(jiān)聽對象的類型和范圍可以分為3類:ServletContext事件監(jiān)聽器、HTTPSession事件監(jiān)聽器和ServletRequest事件監(jiān)聽器。8個監(jiān)聽器接口如表13-2所示。第24頁,共32頁,2023年,2月20日,星期三13.2.2ServletContextListener接口
在Web應(yīng)用程序啟動時需要執(zhí)行一些初始化任務(wù)時,可以編寫實(shí)現(xiàn)了ServletContextListener接口的監(jiān)聽器類。在ServletContextListener接口中定義了兩個事件處理方法,分別是contextInitialize()和contextDestroyed()。ServletContextListener整個工作過程如圖13-18所示第25頁,共32頁,2023年,2月20日,星期三13.2.3ServletContextAttributeListener接口
ServletContext的屬性是由Web應(yīng)用程序中所有的servlet所共享的。為保證屬性在整個Web應(yīng)用范圍內(nèi)的一致性,有必要監(jiān)視ServletContext對象的任何屬性的改變。ServletContextAttributeListener偵聽器就是為了這一目的而設(shè)立的。該偵聽器是一個實(shí)現(xiàn)了接口ServletContextAttributeListener的Java類第26頁,共32頁,2023年,2月20日,星期三圖13-19ServletContextAttributeListener操作順序圖第27頁,共32頁,2023年,2月20日,星期三【13-6】開發(fā)一個對ServletContext及其屬性進(jìn)行監(jiān)聽的程序。第一步:編寫TestListener.java第二步:在web.xml添加如下代碼部署監(jiān)聽器第三步:編寫測試JSP頁面testContext.jsp第四步:看運(yùn)行結(jié)果c:\test.txt文件第28頁,共32頁,2023年,2月20日,星期三13.2.4HttpSessionBindingListener接口如果一個對象實(shí)現(xiàn)了HttpSessionBindingListener接口,當(dāng)這個對象被綁定到Session中或從Session中刪除時,Servlet容器會通知這個對象,這個對象在接收到通知后,做初始化操作或清除狀態(tài)的操作。第29頁,共32頁,2023年,2月20日,星期三HttpSessionBindingListener接口提供了如下方法:publicvoidvalueBound(HttpSessionBindingEventevent)當(dāng)對象正在被綁定到Session中,Servlet容器通知對象它將被綁定到某個會話并標(biāo)識該會話。publicvoidvalueUnbound(HttpSessionBindingEventevent)當(dāng)從Session中刪除對象時,Servlet容器通知對象要從某個會話中取消對它的綁定并標(biāo)識該會話第30頁,共32頁,2023年,2月20日,星期三容器通過HttpSessionBindingEvent對象來通知偵聽器發(fā)生的事件的具體信息。提供了2種方法:publicHttpSessionB
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年中國重慶溫泉特色小鎮(zhèn)行業(yè)市場運(yùn)營現(xiàn)狀及投資方向研究報告
- 2025年中高密度板項(xiàng)目可行性研究報告
- 2025年粉碎設(shè)備項(xiàng)目可行性研究報告
- 2025年塑膠皮革項(xiàng)目可行性研究報告-20250102-075526
- 2025年度智能瓜籽交易平臺購銷合同范本
- 2025年度房地產(chǎn)質(zhì)量檢測工程合同范本
- 2025年度國際物流運(yùn)輸服務(wù)國際買賣合同
- 2025年度公司向股東借款用于企業(yè)并購合同范本
- 2025年度新能源技術(shù)研發(fā)中心前期咨詢服務(wù)合同范本
- 2025年度多媒體廣告制作與發(fā)布合同范本
- 第1課+古代亞非(教學(xué)設(shè)計)【中職專用】《世界歷史》(高教版2023基礎(chǔ)模塊)
- 新教科版六年級下冊科學(xué)全冊教案
- 物業(yè)客服管家的培訓(xùn)課件
- 2024年房地產(chǎn)行業(yè)的樓市調(diào)控政策解讀培訓(xùn)
- 《統(tǒng)計學(xué)-基于Python》 課件全套 第1-11章 數(shù)據(jù)與Python語言-時間序列分析和預(yù)測
- 《GMP實(shí)務(wù)教程》 完整全套教學(xué)課件 項(xiàng)目1-14 GMP基礎(chǔ)知識-藥品生產(chǎn)行政檢查
- 裝飾定額子目(河南省)
- 【高速鐵路乘務(wù)工作存在的問題及對策研究9800字】
- 北師大版英語課文同步字帖三年級下冊課文對話原文及翻譯衡水體英語字帖三年級起點(diǎn)
- GB/T 2550-2016氣體焊接設(shè)備焊接、切割和類似作業(yè)用橡膠軟管
- GB/T 21295-2014服裝理化性能的技術(shù)要求
評論
0/150
提交評論