1. 程式人生 > >(java)過濾器與攔截器

(java)過濾器與攔截器

1.過濾器
        過濾器是隨你的web應用啟動而啟動的,只初始化一次,以後就可以攔截相關請求,只有當你的web應用停止或重新部署的時候才銷燬。    
        請求和迴應的過濾,傳入的request,response提前過濾掉一些資訊,或者提前設定一些引數,然後再傳入servlet或者struts的action進行業務邏輯,比如過濾掉非法url(不是login.do的地址請求,如果使用者沒有登陸都過濾掉)
        在請求進入容器之後,還未進入Servlet之前進行預處理;在請求結束返回給前端之前進行後期處理。處理完成後,它會交給下一個過濾器處理,直到請求傳送到目標為止。

2.攔截器
    攔截器,在AOP中用於在某個方法或欄位被訪問之前,進行攔截然後在之前或之後加入某些操作。比如日誌,安全等。
攔截器鏈,就是將攔截器按一定的順序聯結成一條鏈。在訪問被攔截的方法或欄位時,攔截器鏈中的攔截器就會按其之前定義的順序被呼叫。一般攔截器方法都是通過動態代理的方式實現。


3.區別
        1.攔截器是基於動態代理的,而過濾器是基於函式回撥。
   2.攔截器不依賴於servlet容器,通過動態代理實現,過濾器依賴於servlet容器。
   3.攔截器可以在方法前後,異常前後等呼叫,而過濾器只能在請求前和請求後各呼叫一次。
        4.攔截器可以訪問action上下文、值棧裡的物件,而過濾器不能訪問。  

        5.攔截器可以獲取IOC容器中的各個bean,而過濾器就不行,這點很重要,在攔截器裡注入一個service,可以呼叫業務邏輯。