1.1.過濾器概述
過濾器的基本功能就是對servlet容器調用servlet的過程進行攔截,從而在servlet進行響應處理的前後實現一些特殊的功能。
1.2.過濾器基本工作原理
servlet API一共定義了三個接口類來供開發人員編寫Filter程序,分別爲Filter、FilterChain、FilterConfig。與servlet程序相似,她也是由servlet容器來調用和執行的,Filter通常用來攔截瀏覽器的servlet請求,因爲不管請求的是什麼資源,最終web服務器都是以servlet程序的形式來運行的,例如,jsp要先被翻譯成servlet、靜態圖片和HTML文件是由默認的servlet負責處理的,所以,servlet通常就是Filter所要攔截的資源。效果圖如下:
1.3.過濾器鏈
過濾器鏈效果圖:
從圖中可看出,過濾器鏈中的只要有任意一個Filter的沒執行FilterChain.doFilter方法,則目標方法就不會被執行。
1.4.Filter接口
①.概述
該接口定義了三個方法,init()、doFilter()、destroy()
②.init
在web應用程序啓動時,web服務器(web容器)將根據web.xml的配置信息來創建每個Filter的實例對象,並將其保存在內存中。web容器創建完Filter實例後,將立即調用該Filter對象的init方法。init方法在Filter的生命週期中只執行一次,Web容器在調用init方法時,會傳入一個包含Filter配置和運行環境信息的FilterConfig對象。如圖:
③.doFilter
當一個Filter對象能夠攔截的訪問請求到達後,servlet容器將調用該Filter的doFilter方法,值得注意的是,只有當Filter鏈中的Filter的init方法執行完後,才能把請求交給這個Filter處理。
④.destroy
只有當容器卸裝Filter之前纔會執行這個方法,這個方法也只執行一次。
1.5.FilterChain接口
①.過濾器鏈
1.6.FilterConfig接口
①.Filter程序需要在web.xml文件中註冊,在註冊Filter程序時,還可以對設置其初始化參數,
與普通的servlet程序一樣,Filter程序也很可能需要訪問servlet容器。servlet規範將代表servletContext對象和Filter的配置參數信息都封裝到一個稱爲FilterConfig對象中,FilterConfig接口必須對外提供獲取FilterConfig對象的方法,以便在Filter程序中可以調用這些方法來獲取ServletContext,以及獲取web.xml文件中爲Filter設置的友好名稱和初始化參數。
FilterConfig接口定義瞭如下的方法
getFilerName獲取Filter的友好名稱
getServletContext獲取上下文
getInitParameter獲取某個名稱的初始化參數值
getInitParameterNames獲取所有的參數名稱
1.7.Filter的高級應用