1. 程式人生 > >Filter,一種aop程式設計思想的體現

Filter,一種aop程式設計思想的體現

filter是Servlet規範裡的一個高階特性,只用於對request、response的進行修改。

filter提出了FilterChain的概念,客戶端請求request在抵達servlet之前都會經過filterChain裡的所有fiter,如圖所示:

filterchain工作原理,(用processOn畫的)

在web.xml中配置filter,當啟動伺服器時會例項化,並且會初始化,當有網路請求時會進行過濾操作,當 伺服器關閉時,會進行銷燬,全過程如下圖所示:

filter生命週期

filter類需實現fiter介面,需複寫裡面的三個方法,其中init(),在初始化時呼叫;doFiler()方法每次都會呼叫,在這個方法中一定要執行chain.doFilter(),否則request不會交給後面的filter或者servler;ondestroy()在關閉伺服器時呼叫。

 
 

配置filter:

 
 

其中,url_pattern可以配置多個,也可以用萬用字元,當訪問滿足路徑匹配,並且符合dispatcher時,request會被filter攔截進行處理,處理完後的response再次被filter攔截,可以進行處理。

其中dispatcher 預設REQUEST,四種不同的dispatcher:

  • REQUEST:請求時有效
  • FORWARD:當某servlet通過forward到該servlet才有效
  • INCLUDE: jsp通過< jsp: incluser/> 請求servlet有效
  • ERROR: < %@page errorPage="" % >有效

filter的特性使它可以處理特殊的工作,例如防盜鏈,字元編碼的處理,日誌記錄,資料加密,過濾一些黑詞等等。

例如: 防盜鏈圖片,當其他網站請求本網站圖片資源時顯示錯誤的圖片,新航道雅思班只有本應用先生的圖片才顯示正確的圖片,程式碼如下:

 
 

在web.xml中配置:

 
 

當訪問images下的所有圖片會經過該filter,根據訪問頭資訊,如果說本站點的訪問則顯示正確圖片,否則先生錯誤圖片。

直接上程式碼:

 
 

在web.xml中配置:

 
 

其中頁面編碼方式也必須一致,希望全部用utf-8,另外需要配置Tomcat的/config/server.xml編碼:

 
 

另外,還有比較常見的日誌記錄filter、異常捕捉filter、許可權校驗、內容替換filter等等。

filter有很大的彈性機制,功能強大,而且跟servlet、jsp沒耦合.filter是現在面向切面程式設計aop的一種思想體現,它能夠勝任很多工作。

2.5的fiter需要在web.xml中配置,執行順序按照配置順序,另外3.0可以用註解的方式配置filter,此時沒有配置的順序。