1. 程式人生 > >SpringMvc的過濾器。

SpringMvc的過濾器。

數據 AC servle str color 就是 裏的 tex 需要

一:過濾器的原理:

過濾器放在web資源之前,可以在請求抵達它所應用的web資源(可以是一個Servlet、一個Jsp頁面,甚至是一個HTML頁面)之前截獲進入的請求,並且在它返回到客戶之前截獲輸出請求。

Filter:用來攔截請求,處於客戶端與被請求資源之間,目的是重用代碼。Filter鏈,在web.xml中哪個先配置,哪個就先調用。在filter中也可以配置一些初始化參數。

Java中的Filter 並不是一個標準的Servlet ,它不能處理用戶請求,也不能對客戶端生成響應。 主要用於對HttpServletRequest 進行預處理,也可以對HttpServletResponse 進行後處理,是個典型的處理鏈。

二:Filter 有如下幾個種類:

l 用戶授權的Filter: Filter 負責檢查用戶請求,根據請求過濾用戶非法請求。

l 日誌Filter: 詳細記錄某些特殊的用戶請求。

l 負責解碼的Filter: 包括對非標準編碼的請求解碼。

l 能改變XML 內容的XSLTFilter 等。

三:Filter 有如下幾個用處

l 在HttpServletRequest 到達Servlet 之前,攔截客戶的HttpServletRequest 。

l 根據需要檢查HttpServletRequest ,也可以修改HttpServletRequest 頭和數據。

l 在HttpServletResponse 到達客戶端之前,攔截HttpServletResponse 。

l 根據需要檢查HttpServletResponse ,可以修改HttpServletResponse 頭和數據。

四:創建一個Filter 只需兩個步驟:
(1)創建Filter 處理類:

(2)在web.xml 文件中配置Filter 。

創建Filter 必須實現javax.servlet.Filter 接口,在該接口中定義了三個方法。
? void init(FilterConfig config): 用於完成Filter 的初始化。
? void destroy(): 用於Filter 銷毀前,完成某些資源的回收。
? void doFilter(ServletRequest request, ServletResponse response,FilterChain chain): 實現過濾功能,該方法就是對每個請求及響應增加的額外處理。

過濾器Filter也具有生命周期:init()->doFilter()->destroy(),由部署文件中的filter元素驅動。

參照編碼過濾器示例來查看怎麽實現的

  1. 首先配置在web.xml文件裏的規則如下:
     1 <!-- 編碼處理過濾器 -->
     2 
     3    <filter>
     4 
     5       <filter-name>encodingFilter</filter-name>
     6 
     7       <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
     8 
     9       <init-param>
    10 
    11          <param-name>encoding</param-name>
    12 
    13          <param-value>utf-8</param-value>
    14 
    15       </init-param>
    16 
    17       <init-param>
    18 
    19          <param-name>forceEncoding</param-name>
    20 
    21          <param-value>true</param-value>
    22 
    23       </init-param>
    24 
    25     </filter>
    26 
    27     
    28 
    29     <filter-mapping>
    30 
    31        <filter-name>encodingFilter</filter-name>
    32 
    33        <url-pattern>*.do</url-pattern>
    34 
    35     </filter-mapping>

    其中,filter-class 為過濾器Filter類,init-prama為註入的set參數

    Filter-mapping中的url-pattern為過濾的url類型

  2. 設置編碼的核心代碼為
  3.  1 @Override
     2 
     3    protected void doFilterInternal(
     4 
     5          HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
     6 
     7          throws ServletException, IOException {
     8 
     9  
    10 
    11       if (this.encoding != null && (this.forceEncoding || request.getCharacterEncoding() == null)) {
    12 
    13          request.setCharacterEncoding(this.encoding);
    14 
    15          if (this.forceEncoding) {
    16 
    17             response.setCharacterEncoding(this.encoding);
    18 
    19          }
    20 
    21       }
    22 
    23       filterChain.doFilter(request, response);
    24 
    25    }

    其中filterChain為過濾器鏈,表示執行完這個過濾器之後接著執行下一個過濾器

過濾器的運行是依賴於servlet容器的。所以配置在web.xml中。

攔截器是springmvc框架的。所以要配置在springmvc.xml文件中。

SpringMvc的過濾器。