Filter過濾器的使用


------------恢復內容開始------------

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")})

     個人理解【新手】 :攔截器就是為了匹配自己是否能訪問該頁面,條件去判斷,當不滿足條件是無法調轉該頁面,條件達成時可以通過攔截器到達該頁面。例如在網頁登錄成功后可以訪問更多界面,路人未登錄時無法進入一些界面,例如:支付界面,付費頁面等

 

 

 

 
        

------------恢復內容結束------------


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM