javaWeb專案中的過濾器
何為過濾器:
過濾器是處於客戶端與伺服器資原始檔之間的一道過濾網,在訪問資原始檔之前,通過一系列的過濾器對請求進行修改、判斷等,把不符合規則的請求在中途攔截或修改。也可以對響應進行過濾,攔截或修改響應
過濾器中的三個主要方法:
1. doFilter(ServletRequest, ServletResponse, FilterChain):這是一個完成過濾行為的方法。這同樣是上游過濾器呼叫的方法。引入的FilterChain物件提供了後續過濾器所要呼叫的資訊。如果該過濾器是過濾器鏈中的最後一個過濾器,則將請求交給被請求資源。也可以直接給客戶端返回響應資訊。
2. init(FilterConfig):由Web容器來呼叫完成過濾器的初始化工作。它保證了在第一次doFilter()呼叫前由容器呼叫。您能獲取在 web.xml 檔案中指定的初始化引數。
3. destroy():由Web容器來呼叫來釋放資源,doFilter()中的所有活動都被該例項終止後,呼叫該方法
如何使用:
- 編寫一個過濾器的類實現Filter介面
- 實現介面中尚未實現的方法(著重實現doFilter方法)
- 在web.xml中進行配置(主要是配置要對哪些資源進行過濾)
XML配置:
url-pattern配置:
url-pattern主要有四種匹配方式
(a)精確匹配,就是填寫jap或Servlet等需要過濾的請求的具體地址,例如:/Filter/TestFilter
(b)擴充套件匹配,由“*”號和副檔名組成,例如*.jsp
(c)路徑字首匹配,包含一個目錄和一個/* 例如:/Servlet/*指的是對Servlet目錄下的所有資源進行過濾
(d)全部匹配,使用/*,指的是對所以資源都過濾
使用Filter的好處:
在Filter執行的整個過程中客戶端和目標資源是不知道過濾器的存在的。Filter提供的是一種宣告式的服務,即在不用在原程式上做任何修改,只需要編寫Filter,原程式想用Filter,只需要在XML檔案中宣告一下即可。他具有可插拔的能力,用的時候配上web.XML,不用的時候只需要修改web.xml,對整個系統沒有影響,這種宣告式的服務非常方便,也非常強大。
其次,使用Filter進行控制業務也非常方便,比如驗證使用者是否登入,是否有操作許可權,判斷Session,字符集等,放到Filter裡,可以省去大量重複的程式碼和繁瑣的控制