1 <filter> 2 <!--過濾器名稱--> 3 <filter-name>UserFilter</filter-name> 4 <!--過濾器類的包路徑--> 5 <filter-class>com.filter.UserFilter</filter-class> 6 </filter> 7 <!--過濾器映射--> 8 <filter-mapping> 9 <filter-name>UserFilter</filter-name> 10 <!--指定過濾器作用的對象--> 11 <url-pattern>*.jsp</url-pattern> 12 </filter-mapping>
Filter的應用場景:
1、通過控制對chain.doFilter的方法的調用,來決定是否需要訪問目標資源。
比如,可以在用戶權限驗證等等。判斷用戶是否有訪問某些資源的權限,有權限放行,沒權限不執行chain.doFilter方法。
2、通過在調用chain.doFilter方法之前,做些處理來達到某些目的。
比如,解決中文亂碼的問題等等。可以在doFilter方法前,執行設置請求編碼與響應的編碼。甚至可以對request接口進行封裝裝飾來處理get請求方式的中文亂碼問題(重寫相應的request.getParameter方法)。
3、通過在調用chain.doFilter方法之后,做些處理來達到某些目的。
比如對整個web網站進行壓縮。在調用chain.doFilter方法之前用類A對response對象進行封裝裝飾,重寫getOutputStream和重寫getWriter方法。在類A內部中,將輸出內容緩存進ByteArrayOutputStream流中,然后在chain.doFilter方法執行后,獲取類A中ByteArrayOutputStream流緩存數據,用GZIPOutputStream流進行壓縮下。