過濾器和偵聽器(補(bǔ))_第1頁
過濾器和偵聽器(補(bǔ))_第2頁
過濾器和偵聽器(補(bǔ))_第3頁
過濾器和偵聽器(補(bǔ))_第4頁
過濾器和偵聽器(補(bǔ))_第5頁
已閱讀5頁,還剩28頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第7章過濾器和偵聽器(補(bǔ))主要內(nèi)容過濾器偵聽器過濾器概述過濾器(Filter)和Servlet、JSP一樣,屬于Servlet規(guī)范中的一種組件,它被裝配在Web應(yīng)用中,對到達(dá)Web應(yīng)用的請求(request)或從Web應(yīng)用中輸出的響應(yīng)(response)信息進(jìn)行攔截和過濾。過濾器概述1、過濾器的基本工作原理過濾器的基本工作原理如圖示。Filter的用途Filter運(yùn)行原理:當(dāng)用戶的請求到達(dá)指定的頁面之前,可以借助filter改變這些請求的內(nèi)容;同樣,當(dāng)執(zhí)行結(jié)果要響應(yīng)到用戶之前,若先經(jīng)過filter,就可以修改輸出的內(nèi)容.Filter的用途:統(tǒng)一的認(rèn)證處理對用戶的請求做檢查、更精確的記錄監(jiān)視或?qū)τ脩魝鬟f的參數(shù)做前置處理,如:防止注入攻擊對響應(yīng)做編碼工作對響應(yīng)做壓縮處理對XML輸出進(jìn)行處理過濾器的特點(diǎn)過濾器具備有以下特點(diǎn):(1)它是聲明式的(2)它是動態(tài)的(3)它是模塊化的(4)它是可移植的(5)它是可重用的(6)它是透明的Filter的工作方式Filter的工作方式Filter的工作方式過濾器程序的基本結(jié)構(gòu)如下:publicclassXXXFilterimplementsFilter{......publicvoidinit(FilterConfigconfig)throwsServletException{...其它操作...}publicvoiddestroy(){...其它操作...Filter的工作方式}publicvoiddoFilter(ServletRequestrequest,ServletResponseresponse,FilterChainchain)throwsIOException,ServletException{...程序段1...chain.doFilter(request,response);...程序段2...}}Filter的工作方式假定客戶端請求了目標(biāo)資源“/a.jsp”,而在a.jsp中用RequestDispatcher調(diào)用另一個(gè)資源ff.htm,則會發(fā)生過濾器嵌套調(diào)用,例如,a.jsp有以下資源調(diào)用代碼:<jsp:includepage="ff.htm"/>請求過程如圖示:Filter的工作方式Filter的使用創(chuàng)建一個(gè)Filter的過程定義Filter類-實(shí)現(xiàn)接口在web.xml中對Filter進(jìn)行配置Filter的使用Filter接口的源碼Filter的使用過濾器的API接口及部署信息1、接口(1)publicvoidinit(FilterConfigfilterConfig)throwsServletExceptioninit()方法執(zhí)行初始化操作(2)publicvoiddoFilter(ServletRequestrequest,ServletResponseresponse,FilterChainchain)throwsjava.io.IOException,ServletException過濾器的業(yè)務(wù)邏輯代碼在doFilter()方法內(nèi)實(shí)現(xiàn)(3)publicvoiddestroy()在銷毀一個(gè)過濾器對象之前,此方法被調(diào)用來釋放init()中申請的資源,這個(gè)方法的執(zhí)行,表示一個(gè)過濾器的生命期結(jié)束Filter的使用2、接口(1)publicgetInitParameterNames()將初始化參數(shù)的變量名讀至枚舉型對象中。(2)publicname)讀取指定變量名的初始化參數(shù)值,如果沒有此參數(shù),則返回Null值。(3)publicServletContextgetServletContext()獲得當(dāng)前Web應(yīng)用的ServletContext對象。

