導航:首頁 > 凈水問答 > 過濾器與servlet區別

過濾器與servlet區別

發布時間:2025-06-21 14:27:51

Ⅰ java過濾器中的FilterChain對象

1、什麼是過濾器?
與Servlet相似,過濾器是一些web應用程序組件,可以綁定到一個web應用程序中。但是與其他web應用程序組件不同的是,過濾器是"鏈"在容器的處理過程中的。這就意味著它們會在servlet處理器之前訪問一個進入的請求,並且在外發響應信息返回到客戶前訪問這些響應信息。這種訪問使得過濾器可以檢查並修改請求和響應的內容。
2、過濾鏈FilterChain
兩個過濾器,EncodingFilter負責設置編碼,SecurityFilter負責控制許可權,伺服器會按照web.xml中過濾器定義的先後循序組裝成一條鏈,然後一次執行其中的doFilter()方法。執行的順序就如下圖所示,執行第一個過濾器的chain.doFilter()之前的代碼,第二個過濾器的chain.doFilter()之前的代碼,請求的資源,第二個過濾器的chain.doFilter()之後的代碼,第一個過濾器的chain.doFilter()之後的代碼,最後返回響應。
3、過濾鏈的好處是,執行過程中任何時候都可以打斷,只要不執行chain.doFilter()就不會再執行後面的過濾器和請求的內容。而在實際使用時,就要特別注意過濾鏈的執行順序問題,像EncodingFilter就一定要放在所有Filter之前,這樣才能確保在使用請求中的數據前設置正確的編碼。

Ⅱ jsp/servlet過濾器和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 {

}

}
摘自網路--

Ⅲ java中過濾器(Filter)與攔截器(Interceptor)的區別

Java中過濾器與攔截器的主要區別如下

  1. 執行位置

    • 過濾器:主要在請求到達Servlet之前和響應發送給客戶端之後進行預處理和後處理。它作用於整個請求響應流程,對所有的請求和響應進行統一處理。
    • 攔截器:作用於方法調用前後,通常在SpringMVC等框架中用於攔截Controller中的方法調用。它專注於方法級別的攔截,可以針對特定的方法或Action執行前後邏輯。
  2. 實現方式

    • 過濾器:通過實現javax.servlet.Filter介面來創建,需要在web.xml文件中進行配置,或者通過註解和Java配置類進行配置。過濾器隨應用啟動而初始化,只初始化一次。
    • 攔截器:在SpringMVC中,通過實現HandlerInterceptor介面來創建,並在Spring配置文件中進行聲明和配置。攔截器的執行順序遵循聲明順序。
  3. 作用范圍

    • 過濾器:作用范圍較廣,可以對所有的請求和響應進行處理,適用於全局性的任務,如設置字元集、控制許可權等。
    • 攔截器:作用范圍較窄,專注於方法級別的攔截,適用於封裝通用的邏輯,如驗證許可權、記錄日誌、處理事務等。攔截器可以實現更細粒度的控制。
  4. 執行流程

    • 過濾器:具有線性的執行流程,請求依次經過配置的過濾器鏈,每個過濾器對請求進行預處理,並在響應發送後進行後處理。
    • 攔截器:執行順序遵循聲明順序,但具體方法的執行時機和方法調用順序有所不同。preHandle在方法調用前執行,postHandle在方法調用後但在視圖渲染前執行,afterCompletion在整個請求完成後執行。

綜上所述,過濾器主要用於控制請求流向和進行全局性的預處理和後處理,而攔截器則主要用於執行通用的、跨切面的代碼邏輯,並專注於方法級別的攔截。理解兩者之間的區別有助於在Java Web開發中選擇合適的工具來實現特定的功能。

閱讀全文

與過濾器與servlet區別相關的資料

熱點內容
沁園凈水器廢水率 瀏覽:545
18年大眾lavida的空調濾芯在哪裡 瀏覽:99
柴油濾芯不滿有什麼後果 瀏覽:671
污水處理後導電率多少為標准 瀏覽:777
飲水機有什麼認證才是安全的 瀏覽:682
做過實驗用的廢水叫什麼 瀏覽:594
四川中央水處理設備裝置 瀏覽:703
松下的空氣凈化器除甲醛怎麼樣 瀏覽:137
洗井用的抽污水多少錢一台 瀏覽:863
污水管是管頂平接還是管底平接 瀏覽:704
制葯廢水色度如何處理 瀏覽:269
凈水材料在網上怎麼賣 瀏覽:816
環氧樹脂二步驟工藝 瀏覽:692
純凈水10塊和八塊有什麼區別 瀏覽:487
雲米即熱飲水吧除垢 瀏覽:852
超濾膜帶什麼電荷 瀏覽:949
推薦反滲透氣動蝶閥 瀏覽:31
小米反滲透膜怎麼這么貴 瀏覽:207
即熱式直飲機濾芯哪裡有 瀏覽:115
植物性樹脂膠粉 瀏覽:106