1. 程式人生 > >Filter過濾器(自動登陸、通用的字符集編碼的過濾【處理不同請求的亂碼問題】、。。。)

Filter過濾器(自動登陸、通用的字符集編碼的過濾【處理不同請求的亂碼問題】、。。。)

XML under amt 有關 filter過濾器 pre 繼承 擴展名 獲取

Filter過濾器:可以過濾(攔截)從客戶端向服務器發送的請求。

過濾器的作用:

  進行ip的過濾,臟話敏感詞語的過濾,自動登陸,響應壓縮。。。

過濾器的使用:

  1.編寫類實現Filter接口。

    destroy()銷毀
    doFilter(servletRequest request,ServletResponse response,FilterChain chain)攔截過濾
      eg:chain.doFilter(request,response);//執行此代碼表示放行到下一個過濾器中,如果沒有下一個過濾器那麽到達目標資源。
    init(FilterConfig filterConfig)初始化
  2.配置過濾器

1 <filter>
2       <filter-name></filter-name>
3       <filter-class></filter-class>   
4 </filter>
5 <filter-mapping>
6       <filter-name></filter-name>
7       <url-pattern>/*</url-pattern>   //需要攔截的路徑,路徑編寫同servlet
8 </filter-mapping>

過濾器的生命周期:

  創建:服務器啟動的時候就會創建
  銷毀:服務器關閉的時候

FilterConfig 過濾器的配置對象

  獲取該Filter的初始化參數【參數在web.xml中<filter>標簽中設置】 

  String getFilterName()
  String getInitParameter(String name)
  Enumeration getInitParameterNames()
  ServletContext getServletContext()

FilterChain 過濾器鏈對象

  當多個過濾器對同一個請求進行過濾攔截的時候就會形成一個過濾器鏈。(chain.doFilter()後的代碼也會執行)
  過濾器鏈中的過濾器的執行順序與<filter-mapping>的配置順序有關。

filter-mapping相關配置

<url-pattern>的配置:(亦可以攔截servlet)
  完全路徑匹配: 以/開始
  目錄匹配: 以/開始 以*結束
  擴展名匹配: 不能以/開始,以*開始。
<servlet-name>的配置:根據serlet的名稱攔截servlet(專門攔截servlet)
<dispatcher>的配置:(該配置如有需求可以配置多個,實現攔截所有請求)
  REQUEST:請求(默認值)
  FORWARD:轉發(攔截服務器端的請求轉發)
  INCLUDE:包含(攔截頁面進包含別的頁面)
  ERROR:錯誤頁面跳轉(全局錯誤頁面)
     eg:<dispatcher>FORWARD</dispatcher>

使用過濾器實現兩個案例:

1.自動登陸

2.通用的字符集編碼的過濾器(處理亂碼)
  增強request中的getParamter方法
    繼承;實則傳來的時httpservletrequest這個接口的一個實現類,這個類tomcat內部自動實現的我們不知道,所以繼承pass,這裏無法使用;
    裝飾著模式;增強的類和被增強類實現相同的接口,增強的類中獲得到被增強類的引用。可以使用。但是有個缺點,接口中方法太多,只需要增強一個方法,但是所有方法都要實現。
      (servlet規範裏面給我們已經提供了一個模板類HttpServletRequestWrapper,這個類用於增強httpservletrequest。我們只需要繼承這個類,增強自己需要增強的方法即可,其他方法不用管。)
    動態代理;被增強的類實現接口即可,可以使用。

Filter過濾器(自動登陸、通用的字符集編碼的過濾【處理不同請求的亂碼問題】、。。。)