Filter的使用3、javax.servlet.FilterChain接口接口中關(guān)鍵的方法為:publicvoiddoFilter(ServletRequestrequest,ServletResponseresponse)throwsjava.io.IOException,ServletExceptionFilter的使用過濾器的部署在WEB-INF\web.xml中部署一個(gè)過濾器的過程有:注冊過濾器、映射過濾器(1)注冊過濾器過濾器在Web應(yīng)用中注冊后才會被容器加載運(yùn)行。在web.xml中注冊過濾器的方法如下示:<filter> <filter-name>my1</filter-name> <filter-class>com.abc.mis.Filter1</filter-class> <init-param> <param-name>password</param-name> <param-value>123</param-value> </init-param></filter>Filter的使用容器為一個(gè)<filter></filter>元素創(chuàng)建一個(gè)過濾器實(shí)例,同一個(gè)過濾器類可以生成多個(gè)實(shí)例,此時(shí)只需要部署多個(gè)<filter></filter>元素,例如:<filter> <filter-name>my1</filter-name> <filter-class>com.abc.mis.Filter1</filter-class> <init-param> <param-name>password</param-name> <param-value>123</param-value> </init-param></filter><filter> <filter-name>my2</filter-name> <filter-class>com.abc.mis.Filter1</filter-class> <init-param> <param-name>password</param-name> <param-value>456</param-value> </init-param></filter>Filter的使用(2)映射過濾器過濾器映射就是定義此過濾器的激活條件,一般是通過目標(biāo)資源的URI模式和請求的類型來定義。URI中可以使用通配符“*”來表達(dá)請求的URI模式。過濾器映射的基本方法如下示:<filter-mapping><filter-name>my1</filter-name><url-pattern>/test/*</url-pattern><dispatcher>REQUEST</dispatcher><dispatcher>FORWARD</dispatcher></filter-mapping>Filter的使用Filter在web.xml中的配置Filter處理的請求類型實(shí)例分析例1:HelloWord,演示chain.doFilter的作用。

代碼:HelloWorld例2:多個(gè)Filter形成Filterchain,多個(gè)Filter的調(diào)用次序與在web.xml中<filter-mapping>的排列次序有關(guān).

代碼:Filter\FilterChain在例2中演示<dispatcher>的作用在例2中演示<url-pattern>的作用實(shí)例分析用Filter實(shí)現(xiàn)登錄認(rèn)證功能代碼:Filter\LoginDemo偵聽器偵聽器主要偵聽Servlet容器中的事件,所偵聽的事件發(fā)生后,容器激活偵聽器,執(zhí)行預(yù)定的操作。事件驅(qū)動模型:ServletAPI中提供了偵聽不同事件的接口,通過實(shí)現(xiàn)這些接口編寫出相應(yīng)的事件偵聽器,將偵聽器部署到Web應(yīng)用后,用戶自定義的偵聽器就可實(shí)施事件偵聽。偵聽器偵聽的事件主要是JSP隱含對象application、session、request對象上發(fā)生的事件,主要有隱含對象的創(chuàng)建與銷毀事件,相關(guān)作用范圍變量的創(chuàng)建、修改和銷毀事件。Listener接口Event類ServletContextListenerServletContextEventServletContextAttributeListenerServletContextAttributeEventHttpSessionListenerHttpSessionEventHttpSessionActivationListenerHttpSessionAttributeListenerHttpSessionBindingEventHttpSessionBindingListenerServletRequestListenerServletRequestEventServletRequestAttributeListenerServletrequestAttributeEventServlet/JSP的監(jiān)聽器接口JavaWeb程序中的監(jiān)聽器接口與ServletContext有關(guān)(應(yīng)用程序)ServletContextListenerServletContextAttributeListener與HttpSession有關(guān)(會話)HttpSessionListenerHttpSessionAttributeListenerHttpSessionBindingListenerHttpSessionActivationListener與ServletRequest有關(guān)(請求)ServletRequestListenerServletRequestAttributeListenerJavaWeb程序中的監(jiān)聽器接口進(jìn)行監(jiān)聽器編程的步驟:自定義監(jiān)聽器類實(shí)現(xiàn)恰當(dāng)?shù)谋O(jiān)聽器接口在web.xml中配置監(jiān)聽器<listener><description>ServletContextAttributeListener</description><listener-class></listener-class></listener>1.ServletContextListener接口監(jiān)聽ServletContextEvent事件.主要偵聽Web應(yīng)用Servlet上下文的初始化事件和銷毀事件。當(dāng)服務(wù)器加載一個(gè)Web應(yīng)用時(shí),出現(xiàn)上下文初始化事件;當(dāng)服務(wù)器卸載一個(gè)Web應(yīng)用時(shí),出現(xiàn)上下文銷毀事件。包含2個(gè)回調(diào)方法:publicvoidcontextInitialized(ServletContextEventsce),應(yīng)用程序被容器加載和初始化時(shí)該方法被調(diào)用publicvoidcontextDestroyed(ServletContextEventsce),應(yīng)用程序被停止時(shí)該方法被調(diào)用2.ServletContextAttributeListener接口監(jiān)聽ServletContextAttributeEvent事件,專門偵聽application屬性事件,包括新添加屬性、刪除屬性、修改屬性等。包含3個(gè)方法:publicvoidattributeAdded

(ServletContextAttributeEventevent)publicvoidattributeRemoved

(ServletContextAttributeEventevent)publicvoidattributeReplaced

(ServletContextAttributeEventevent)示例:ServletListenerDemo3ServletRequestListener接口ServletRequestListener,監(jiān)聽請求對象的創(chuàng)建與釋放,有2個(gè)方法:voidrequestInitialized(ServletRequestEvente)

請求對象被創(chuàng)建和初始化時(shí)調(diào)用該方法.voidrequestDestroyed(ServletRequestEvente)

請求對象被卸載時(shí)調(diào)用該方法.ServletRequestAttributeListener,

監(jiān)聽session范圍的變化,有3個(gè)方法voidattributeAdded

(ServletRequestAttributeEvente)

若有對象加入session范圍時(shí),調(diào)用該方法voidattributeReplaced

(ServletRequestAttributeEvente)

若在session范圍內(nèi)有對象取代另一個(gè)對象,調(diào)用該方法voidattributeRemoved

(ServletRequestAttributeEvente)

若有對象從session范圍移除,調(diào)用該方法示例:ServletRequestDemo3ServletRequestAttributeListener接口5.HttpSessionListener接口監(jiān)聽Http

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論