------------恢復內容開始------------
Filter 過濾器的使用
1、過濾器需要實現 implements Filter
2、屬於Servlet規範,實現Filter介面,需要實現Filter介面,需要實現其中的三個方法
- init( ) 初始化方法
- doFilter( ) 放行,
- destroy() 銷燬,結束
3、過濾器的配置和Servlet的配置類似,在web.xml只需要將Servlet修改filter
<filter> <filter-name>HelloFilter</filter-name> <filter-class>com.kong.filter.HelloFilter</filter-class> </filter> <filter-mapping> <filter-name>HelloFilter</filter-name> <url-pattern>/*【過濾範圍】</url-pattern> </filter-mapping> <filter>
4、當設定成攔截/*,就是攔截所有的請求,因此會被Filter攔截,並執行其中的方法,其中必須在doFilter中實現放行操作:chain.doFilter(request,response),否則過濾器不會放行,S0ervlet中收不到任何請求。
所有
chain.doFilter(request,response)成為了一條分界線,分界線前一部分的請求是攔截Filter執行,分界線後面的程式碼即將響應給客戶端執行
5、順序問題:如果設定了web.xml配置檔案,就按照配置的maping順序執行,如果是註解方式配置,就按照全類名【包名+類名】排序的順序。
6、 過濾器的生命週期和Servlet的生命週期類似:
- 例項化 一次
- 初始化 : init() 一次
- 服務 : doFilter() 多次
- 銷燬 : destroy() 一次
7、過濾器的匹配規則
- 精確匹配: /hello.do :攔截/hello.do的請求 攔截/xxx的 請求
- 模糊匹配: *.xx : 攔截以*.xx結尾的請求 /* :攔截所有的請求
8、給過濾器配置初始化引數
- xml方式
-
在filter註解後面,在註解<filter-mapping></filter-mapping>後面新增: <filter> <init-param> <param-name>parameter</param-name> <param-value>value</param-value> </init-param> </filter>
- 註解方式
-
1 在Filter類的頭頂設定註解,並配置初始化引數,設定註解就不需要設定xml,二者不能衝突,重新重載入 。 2 @WebFilter(urlPatterns 3 ={"/*"}, initParams = {@WebInitParam(name="encoding", 4 value = "GBK")} )
1 在Filter類頭上設定註釋,並初始化引數 ,不能和xml同時設定,會導致重載入。 2 例項程式碼: 3 @WebFilter(urlPatterns 4 = {"/*"},initParams = {@WebInitParam(name="parameter", 5 value = "value")})
個人理解【新手】 :攔截器就是為了匹配自己是否能訪問該頁面,條件去判斷,當不滿足條件是無法調轉該頁面,條件達成時可以通過攔截器到達該頁面。例如在網頁登入成功後可以訪問更多介面,路人未登入時無法進入一些介面,例如:支付介面,付費頁面等
------------恢復內容結束------------