1. 程式人生 > >filter(過濾器)與攔截器(AOP)區別

filter(過濾器)與攔截器(AOP)區別

攔截器和過濾器的區別:

  1、攔截器是基於java的反射機制,過濾器是基於java的函式回撥

  2、攔截器不依賴於servlet容器,而過濾器依賴於servlet容器

  3、攔截器只能對action請求起作用,過濾器幾乎對所有的請求起作用

  4、攔截器可以訪問action上下文,值棧裡的物件,而過濾器不能訪問

  5、在action生命週期中,攔截器可以被多次呼叫,過濾器只能在servlet初始化時呼叫一次

  6、攔截器可以獲取IOC容器中的各個bean,過濾器不行,在攔截器中注入一個service可以呼叫邏輯業務

過濾器:

Servlet中的過濾器Filter是實現了javax.servlet.Filter介面的伺服器端程式,主要的用途是過濾字元編碼、做一些業務邏輯判斷等。其工作原理是,只要你在web.xml檔案配置好要攔截的客戶端請求,它都會幫你攔截到請求,此時你就可以對請求或響應(Request、Response)統一設定編碼,簡化操作;同時還可進行邏輯判斷,如使用者是否已經登陸、有沒有許可權訪問該頁面等等工作。它是隨你的web應用啟動而啟動的,只初始化一次,以後就可以攔截相關請求,只有當你的web應用停止或重新部署的時候才銷燬

攔截器:

攔截器是在面向切面程式設計中應用的,就是在你的service或者一個方法前呼叫一個方法,或者在方法後呼叫一個方法。是基於JAVA的反射機制。攔截器不是在web.xml,比如struts在struts.xml中配置,

總結:

1.過濾器:所謂過濾器顧名思義是用來過濾的,在Java web中,你傳入的request,response提前過濾掉一些資訊,或者提前設定一些引數,然後再傳入servlet或者struts的action進行業務邏輯,比如過濾掉非法url(不是login.do的地址請求,如果使用者沒有登陸都過濾掉),或者在傳入servlet或者struts的action前統一設定字符集,或者去除掉一些非法字元(聊天室經常用到的,一些罵人的話)。filter 流程是線性的, url傳來之後,檢查之後,可保持原來的流程繼續向下執行,被下一個filter, servlet接收等.

2.java的攔截器 主要是用在外掛上,擴充套件件上比如 hivernate spring struts2等 有點類似面向切片的技術,在用之前先要在配置檔案即xml檔案裡宣告一段的那個東西。