《Java Web技術(shù)及案例開發(fā)》 課件 第8章 Filter和Listener_第1頁
《Java Web技術(shù)及案例開發(fā)》 課件 第8章 Filter和Listener_第2頁
《Java Web技術(shù)及案例開發(fā)》 課件 第8章 Filter和Listener_第3頁
《Java Web技術(shù)及案例開發(fā)》 課件 第8章 Filter和Listener_第4頁
《Java Web技術(shù)及案例開發(fā)》 課件 第8章 Filter和Listener_第5頁
已閱讀5頁,還剩44頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第8章Filter和Listener本章思維導(dǎo)圖本章目標(biāo)了解監(jiān)聽器原理及生命周期中的方法掌握Servlet上下文監(jiān)聽掌握Http會(huì)話監(jiān)聽了解請(qǐng)求監(jiān)聽理解過濾器原理及生命周期掌握實(shí)現(xiàn)一個(gè)過濾器的步驟過濾器(Filter)也稱之為攔截器,是Servlet2.3規(guī)范新增的功能,在Servlet2.4規(guī)范中得到增強(qiáng)。Filter是Servlet技術(shù)中非常實(shí)用的技術(shù),Web開發(fā)人員通過Filter技術(shù),可以在用戶訪問某個(gè)Web資源(如:JSP、Servlet、HTML、圖片、CSS等)之前,對(duì)訪問的請(qǐng)求和響應(yīng)進(jìn)行攔截,從而實(shí)現(xiàn)一些特殊功能。例如,驗(yàn)證用戶訪問權(quán)限、記錄用戶操作、對(duì)請(qǐng)求進(jìn)行重新編碼、壓縮響應(yīng)信息等。過濾器簡(jiǎn)介在Web應(yīng)用中,過濾器所處的位置:過濾器所處的位置一個(gè)過濾器的運(yùn)行過程可以分解為如下幾個(gè)步驟:Web容器判斷接收的請(qǐng)求資源是否有與之匹配的過濾器,如果有,容器將請(qǐng)求交給相應(yīng)過濾器進(jìn)行處理;在過濾器預(yù)處理過程中,可以改變請(qǐng)求的內(nèi)容,或者重新設(shè)置請(qǐng)求的報(bào)頭信息,然后將請(qǐng)求發(fā)給目標(biāo)資源;目標(biāo)資源對(duì)請(qǐng)求進(jìn)行處理后作出響應(yīng);容器將響應(yīng)轉(zhuǎn)發(fā)回過濾器;在過濾器后處理過程中,可以根據(jù)需求對(duì)響應(yīng)的內(nèi)容進(jìn)行修改;Web容器將響應(yīng)發(fā)送回客戶端。過濾器的運(yùn)行過程在一個(gè)Web應(yīng)用中,也可以部署多個(gè)過濾器,這些過濾器組成了一個(gè)過濾器鏈。過濾器鏈中的每個(gè)過濾器負(fù)責(zé)特定的操作和任務(wù),客戶端的請(qǐng)求可以在這些過濾器之間進(jìn)行傳遞,直到達(dá)到目標(biāo)資源。例如,一個(gè)由兩個(gè)Filter所組成的過濾器鏈的過濾過程:過濾器鏈過濾器的實(shí)現(xiàn)主要依靠以下核心接口:jakarta.servlet.Filter接口jakarta.servlet.FilterConfig接口jakarta.servlet.FilterChain接口過濾器核心接口與開發(fā)Servlet需要實(shí)現(xiàn)Servlet接口類似,開發(fā)Filter要實(shí)現(xiàn)jakarta.servlet.Filter接口,并提供一個(gè)公共的不帶參數(shù)的構(gòu)造方法。Filter接口的方法及說明Filter接口的方法及說明方法說明init(FilterConfigconfig)過濾器初始化方法。容器在過濾器實(shí)例化后調(diào)用此方法對(duì)過濾器進(jìn)行初始化,同時(shí)向其傳遞FilterConfig對(duì)象,用于獲得和Servlet相關(guān)的ServletContext對(duì)象doFilter(ServletRequestrequest,ServletResponseresponse,FilterChainchain)過濾器的功能實(shí)現(xiàn)方法。當(dāng)用戶請(qǐng)求經(jīng)過時(shí),容器調(diào)用此方法對(duì)請(qǐng)求和響應(yīng)進(jìn)行功能處理。該方法由容器傳入三個(gè)參數(shù)對(duì)象,分別用于獲取請(qǐng)求對(duì)象、響應(yīng)對(duì)象和FilterChain對(duì)象,請(qǐng)求和響應(yīng)對(duì)象類型分別為ServletRequest和ServletResponse,并不依賴于具體的協(xié)議,F(xiàn)ilterChian對(duì)象的doFilter(request,response)方法負(fù)責(zé)將請(qǐng)求傳遞給下一個(gè)過濾器或目標(biāo)資源destroy()該方法在過濾器生命周期結(jié)束前由Web容器調(diào)用,可用于使用資源的釋放init(FilterConfigconfig)過濾器初始化方法。容器在過濾器實(shí)例化后調(diào)用此方法對(duì)過濾器進(jìn)行初始化,同時(shí)向其傳遞FilterConfig對(duì)象,用于獲得和Servlet相關(guān)的ServletContext對(duì)象過濾器的生命周期分為四個(gè)階段:加載和實(shí)例化Web容器啟動(dòng)時(shí),會(huì)根據(jù)@WebFilter屬性filterName所定義的類名的大小寫拼寫順序,或者web.xml中聲明的Filter順序依次實(shí)例化Filter。初始化Web容器調(diào)用init(FilterConfigconfig)方法來初始化過濾器。容器在調(diào)用該方法時(shí),向過濾器傳遞FilterConfig對(duì)象。實(shí)例化和初始化的操作只會(huì)在容器啟動(dòng)時(shí)執(zhí)行,并且只會(huì)執(zhí)行一次。過濾器的生命周期doFilter()方法的執(zhí)行當(dāng)客戶端請(qǐng)求目標(biāo)資源的時(shí)候,容器會(huì)篩選出符合過濾器映射條件的Filter,并按照@WebFilter屬性filterName所定義的類名的大小寫拼寫順序,或者web.xml中聲明的filter-mapping的順序依次調(diào)用這些過濾器的doFilter()方法。在這個(gè)鏈?zhǔn)秸{(diào)用過程中,可以調(diào)用FilterChain對(duì)象的doFilter(ServletRequest,ServletResponse)方法將請(qǐng)求傳給下一個(gè)過濾器(或目標(biāo)資源),也可以直接向客戶端返回響應(yīng)信息,或者利用請(qǐng)求轉(zhuǎn)發(fā)或重定向?qū)⒄?qǐng)求轉(zhuǎn)向到其它資源。需要注意的是,這個(gè)方法的請(qǐng)求和響應(yīng)參數(shù)的類型是ServletRequest和ServletResponse,也就是說,過濾器的使用并不依賴于具體的協(xié)議。銷毀Web容器調(diào)用destroy()方法指示過濾器的生命周期結(jié)束。在這個(gè)方法中,可以釋放過濾器使用的資源過濾器的生命周期jakarta.servlet.FilterConfig接口由容器實(shí)現(xiàn),容器將其實(shí)例作為參數(shù)傳入過濾器(Filter)對(duì)象的初始化方法init()中,來獲取過濾器的初始化參數(shù)和Servlet的相關(guān)信息。FilterConfig接口的主要方法及作用FilterConfig接口方法說明getFilterName()獲取配置信息中指定的過濾器的名字getInitParameter(Stringname)獲取配置信息中指定的名為name的過濾器初始化參數(shù)值getInitParameterNames()獲取過濾器的所有初始化參數(shù)的名字的枚舉集合getServletContext()獲取Servlet上下文對(duì)象jakarta.servlet.FilterChain接口由容器實(shí)現(xiàn),容器將其實(shí)例作為參數(shù)傳入過濾器對(duì)象的doFilter()方法中。過濾器對(duì)象使用FilterChain對(duì)象調(diào)用過濾器鏈中的下一個(gè)過濾器,如果該過濾器是鏈中最后一個(gè)過濾器,那么將調(diào)用目標(biāo)資源。FilterChain接口主要方法及作用FilterChain接口方法說明doFilter(ServletRequestrequest,ServletResponseresponse)該方法將使過濾器鏈中的下一個(gè)過濾器被調(diào)用,如果調(diào)用該方法的過濾器是鏈中最后一個(gè)過濾器,那么目標(biāo)資源被調(diào)用在Servlet3.0以上版本中,既可以使用@WebFilter形式的Annotation對(duì)Filter進(jìn)行聲明配置,也可以在web.xml文件中進(jìn)行配置。@WebFilter所支持的常用屬性過濾器聲明配置屬性名類型是否必需說明filterNameString否用于指定該Filter的名稱,默認(rèn)為類名urlPatterns/valueString[]是用于指定該Filter所攔截的URL,兩個(gè)屬性相同但不能同時(shí)使用servletNamesString[]否用于指定該Filter對(duì)哪些Servlet執(zhí)行過濾,可指定多個(gè)Servlet的名稱,值是@WebServlet中的name屬性的取值或web.xml中<servlet-name>的取值dispatcherTypesDispatcherType否用于指定該Filter對(duì)哪種模式的請(qǐng)求進(jìn)行過濾,支持REQUEST、FORWARD、INCLUDE、ERROR、ASYNC這5個(gè)值的任意組合,默認(rèn)值為REQUESTinitParamsWebInitParam[]否用于指定該Filter的一組配置參數(shù)asyncSupportboolean否指定該Filter是否支持異步操作模式displayNameString否用于指定該Filter的顯示名稱descriptionString否指定該Filter的描述信息過濾器通過屬性u(píng)rlPatterns/value指定的URL匹配模式來對(duì)匹配的請(qǐng)求地址進(jìn)行攔截。屬性u(píng)rlPatterns/value指定的URL匹配模式有如下要求:URL匹配模式可以是路徑匹配,也可以是擴(kuò)展名匹配。例如,對(duì)請(qǐng)求地址“http://localhost:8080/chapter10/index.jsp”,路徑匹配可以為“/index.jsp”或“/*”;擴(kuò)展名匹配為“*.jsp”,但不能是路徑匹配和擴(kuò)展名匹配的混合,例如“/*.jsp”這種寫法是錯(cuò)誤的。過濾器的聲明配置@WebFilter的屬性dispatcherTypes的五個(gè)取值對(duì)應(yīng)的轉(zhuǎn)發(fā)模式的含義如下所示:REQUEST當(dāng)用戶直接對(duì)網(wǎng)頁做出請(qǐng)求的動(dòng)作時(shí),才會(huì)通過此Filter。而例如請(qǐng)求轉(zhuǎn)發(fā)發(fā)出的請(qǐng)求則不會(huì)通過此Filter。FORWARD指由RequestDispatcher對(duì)象的forward()方法發(fā)出的請(qǐng)求才會(huì)通過此Filter,除此之外,該過濾器不會(huì)被調(diào)用。INCLUDE指由RequestDispatcher對(duì)象的include()方法發(fā)出的請(qǐng)求才會(huì)通過此Filter,除此之為,該過濾器不會(huì)被調(diào)用。ERROR如若在某個(gè)頁面使用page指令指定了error屬性,那么當(dāng)此頁面出現(xiàn)異常跳轉(zhuǎn)到異常處理頁面時(shí)才會(huì)經(jīng)過此Filter,除此之外,該過濾器不會(huì)被調(diào)用。ASYNC指異步處理的請(qǐng)求才會(huì)通過此過濾器,除此之外,該過濾器不會(huì)被調(diào)用。過濾器的聲明配置在Web開發(fā)中,F(xiàn)ilter是非常重要而且實(shí)用的技術(shù),其應(yīng)用非常廣泛,如下為幾種常見的使用情況:做統(tǒng)一的認(rèn)證處理;對(duì)用戶的請(qǐng)求進(jìn)行檢查和更精確的記錄;監(jiān)視或?qū)τ脩羲鶄鬟f的參數(shù)做前置處理,例如:防止數(shù)據(jù)注入攻擊;改變圖像文件的格式;對(duì)請(qǐng)求和響應(yīng)進(jìn)行編碼;對(duì)響應(yīng)做壓縮處理;對(duì)XML的輸出使用XSLT來轉(zhuǎn)換。

