------------恢復內容開始------------
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")})
個人理解【新手】 :攔截器就是為了匹配自己是否能訪問該頁面,條件去判斷,當不滿足條件是無法調轉該頁面,條件達成時可以通過攔截器到達該頁面。例如在網頁登錄成功后可以訪問更多界面,路人未登錄時無法進入一些界面,例如:支付界面,付費頁面等
------------恢復內容結束------------