導航:首頁 > 凈水問答 > springmvc多個過濾器

springmvc多個過濾器

發布時間:2025-05-26 06:09:53

㈠ SpringMVC的攔截器和過濾器的區別與聯系

首先給介紹下過濾器和攔截器的區別:
(1)攔截器是基於Java的反射機制的,而過濾器是基於函數回調。
(2)攔截器不依賴與servlet容器,過濾器依賴與servlet容器。
(3)攔截器只能對action請求起作用,而過濾器則可以對幾乎所有的請求起作用。
(4)攔截器可以訪問action上下文、值棧里的對象,而過濾器不能訪問。
(5)在action的生命周期中,攔截器可以多次被調用,而過濾器只能在容器初始化時被調用一次。
(6)攔截器可以獲取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()方法之後,在return ModelAndView之前進行,可以操控Controller的ModelAndView內容。
c.afterCompletion()方法是在過濾器返回給前端前一步執行,也就是在[chain.doFilter(request, response)]
[System.out.println("after...")]之間執行。
3.SpringMVC的機制是由同一個Servlet來分發請求給不同的Controller,其實這一步是在Servlet的service()方法
中執行的。所以過濾器、攔截器、service()方法,dispatc()方法的執行順序應該是這樣的如下圖:

㈡ SpringMVC的攔截器和過濾器的區別與聯系

攔截器與過濾器的區別 :

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

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

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

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

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

攔截器,在AOP(Aspect-Oriented Programming)中用於在某個方法或欄位被訪問之前,進行攔截然後在之前或之後加入某些操作。

過濾器是一個程序,它先於與之相關的servlet或JSP頁面運行在伺服器上。過濾器可附加到一個或多個servlet或JSP頁面上,並且可以檢查進入這些資源的請求信息。



㈢ 在springmvc中使用過濾器chain.dofilter 出不去

如果走chain的話,通過chain.doFilter(request,response)這個方法會立即跳轉到被攔截的servlet並且執行完還要再返回filter.chain相當於一扇門,從這扇門出去再從這扇門回來.調用filter的方法就是在web.xml中配置,需要配置一個與你需要攔截的servlet相同的url-pattern.
<!-- 配置一個過濾器 -->
<filter>
<filter-name>suibianxie</filter-name>
<filter-class>com.etoak.filter.MyEncoding</filter-class>
<!-- 配置一個私有參數 -->
<init-param>
<param-name>mycode</param-name>
<param-value>gbk</param-value>
</init-param>
</filter>
<!-- 攔截的先後順序和mapping的順序有關 -->
<filter-mapping>
<filter-name>suibianxie</filter-name>
<!-- 注意這里和要攔截的servlet的url-pattern必須一致,等於是過濾器
搶在servlet之前攔截住了 -->
<url-pattern>/servlet/Test</url-pattern>
</filter-mapping>
<!-- 配置第二個過濾器 -->
<filter>
<filter-name>suibianxie2</filter-name>
<filter-class>com.etoak.filter.Naming</filter-class>
</filter>
<filter-mapping>
<filter-name>suibianxie2</filter-name>
<url-pattern>/servlet/Test</url-pattern>
</filter-mapping>

<servlet>
<servlet-name>Test</servlet-name>
<servlet-class>com.etoak.servlet.Test</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Test</servlet-name>
<url-pattern>/servlet/Test</url-pattern>
</servlet-mapping>

㈣ 攔截器(Interceptor)和過濾器(Filter)的執行順序和區別

一、引言


探討攔截器(Interceptor)與過濾器(Filter)的執行順序及區別,以解決用戶登陸與許可權管理、菜單管理問題。本文將先關注過濾器的使用,而後深入攔截器的特性,並簡述各自應用場景。


二、區別


過濾器(Filter)


過濾器通常用於web.xml配置中,主要目的為解決字元編碼問題,防止亂碼。它在所有請求前執行,用於過濾、處理數據,如字元編碼修改、參數過濾等。


攔截器(Interceptor)


攔截器依賴SpringMVC框架,基於Java反射機制實現面向切面編程(AOP)。它對控制器請求進行攔截,可執行前置、後置操作,甚至異常處理,但僅限於控制器請求,不包括靜態資源訪問。


三、代碼示例


展示項目中同時配置過濾器與攔截器的執行流程,包括過濾器與攔截器的具體配置與測試。


四、總結


總結過濾器與攔截器的區別與特性,強調它們在web開發中的不同用途與執行順序。

㈤ springmvc過濾器和攔截器的區別

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

攔截器的代碼實現(以struts2為例):
1、在xml文件中如何定義攔截器
<interceptors>
<interceptor name="filterIPInterceptor"
class="com.xxxx.web.FilterIPActionInterceptor" />
<interceptor-stack name="filterIPStack">
<interceptor-ref name="defaultStack" />

<interceptor-ref name="filterIPInterceptor" />
</interceptor-stack>
</interceptors>

2、怎麼遍別寫自定義攔截器

public class FilterIPActionInterceptor extends AbstractInterceptor
{
/** 日誌控制. */
private final Log log = LogFactory.getLog(getClass());

/**
* @see com.opensymphony.xwork2.interceptor.AbstractInterceptor#intercept(com.opensymphony.xwork2.ActionInvocation)
*/
@Override

閱讀全文

與springmvc多個過濾器相關的資料

熱點內容
09年天籟變速箱濾芯在什麼位置 瀏覽:38
污水管道鋼筋如何彎曲 瀏覽:193
反滲透膜耐受水溫 瀏覽:756
abs樹脂用什麼溶解 瀏覽:153
汽車水箱用蒸餾水洗還是純凈水 瀏覽:220
污水泵外殼配件 瀏覽:455
硫酸和硝酸的廢水如何處理 瀏覽:697
純水機幾代機什麼區別 瀏覽:916
企業廢水總氯一般為多少 瀏覽:621
豆漿機過濾的豆渣能吃嗎 瀏覽:754
污水歸哪個部門 瀏覽:46
閥門除垢劑 瀏覽:88
液接電勢半透膜 瀏覽:939
燃氣壁掛爐地暖過濾器 瀏覽:320
沁園250左邊是什麼濾芯 瀏覽:40
污水井潛水用的什麼氧氣 瀏覽:549
飲水機壓力桶沒水是怎麼回事 瀏覽:45
真離子交換樹脂耐溫 瀏覽:107
廢離子交換樹脂主要危廢特性 瀏覽:243
農村建設污水處理設施 瀏覽:964