過濾器應(yīng)用在前面章節(jié)的介紹中,對(duì)POST請(qǐng)求參數(shù)的亂碼問題通常采用如下代碼進(jìn)行設(shè)置:使用這種方法有一個(gè)缺點(diǎn):必須對(duì)每一個(gè)獲得請(qǐng)求參數(shù)的程序都要加入上述程序代碼。這種做法顯然增加了重復(fù)的工作量,此時(shí)使用過濾器便可輕松予以解決。批量設(shè)置請(qǐng)求編碼request.setCharacterEncoding("UTF-8");通過上述代碼,當(dāng)用戶向服務(wù)器發(fā)送任意請(qǐng)求時(shí),都會(huì)經(jīng)過此過濾器對(duì)請(qǐng)求編碼進(jìn)行設(shè)置。需要注意的是,只有在最初使用請(qǐng)求對(duì)象的程序前進(jìn)行編碼設(shè)置,才會(huì)對(duì)后續(xù)使用程序起作用,因此,該過濾器在執(zhí)行順序上應(yīng)該保證早于其它過濾器的執(zhí)行。這種情況下,可以采用以下三種方式解決:方式一:完全基于Annotation的過濾器方式的配置,可以通過設(shè)置filterName按照過濾器的名稱首字母順序執(zhí)行;方式二:完全使用web.xml的方式對(duì)過濾器鏈配置,相同映射條件下,按照<filter-mapping>定義的先后順序執(zhí)行;方式三:使用Annotation和web.xml相結(jié)合的方式配置,web.xml文件中聲明的Filter的執(zhí)行順序早于使用Annotation聲明的Filter。批量設(shè)置請(qǐng)求編碼在Web應(yīng)用中,有很多操作是需要用戶具有相關(guān)的操作權(quán)限才可進(jìn)行訪問的,例如:用戶個(gè)人中心、網(wǎng)站后臺(tái)管理、同一系統(tǒng)不同角色的訪問。這些應(yīng)用的權(quán)限控制可以在具體的訪問資源中單獨(dú)設(shè)置,也可以使用過濾器統(tǒng)一設(shè)置,顯然后者具有更高的效率和可維護(hù)性。該實(shí)例的實(shí)現(xiàn)思路如下:設(shè)置較為全面的請(qǐng)求攔截映射地址,但對(duì)于用戶登陸頁面及處理登錄操作的Servlet不能進(jìn)行訪問限制,可用初始化參數(shù)靈活指定相關(guān)地址。通過判斷會(huì)話對(duì)象中是否存在用戶登陸成功時(shí)設(shè)置的域?qū)傩裕瑏頉Q定用戶是否有訪問的權(quán)限。控制用戶訪問權(quán)限Filter結(jié)合GZIP壓縮技術(shù)是解決Web應(yīng)用中網(wǎng)絡(luò)傳輸大數(shù)據(jù)量問題的常用方法。GZIP是HTTP協(xié)議中使用的一種壓縮算法,用于對(duì)服務(wù)器端響應(yīng)內(nèi)容進(jìn)行壓縮,減少網(wǎng)絡(luò)傳輸數(shù)據(jù)量,提高服務(wù)器的響應(yīng)速度。通過和Filter相配合,可以在無需改動(dòng)應(yīng)用現(xiàn)有代碼的基礎(chǔ)上引入該功能。壓縮響應(yīng)結(jié)果要實(shí)現(xiàn)對(duì)響應(yīng)信息進(jìn)行壓縮的Filter程序,需要掌握以下幾個(gè)技術(shù)要點(diǎn)和設(shè)計(jì)思想:瀏覽器通過發(fā)送類似“Accept-Encoding:gzip,deflate”請(qǐng)求頭信息,告訴服務(wù)器該瀏覽器支持GZIP壓縮;Filter通過Accept-Encoding請(qǐng)求頭,來判斷瀏覽器是否支持?jǐn)?shù)據(jù)壓縮和支持哪種格式的數(shù)據(jù);如果瀏覽器不支持GZIP壓縮格式,則不對(duì)目標(biāo)資源輸出的響應(yīng)信息進(jìn)行壓縮,否則Filter需要?jiǎng)?chuàng)建一個(gè)包含壓縮功能的自定義響應(yīng)對(duì)象傳遞給目標(biāo)資源,以便截獲目標(biāo)資源輸出的響應(yīng)信息,進(jìn)而對(duì)其進(jìn)行壓縮處理。Filter創(chuàng)建的自定義響應(yīng)對(duì)象首先應(yīng)當(dāng)保證與HttpServletResponse接口的規(guī)范一致,然后在此基礎(chǔ)上重寫輸出響應(yīng)消息內(nèi)容的方法,進(jìn)行壓縮處理。ServletAPI提供了一個(gè)HttpServletResponseWrapper類來包裝原始的response對(duì)象,自定義的響應(yīng)對(duì)象可以繼承此類,然后對(duì)其中輸出響應(yīng)消息內(nèi)容的getOutputStream()、getWriter()和flushBuffer()方法進(jìn)行重寫。Web服務(wù)器程序使用JDK提供的java.util.zip.GZIPOutputStream類來將數(shù)據(jù)壓縮成GZIP格式。GZIPOutputStream類通過其構(gòu)造方法包裝一個(gè)底層輸出流對(duì)象,調(diào)用write()方法向底層輸出流對(duì)象中寫入壓縮成GZIP格式的數(shù)據(jù),最后關(guān)閉GZIPOutputStream對(duì)象。在原響應(yīng)對(duì)象中添加響應(yīng)頭“Content-Encoding:gzip”,告訴瀏覽器響應(yīng)信息使用GZIP壓縮。瀏覽器接收到GZIP壓縮數(shù)據(jù)后,根據(jù)響應(yīng)頭“Content-Encoding:gzip”來對(duì)響應(yīng)內(nèi)容進(jìn)行解碼,獲取到原始響應(yīng)數(shù)據(jù)進(jìn)行顯示。壓縮響應(yīng)結(jié)果在Web容器運(yùn)行過程中,有很多關(guān)鍵點(diǎn)事件,比如Web應(yīng)用被啟動(dòng)、被停止、用戶會(huì)話開始、用戶會(huì)話結(jié)束、用戶請(qǐng)求到達(dá)、用戶請(qǐng)求結(jié)束等,這些關(guān)鍵點(diǎn)為系統(tǒng)運(yùn)行提供支持,但對(duì)用戶卻是透明的。ServletAPI提供了大量監(jiān)聽器接口來幫助開發(fā)者實(shí)現(xiàn)對(duì)Web應(yīng)用內(nèi)特定事件進(jìn)行監(jiān)聽,從而當(dāng)Web應(yīng)用內(nèi)這些特定事件發(fā)生時(shí),回調(diào)監(jiān)聽器內(nèi)的事件監(jiān)聽方法來實(shí)現(xiàn)一些特殊功能。監(jiān)聽器簡(jiǎn)介Web容器使用不同的監(jiān)聽器接口來實(shí)現(xiàn)對(duì)不同事件的監(jiān)聽,常用的Web事件監(jiān)聽器接口可分為如下三類:與Servlet上下文相關(guān)的監(jiān)聽器接口與會(huì)話相關(guān)的監(jiān)聽器接口與請(qǐng)求相關(guān)的監(jiān)聽器接口監(jiān)聽接口分類與Servlet上下文相關(guān)的監(jiān)聽器需要實(shí)現(xiàn)的監(jiān)聽器接口與Servlet上下文相關(guān)的監(jiān)聽器監(jiān)聽器接口名稱說明ServletContextListener用于監(jiān)聽ServletContext(application)對(duì)象的創(chuàng)建和銷毀ServletContextAttributeListener用于監(jiān)聽ServletContext(application)范圍內(nèi)屬性的改變ServletContextListener接口用于監(jiān)聽Web應(yīng)用程序的ServletContext對(duì)象的創(chuàng)建和銷毀事件。每個(gè)Web應(yīng)用對(duì)應(yīng)一個(gè)ServletContext對(duì)象,在Web容器啟動(dòng)時(shí)創(chuàng)建,在容器關(guān)閉時(shí)銷毀。當(dāng)Web應(yīng)用程序中聲明了一個(gè)實(shí)現(xiàn)ServletContextListener接口的事件監(jiān)聽器后,Web容器在創(chuàng)建或銷毀此對(duì)象時(shí)就會(huì)產(chǎn)生一個(gè)ServletContextEvent事件對(duì)象,然后再執(zhí)行監(jiān)聽器中的相應(yīng)事件處理方法,并將ServletContextEvent事件對(duì)象傳遞給這些方法。ServletContextListener在ServletContextListener接口中定義了如下兩個(gè)事件處理方法:contextInitialized(ServletContextEventsce)當(dāng)ServletContext對(duì)象被創(chuàng)建時(shí),Web容器將調(diào)用此方法。該方法接收ServletContextEvent事件對(duì)象,通過此對(duì)象可獲得當(dāng)前被創(chuàng)建的ServletContext對(duì)象。contextDestroyed(ServletContextEventsce)當(dāng)ServletContext對(duì)象被銷毀時(shí),Web容器調(diào)用此方法,同時(shí)向其傳遞ServletContextEvent事件對(duì)象。ServletContextListener上述事件處理方法中,ServletContextEvent為一個(gè)事件類,用于通知Web應(yīng)用程序中上下文對(duì)象的改變。ServletContextEvent的方法及說明ServletContextListener方法說明getServletContext()返回改變前的ServletContext對(duì)象注解@WebListener用于對(duì)監(jiān)聽器進(jìn)行聲明。注解@WebListener的常用屬性【示例】使用@WebListener聲明配置監(jiān)聽器ServletContextListener@WebListener("持久存取頁面訪問計(jì)數(shù)")publicclassVisitCountListenerimplementsServletContextListener{屬性名類型是否必需描述valueString否設(shè)置該監(jiān)聽器的描述信息ServletContextAttributeListener接口用于監(jiān)聽ServletContext(application)范圍內(nèi)屬性的創(chuàng)建、刪除和修改。當(dāng)Web容器中聲明了一個(gè)實(shí)現(xiàn)ServletContextAttributeListener接口的監(jiān)聽器后,Web容器在ServletContext應(yīng)用域?qū)傩园l(fā)生改變時(shí)就會(huì)產(chǎn)生一個(gè)ServletContextAttributeEvent事件對(duì)象,然后再調(diào)用監(jiān)聽器中的相應(yīng)事件處理方法。ServletContextAttributeListenerServletContextAttributeListener接口中定義了如下三個(gè)事件處理方法:attributeAdded(ServletContextAttributeEventevent)當(dāng)程序把一個(gè)屬性存入application范圍時(shí),Web容器調(diào)用此方法,同時(shí)向其傳遞ServletContextAttributeEvent事件對(duì)象;attributeRemoved(ServletContextAttributeEventevent)當(dāng)程序把一個(gè)屬性從application范圍刪除時(shí),Web容器調(diào)用此方法,同時(shí)向其傳遞ServletContextAttributeEvent事件對(duì)象;attributeReplaced(ServletContextAttributeEventevent)當(dāng)程序替換application范圍內(nèi)的屬性時(shí),Web容器調(diào)用此方法,同時(shí)向其傳遞ServletContextAttributeEvent事件對(duì)象。ServletContextAttributeListener上述事件處理方法中,ServletContextAttributeEvent為一個(gè)事件類,用于通知Web應(yīng)用程序中Servlet上下文屬性的改變。ServletContextAttributeEvent的方法及說明:ServletContextAttributeListener方法說明getName()返回ServletContext改變的屬性名getValue()返回已被增加、刪除、替換的屬性值,如果屬性被增加,就是該屬性的值;屬性被刪除,就是被刪除屬性的值;如果屬性被替換,就是該屬性的舊值與會(huì)話相關(guān)的監(jiān)聽器需要實(shí)現(xiàn)的監(jiān)聽器接口與會(huì)話相關(guān)的監(jiān)聽器監(jiān)聽器接口名稱說明HttpSessionListener用于監(jiān)聽會(huì)話對(duì)象HttpSession的創(chuàng)建和銷毀HttpSessionAttributeListener用于監(jiān)聽HttpSession(session)范圍內(nèi)屬性的改變HttpSessionListener接口用于監(jiān)聽用戶會(huì)話對(duì)象HttpSession的創(chuàng)建和銷毀事件。每個(gè)瀏覽器與服務(wù)器的會(huì)話狀態(tài)分別對(duì)應(yīng)一個(gè)HttpSession對(duì)象,每個(gè)HttpSession對(duì)象在瀏覽器開始與服務(wù)器會(huì)話時(shí)創(chuàng)建,在瀏覽器與服務(wù)器結(jié)束會(huì)話時(shí)銷毀。當(dāng)在Web應(yīng)用程序中聲明了一個(gè)實(shí)現(xiàn)HttpSessionListener接口的事件監(jiān)聽器后,Web容器在創(chuàng)建或銷毀每個(gè)HttpSession對(duì)象時(shí)都會(huì)產(chǎn)生一個(gè)HttpSessionEvent事件對(duì)象,然后調(diào)用監(jiān)聽器中的相應(yīng)事件處理方法,同時(shí)將HttpSessionEvent事件對(duì)象傳遞給這些方法。HttpSessionListener在HttpSessionListener接口中定義了如下兩個(gè)事件處理方法:sessionCreated(HttpSessionEventse)當(dāng)HttpSession對(duì)象被創(chuàng)建時(shí),Web容器將調(diào)用此方法。該方法接收HttpSessionEvent事件對(duì)象,通過此對(duì)象可獲得當(dāng)前被創(chuàng)建的HttpSession對(duì)象;sessionDestroyed(HttpSessionEventse)當(dāng)HttpSession對(duì)象被銷毀時(shí),Web容器調(diào)用此方法,同時(shí)向其傳遞HttpSessionEvent事件對(duì)象。HttpSessionListener上述事件處理方法中,HttpSessionEvent為一個(gè)事件類,用于通知Web應(yīng)用程序中會(huì)話對(duì)象的改變。HttpSessionEvent的方法及說明:HttpSessionListener方法說明getSession()返回改變前的HttpSession對(duì)象HttpSessionAttributeListener接口用于監(jiān)聽HttpSession(session)范圍內(nèi)屬性的創(chuàng)建、刪除和修改。當(dāng)Web容器中聲明了一個(gè)實(shí)現(xiàn)HttpSessionAttributeListener接口的監(jiān)聽器后,Web容器在HttpSession會(huì)話域?qū)傩园l(fā)生改變時(shí)就會(huì)產(chǎn)生一個(gè)HttpSessionAttributeEvent事件對(duì)象,然后再調(diào)用監(jiān)聽器中的相應(yīng)事件處理方法。HttpSessionAttributeListenerHttpSessionAttributeListener接口中定義了如下三個(gè)事件處理方法:attributeAdded(HttpSessionAttributeEventevent)當(dāng)程序把一個(gè)屬性存入session范圍時(shí),Web容器調(diào)用此方法,同時(shí)向其傳遞HttpSessionAttributeEvent事件對(duì)象;attributeRemoved(HttpSessionAttributeEventevent)當(dāng)程序把一個(gè)屬性從session范圍刪除時(shí),Web容器調(diào)用此方法,同時(shí)向其傳遞HttpSessionAttributeEvent事件對(duì)象;attributeReplaced(HttpSessionAttributeEventevent)當(dāng)程序替換session范圍內(nèi)的屬性時(shí),Web容器調(diào)用此方法,同時(shí)向其傳遞HttpSessionAttributeEvent事件對(duì)象。HttpSessionAttributeListener上述事件處理方法中,HttpSessionAttributeEvent為一個(gè)事件類,用于通知Web應(yīng)用程序中會(huì)話對(duì)象屬性的改變。HttpSessionAttributeEvent的方法及說明:HttpSessionAttributeListener方法說明getName()返回HttpSession改變的屬性名getValue()返回已被增加、刪除、替換的屬性值,如果屬性被增加,就是該屬性的值;屬性被刪除,就是被刪除屬性的值;如果屬性被替換,就是該屬性的舊值與請(qǐng)求相關(guān)的監(jiān)聽器需要實(shí)現(xiàn)的監(jiān)聽器接口:與請(qǐng)求相關(guān)的監(jiān)聽器監(jiān)聽器接口名稱說明ServletRequestListener用于監(jiān)聽用戶請(qǐng)求的產(chǎn)生和結(jié)束ServletRequestAttributeListener用于監(jiān)聽ServletRequest(request)范圍內(nèi)屬性的改變ServletRequestListener接口用于監(jiān)聽ServletRequest對(duì)象的創(chuàng)建和銷毀事件。瀏覽器的每次訪問請(qǐng)求分別對(duì)應(yīng)一個(gè)ServletRequest對(duì)象,每個(gè)ServletRequest對(duì)象在每次訪問請(qǐng)求開始時(shí)創(chuàng)建,在每次訪問請(qǐng)求結(jié)束后銷毀。當(dāng)在Web應(yīng)用程序中聲明了一個(gè)實(shí)現(xiàn)ServletRequestListener接口的事件監(jiān)聽器后,Web容器在創(chuàng)建或銷毀每個(gè)ServletRequest對(duì)象時(shí)都會(huì)產(chǎn)生一個(gè)ServletRequestEvent事件對(duì)象,然后將其傳遞給監(jiān)聽器中的相應(yīng)事件處理方法。ServletRequestListenerServletRequestListener接口中定義了如下兩個(gè)事件處理方法:requestInitialized(ServletRequestEventsre)當(dāng)ServletRequest對(duì)象被創(chuàng)建時(shí),Web容器將調(diào)用此方法。該方法接收ServletRequestEvent事件對(duì)象,通過此對(duì)象可獲得當(dāng)前被創(chuàng)建的ServletRequest對(duì)象;requestDestroyed(ServletRequestEventsre)當(dāng)ServletRequest對(duì)象被銷毀時(shí),Web容器調(diào)用此方法,同時(shí)向其傳遞ServletRequestEvent事件對(duì)象。ServletRequestListener上述事件處理方法中,ServletRequestEvent為一個(gè)事件類,用于通知Web應(yīng)用程序中ServletRequest對(duì)象的改變。ServletRequestEvent的方法及說明:ServletRequestListener方法說明getServletRequest()返回改變前的ServletRequest對(duì)象ServletRequestAttributeListener接口用于監(jiān)聽ServletRequest(request)范圍內(nèi)屬性的創(chuàng)建、刪除和修改。當(dāng)Web容器中聲明了一個(gè)實(shí)現(xiàn)ServletRequestAttributeListener接口的監(jiān)聽器后,Web容器在ServletRequest請(qǐng)求域?qū)傩园l(fā)生改變時(shí)就會(huì)產(chǎn)生一個(gè)ServletRequestAttributeEvent對(duì)象,然后再調(diào)用監(jiān)聽器中的相應(yīng)事件處理方法。ServletRequestAttributeListenerServletRequestAttributeListener接口中定義了如下三個(gè)事件處理方法:attributeAdded(ServletRequestAttributeEventevent)當(dāng)程序把一個(gè)屬性存入request范圍時(shí),Web容器調(diào)用此方法,并向其傳遞ServletRequestAttributeEvent事件對(duì)象;attributeRemoved(ServletRequestAttributeEventevent)當(dāng)程序把一個(gè)屬性從request范圍刪除時(shí),Web容器調(diào)用此方法,并向其傳遞ServletRequestAttributeEvent事件對(duì)象;attributeReplaced(ServletRequestAttributeEventevent)當(dāng)程序替換request范圍內(nèi)的屬性時(shí),Web容器調(diào)用此方法,并向其傳遞ServletRequestAttributeEvent事件對(duì)象。ServletReque

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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ǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論