版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第8章過濾器與監(jiān)聽器學(xué)習(xí)目的與要求本章主要介紹過濾器與監(jiān)聽器的概念、原理以及實(shí)際應(yīng)用。通過本章的學(xué)習(xí),理解過濾器與監(jiān)聽器的原理,掌握過濾器與監(jiān)聽器的實(shí)際應(yīng)用?!禞avaWeb開發(fā)從入門到實(shí)戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學(xué)出版社,2024
學(xué)習(xí)目的與要求8.1Filter類與Filter對象8.2Filter對象的部署與運(yùn)行8.3過濾器的實(shí)際應(yīng)用8.4監(jiān)聽器的分類與創(chuàng)建8.5監(jiān)聽器的實(shí)際應(yīng)用——統(tǒng)計(jì)在線用戶《JavaWeb開發(fā)從入門到實(shí)戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學(xué)出版社,2024
8.1Filter類與Filter對象過濾器位于服務(wù)器處理請求之前或服務(wù)器響應(yīng)請求之后。也就是說,它可以過濾瀏覽器對服務(wù)器的請求,也可以過濾服務(wù)器對瀏覽器的響應(yīng)。瀏覽器Web服務(wù)器Servlet處理請求響應(yīng)請求HTTP請求HTTP響應(yīng)過濾后的請求圖8.1過濾器過濾器過濾器過濾前的響應(yīng)《JavaWeb開發(fā)從入門到實(shí)戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學(xué)出版社,2024
8.1Filter類與Filter對象編寫一個過濾器類很簡單,只要實(shí)現(xiàn)jakarta.servlet包中的Filter接口。實(shí)現(xiàn)Filter接口的類習(xí)慣地稱為一個Filter類,這樣的類創(chuàng)建的對象又習(xí)慣地稱為Filter對象。Filter接口與Servlet接口很類似,同樣都有init()與destroy()方法,還有一個doFilter()方法類似于Servlet接口的service()方法。 publicvoidinit(FilterConfig
fConfig)throwsServletException publicvoiddoFilter(ServletRequest
request,ServletResponseresponse,FilterChainchain)throwsIOException,ServletException publicvoiddestroy()《JavaWeb開發(fā)從入門到實(shí)戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學(xué)出版社,2024
init(FilterConfigfConfig) publicvoidinit(FilterConfigfConfig)throwsServletException該方法的功能是初始化過濾器對象。如果為過濾器設(shè)置了初始參數(shù),則可以通過FilterConfig的getInitParameter(StringparamName)方法獲得初始參數(shù)值。《JavaWeb開發(fā)從入門到實(shí)戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學(xué)出版社,2024
doFilter(ServletRequestrequest,ServletResponseresponse,FilterChainchain) publicvoiddoFilter(ServletRequestrequest,ServletResponseresponse,FilterChainchain)throwsIOException,ServletException當(dāng)Web服務(wù)器使用Servlet對象調(diào)用service()方法處理請求前,發(fā)現(xiàn)應(yīng)用了某個過濾器時,Web服務(wù)器就會自動調(diào)用該過濾器的doFilter()方法。在doFilter()方法中有這樣一條語句:chain.doFilter(request,response);如果執(zhí)行了該語句,就會執(zhí)行下一個過濾器,如果沒有下一個過濾器,就返回請求目標(biāo)程序。如果因?yàn)槟硞€原因沒有執(zhí)行“chain.doFilter(request,response);”,則請求就不會繼續(xù)交給以后的過濾器或請求目標(biāo)程序,這就是所謂的攔截請求?!禞avaWeb開發(fā)從入門到實(shí)戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學(xué)出版社,2024
destroy()
publicvoiddestroy()當(dāng)Web服務(wù)器終止服務(wù)時,destroy()方法會被執(zhí)行,使Filter對象消亡?!纠?-1】在Web項(xiàng)目ch8中,編寫一個簡單的Filter類FirstFilter,F(xiàn)ilter類的功能要求:無論用戶請求該Web項(xiàng)目的哪個頁面或Servlet,都會在瀏覽器中先出現(xiàn)“首先執(zhí)行過濾器”這樣的響應(yīng)信息?!禞avaWeb開發(fā)從入門到實(shí)戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學(xué)出版社,2024
學(xué)習(xí)目的與要求8.1Filter類與Filter對象8.2Filter對象的部署與運(yùn)行8.3過濾器的實(shí)際應(yīng)用8.4監(jiān)聽器的分類與創(chuàng)建8.5監(jiān)聽器的實(shí)際應(yīng)用——統(tǒng)計(jì)在線用戶《JavaWeb開發(fā)從入門到實(shí)戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學(xué)出版社,2024
8.2.1在web.xml中部署過濾器<filter> <filter-name>firstFilter</filter-name> <filter-class>filter.FirstFilter</filter-class></filter><filter-mapping> <filter-name>firstFilter</filter-name> <url-pattern>/*</url-pattern></filter-mapping>《JavaWeb開發(fā)從入門到實(shí)戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學(xué)出版社,2024
2.運(yùn)行Filter只要用戶請求的URL和<filter-mapping>的子標(biāo)記<url-pattern>指定的模式匹配的話,Web服務(wù)器就會自動調(diào)用該Filter的doFilter()方法。如8.1節(jié)中的FirstFilter過濾器在web.xml中的<url-pattern>指定值為/*,“/*”代表任何頁面或Servlet的請求。為了測試過濾器,在web項(xiàng)目ch8中新建一個JSP頁面test.jsp,運(yùn)行test.jsp顯示如圖8.2的結(jié)果?!禞avaWeb開發(fā)從入門到實(shí)戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學(xué)出版社,2024
8.2.2基于注解的方式部署過濾器從Servlet3.0開始提供了注解@WebFilter,使得不再需要在web.xml文件中進(jìn)行Filter的部署描述。但在實(shí)際的Web項(xiàng)目中,不需要大量開發(fā)Filter,因此,采用哪種方式部署過濾器都不太麻煩。@WebFilter用于將一個類聲明為過濾器,該注解將會在部署時被容器處理,容器將根據(jù)具體的屬性配置,將相應(yīng)的類部署為過濾器。屬性名類
型描
述filterNameString指定過濾器的name屬性,等價于<filter-name>。valueString[]該屬性等價于urlPatterns屬性,但兩個屬性不能同時使用。urlPatternsString[]指定一組過濾器的URL匹配模式。等價于<url-pattern>標(biāo)簽。servletNamesString[]指定過濾器將應(yīng)用于哪些Servlet。取值是@WebServlet中的name屬性的取值,或者是web.xml中<servlet-name>的取值。initParamsWebInitParam[]指定一組過濾器初始化參數(shù),等價于<init-param>標(biāo)簽?!禞avaWeb開發(fā)從入門到實(shí)戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學(xué)出版社,2024
8.2.2基于注解的方式部署過濾器【例8-2】基于注解的Filter——SecondFilter。@WebFilter(filterName
="secondFilter",urlPatterns={"/*"})publicclassSecondFilterimplementsFilter{}《JavaWeb開發(fā)從入門到實(shí)戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學(xué)出版社,2024
8.2.3過濾器的執(zhí)行順序?yàn)榱蓑?yàn)證過濾器的執(zhí)行順序,新建SecondFilter、ThreeFilter、FourFilter和ZFilter。其中SecondFilter、ThreeFilter和FourFilter使用注解的方式部署,它們的urlPatterns都是"/*";而ZFilter在web.xml中部署,并部署在FirstFilter的前面。從圖8.3可以看出,過濾器攔截路徑相同時,首先按照<filter-mapping>標(biāo)記在web.xml中出現(xiàn)的先后順序執(zhí)行過濾器,然后再按照過濾器類名的字典順序執(zhí)行注解的過濾器?!禞avaWeb開發(fā)從入門到實(shí)戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學(xué)出版社,2024
8.2.4實(shí)踐環(huán)節(jié)——過濾器的初始化參數(shù)給8.2.3節(jié)中的SecondFilter添加初始化參數(shù),并在該過濾器的init()方法中獲取這些參數(shù)。@WebInitParam注解給過濾器添加參數(shù)的示例代碼如下:@WebFilter(filterName="xxxFilter",urlPatterns={"/*"},initParams={ @WebInitParam(name="firstParam",value="one"), @WebInitParam(name="secondParam",value="two")})《JavaWeb開發(fā)從入門到實(shí)戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學(xué)出版社,2024
學(xué)習(xí)目的與要求8.1Filter類與Filter對象8.2Filter對象的部署與運(yùn)行8.3過濾器的實(shí)際應(yīng)用8.4監(jiān)聽器的分類與創(chuàng)建8.5監(jiān)聽器的實(shí)際應(yīng)用——統(tǒng)計(jì)在線用戶《JavaWeb開發(fā)從入門到實(shí)戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學(xué)出版社,2024
8.3.1字符編碼過濾器在本書的4.1.3節(jié)中,介紹了中文亂碼的解決方法,其中一種解決方法是:在獲取表單信息之前,使用request對象調(diào)用setCharacterEncoding(String
code)方法設(shè)置統(tǒng)一字符編碼。使用該方法解決中文亂碼問題時,接受參數(shù)的每個頁面或Servlet都需要執(zhí)行request.setCharacterEncoding("XXX")語句。為了避免每個頁面或Servlet都編寫request.setCharacterEncoding("XXX")語句,可以使用過濾器進(jìn)行字符編碼處理?!纠?-3】字符編碼過濾器——SetCharacterEncodingFilter?!禞avaWeb開發(fā)從入門到實(shí)戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學(xué)出版社,2024
8.3.2登錄驗(yàn)證過濾器在Web項(xiàng)目中,某些頁面或Servlet只有用戶登錄成功才能訪問。如果直接在應(yīng)用程序每個相關(guān)的源代碼中進(jìn)行判斷用戶是否登錄成功,并不是科學(xué)的做法。這時可以實(shí)現(xiàn)一個登錄驗(yàn)證過濾器,不用在每個相關(guān)的源代碼中驗(yàn)證用戶是否登錄成功?!纠?-4】創(chuàng)建一個Web項(xiàng)目loginValidate,在該Web項(xiàng)目中至少編寫兩個JSP頁面:login.jsp與loginSuccess.jsp,一個Servlet(由LoginServlet.java負(fù)責(zé)創(chuàng)建)。用戶在login.jsp頁面中輸入用戶名和密碼后,提交給Servlet,在Servlet中判斷用戶名和密碼是否正確,若正確跳轉(zhuǎn)到loginSuccess.jsp,若錯誤回到login.jsp頁面。但該Web項(xiàng)目有另外一個要求:除了訪問login.jsp頁面和LoginServlet外,別的頁面或Servlet都不能直接訪問,必須先登錄成功才能訪問。在設(shè)計(jì)這個Web項(xiàng)目時,編寫了一個登錄驗(yàn)證過濾器并在該Web項(xiàng)目中使用?!禞avaWeb開發(fā)從入門到實(shí)戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學(xué)出版社,2024
學(xué)習(xí)目的與要求8.1Filter類與Filter對象8.2Filter對象的部署與運(yùn)行8.3過濾器的實(shí)際應(yīng)用8.4監(jiān)聽器的分類與創(chuàng)建8.5監(jiān)聽器的實(shí)際應(yīng)用——統(tǒng)計(jì)在線用戶《JavaWeb開發(fā)從入門到實(shí)戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學(xué)出版社,2024
8.4監(jiān)聽器的分類與創(chuàng)建創(chuàng)建不同功能的監(jiān)聽器類,需要實(shí)現(xiàn)不同的監(jiān)聽接口。一個監(jiān)聽類可以實(shí)現(xiàn)多個接口,即可以多種功能的監(jiān)聽器一起工作。根據(jù)監(jiān)聽的對象可將監(jiān)聽器劃分為:ServletContext對象監(jiān)聽器、HttpSession對象監(jiān)聽器以及ServletRequest對象監(jiān)聽器。根據(jù)監(jiān)聽的事件可將監(jiān)聽器劃分為:對象自身的創(chuàng)建和銷毀的監(jiān)聽器、對象中屬性的創(chuàng)建、修改和消除的監(jiān)聽器以及session中某個對象狀態(tài)變化的監(jiān)聽器。《JavaWeb開發(fā)從入門到實(shí)戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學(xué)出版社,2024
8.4.1監(jiān)聽對象自身創(chuàng)建和銷毀的監(jiān)聽器HttpSessionListener、ServletContextListener和ServletRequestListener監(jiān)聽接口分別監(jiān)聽session、context和request對象的創(chuàng)建與銷毀。
HttpSessionListener:監(jiān)聽session的創(chuàng)建與銷毀。創(chuàng)建session時執(zhí)行sessionCreated(HttpSessionEvent
se)方法。超時或執(zhí)行session.invalidate()時執(zhí)行sessionDestroyed(HttpSessionEvent
se)方法。該監(jiān)聽器可用于統(tǒng)計(jì)在線人數(shù)、記錄訪問日志等。
ServletContextListener:監(jiān)聽context的創(chuàng)建與銷毀。context代表當(dāng)前Web應(yīng)用程序。服務(wù)器啟動時執(zhí)行contextInitialized(ServletContextEventsce)方法。服務(wù)器關(guān)閉時執(zhí)行contextDestroyed(ServletContextEvent
sce)方法。該監(jiān)聽器可用于啟動時獲取web.xml中配置的初始化參數(shù),可作為定時器、加載全局屬性對象、創(chuàng)建全局?jǐn)?shù)據(jù)庫連接、加載緩存信息等。
ServletRequestListener:監(jiān)聽request的創(chuàng)建與銷毀。用戶每次請求request都將執(zhí)行requestInitialized(ServletRequestEvent
sre)方法。request處理完畢自動銷毀前執(zhí)行requestDestroyed(ServletRequestEvent
sre)方法。該監(jiān)聽器可用于讀取request參數(shù),記錄訪問歷史?!禞avaWeb開發(fā)從入門到實(shí)戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學(xué)出版社,2024
8.4.1監(jiān)聽對象自身創(chuàng)建和銷毀的監(jiān)聽器【例8-5】在ch8的src目錄下創(chuàng)建一個名為listener的包,并在包中創(chuàng)建一個名為MyObjectListener的監(jiān)聽器類,該監(jiān)聽器類實(shí)現(xiàn)HttpSessionListener、ServletContextListener和ServletRequestListener監(jiān)聽接口。在web.xml文件中部署監(jiān)聽器,示例代碼如下:<listener>
<listener-class>完整類名</listener-class></listener>監(jiān)聽器的啟動順序是按照web.xml的配置順序來啟動;加載順序是按照“監(jiān)聽器->過濾器->Servlet”順序加載?!禞avaWeb開發(fā)從入門到實(shí)戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學(xué)出版社,2024
8.4.1監(jiān)聽對象自身創(chuàng)建和銷毀的監(jiān)聽器《JavaWeb開發(fā)從入門到實(shí)戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學(xué)出版社,2024
8.4.2監(jiān)聽對象屬性變化的監(jiān)聽器監(jiān)聽對象屬性變化的監(jiān)聽器,分別為HttpSessionAttributeListener、ServletContextAttributeListener、ServletRequestAttributeListener。此3個監(jiān)聽接口分別用于監(jiān)聽session、context和request的屬性變化。當(dāng)向被監(jiān)聽對象中添加、更新、移除屬性時,將分別執(zhí)行attributeAdded、attributeReplaced、attributeRemoved方法。【例8-6】在ch8的listener包中創(chuàng)建一個名為MyAttributeListener的監(jiān)聽器類,該監(jiān)聽器類實(shí)現(xiàn)HttpSessionAttributeListener監(jiān)聽接口?!禞avaWeb開發(fā)從入門到實(shí)戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學(xué)出版社,2024
8.4.2監(jiān)聽對象屬性變化的監(jiān)聽器《JavaWeb開發(fā)從入門到實(shí)戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學(xué)出版社,2024
8.4.3監(jiān)聽session中某個對象狀態(tài)變化的監(jiān)聽器監(jiān)聽綁定到HttpSeesion域中某個對象狀態(tài)的事件監(jiān)聽器有HttpSessionBindingListener和HttpSessionActivationListener。HttpSession中對象的狀態(tài)有:綁定→解除綁定,鈍化→活化。綁定,通過setAttribute保存到session對象當(dāng)中。解除綁定,通過removeAttribue去除綁定。鈍化,將session對象持久化到存儲設(shè)備上?;罨?,將session對象從存儲設(shè)備上進(jìn)行恢復(fù)。被實(shí)現(xiàn)鈍化和活化的監(jiān)聽器對象必須實(shí)現(xiàn)Serializable接口,不需要在web.xml中部署。
HttpSessionBindingListener:當(dāng)對象被放到session里時,執(zhí)行valueBound(HttpSessionBindingEvent
event)方法。當(dāng)對象被從session里移除時,執(zhí)行valueUnbound(HttpSessionBindingEvent
event)方法。對象必須實(shí)現(xiàn)該監(jiān)聽接口。
HttpSessionActivationListener:當(dāng)session里的對象被鈍化時,執(zhí)行sessionWillPassivate(HttpSessionEvent
se)方法。當(dāng)對象被重新加載(活化)時,執(zhí)行sessionDidActivate(HttpSessionEventse)方法。對象必須實(shí)現(xiàn)該監(jiān)聽接口?!禞avaWeb開發(fā)從入門到實(shí)戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學(xué)出版社,2024
8.4.3監(jiān)聽session中某個對象狀態(tài)變化的監(jiān)聽器【例8-7】在ch8的listener包中創(chuàng)建一個名為MySeesionListener的監(jiān)聽
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二四年度上海房產(chǎn)買賣合同智能家居系統(tǒng)配套范本3篇
- 2024版鄭州玻璃崗?fù)どa(chǎn)與供應(yīng)鏈管理合同
- 2025年智能電網(wǎng)建設(shè)項(xiàng)目資金投入合同3篇
- 二零二五版豆腐品牌連鎖加盟合同3篇
- 二零二五年度企業(yè)商業(yè)信用貸款還款合同3篇
- 二零二四年醫(yī)療器械生產(chǎn)許可合同
- 2025年綠色建筑項(xiàng)目瓦工力工勞務(wù)分包及節(jié)能減排合同3篇
- 2025年度大型活動臨時演員招募服務(wù)合同4篇
- 年度豆?jié){粉戰(zhàn)略市場規(guī)劃報告
- 年度電子廚房秤競爭策略分析報告
- 中華人民共和國保守國家秘密法實(shí)施條例培訓(xùn)課件
- 管道坡口技術(shù)培訓(xùn)
- OQC培訓(xùn)資料教學(xué)課件
- 2024年8月CCAA國家注冊審核員OHSMS職業(yè)健康安全管理體系基礎(chǔ)知識考試題目含解析
- 體育賽事組織與實(shí)施操作手冊
- 2024年浙江省公務(wù)員考試結(jié)構(gòu)化面試真題試題試卷答案解析
- 2023年航空公司招聘:機(jī)場安檢員基礎(chǔ)知識試題(附答案)
- 皮膚儲存新技術(shù)及臨床應(yīng)用
- 《現(xiàn)在完成時》語法復(fù)習(xí)課件(共44張-)
- 二年級下冊語文《第3單元 口語交際:長大以后做什么》課件
- 2024年遼寧石化職業(yè)技術(shù)學(xué)院單招職業(yè)適應(yīng)性測試題庫必考題
評論
0/150
提交評論