- 什么是攔截器
- 在AOP中用於在某個方法或字段被訪問之前,進行攔截然后再之前貨之后加入某些操作。攔截是AOP的一種實現策略。
- 攔截器是動態攔截Action調用的對象。它提供了一種機制可以使開發者定義一個action前后執行的代碼,也可以在一個action執行阻止其執行,同時也是提供了一種可以提取action可重用部分的方式。
- 實現原理:大部分是通過代理的方式來調用的。
- 自定義攔截器步驟:
- 自定義一個實現了Interceptor接口的類,或者繼承抽象類AbstractInterceptor。
- 在配置文件中注冊定義的攔截器。
- 在需要使用Action中引入定義的攔截器,為了方便也可以把攔截器定義為默認的攔截器。所有的Action都會被這個攔截器攔截
- 什么是過濾器?
- 過濾器是一個程序,他先於與之相關的servlet或jsp也可以運行在服務器上。過濾器可附加到一個或多個servlet或jsp頁面上,並且可以檢查進入這些資源的請求信息。
- 以常規的方式調用資源
- 利用修改過的請求信息調用資源
- 調用資源,但在發送響應到客戶機前對其進行修改
- 阻止該資源調用,代之以轉到其他的資源,返回一個特定的狀態代碼或生成替換輸出。
- 過濾器的基本原理:在Servlet作為過濾器使用時,他可以對客戶的請求進行處理。處理完成后,他會交給下一個過濾器處理,這樣,客戶的請求在過濾器鏈中逐個處理,直到請求發送到目標為止。
- 過濾器是一個程序,他先於與之相關的servlet或jsp也可以運行在服務器上。過濾器可附加到一個或多個servlet或jsp頁面上,並且可以檢查進入這些資源的請求信息。
- 攔截器與過濾器的區別
- 攔截器是基於java的反射機制的,而過濾器是基本函數回調。
- 攔截器不依賴於servlet容器,過濾器依賴於servlet容器
- 攔截器只能對action請求起作用,過濾器可以對幾乎所有的請求起作用
- 攔截器可以訪問action上下文、值棧里的對象,而過濾器不能訪問
- 在action的生命周期中,攔截器可以被多次調用,而過濾器只能在容器初始化時被調用過一次。
- 過濾器(Filter):所謂過濾器顧名思義是用來過濾的,Java的過濾器能夠為我們提供系統級別的過濾,也就是說,能過濾所有的web請求,這一點,是攔截器無法做到的。在Java Web中,你傳入request,response提前過濾掉一些信息,或者提前設置一些參數,然后再傳入servlet或者struts的action進行業務邏輯,比如過濾掉非法url(不是login.do的地址請求,如果用戶沒有登陸都過濾掉),或者在傳入servlet或者struts的action前統一設置字符集,或者去除掉一些非法字符(聊天室經常用到的,一些罵人的話)。filter 流程是線性的,url傳來之后,檢查之后,可保持原來的流程繼續向下執行,被下一個filter, servlet接收。
- 監聽器(Listener):Java的監聽器,也是系統級別的監聽。監聽器隨web應用的啟動而啟動。Java的監聽器在c/s模式里面經常用到,它會對特定的事件產生產生一個處理。監聽在很多模式下用到,比如說觀察者模式,就是一個使用監聽器來實現的,在比如統計網站的在線人數。又比如struts2可以用監聽來啟動。Servlet監聽器用於監聽一些重要事件的發生,監聽器對象可以在事情發生前、發生后可以做一些必要的處理。
- 攔截器(Interceptor):java里的攔截器提供的是非系統級別的攔截,也就是說,就覆蓋面來說,攔截器不如過濾器強大,但是更有針對性。Java中的攔截器是基於Java反射機制實現的,更准確的划分,應該是基於JDK實現的動態代理。它依賴於具體的接口,在運行期間動態生成字節碼。攔截器是動態攔截Action調用的對象,它提供了一種機制可以使開發者在一個Action執行的前后執行一段代碼,也可以在一個Action執行前阻止其執行,同時也提供了一種可以提取Action中可重用部分代碼的方式。在AOP中,攔截器用於在某個方法或者字段被訪問之前,進行攔截然后再之前或者之后加入某些操作。java的攔截器主要是用在插件上,擴展件上比如 Hibernate Spring Struts2等,有點類似面向切片的技術,在用之前先要在配置文件即xml,文件里聲明一段的那個東西。