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