`

filter 与 interceptor的区别

阅读更多
前段时间参与一个项目,过滤器用的是Interceptor 觉得比以前用的Filter好用很多,现在拿出来比较一下
Filter
    该过滤器的方法是创建一个类XXXFilter实现此接口,并在该类中的doFilter方法中声明过滤规则,然后在配置文件web.xml中声明他所过滤的路径
    <filter>
        <filter-name>XXXFilter</filter-name>
        <filter-class>
            com.web.util.XXXFilter
        </filter-class>
    </filter>
   
    <filter-mapping>
        <filter-name>XXXFilter</filter-name>
        <url-pattern>*.action</url-pattern>
    </filter-mapping>
     

Interceptor
     该拦截器的方法也是创建一个类XXXInterceptor实现此接口,在该类中intercept方法写过滤规则,不过它过滤路径的方法和Filter不同,它与strut.xml结合使用,
   创建一个strus.xml的子配置文件struts-l99-default.xml,它继承与struts2的struts-default,此配置文件是其他子配置文件的父类,只要是继承与该文件的配置文件所声明的路径都会被它过滤 如下
 <package name="XXX-default" namespace="/" extends="struts-default">
        <interceptors>
            <interceptor name="authentication" class="com.util.XXXInterceptor" />
           
            <interceptor-stack name="user">
                <interceptor-ref name="defaultStack" />
                <interceptor-ref name="authentication" />
            </interceptor-stack>

            <interceptor-stack name="user-submit">
                <interceptor-ref name="user" />
                <interceptor-ref name="token" />
            </interceptor-stack>

            <interceptor-stack name="guest">
                <interceptor-ref name="defaultStack" />
            </interceptor-stack>

            <interceptor-stack name="guest-submit">
                <interceptor-ref name="defaultStack" />
                <interceptor-ref name="token" />
            </interceptor-stack>

        </interceptors>
        <default-interceptor-ref name="user" />
   </package>
  

比较一,filter基于回调函数,我们需要实现的filter接口中doFilter方法就是回调函数,而interceptor则基于java本身的反射机制,这是两者最本质的区别。
比较二,filter是依赖于servlet容器的,即只能在servlet容器中执行,很显然没有servlet容器就无法来回调doFilter方法。而interceptor与servlet容器无关。
比较三,Filter的过滤范围比Interceptor大,Filter除了过滤请求外通过通配符可以保护页面,图片,文件等等,而Interceptor只能过滤请求。
比较四,Filter的过滤例外一般是在加载的时候在init方法声明,而Interceptor可以通过在xml声明是guest请求还是user请求来辨别是否过滤
1
0
分享到:
评论
1 楼 ak478288 2012-05-19  
我面试经常问的问题,不过很多人都回答不了。

相关推荐

    Filter以及Interceptor的区别

    ### Struts2中Filter与Interceptor的区别 在Java Web开发领域,特别是使用Struts2框架时,Filter和Interceptor是两个非常重要的概念。它们都是用来拦截请求并执行特定逻辑的机制,但它们之间存在一些关键的区别。 ...

    Struts2_interceptor_和_filter区别

    标题和描述均聚焦于“Struts2_interceptor_和_filter区别”,这暗示着对比和解析Struts2框架中拦截器(Interceptor)与过滤器(Filter)的差异是本文的核心议题。接下来,我们将深入探讨这两者在功能、实现方式以及...

    Interceptor与Filter的区别

    ### Interceptor与Filter的区别 在Java Web开发中,拦截器(Interceptor)与过滤器(Filter)是两种常见的处理请求和响应的技术。它们虽然都用于在请求处理前后执行某些操作,但其实现机制、应用场景以及作用范围等...

    filter__serverlet__listener与interceptor的相同点与区别.doc

    与Filter类似,Interceptor也对请求进行拦截,但它们更专注于业务逻辑的控制。 - Interceptor可以由Action自行指定,允许更灵活地控制处理流程。与Servlet相比,Interceptor提供了更细粒度的控制,比如在Action执行...

    Filter过滤器与Interceptor拦截器

    Filter过滤器与Interceptor拦截器有很多相似

    Filter、Interceptor、AOP - 副本.md

    Filter、Interceptor、AOP - 副本

    浅谈SpringMVC中Interceptor和Filter区别

    浅谈SpringMVC中Interceptor和Filter区别 SpringMVC中Interceptor和Filter是两个重要的概念,它们都是用来处理用户请求的,但它们有着不同的作用和实现机制。本文将详细介绍Interceptor和Filter的区别,帮助读者更...

    SpringBoot中使用Filter和Interceptor的示例代码

    SpringBoot中使用Filter和Interceptor的示例代码 在SpringBoot框架中,Filter和Interceptor是两个非常重要的概念,它们都可以用来拦截和处理HTTP请求,但是它们的实现机制和使用场景却有所不同。下面将详细介绍...

    springboot框架demo学习,内含filter、Interceptor、Aspect以及注解形式的aspect

    springboot框架demo,其中包含了filter、Interceptor、Aspect以及注解形式的aspect,以及对应的get和post接口,配置好了可以直接跑,省的再自己去搜索进行配置了,用来学习过滤器,拦截器和切面的配置以及执行顺序非常...

    Java WEB 篇九 Java servlet、filter、listener、interceptor ?.xmind

    Java WEB 篇九 Java servlet、filter、listener、interceptor 之间的区别和联系?

    SpringMVC的拦截器(Interceptor)和过滤器(Filter)的区别与联系

    在Java Web开发中,Spring MVC框架提供了两种机制来处理请求:拦截器(Interceptor)和过滤器(Filter)。它们都是在请求被控制器处理之前和之后执行的一系列预处理和后处理操作,但它们在功能、使用场景和工作原理...

    Spring Boot 编写Servlet、Filter、Listener、Interceptor的方法

    Spring Boot 编写Servlet、Filter、Listener、Interceptor的方法 标题:Spring Boot 编写Servlet、Filter、Listener、Interceptor的方法 描述:Spring Boot 中如何定义过滤器、监听器和拦截器,对 Spring Boot ...

    Interceptor.doc

    拦截器(Interceptor)是一种在Java Web开发中广泛使用的可插拔组件设计,它允许开发者在不修改核心处理代码的情况下,对请求和响应进行拦截,提供标准化的服务。这种设计模式能够独立地增强系统的功能,提高代码的...

    Java servlet、filter、listener、interceptor之间的区别和联系

    与Filter不同,Interceptor通常更关注业务逻辑的切面,如权限验证、事务管理、性能监控等。Interceptor可以灵活地插入到业务流程中,无需修改原有代码。 **区别和联系** 1. **配置方式**:Servlet、Filter和...

    浅谈SpringMVC的拦截器(Interceptor)和Servlet 的过滤器(Filter)的区别与联系 及SpringMVC 的配置文件

    在本文中,我们将深入探讨SpringMVC的拦截器(Interceptor)和Servlet的过滤器(Filter)之间的差异和联系,以及如何配置SpringMVC的拦截器。理解这两者的区别对于开发高效且安全的Web应用程序至关重要。 首先,让我们...

    SpringBoot中使用过滤器(Filter)和拦截器(Interceptor)案例

    1、在SpringBoot中如何实现自定义过滤器(Filter)和拦截器(Interceptor) 2、通过执行案例了解多个过滤器和拦截器的执行顺序 【本案例包含源码以及可执行的jar文件,源码文件建议使用IDEA进行导入查看学习,建议使用...

    string boot 与 自定义interceptor的实例讲解

    这时,Spring MVC提供了拦截器(Interceptor)机制,它比传统的过滤器(Filter)更具有面向切面编程的特性,能够更好地与Spring框架集成。本文将通过一个实例来讲解如何在Spring Boot中使用自定义拦截器。 首先,...

    webfilter的教程

    `Struts2拦截器(Interceptor)`通常与`Filter`类似,用于增强MVC框架中的请求处理,但它们更专注于业务逻辑层面,而`Filter`更通用,可以在任何Servlet容器中使用。`Servlet,Filter的url-pattern详解`文件可能解释了...

    Filter模式-2013-8-9

    本例将深入探讨Filter设计模式,以及如何将其与Struts2框架相结合。 首先,Filter模式的核心概念是过滤器链。一个过滤器可以执行某些操作,如验证、转换或添加额外信息,然后将请求传递给下一个过滤器,直到请求...

    聊一聊过滤器与拦截器.doc

    与 Filter 不同,Interceptor 更专注于 MVC 的业务逻辑处理,而不仅仅是对请求/响应的简单处理。  创建 Interceptor 创建 Interceptor 需要实现 org.springframework.web.servlet.HandlerInterceptor 接口,该...

Global site tag (gtag.js) - Google Analytics