《Java Web開發從入門到實戰(IntelliJ IDEA版·微課視頻版)》 課件 第6章 過濾器與監聽器_第1頁
《Java Web開發從入門到實戰(IntelliJ IDEA版·微課視頻版)》 課件 第6章 過濾器與監聽器_第2頁
《Java Web開發從入門到實戰(IntelliJ IDEA版·微課視頻版)》 課件 第6章 過濾器與監聽器_第3頁
《Java Web開發從入門到實戰(IntelliJ IDEA版·微課視頻版)》 課件 第6章 過濾器與監聽器_第4頁
《Java Web開發從入門到實戰(IntelliJ IDEA版·微課視頻版)》 課件 第6章 過濾器與監聽器_第5頁
已閱讀5頁,還剩24頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第6章過濾器與監聽器學習目的與要求本章主要介紹過濾器與監聽器的概念、原理以及實際應用。通過本章的學習,理解過濾器與監聽器的原理,掌握過濾器與監聽器的實際應用。《JavaWeb開發從入門到實戰(微課視頻版)(IntelliJIDEA版)》陳恒

主編,清華大學出版社,2024

學習目的與要求《JavaWeb開發從入門到實戰(微課視頻版)(IntelliJIDEA版)》陳恒

主編,清華大學出版社,2024

6.1Filter類與Filter對象6.2Filter對象的部署與運行6.3過濾器的實際應用6.4監聽器的分類與創建6.5監聽器的實際應用——統計在線用戶6.1Filter類與Filter對象過濾器位于服務器處理請求之前或服務器響應請求之前。也就是說,它可以過濾瀏覽器對服務器的請求,也可以過濾服務器對瀏覽器的響應。《JavaWeb開發從入門到實戰(微課視頻版)(IntelliJIDEA版)》陳恒

主編,清華大學出版社,2024

瀏覽器Web服務器Servlet處理請求響應請求HTTP請求HTTP響應過濾后的請求圖6.1過濾器過濾器過濾器過濾前的響應6.1Filter類與Filter對象編寫一個過濾器類很簡單,只要實現jakarta.servlet包中的Filter接口。實現Filter接口的類習慣地稱為一個Filter類,這樣的類創建的對象又習慣地稱為Filter對象。Filter接口與Servlet接口很類似,同樣都有init()與destroy()方法,還有一個doFilter()方法類似于Servlet接口的service()方法。 publicvoidinit(FilterConfig

fConfig)throwsServletException publicvoiddoFilter(ServletRequest

request,ServletResponseresponse,FilterChainchain)throwsIOException,ServletException publicvoiddestroy()《JavaWeb開發從入門到實戰(微課視頻版)(IntelliJIDEA版)》陳恒

主編,清華大學出版社,2024

init(FilterConfigfConfig) publicvoidinit(FilterConfigfConfig)throwsServletException該方法的功能是初始化過濾器對象。如果為過濾器設置了初始參數,則可以通過FilterConfig的getInitParameter(StringparamName)方法獲得初始參數值。《JavaWeb開發從入門到實戰(微課視頻版)(IntelliJIDEA版)》陳恒

主編,清華大學出版社,2024

doFilter(ServletRequestrequest,ServletResponseresponse,FilterChainchain) publicvoiddoFilter(ServletRequestrequest,ServletResponseresponse,FilterChainchain)throwsIOException,ServletException當Web服務器使用Servlet對象調用service()方法處理請求前,發現應用了某個過濾器時,Web服務器就會自動調用該過濾器的doFilter()方法。在doFilter()方法中有這樣一條語句:chain.doFilter(request,response);如果執行了該語句,就會執行下一個過濾器,如果沒有下一個過濾器,就返回請求目標程序。如果因為某個原因沒有執行“chain.doFilter(request,response);”,則請求就不會繼續交給以后的過濾器或請求目標程序,這就是所謂的攔截請求。《JavaWeb開發從入門到實戰(微課視頻版)(IntelliJIDEA版)》陳恒

