Ⅰ java web 過濾器跟攔截器的區別和使用
過濾器(filter):就是對請求起到過濾的作用,它在監聽器之後,作用在servlet之前,對請求進行過濾。
攔截器(interceptor):就是對請求和返回進行攔截,它作用在servlet的內部,具體來說有三個地方:servlet_1和servlet_2之間,即請求還沒有到controller層。servlet_2和servlet_3之間,即請求走出controller層次,還沒有到渲染時圖層。servlet_3和servlet_4之間,即結束視圖渲染,但是還沒有到servlet的結束。
它們之間的關系,可以用一張圖來表示:
Ⅱ 過濾器和攔截器的區別
區別是:
過濾器(filter)是輸送介質管道上不可缺少的一種裝置,通常安專裝在減壓閥、屬泄壓閥、定水位閥 ,方工過濾器其它設備的進口端設備。過濾器由筒體、不銹鋼濾網、排污部分、傳動裝置及電氣控制部分組成。待處理的水經過過濾器濾網的濾筒後,其雜質被阻擋,當需要清洗時,只要將可拆卸的濾筒取出,處理後重新裝入即可,因此,使用維護極為方便。
攔截器是動態攔截Action調用的對象。它提供了一種機制可以使開發者可以定義在一個action執行的前後執行的代碼,也可以在一個action執行前阻止其執行,同時也提供了一種可以提取action中可重用部分的方式。在AOP(Aspect-Oriented Programming)中攔截器用於在某個方法或欄位被訪問之前,進行攔截然後在之前或之後加入某些操作。
Ⅲ 過濾器和攔截器的區別
過濾器,是在java web中,你傳入的request,response提前過濾掉一些信息,或者提前設置一些參數,然後再傳入servlet或者struts的 action進行業務邏輯,比如過濾掉非法url(不是login.do的地址請求,如果用戶沒有登陸都過濾掉),或者在傳入servlet或者 struts的action前統一設置字元集,或者去除掉一些非法字元
攔截器,是在面向切面編程的就是在你的service或者一個方法,前調用一個方法,或者在方法後調用一個方法比如動態代理就是攔截器的簡單實現,在你調用方法前列印出字元串(或者做其它業務邏輯的操作),也可以在你調用方法後列印出字元串,甚至在你拋出異常的時候做業務邏輯的操作。
Ⅳ spring過濾器和攔截器的區別
①攔截器是基於java的反射機制的,而過濾內器是基於函數回調。
②攔容截器不依賴與servlet容器,過濾器依賴與servlet容器。
③攔截器只能對action請求起作用,而過濾器則可以對幾乎所有的請求起作用。
④攔截器可以訪問action上下文、值棧里的對象,而過濾器不能訪問。
⑤在action的生命周期中,攔截器可以多次被調用,而過濾器只能在容器初始化時被調用一次。
⑥攔截器可以獲取IOC容器中的各個bean,而過濾器就不行,這點很重要,在攔截器里注入一個service,可以調用業務邏輯。
Ⅳ 過濾器和攔截器的區別
過濾器可以簡單理解為「取你所想取」,忽視掉那些你不想要的東西;攔截器可以簡單理專解為「拒你所想屬拒」,關心你想要拒絕掉哪些東西,比如一個BBS論壇上攔截掉敏感詞彙。
1.攔截器是基於java反射機制的,而過濾器是基於函數回調的。
2.過濾器依賴於servlet容器,而攔截器不依賴於servlet容器。
3.攔截器只對action起作用,而過濾器幾乎可以對所有請求起作用。
4.攔截器可以訪問action上下文、值棧里的對象,而過濾器不能。
5.在action的生命周期里,攔截器可以多起調用,而過濾器只能在容器初始化時調用一次。
Ⅵ 攔截器(Interceptor)和過濾器(Filter)的區別和執行順序)
1)攔截器是基於java的反射機制的,而過濾器是基於函數回調。
2)攔截器是依賴於web框架,而過濾器是依賴於servlet容器。
3)攔截器只能對action請求起作用,而過濾器可以對request請求和response響應起作用。
3)攔截器可以處理業務邏輯,而過濾器不能。
4)在action的生命周期中,攔截器實例可以多次被調用,而過濾器實例只能在servlet容器初始化時被調用一次。
過濾器前 -> 攔截器前 -> action處理 -> 攔截器後 -> 過濾器後。
Ⅶ struts2攔截器和過濾器的區別
攔截器和過濾器的區別:
1、攔截器是基於java的反射機制的,而過濾器是基於函數回調
2、過濾器依賴與servlet容器,而攔截器不依賴與servlet容器
3、攔截器只能對action請求起作用,而過濾器則可以對幾乎所有的請求起作用
4、攔截器可以訪問action上下文、值棧里的對象,而過濾器不能
5、在action的生命周期中,攔截器可以多次被調用,而過濾器只能在容器初始化時被調用一次
攔截器 :是在面向切面編程的就是在你的service或者一個方法前調用一個方法,或者在方法後調用一個方法比如動態代理就是攔截器的簡單實現,在你調用方法前列印出字元串(或者做其它業務邏輯的操作),也可以在你調用方法後列印出字元串,甚至在你拋出異常的時候做業務邏輯的操作。
下面通過實例來看一下過濾器和攔截器的區別:
使用攔截器進行/admin 目錄下jsp頁面的過濾
[html]view plain
<packagename="newsDemo"extends="struts-default"
namespace="/admin">
<interceptors>
<interceptorname="auth"class="com.test.news.util.AccessInterceptor"/>
<interceptor-stackname="authStack">
<interceptor-refname="auth"/>
</interceptor-stack>
</interceptors>
<!--action-->
<actionname="newsAdminView!*"class="newsAction"
method="{1}">
<interceptor-refname="defaultStack"/>
<interceptor-refname="authStack">
</interceptor-ref>
下面是我實現的Interceptor class:
[java]view plain
packagecom.test.news.util;
importjava.util.Map;
importcom.opensymphony.xwork2.ActionContext;
importcom.opensymphony.xwork2.ActionInvocation;
importcom.opensymphony.xwork2.interceptor.AbstractInterceptor;
importcom.test.news.action.AdminLoginAction;
/**
*@authorchaoyin
*/
{
=-4291195782860785705L;
@Override
publicStringintercept()throwsException{
ActionContextactionContext=actionInvocation.getInvocationContext();
Mapsession=actionContext.getSession();
//exceptloginaction
Objectaction=actionInvocation.getAction();
if(){
returnactionInvocation.invoke();
}
//checksession
if(session.get("user")==null){
return"logout";
}
returnactionInvocation.invoke();//goon
}
}
過濾器:是在javaweb中,你傳入的request,response提前過濾掉一些信息,或者提前設置一些參數,然後再傳入servlet或者struts的 action進行業務邏輯,比如過濾掉非法url(不是login.do的地址請求,如果用戶沒有登陸都過濾掉),或者在傳入servlet或者 struts的action前統一設置字元集,或者去除掉一些非法字元.
使用過濾器進行/admin 目錄下jsp頁面的過濾,首先在web.xml進行過濾器配置:
[html]view plain
<filter>
<filter-name>accessfilter</filter-name>
<filter-class>
com.test.news.util.AccessFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>accessfilter</filter-name>
<url-pattern>/admin/*</url-pattern>
</filter-mapping>
下面是過濾的實現類:
[java]view plain
packagecom.test.news.util;
importjava.io.IOException;
importjavax.servlet.Filter;
importjavax.servlet.FilterChain;
importjavax.servlet.FilterConfig;
importjavax.servlet.ServletException;
importjavax.servlet.ServletRequest;
importjavax.servlet.ServletResponse;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
importjavax.servlet.http.HttpSession;
{
/**
*@authorchaoyin
*/
publicvoiddestroy(){
}
publicvoiddoFilter(ServletRequestarg0,ServletResponsearg1,
FilterChainfilterChain)throwsIOException,ServletException{
HttpServletRequestrequest=(HttpServletRequest)arg0;
HttpServletResponseresponse=(HttpServletResponse)arg1;
HttpSessionsession=request.getSession();
if(session.getAttribute("user")==null&&request.getRequestURI().indexOf("login.jsp")==-1){
response.sendRedirect("login.jsp");
return;
}
filterChain.doFilter(arg0,arg1);
}
publicvoidinit(FilterConfigarg0)throwsServletException{
}
}
Ⅷ 過濾器和攔截器的區別
攔截器與來過濾器的區別 :
攔截器自是基於java的反射機制的,而過濾器是基於函數回調。
攔截器不依賴與servlet容器,過濾器依賴與servlet容器。
攔截器只能對action請求起作用,而過濾器則可以對幾乎所有的請求起作用。
攔截器可以訪問action上下文、值棧里的對象,而過濾器不能訪問。
在action的生命周期中,攔截器可以多次被調用,而過濾器只能在容器初始化時被調用一次
執行順序 :過濾前 - 攔截前 - Action處理 - 攔截後 - 過濾後。個人認為過濾是一個橫向的過程,首先把客戶端提交的內容進行過濾(例如未登錄用戶不能訪問內部頁面的處理);過濾通過後,攔截器將檢查用戶提交數據的驗證,做一些前期的數據處理,接著把處理後的數據發給對應的Action;Action處理完成返回後,攔截器還可以做其他過程(還沒想到要做啥),再向上返回到過濾器的後續操作。
Ⅸ 攔截器和過濾器區別
1、過濾器和攔截器觸發時機不一樣,過濾器是在請求進入容器後,但請求進入servlet之前進行預處理的。請求結束返回也是,是在servlet處理完後,返回給前端之前。
2、攔截器可以獲取IOC容器中的各個bean,而過濾器就不行,因為攔截器是spring提供並管理的,spring的功能可以被攔截器使用,在攔截器里注入一個service,可以調用業務邏輯。而過濾器是JavaEE標准,只需依賴servlet api ,不需要依賴spring。
過濾器攔截器運行先後步驟:
其中第2步,SpringMVC的機制是由DispaterServlet來分發請求給不同的Controller,其實這一步是在Servlet的service()方法中執行的.
3、過濾器的實現基於回調函數。而攔截器(代理模式)的實現基於反射,代理分靜態代理和動態代理,動態代理是攔截器的簡單實現。
何時使用攔截器?何時使用過濾器?
如果是非spring項目,那麼攔截器不能用,只能使用過濾器。
如果是處理controller前後,既可以使用攔截器也可以使用過濾器。
如果是處理dispaterServlet前後,只能使用過濾器。
Ⅹ 過濾器、監聽器、攔截器的區別
過濾器信空:是web伺服器的,可以攔截任何資源。
監聽器:是web伺服器的搭哪,監聽特定事件。
攔截器:是SpringMVC的滑枝瞎,不會攔截靜態資源,只會攔截訪問的控制器方法handler,攔截的時機是handler運行前、運行完了但未跳轉頁面之前、跳轉頁面之後。