① java中攔截器、過濾器、監聽器都有什麼區別
1、過濾器,是在java web中,你傳入的request,response提前過濾掉一些信息,或者提前設置一些參數,然回後再傳入servlet或者struts2的。
2、action進行業務邏輯答,比如過濾掉非法url(不是login.do的地址請求,如果用戶沒有登陸都過濾掉),或者在傳入servlet或者struts2的action前統一設置字元集,或者去除掉一些非法字元。
3、攔截器,是在面向切面編程的就是在你的service或者一個方法,前調用一個方法,或者在方法後調用一個方法比如動態代理就是攔截器的簡單實現,在你調用方法前列印出字元串(或者做其它業務邏輯的操作),也可以在你調用方法後列印出字元串,甚至在你拋出異常的時候做業務邏輯的操作。
② java web 過濾器跟攔截器的區別和使用
過濾器(filter):就是對請求起到過濾的作用,它在監聽器之後,作用在servlet之前,對請求進行過濾。
攔截器(interceptor):就是對請求和返回進行攔截,它作用在servlet的內部,具體來說有三個地方:servlet_1和servlet_2之間,即請求還沒有到controller層。servlet_2和servlet_3之間,即請求走出controller層次,還沒有到渲染時圖層。servlet_3和servlet_4之間,即結束視圖渲染,但是還沒有到servlet的結束。
它們之間的關系,可以用一張圖來表示:
③ spring中怎麼實現過濾器和監聽器
1、延遲載入過濾器
Hibernate 允許對關聯對象、屬性進行延遲載入,但是必須保證延遲載入的操作限於同一個 Hibernate Session 范圍之內進行。如果 Service 層返回一個啟用了延遲載入功能的領域對象給 Web 層,當 Web 層訪問到那些需要延遲載入的數據時,由於載入領域對象的 Hibernate Session 已經關閉,這些導致延遲載入數據的訪問異常。
Spring 為此專門提供了一個 OpenSessionInViewFilter 過濾器,它的主要功能是使每個請求過程綁定一個 Hibernate Session,即使最初的事務已經完成了,也可以在 Web 層進行延遲載入的操作。
<filter>
<filter-name>hibernateFilter</filter-name>
<filter-class>
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>hibernateFilter</filter-name>
<url-pattern>*.html</url-pattern>
</filter-mapping>
2、亂碼過濾器
對post亂碼的處理,如下
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>
org.springframework.web.filter.CharacterEncodingFilter①Spring編輯過濾器
</filter-class>
<init-param>②編碼方式
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>③強制進行編碼轉換
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>②過濾器的匹配URL
<filter-name>encodingFilter</filter-name>
<url-pattern>*.html</url-pattern>
</filter-mapping>
3、請求跟蹤日誌過濾器
程度調試者可以詳細地查看到有哪些請求被調用,請求的參數是什麼,請求是否正確返回等信息,需要將log4j設為debug
org.springframework.web.filter.: 該過濾器將請求的 URI 記錄到 Common 日誌中
4、WebAppRootListener
可以將 Web 應用根目錄添加到系統參數中,對應的屬性名可以通過名為「webAppRootKey」的 Servlet 上下文參數指定,默認為「webapp.root」,配置如下
<context-param>
<param-name>webAppRootKey</param-name>
<param-value>baobaotao.root</param-value>①Web應用根目錄以該屬性名添加到系統參數中
</context-param>
…
②負責將Web應用根目錄以webAppRootKey上下文參數指定的屬性名添加到系統參數中
<listener>
<listener-class>
org.springframework.web.util.WebAppRootListener
</listener-class>
</listener>
5、Log4jConfigListener監聽器
包括了 WebAppRootListener 的功能,也就是說,Log4jConfigListener 會自動完成將 Web 應用根目錄以 webAppRootKey 上下文參數指定的屬性名添加到系統參數中,在log4j.xml可以直接使用
6、Introspector 緩存清除監聽器
負責處理由 JavaBean Introspector 功能而引起的緩存泄露。IntrospectorCleanupListener 監聽器在 Web 應用關閉的時會負責清除 JavaBean Introspector 的緩存,在 web.xml 中注冊這個監聽器可以保證在 Web 應用關閉的時候釋放與其相關的 ClassLoader 的緩存和類引用。
④ java web 過濾器跟攔截器的區別和使用
區別如下:
1 、攔截器是基於java的反射機制的,而過濾器是基於函數回調。
2 、攔截器不依賴與servlet容器,過濾器依賴與servlet容器。
3 、攔截器只能對action請求起作用,而過濾器則可以對幾乎所有的請求起作用。
4 、攔截器可以訪問action上下文、值棧里的對象,而過濾器不能訪問。
5 、在action的生命周期中,攔截器可以多次被調用,而過濾器只能在容器初始化時被調用一次。
使用如下:
在Servlet作為過濾器使用時,它可以對客戶的請求進行處理。處理完成後,它會交給下一個過濾器處理,這樣,客戶的請求在過濾鏈里逐個處理,直到請求發送到目標為止。例如,某網站里有提交「修改的注冊信息」的網頁,當用戶填寫完修改信息並提交後,伺服器在進行處理時需要做兩項工作:判斷客戶端的會話是否有效;對提交的數據進行統一編碼。
這兩項工作可以在由兩個過濾器組成的過濾鏈里進行處理。當過濾器處理成功後,把提交的數據發送到最終目標;如果過濾器處理不成功,將把視圖派發到指定的錯誤頁面。
(4)java監聽器和過濾器擴展閱讀:
攔截器,在AOP(Aspect-Oriented Programming)中用於在某個方法或欄位被訪問之前,進行攔截然後在之前或之後加入某些操作。攔截是AOP的一種實現策略。
在Webwork的中文文檔的解釋為——攔截器是動態攔截Action調用的對象。它提供了一種機制可以使開發者可以定義在一個action執行的前後執行的代碼,也可以在一個action執行前阻止其執行。同時也是提供了一種可以提取action中可重用的部分的方式。
過濾器是一個程序,它先於與之相關的servlet或JSP頁面運行在伺服器上。過濾器可附加到一個或多個servlet或JSP頁面上,並且可以檢查進入這些資源的請求信息。