java過濾器和攔截器的區別
A. java web 過濾器跟攔截器的區別和使用
java web 過濾器跟攔截器的區別和使用分別介紹如下:
1、過濾器的使用
Filter主要對客戶端的請求和伺服器的響應進行過濾,使用場景:
客戶端的請求到達伺服器,伺服器真正開始處理這個請求之前,要經過Filter的過濾
伺服器真正的處理完這個請求,生成響應之後,要經過Filter的過濾,才能將響應發送給客戶端
作用:可以通過Filter技術,對web伺服器管理的所有web資源,例如JSP、Servlet、靜態圖片文件或靜態 html文件等進行攔截,從而實現一些特殊的功能。例如實現URL級別的許可權訪問控制、過濾敏感詞彙、壓縮響應信息等一些高級功能。
配置Filter
同開發Servlet一樣,寫完了類,接下來就是配置了,我們需要在web.xml文件中配置Filter。具體的配置和Servlet配置如出一轍。
<filter>
<filter-name>log</filter-name>
<filter-class>com.jellythink.practise.LogFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>log</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>
上面配置中比較重要的就是url-pattern和dispatcher了。
過濾類:
public class LogFilter implements Filter
{
private FilterConfig config;
public void init(FilterConfig config)
{
this.config = config;
}
public void destroy()
{
this.config = null;
}
// 這個方法是Filter的核心方法
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException
{
// 對用戶的請求進行處理
ServletContext context = this.config.getServletContext();
long begin = System.currentTimeMillis();
// 輸出過濾信息
System.out.println("開始過濾...");
HttpServletRequest hRequest = (HttpServletRequest)request;
System.out.println("Filter已經截獲到用戶請求的地址:" + hRequest.getServletPath());
// 處理完以後,將請求交給下一個Filter或者Servlet處理
chain.doFilter(request, response);
// 對伺服器的響應進行處理
long end = System.currentTimeMillis();
System.out.println("過濾結束");
System.out.println("請求被定為到:" + hRequest.getRequestURI() + "; 所花費的時間為:" + (end - begin));
}
}
2、攔截器的使用:
攔截器的主要作用是攔截用戶的請求並進行相應的處理。比如通過它來進行許可權驗證,或者是來判斷用戶是否登陸,或者是像12306那樣子判斷當前時間是否是購票時間。
1.在SpringMVC的配置文件中加上支持MVC的schema
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation=" http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd"
下面是聲明示例:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">
這樣在SpringMVC的配置文件中就可以使用mvc標簽了,mvc標簽中有一個mvc:interceptors是用於聲明SpringMVC的攔截器的。
B. java web 過濾器跟攔截器的區別和使用
過濾器(filter):就抄是對請求起到過濾的作用,它在監聽器之後,作用在servlet之前,對請求進行過濾。
攔截器(interceptor):就是對請求和返回進行攔截,它作用在servlet的內部,具體來說有三個地方:servlet_1和servlet_2之間,即請求還沒有到controller層。servlet_2和servlet_3之間,即請求走出controller層次,還沒有到渲染時圖層。servlet_3和servlet_4之間,即結束視圖渲染,但是還沒有到servlet的結束。
它們之間的關系,可以用一張圖來表示:
C. java中攔截器 過濾器 監聽器都有什麼區別尤其是攔截器和過濾器
過濾器,是在java web中,你傳入的request,response提前過濾掉一些信息,或者提前設置一些參數,然後再傳入servlet或者struts2的
action進行業務邏輯,比如過濾掉非法url(不是login.do的地址請求,如果用戶沒有登陸都過濾掉),或者在傳入servlet或者
struts2的action前統一設置字元集,或者去除掉一些非法字元
攔截器,是在面向切面編程的就是在你的service或者一個方法,前調用一個方法,或者在方法後調用一個方法比如動態代理就是攔截器的簡單實現,在你調用方法前列印出字元串(或者做其它業務邏輯的操作),也可以在你調用方法後列印出字元串,甚至在你拋出異常的時候做業務邏輯的操作。
攔截器與過濾器的區別 :
攔截器是基於java的反射機制的,而過濾器是基於函數回調。
攔截器不依賴與servlet容器,過濾器依賴與servlet容器。
攔截器只能對action請求起作用,而過濾器則可以對幾乎所有的請求起作用。
攔截器可以訪問action上下文、值棧里的對象,而過濾器不能訪問。
在action的生命周期中,攔截器可以多次被調用,而過濾器只能在容器初始化時被調用一次
執行順序 :過濾前 - 攔截前 - Action處理 - 攔截後 -
過濾後。個人認為過濾是一個橫向的過程,首先把客戶端提交的內容進行過濾(例如未登錄用戶不能訪問內部頁面的處理);過濾通過後,攔截器將檢查用戶提交數
據的驗證,做一些前期的數據處理,接著把處理後的數據發給對應的Action;Action處理完成返回後,攔截器還可以做其他過程,再向上返回到過濾器的後續操作。
監聽器:這個東西在c/s模式裡面經常用到,他會對特定的事件產生產生一個處理。監聽在很多模式下用到。比如說觀察者模式,就是一個監聽來的。又比如struts2可以用監聽來啟動。Servlet監聽器用於監聽一些重要事件的發生,監聽器對象可以在事情發生前、發生後可以做一些必要的處理。
好比如果說Servlet的監聽器Listener,它是實現了javax.servlet.ServletContextListener
介面的伺服器端程序,它也是隨web應用的啟動而啟動,只初始化一次,隨web應用的停止而銷毀。主要作用是:
做一些初始化的內容添加工作、設置一些基本的內容、比如一些參數或者是一些固定的對象等等。
D. java中攔截器、過濾器、監聽器都有什麼區別
1、過濾器,是在java web中,你傳入的request,response提前過濾掉一些信息,或者提前設置一些參數專,然後再傳入屬servlet或者struts2的。
2、action進行業務邏輯,比如過濾掉非法url(不是login.do的地址請求,如果用戶沒有登陸都過濾掉),或者在傳入servlet或者struts2的action前統一設置字元集,或者去除掉一些非法字元。
3、攔截器,是在面向切面編程的就是在你的service或者一個方法,前調用一個方法,或者在方法後調用一個方法比如動態代理就是攔截器的簡單實現,在你調用方法前列印出字元串(或者做其它業務邏輯的操作),也可以在你調用方法後列印出字元串,甚至在你拋出異常的時候做業務邏輯的操作。
E. java中攔截器和過濾器的區別
1. 攔截器是基於java的反射機制的,而過濾器是基於函數回調。
2. 攔截器不依內賴與容servlet容器,過濾器依賴與servlet容器。
3. 攔截器只能對action請求起作用,而過濾器則可以對幾乎所有的請求起作用。
4. 攔截器可以訪問action上下文、值棧里的對象,而過濾器不能訪問。
5. 在action的生命周期中,攔截器可以多次被調用,而過濾器只能在容器初始化時被調用一次
F. JAVA攔截器與過濾器的作用,請詳細說下
Filter基於回調函數,我們需要實現的filter介面中doFilter方法就是回調函數,而interceptor則基於內java本身的反容射機制,這是兩者最本質的區別。
Filter是依賴於servlet容器的,即只能在servlet容器中執行,很顯然沒有servlet容器就無法來回調doFilter方法。而interceptor與servlet容器無關。
Filter的過濾范圍比Interceptor大,Filter除了過濾請求外通過通配符可以保護頁面,圖片,文件等等,而Interceptor只能過濾請求。
Filter的過濾例外一般是在載入的時候在init方法聲明,而Interceptor可以通過在xml聲明是guest請求還是user請求來辨別是否過濾
G. java中攔截器和過濾器的區別
過濾器和攔截器的區別:
①攔截器是基於java的反射機制的,而過濾器是基於函數回調。版
②攔截器不依賴與servlet容器,過權濾器依賴與servlet容器。
③攔截器只能對action請求起作用,而過濾器則可以對幾乎所有的請求起作用。
④攔截器可以訪問action上下文、值棧里的對象,而過濾器不能訪問。
⑤在action的生命周期中,攔截器可以多次被調用,而過濾器只能在容器初始化時被調用一次。
⑥攔截器可以獲取IOC容器中的各個bean,而過濾器就不行,這點很重要,在攔截器里注入一個service,可以調用業務邏輯。
H. JAVA過濾器和攔截器的區別
1 攔截器來是基於java的反自射機制的,而過濾器是基於函數回調。
2 攔截器不依賴與servlet容器,過濾器依賴與servlet容器。
3 攔截器只能對action請求起作用,而過濾器則可以對幾乎所有的請求起作用。
4 攔截器可以訪問action上下文、值棧里的對象,而過濾器不能訪問。
5 在action的生命周期中,攔截器可以多次被調用,而過濾器只能在容器初始化時被調用一次
I. java中攔截器和過濾器有什麼區別和共同之處
當然有復這個概念
struts只是制 java的一個封裝而已。什麼框架都是基於java的。
過濾器是在java web中,你傳入的request,response提前過濾掉一些信息,或者提前設置一些參數,然後再傳入servlet或者struts的 action進行業務邏輯,比如過濾掉非法url。主要為了減輕伺服器負載。減少壓力
攔截器是在面向切面編程的就是在你的service或者一個方法,前調用一個方法,或者在方法後調用一個方法。比如可以用攔截器做一些許可權管理 或者log之類的事情。
兩者作用是不同的。
J. Java中的過濾器、攔截器、監聽器分別是什麼意思
王朝*說的很全面了,翻閱了幾本資料後,從J2EE的角度略作補充吧。
1)首先是攔截器,攔截器是一種面向方面/切面編程(AOP Aspect-Oriented Programming),而面向切面就是將多個模塊的的通用服務進行分離,如許可權管理、日誌服務,他們在多個模塊中都會用到,就可以將其各自封裝為一個可重用模塊。而這些通用服務的具體實現是通過攔截器來完成,比如用戶客戶端訪問一些保密模塊都應先通過許可權審查的攔截器來進行許可權審查,確定用戶是否具有該項操作的許可權後方能向下執行。
2)過濾器,過濾器處於客戶端與Web資源(Servlet、JSP、HTML)之間,客戶端與Web資源之間的請求和響應都要通過過濾器進行過濾。舉例:在過濾器中定義了禁止訪問192.10.10.1這個地址,那麼當客戶端發出訪問192.10.10.1的請求時,經過過濾器後,客戶端得到的響應是出現該IP禁止訪問的提示。再舉個例子,我們J2EE項目中的許可權管理就是通過過濾器實現的,網站有不用身份的用戶(系統管理員、會員級用戶、瀏覽者臨時用戶),不用身份對系統的功能模塊具有不同的訪問許可權,可以將各功能模塊以*.do命名,然後在過濾器中配置過濾*.do,就可以控制不同級別用戶的訪問許可權了
3)監聽器,是針對事件而說的,可以說是事件監聽器,J2EE中事件主要有三類:ServletContext事件、會話事件和請求事件。以ServletContext對象的創建事件為例,利用針對ServletContext對象創建事件的監聽器來監聽,一旦監聽到有ServletContext對象的創建事件(比如項目啟動時的初化),就讀取相應的資料庫連接操作來保存供調用。簡單來說監聽器就是監聽一些對象和屬性等的增加、修改和刪除,一旦監聽到相應事件就會觸發某種活動,做出相應處理。
答案均系在圖書館查閱資料後手敲,不知滿意否,呵呵。