作java web開發 不管是新手仍是老手 都不可避免的要接觸到filter和servlet 乃至於不少狀況下都要自定義filter和servlet 他們都是有生命週期的 基本的相似初始化方法和銷燬方法比較好理解 再也不贅述。 java
filter 是攔截器 過濾器的意思 當客戶端發起一個請求的時候 請求信息以request對象的方法傳入到服務端 在web.xml中 能夠自定義不少filter web容器 將他們組織成相似一個鎖鏈(chain)的東西 對請求進行攔截。若是你看過spring中aop部分的ProxyFactoryBean的源碼 會發現裏面的模式和filter幾乎是同樣的 web
invocation = new ReflectiveMethodInvocation(proxy, target, method, args, targetClass, chain); // Proceed to the joinpoint through the interceptor chain. retVal = invocation.proceed();
這個裏面的chain便是一個鏈 對調用某目前對象方法進行相應的攔截 spring
可是在javax.servlet.Filter中 還有個dispatcher參數 這個參數的取值爲REQUEST,FORWARD,INCLUDE和ERROR 表示該請求方式 默認狀況下是REQUEST 也即瀏覽器發起的請求。 其它方式 好比request.getRequestDispatcher("xx").forward(request, response);這種方式 該filter是不進行攔截的。其它幾個也是相似。 瀏覽器
servlet你能夠理解爲一個處理動做 經過servlet-mapping中的url-pattern對請求路徑進行相應的攔截 它是沒有相似filter中的dispatcher參數的。 app
咱們目前接觸的比較多的filter有 CharacterEncodingFilter: 對請求內容進行統一編碼
FilterDispatcher:struts2中的核心控制器 框架
Servlet比較出名是springMVC中的DispatcherServlet 是一個標準的乾淨的MVC框架 編碼