對於一個web應用程序來說,過濾器是處於web容器內的一個組件,它會過濾特定請求資源請求信息和響應信息。一個請求來到時,web容器會判斷是否有過濾器與該信息資源相關聯,如果有則交給過濾器處理,然后再交給目標資源,響應的時候則以相反的順序交給過濾器處理,最后再返回給用戶瀏覽器。
過濾器類需要實現javax.servlet.Filter,該接口的doFilter()方法是業務處理的核心代碼區,類似於servlet的service()方法。doFilter()方法的參數列表有一個FilterChain接口的實現對象,它只有一個方法doFilter(),在調用該方法之前的代碼會在達到目標資源前執行,之后的代碼會在目標資源已經響應后執行,例如:
public class MyFilter implements Filter{ //過濾器的邏輯業務方法 public void doFilter(ServletRequest req,ServletResponse res,FilterChain chain)throws IOException,ServletException{ //達到目標資源前的代碼 ... //該方法的調用會將請求轉發給下一個過濾器或目標資源 chain.doFilter(req,res); //目標資源響應后的代碼 ... } public void init(FilterConfig f)throws ServletException{} public void destroy(){} }
web.xml配置:
<filter> <filter-name>MyFilter</filter-name> <filter-class>MyFilter</filter-class>Filter完整類名 </filter> <filter-mapping> <filter-name>MyFilter</filter-name> <url-pattern>/*Servlet</url-pattern> </filter-mapping>
凡是請求以“Servlet”結尾的URL資源時,該過濾器都會起到過濾作用。