zoukankan      html  css  js  c++  java
  • Filter ,Interceptor,AOP

    一.Filter:

        Filter也称之为过滤器,它是Servlet技术中比较激动人心的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能。例如实现URL级别的权限访问控制、过滤敏感词汇、压缩响应信息等一些高级功能。

        1.Filter简介:

          Servlet API中提供了一个Filter接口,开发web应用时,如果编写的Java类实现了这个接口,则把这个java类称之为过滤器Filter。通过Filter技术,开发人员可以实现用户在访问某个目标资源之前,对访问的请求和响应进行拦截。简单说,就是可以实现web容器对某资源的访问前截获进行相关的处理,还可以在某资源向web容器返回响应前进行截获进行处理。

        2.配置与应用: filter是与servlet绑在一起的,所以一般filter的配置直接是在web.xml中

          

    <filter> 
        <filter-name>Demo1Filter</filter-name> 
        <filter-class>com.itheima.filter.Demo1Filter</filter-class> 
        <init-param> 
            <param-name>param1</param-name> 
            <param-value>value在这里呢</param-value> 
        </init-param> 
    </filter> 
    <filter-mapping> 
        <filter-name>Demo1Filter</filter-name> 
        <url-pattern>/*</url-pattern> 
        <dispatcher>REQUEST</dispatcher> <!-- 没有配置dispatcher就是默认request方式的 --> 
        <dispatcher>FORWARD</dispatcher> 
        <dispatcher>ERROR</dispatcher> 
        <dispatcher>INCLUDE</dispatcher> 
    </filter-mapping> 
    

      

    二.Interceptor :主要讲spring mvc interceptor

        参考 http://haohaoxuexi.iteye.com/blog/1750680 

        注意 ,我曾经试过,获得被拦截方法的一些参数,但是通过methodParaters无法获得,后来只能通过request.getParameter(..)来获取。另外,请注意文章中postHandle和afterCompletion的执行时间点

           spring mvc中的interceptor配置:

        

    <mvc:interceptors>
    		<mvc:interceptor>
    			<mvc:mapping path="/**" />
    			<bean class="Interceptor.LogInterceptor" />
    		</mvc:interceptor>
    	</mvc:interceptors>
    

      

    三.Filter与Interceptor的区别:

      1.filter基于filter接口中的doFilter回调函数,interceptor则基于Java本身的反射机制

      2.filter是依赖于servlet容器的,没有servlet容器就无法回调doFilter方法,而interceptor与servlet无关

      3.、filter的过滤范围比interceptor大,filter除了过滤请求外通过通配符可以保护页面、图片、文件等,而interceptor只能过滤请求,只对action起作用,在action之前开始,在action完成后结束(如被拦截,不执行action);

      4.、filter的过滤范围比interceptor大,filter除了过滤请求外通过通配符可以保护页面、图片、文件等,而interceptor只能过滤请求,只对action起作用,在action之前开始,在action完成后结束(如被拦截,不执行action);

      5.interceptor可以访问action上下文、值栈里的对象,而filter不能;

      6.在action的生命周期中,拦截器可以被多次调用,而过滤器只能在容器初始化时被调用一次。

    四.Interceptor 与spring AOP的区别

      1.spring Interceptor也是一种aop思想,我们这里面的spring AOP主要是讲aop应用,interceptor 的使用场合比aop小很多,顾名思义,它是拦截一些action请求,但是比aop使用起来简便,而且session信息能够获得,符合分层的设计,所以个人优先使用interceptor.

      2.Interceptor可以阻止代码执行下去,当preHandle返回false,那么这个请求就到此结束,真正的被拦截了,但是aop不能,它只是单纯的切入添加操作

      3.aop使用的动态代理,而interceptor基于反射机制。所以,aop的proceedingJoinPoint能够提供更多的参数

      4.aop能够控制被拦截方法的执行时间,即什么时候执行,但是必须要执行,一般都是在@Around advice中。

      5.aop的pointcut也就能够让它更灵活的去做一些切面工作,同时,非请求的方法,只能使用aop。

      

  • 相关阅读:
    C# String.Compare 方法测试
    C#checked 与 unchecked
    C#枚举类型
    C#结构体
    C越界和溢出的区别
    python/matlab : 将txt文件中的数据读为numpy数组
    matlab程序里调用python文件
    Python
    Pycharm调试及快捷键技巧
    Pycharm远程连接服务器debug时报错
  • 原文地址:https://www.cnblogs.com/wangkeustc/p/4720523.html
Copyright © 2011-2022 走看看