導航:首頁 > 凈水問答 > 過濾器跟攔截器的區別

過濾器跟攔截器的區別

發布時間:2022-01-08 20:17:04

『壹』 攔截器和過濾器區別

1、過濾器和攔截器觸發時機不一樣,過濾器是在請求進入容器後,但請求進入servlet之前進行預處理的。請求結束返回也是,是在servlet處理完後,返回給前端之前。

2、攔截器可以獲取IOC容器中的各個bean,而過濾器就不行,因為攔截器是spring提供並管理的,spring的功能可以被攔截器使用,在攔截器里注入一個service,可以調用業務邏輯。而過濾器是JavaEE標准,只需依賴servlet api ,不需要依賴spring。

過濾器攔截器運行先後步驟:
其中第2步,SpringMVC的機制是由DispaterServlet來分發請求給不同的Controller,其實這一步是在Servlet的service()方法中執行的.

3、過濾器的實現基於回調函數。而攔截器(代理模式)的實現基於反射,代理分靜態代理和動態代理,動態代理是攔截器的簡單實現。

何時使用攔截器?何時使用過濾器?

如果是非spring項目,那麼攔截器不能用,只能使用過濾器。
如果是處理controller前後,既可以使用攔截器也可以使用過濾器。
如果是處理dispaterServlet前後,只能使用過濾器。

『貳』 java web 過濾器和攔截器的區別和使用

過濾器與攔截器的區別

1. 攔截器是基於java的反射機制的,而過濾器是基於函數回調。

2. 攔截器不依賴與servlet容器,過濾器依賴與servlet容器。

3. 攔截器只能對action請求起作用,而過濾器則可以對幾乎所有的請求起作用。

4. 攔截器可以訪問action上下文、值棧里的對象,而過濾器不能訪問。

5. 在action的生命周期中,攔截器可以多次被調用,而過濾器只能在容器初始化時被調用一次

過濾器定義:

<filter>
<filter-name>TestFilter</filter-name>
<filter-class>com.filter.TestFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>TestFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

攔截器定義:

<interceptors>
<interceptorname="testInterceptor"class="com.xxxx.TestInterceptor"/>
<interceptor-stackname="filterIPStack">
<interceptor-refname="testInterceptor"/>
</interceptor-stack>
</interceptors>

『叄』 spring攔截器和過濾器的區別

區別總結如下:
使用范圍不同 Filter 是Servlet 規定的.只能用於web 程序.而攔截器專既可以用於Web 程序,也可以用於Apllicatioon,Swing程序中屬。
規范不同:Filter是在Servlet 規范定義的,是Servlet容器支持的。而攔截器是在Spring 容器內的,Spring 框架所支持的。
使用資源不同:同其他代碼塊一樣,攔截器也是一個Spring的組件,歸Spring 管理。配置在Spring 中,因此能使用Spring 中的任何資源,對象,例如Service對象,數據源,事務管理等。通過Ioc注入到攔截器即可。而filter 則不能。
深度不同:Filter 只在Servlet前後起作用,而攔截器能深入到方法前後,異常拋出前後因而攔截器的使用具有更大的彈性,所以在spring 中優先使用攔截器。

『肆』 過濾器fiter 和攔截器 interceptor 的區別

1、filter是servlet,jsp裡面的東西,應該說是屬於規范了,而攔截器是struts的東西,不通內用。
2、一個請求,get,post等方式容,到後台,必須先經過filter,然後經過Interceptor,最後在通過在filter或者Interceptor裡面的跳轉,跳到指定的頁面或者action或者servlet中。
3、Interceptor只能攔截action請求,而filter是萬能的,是請求就能攔截。
4、filter是鏈式處理的,也就是一個filter過濾完後,如果還有過濾,那就得繼續。順序根據web.xml裡面的順序來。
5、filter是servlet包裡面的一個借口,寫一個filter,只要實現它,然後實現它的幾個方法就算一個filter了。別忘記還得再web.xml裡面配置。

『伍』 struts2過濾器和攔截器的區別

攔截器和過濾器的區別:
1、攔截器是基於java的反射機制的,而過濾器是基於函數回調
2、過濾器依賴與servlet容器,而攔截器不依賴與servlet容器
3、攔截器只能對action請求起作用,而過濾器則可以對幾乎所有的請求起作用
4、攔截器可以訪問action上下文、值棧里的對象,而過濾器不能
5、在action的生命周期中,攔截器可以多次被調用,而過濾器只能在容器初始化時被調用一次

