在JavaWeb程序的開發(fā)中,配置Listener和Filter這兩個(gè)東西是必不可少的,我們之所以說這兩個(gè)東西,主要原因是關(guān)于和過濾器是比較有難度的,相較于之前的來說這個(gè)的難度在于xml文件的配置,只有這兩個(gè)東西掌握了之后,再學(xué)習(xí)相關(guān)的Java框架才會比較容易一些,他們都屬于Servlet中的高級技術(shù)。
Listener就是一個(gè)Java類用來其他的JavaBean的變化的配置。它的作用是負(fù)責(zé)web中的域?qū)ο?ServletContext、HttpSession、ServletRequest這三個(gè)對象,在Javaweb中,Listener的內(nèi)容主要是這三個(gè)對象的創(chuàng)建和銷毀他們分別是ServletContextListenner、ServletRequestListener、HttpSessionListener,這三對象屬性的變化他們分別是ServletContextAttributeListener、ServletRequestAttributeListener、HttpSessionAttributeListener,在session中javabean的狀態(tài)有兩個(gè)他們分別叫做鈍化和活化HttpSessionActivationListener、綁定和解綁HttpSessionBindingListener。
三個(gè)對象的創(chuàng)建和銷毀,ServletContextListener在創(chuàng)建的時(shí)候:服務(wù)器啟動(dòng)的時(shí)候,會為每一個(gè)項(xiàng)目都創(chuàng)建一個(gè)servletContext,在它銷毀的時(shí)候:服務(wù)器關(guān)閉的時(shí)候,或者項(xiàng)目被移除的時(shí)候,他是后期用來加載配置文件。ServletRequestListener是在請求來的時(shí)候創(chuàng)建的,是在響應(yīng)生成的時(shí)候銷毀的。HttpSessionListener是在java中次調(diào)用request.getSession的時(shí)候或者是jsp訪問的時(shí)候創(chuàng)建的,他的銷毀分三種情況:session超時(shí),手動(dòng)銷毀session,服務(wù)器非正常關(guān)閉。
三個(gè)對象屬性的變化ServletContextAttributeListener、ServletRequestAttributeListener、HttpSessionAttributeListener這三個(gè)屬性是在添加、刪除、替換的使用被的
session中javabean的狀態(tài)、HttpSessionBindingListener(綁定和解綁)它是用來檢測java是否添加到session或者從session中移除,HttpSessionActivationListener(鈍化和活化)所謂的鈍化就是avabean從session中序列化到磁盤上,那么活化就是javabean從磁盤上加載到了session中,可以通過配置文件修改javabean什么時(shí)候鈍化。HttpSessionBindingListener(綁定和解綁)是檢測java是否添加到session或者從session中移除。
Filter過濾器是一個(gè)實(shí)現(xiàn)了特殊接口的Java類.實(shí)現(xiàn)對請求資源的過濾的功能。過濾器主要是過濾請求和響應(yīng)的,他有自動(dòng)登錄、統(tǒng)一編碼、過濾關(guān)鍵字等作用。而Filter是一個(gè)接口。我們編寫filter步驟也是三步:1.編寫一個(gè)類,實(shí)現(xiàn)filter接口并且重寫方法。2.編寫配置文件,注冊filter并且綁定路徑。3.測試Filter過濾器,它的初始化方法是init(FilterConfig config),處理業(yè)務(wù)邏輯的方法doFilter(ServletRequest request, ServletResponse response, FilterChain chain)。它的銷毀操作的方法是destroy() 。
Filter的生命周期是這樣的,filter單實(shí)例多線程,filter在服務(wù)器啟動(dòng)的時(shí)候 ;服務(wù)器創(chuàng)建filter 調(diào)用init方法 實(shí)現(xiàn)初始化操作;請求來的時(shí)候,創(chuàng)建一個(gè)線程 根據(jù)路徑調(diào)用dofilter 執(zhí)行業(yè)務(wù)邏輯;當(dāng)filter被移除的時(shí)候或者服務(wù)器正常關(guān)閉的時(shí)候 調(diào)用destory方法 執(zhí)行銷毀操作.
FilterChain是過濾鏈,通過chain的dofilter方法,可以將請求放行到下一個(gè)過濾器,直到后一個(gè)過濾器放行才可以訪問到servlet|jsp,這里的doFilter()是放行方法。
url-pattern配置有完全匹配、目錄匹配、后綴名匹配三種,一個(gè)資源有可能被多個(gè)過濾器匹配成功,多個(gè)過濾器的執(zhí)行順序是按照web.xml中filter-mapping的順序執(zhí)行的。
到此為止,過濾器和就說完了,你了解他們怎么用了嗎?