Filter,一種aop程式設計思想的體現
filter是Servlet規範裡的一個高階特性,只用於對request、response的進行修改。
filter提出了FilterChain的概念,客戶端請求request在抵達servlet之前都會經過filterChain裡的所有fiter,如圖所示:
在web.xml中配置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,此時沒有配置的順序。