攔截器 :是在面向切面編程的就是在你的service或者一個方法前調用一個方法,或者在方法後調用一個方法比如動態代理就是攔截器的簡單實現,在你調用方法前列印出字元串(或者做其它業務邏輯的操作),也可以在你調用方法後列印出字元串,甚至在你拋出異常的時候做業務邏輯的操作。
下面通過實例來看一下過濾器和攔截器的區別:
使用攔截器進行/admin 目錄下jsp頁面的過濾
[html] view plain
<package name="newsDemo" extends="struts-default"
namespace="/admin">
<interceptors>
<interceptor name="auth" class="com.test.news.util.AccessInterceptor" />
<interceptor-stack name="authStack">
<interceptor-ref name="auth" />
</interceptor-stack>
</interceptors>
<!-- action -->
<action name="newsAdminView!*" class="newsAction"
method="{1}">
<interceptor-ref name="defaultStack"/>
<interceptor-ref name="authStack">
</interceptor-ref>

下面是我實現的Interceptor class:
[java] view plain
package com.test.news.util;
import java.util.Map;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
import com.test.news.action.AdminLoginAction;
/**
* @author chaoyin
*/
public class AccessInterceptor extends AbstractInterceptor {
private static final long serialVersionUID = -4291195782860785705L;
@Override
public String intercept(ActionInvocation actionInvocation) throws Exception {
ActionContext actionContext = actionInvocation.getInvocationContext();
Map session = actionContext.getSession();

//except login action
Object action = actionInvocation.getAction();
if (action instanceof AdminLoginAction) {
return actionInvocation.invoke();
}
//check session
if(session.get("user")==null ){
return "logout";
}
return actionInvocation.invoke();//go on
}
}
過濾器:是在javaweb中,你傳入的request,response提前過濾掉一些信息,或者提前設置一些參數,然後再傳入servlet或者struts的 action進行業務邏輯,比如過濾掉非法url(不是login.do的地址請求,如果用戶沒有登陸都過濾掉),或者在傳入servlet或者 struts的action前統一設置字元集,或者去除掉一些非法字元.
使用過濾器進行/admin 目錄下jsp頁面的過濾,首先在web.xml進行過濾器配置:
[html] view plain
<filter>
<filter-name>access filter</filter-name>
<filter-class>
com.test.news.util.AccessFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>access filter</filter-name>
<url-pattern>/admin/*</url-pattern>
</filter-mapping>

下面是過濾的實現類:
[java] view plain
package com.test.news.util;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class AccessFilter implements Filter {
/**
* @author chaoyin
*/

public void destroy() {
}
public void doFilter(ServletRequest arg0, ServletResponse arg1,
FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest)arg0;
HttpServletResponse response = (HttpServletResponse)arg1;
HttpSession session = request.getSession();
if(session.getAttribute("user")== null && request.getRequestURI().indexOf("login.jsp")==-1 ){
response.sendRedirect("login.jsp");
return ;
}
filterChain.doFilter(arg0, arg1);
}
public void init(FilterConfig arg0) throws ServletException {
}
}

『陸』 過濾器和攔截器的區別

1、filter是來servlet,jsp裡面的東西,應該說是屬於自規范了,而攔截器是struts的東西,不通用。
2、一個請求,get,post等方式,到後台,必須先經過filter,然後經過Interceptor,最後在通過在filter或者Interceptor裡面的跳轉,跳到指定的頁面或者action或者servlet中。
3、Interceptor只能攔截action請求,而filter是萬能的,是請求就能攔截。
4、filter是鏈式處理的,也就是一個filter過濾完後,如果還有過濾,那就得繼續。順序根據web.xml裡面的順序來。
5、filter是servlet包裡面的一個借口,寫一個filter,只要實現它,然後實現它的幾個方法就算一個filter了。別忘記還得再web.xml裡面配置。

『柒』 關於java ee的攔截器和過濾器的區別

過濾器與攔截器的區別
1. 攔截器是基於java的反射機制的,而過濾器是基於函數回調。
2. 攔截器不依賴與servlet容器,過濾器依賴與servlet容器。
3. 攔截器只能對action請求起作用,而過濾器則可以對幾乎所有的請求起作用。
4. 攔截器可以訪問action上下文、值棧里的對象,而過濾器不能訪問。
5. 在action的生命周期中,攔截器可以多次被調用,而過濾器只能在容器初始化時被調用一次
過濾器定義:

