1. 程式人生 > >攔截器、過濾器、監聽器總結

攔截器、過濾器、監聽器總結

1.過濾器(Filter):

所謂過濾器顧名思義是用來過濾的,Java的過濾器能夠為我們提供系統級別的過濾,也就是說,能過濾所有的web請求,

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

    2.監聽器(Listener):

Java的監聽器,也是系統級別的監聽。監聽器隨web應用的啟動而啟動。Java的監聽器在c/s模式裡面經常用到,它

會對特定的事件產生產生一個處理。監聽在很多模式下用到,比如說觀察者模式,就是一個使用監聽器來實現的,在比如統計網站的線上人數。 又比如struts2可以用監聽來啟動。Servlet監聽器用於監聽一些重要事件的發生,監聽器物件可以在事情發生前、發生後可以做一些必要的處理。

    3.攔截器(Interceptor):

java裡的攔截器提供的是非系統級別的攔截,也就是說,就覆蓋面來說,攔截器不如過濾器強大,但是更有針對性。

Java中的攔截器是基於Java反射機制實現的,更準確的劃分,應該是基於JDK實現的動態代理。它依賴於具體的介面,在執行期間動態生成位元組碼。 攔截器是動態攔截Action呼叫的物件,它提供了一種機制可以使開發者在一個Action執行的前後執行一段程式碼,也可以在一個Action執行前阻止其 執行,同時也提供了一種可以提取Action中可重用部分程式碼的方式。在AOP中,攔截器用於在某個方法或者欄位被訪問之前,進行攔截然後再之前或 者之後加入某些操作。java的攔截器主要是用在外掛上,擴充套件件上比如 Hibernate Spring Struts2等,有點類似面向切片的技術,在用之前先要在

配置檔案即xml,檔案裡宣告一段的那個東西。

過濾器和攔截器非常相似,但是它們有很大的區別 最簡單明瞭的區別就是過濾器可以修改request,而攔截器不能 過濾器需要在servlet容器中實現,攔截器可以適用於javaEE,javaSE等各種環境 攔截器可以呼叫IOC容器中的各種依賴,而過濾器不能 過濾器只能在請求的前後使用,而攔截器可以詳細到每個方法 區別很多,大家可以去查下

總的來說 過濾器就是篩選出你要的東西,比如requeset中你要的那部分 攔截器在做安全方面用的比較多,比如終止一些流程