主編,清華大學出版社,2024

destroy()

publicvoiddestroy()當Web服務器終止服務時,destroy()方法會被執行,使Filter對象消亡。【例6-1】在Web項目ch6中,編寫一個簡單的Filter類FirstFilter,Filter類的功能要求:無論用戶請求該Web項目的哪個頁面或Servlet,都會在瀏覽器中先出現“首先執行過濾器”這樣的響應信息。《JavaWeb開發從入門到實戰(微課視頻版)(IntelliJIDEA版)》陳恒

主編,清華大學出版社,2024

學習目的與要求《JavaWeb開發從入門到實戰(微課視頻版)(IntelliJIDEA版)》陳恒

主編,清華大學出版社,2024

6.1Filter類與Filter對象6.2Filter對象的部署與運行6.3過濾器的實際應用6.4監聽器的分類與創建6.5監聽器的實際應用——統計在線用戶6.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開發從入門到實戰(微課視頻版)(IntelliJIDEA版)》陳恒

主編,清華大學出版社,2024

2.運行Filter只要用戶請求的URL和<filter-mapping>的子標記<url-pattern>指定的模式匹配的話,Web服務器就會自動調用該Filter的doFilter()方法。如6.1節中的FirstFilter過濾器在web.xml中的<url-pattern>指定值為/*,“/*”代表任何頁面或Servlet的請求。為了測試過濾器,在web項目ch6中新建一個JSP頁面test.jsp,運行test.jsp顯示如圖6.2的結果。《JavaWeb開發從入門到實戰(微課視頻版)(IntelliJIDEA版)》陳恒

主編,清華大學出版社,2024

6.2.2基于注解的方式部署過濾器從Servlet3.0開始提供了注解@WebFilter,使得不再需要在web.xml文件中進行Filter的部署描述。但在實際的Web項目中,不需要大量開發Filter,因此,采用哪種方式部署過濾器都不太麻煩。@WebFilter用于將一個類聲明為過濾器,該注解將會在部署時被容器處理,容器將根據具體的屬性配置,將相應的類部署為過濾器。《JavaWeb開發從入門到實戰(微課視頻版)(IntelliJIDEA版)》陳恒

主編,清華大學出版社,2024

屬性名類

型描

述filterNameString指定過濾器的name屬性,等價于<filter-name>。valueString[]該屬性等價于urlPatterns屬性,但兩個屬性不能同時使用。urlPatternsString[]指定一組過濾器的URL匹配模式。等價于<url-pattern>標簽。servletNamesString[]指定過濾器將應用于哪些Servlet。取值是@WebServlet中的name屬性的取值,或者是web.xml中<servlet-name>的取值。initParamsWebInitParam[]指定一組過濾器初始化參數,等價于<init-param>標簽。6.2.2基于注解的方式部署過濾器【例6-2】基于注解的Filter——SecondFilter。@WebFilter(filterName

="secondFilter",urlPatterns={"/*"})publicclassSecondFilterimplementsFilter{}《JavaWeb開發從入門到實戰(微課視頻版)(IntelliJIDEA版)》陳恒

主編,清華大學出版社,2024

6.2.3過濾器的執行順序為了驗證過濾器的執行順序,新建SecondFilter、ThreeFilter、FourFilter和ZFilter。其中SecondFilter、ThreeFilter和FourFilter使用注解的方式部署,它們的urlPatterns都是"/*";而ZFilter在web.xml中部署,并部署在FirstFilter的前面。從圖6.3可以看出,過濾器攔截路徑相同時,首先按照<filter-mapping>標記在web.xml中出現的先后順序執行過濾器,然后再按照過濾器類名的字典順序執行注解的過濾器。《JavaWeb開發從入門到實戰(微課視頻版)(IntelliJIDEA版)》陳恒

主編,清華大學出版社,2024

6.2.4實踐環節——過濾器的初始化參數給6.2.3節中的SecondFilter添加初始化參數,并在該過濾器的init()方法中獲取這些參數。@WebInitParam注解給過濾器添加參數的示例代碼如下:@WebFilter(filterName="xxxFilter",urlPatterns={"/*"},initParams={ @WebInitParam(name="firstParam",value="one"), @WebInitParam(name="secondParam",value="two")})《JavaWeb開發從入門到實戰(微課視頻版)(IntelliJIDEA版)》陳恒

主編,清華大學出版社,2024

學習目的與要求《JavaWeb開發從入門到實戰(微課視頻版)(IntelliJIDEA版)》陳恒

主編,清華大學出版社,2024

6.1Filter類與Filter對象6.2Filter對象的部署與運行6.3過濾器的實際應用6.4監聽器的分類與創建6.5監聽器的實際應用——統計在線用戶6.3.1字符編碼過濾器在本書的3.1.3節中,介紹了中文亂碼的解決方法,其中一種解決方法是:在獲取表單信息之前,使用request對象調用setCharacterEncoding(String

code)方法設置統一字符編碼。使用該方法解決中文亂碼問題時,接受參數的每個頁面或Servlet都需要執行request.setCharacterEncoding("XXX")語句。為了避免每個頁面或Servlet都編寫request.setCharacterEncoding("XXX")語句,可以使用過濾器進行字符編碼處理。【例6-3】字符編碼過濾器——SetCharacterEncodingFilter。《JavaWeb開發從入門到實戰(微課視頻版)(IntelliJIDEA版)》陳恒

主編,清華大學出版社,2024

6.3.2登錄驗證過濾器在Web項目中,某些頁面或Servlet只有用戶登錄成功才能訪問。如果直接在應用程序每個相關的源代碼中進行判斷用戶是否登錄成功,并不是科學的做法。這時可以實現一個登錄驗證過濾器,不用在每個相關的源代碼中驗證用戶是否登錄成功。【例6-4】按照1.2.2節的操作步驟,創建一個Web項目loginValidate,并為loginValidate添加Tomcat依賴。在該Web項目中至少編寫兩個JSP頁面:login.jsp與loginSuccess.jsp,一個Servlet(由LoginServlet.java負責創建)。用戶在login.jsp頁面中輸入用戶名和密碼后,提交給Servlet,在Servlet中判斷用戶名和密碼是否正確,若正確跳轉到loginSuccess.jsp,若錯誤回到login.jsp頁面。但該Web項目有另外一個要求:除了訪問login.jsp頁面和LoginServlet外,別的頁面或Servlet都不能直接訪問,必須先登錄成功才能訪問。在設計這個Web項目時,編寫了一個登錄驗證過濾器并在該Web項目中使用。《JavaWeb開發從入門到實戰(微課視頻版)(IntelliJIDEA版)》陳恒

主編,清華大學出版社,2024

學習目的與要求《JavaWeb開發從入門到實戰(微課視頻版)(IntelliJIDEA版)》陳恒

主編,清華大學出版社,2024

6.1Filter類與Filter對象6.2Filter對象的部署與運行6.3過濾器的實際應用6.4監聽器的分類與創建6.5監聽器的實際應用——統計在線用戶6.4監聽器的分類與創建創建不同功能的監聽器類,需要實現不同的監聽接口。一個監聽類可以實現多個接口,即可以多種功能的監聽器一起工作。根據監聽的對象可將監聽器劃分為:ServletContext對象監聽器、HttpSession對象監聽器以及ServletRequest對象監聽器。根據監聽的事件可將監聽器劃分為:對象自身的創建和銷毀的監聽器、對象中屬性的創建、修改和消除的監聽器以及session中某個對象狀態變化的監聽器。《JavaWeb開發從入門到實戰(微課視頻版)(IntelliJIDEA版)》陳恒

主編,清華大學出版社,2024

6.4.1監聽對象自身創建和銷毀的監聽器HttpSessionListener、ServletContextListener和ServletRequestListener監聽接口分別監聽session、context和request對象的創建與銷毀。

HttpSessionListener:監聽session的創建與銷毀。創建session時執行sessionCreated(HttpSessionEvent

se)方法。超時或執行session.invalidate()時執行sessionDestroyed(HttpSessionEvent

se)方法。該監聽器可用于統計在線人數、記錄訪問日志等。

ServletContextListener:監聽context的創建與銷毀。context代表當前Web應用程序。服務器啟動時執行contextInitialized(ServletContextEventsce)方法。服務器關閉時執行contextDestroyed(ServletContextEvent

sce)方法。該監聽器可用于啟動時獲取web.xml中配置的初始化參數,可作為定時器、加載全局屬性對象、創建全局數據庫連接、加載緩存信息等。

ServletRequestListener:監聽request的創建與銷毀。用戶每次請求request都將執行requestInitialized(ServletRequestEvent

sre)方法。request處理完畢自動銷毀前執行requestDestroyed(ServletRequestEvent

sre)方法。該監聽器可用于讀取request參數,記錄訪問歷史。《JavaWeb開發從入門到實戰(微課視頻版)(IntelliJIDEA版)》陳恒

主編,清華大學出版社,2024

6.4.1監聽對象自身創建和銷毀的監聽器【例6-5】在ch6的src目錄下創建一個名為listener的包,并在包中創建一個名為MyObjectListener的監聽器類,該監聽器類實現HttpSessionListener、ServletContextListener和ServletRequestListener監聽接口。在web.xml文件中部署監聽器,示例代碼如下:<listener>

<listener-class>完整類名</listener-class></listener>監聽器的啟動順序是按照web.xml的配置順序來啟動;加載順序是按照“監聽器->過濾器->Servlet”順序加載。《JavaWeb開發從入門到實戰(微課視頻版)(IntelliJIDEA版)》陳恒

主編,清華大學出版社,2024

6.4.2監聽對象屬性變化的監聽器監聽對象屬性變化的監聽器,分別為HttpSessionAttributeListener、ServletContextAttributeListener、ServletRequestAttributeListener。此3個監聽接口分別用于監聽session、context和request的屬性變化。當向被監聽對象中添加、更新、移除屬性時,將分別執行attributeAdded、attributeReplaced、attributeRemoved方法。【例6-6】在ch6的listener包中創建一個名為MyAttributeListener的監聽器類,該監聽器類實現HttpSessionAttributeListener監聽接口。《JavaWeb開發從入門到實戰(微課視頻版)(IntelliJIDEA版)》陳恒

主編,清華大學出版社,2024

6.4.3監聽session中某個對象狀態變化的監聽器監聽綁定到HttpSeesion域中某個對象狀態的事件監聽器有HttpSessionBindingListener和HttpSessionActivationListener。HttpSession中對象的狀態有:綁定→解除綁定,鈍化→活化。綁定,通過setAttribute保存到session對象當中。解除綁定,通過removeAttribue去除綁定。鈍化,將session對象持久化到存儲設備上。活化,將session對象從存儲設備上進行恢復。被實現鈍化和活化的監聽器對象必須實現Serializable接口,不需要在web.xml中部署。

HttpSessionBindingListener:當對象被放到session里時,執行valueBound(HttpSessionBindingEvent

event)方法。當對象被從session里移除時,執行valueUnbound(HttpSessionBindingEvent

event)方法。對象必須實現該監聽接口。

HttpSessionActivationListener:當session里的對象被鈍化時,執行sessionWillPassivate(HttpSessionEvent

se)方法。當對象被重新加載(活化)時,執行sessionDidActivate(HttpSessionEventse)方法。對象必須實現該監聽接口。《JavaWeb開發從入門到實戰(微課視頻版)(IntelliJIDEA版)》陳恒

主編,清華大學出版社,2024

6.4.3監聽session中某個對象狀態變化的監聽器【例6-7】在ch6的listener包中創建一個名為MySeesionListener的監聽器類,該監聽器類實現HttpSessionBindingListener、HttpSessionAc

溫馨提示

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

評論

0/150

提交評論