<filter>
<filter-name>TestFilter</filter-name>
<filter-class>com.filter.TestFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>TestFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

攔截器定義:

<interceptors>
<interceptor name="testInterceptor" class="com.xxxx.TestInterceptor" />
<interceptor-stack name="filterIPStack">
<interceptor-ref name="testInterceptor" />
</interceptor-stack>
</interceptors>

『捌』 過濾器和SpringMVC的攔截器的區別

過濾器和攔截器的區別:

①攔截器是基於Java的反射機制的,而過濾器是基於函數回調。
②攔截器不依賴與servlet容器,過濾器依賴與servlet容器。
③攔截器只能對action請求起作用,而過濾器則可以對幾乎所有的請求起作用。
④攔截器可以訪問action上下文、值棧里的對象,而過濾器不能訪問。
⑤在action的生命周期中,攔截器可以多次被調用,而過濾器只能在容器初始化時被調用一次。

⑥攔截器可以獲取IOC容器中的各個bean,而過濾器就不行,這點很重要,在攔截器里注入一個service,可以調用業務邏輯。

寫了點測試代碼,順便整理一下思路,搞清楚這幾者之間的順序:

1.過濾器是JavaEE標准,採用函數回調的方式進行。是在請求進入容器之後,還未進入Servlet之前進行預處理,並且在請求結束返回給前端這之間進行後期處理。

@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
System.out.println("before...");
chain.doFilter(request, response);
System.out.println("after...");
}

chain.doFilter(request, response);這個方法的調用作為分水嶺。事實上調用Servlet的doService()方法是在chain.doFilter(request, response);這個方法中進行的。

2.攔截器是被包裹在過濾器之中的。

@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("preHandle");
return true;
}

@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("postHandle");
}

@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("afterCompletion");
}

a.preHandle()這個方法是在過濾器的chain.doFilter(request, response)方法的前一步執行,也就是在 [System.out.println("before...")][chain.doFilter(request, response)]之間執行。

b.preHandle()方法之後,在returnModelAndView之前進行,可以操控Controller的ModelAndView內容。

c.afterCompletion()方法是在過濾器返回給前端前一步執行,也就是在[chain.doFilter(request, response)][System.out.println("after...")]之間執行。

3.SpringMVC的機制是由同一個Servlet來分發請求給不同的Controller,其實這一步是在Servlet的service()方法中執行的。所以過濾器、攔截器、service()方法,dispatc()方法的執行順序應該是這樣的,大致畫了個圖:其實非常好測試,自己寫一個過濾器,一個攔截器,然後在這些方法中都加個斷點,一路F8下去就得出了結論。

『玖』 JAVA過濾器和攔截器的區別有哪些

1 攔截器是基於java的反射機制的,而過濾器是基於函數回調。
2 攔截器不依賴與servlet容器,過濾器依賴與servlet容器。
3 攔截器只能對action請求起作用,而過濾器則可以對幾乎所有的請求起作用。
4 攔截器可以訪問action上下文、值棧里的對象,而過濾器不能訪問。
5 在action的生命周期中,攔截器可以多次被調用,而過濾器只能在容器初始化時被調用一次

閱讀全文

與過濾器跟攔截器的區別相關的資料

熱點內容
高分子矽樹脂是什麼 瀏覽:888
北湖污水有哪些 瀏覽:966
房子裡面的污水管怎麼裝修 瀏覽:806
內壓反滲透膜 瀏覽:810
大型污水泵30千瓦多少錢一台 瀏覽:169
污水處理廠有哪些證書 瀏覽:144
美菱純水機ro膜型號 瀏覽:772
怎麼看機油濾芯在哪裡 瀏覽:286
純水機的白塑料是什麼塑料 瀏覽:827
凈水器廢水如何處理的 瀏覽:490
凱士比提升泵故障檢修方法 瀏覽:682
底商污水排到哪 瀏覽:477
凈水機如何做到快速加熱 瀏覽:980
小瓶的飲料罐子怎麼做飲水機 瀏覽:807
水處理余氯高怎麼辦 瀏覽:29
4級過濾和5級過濾的區別是什麼 瀏覽:567
污水戶線井深度超高15m 瀏覽:651
格美凈水器反滲透怎麼取 瀏覽:316
農村污水管過長怎麼辦 瀏覽:490
愛信變速箱濾芯為什麼便宜 瀏覽:718