(java)过滤器与拦截器

1.过滤器
        过滤器是随你的web应用启动而启动的,只初始化一次,以后就可以拦截相关请求,只有当你的web应用停止或重新部署的时候才销毁。    
        请求和回应的过滤,传入的request,response提前过滤掉一些信息,或者提前设置一些参数,然后再传入servlet或者struts的action进行业务逻辑,比如过滤掉非法url(不是login.do的地址请求,如果用户没有登陆都过滤掉)
        在请求进入容器之后,还未进入Servlet之前进行预处理;在请求结束返回给前端之前进行后期处理。处理完成后,它会交给下一个过滤器处理,直到请求发送到目标为止。

2.拦截器
    拦截器,在AOP中用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操作。比如日志,安全等。
拦截器链,就是将拦截器按一定的顺序联结成一条链。在访问被拦截的方法或字段时,拦截器链中的拦截器就会按其之前定义的顺序被调用。一般拦截器方法都是通过动态代理的方式实现。


3.区别
        1.拦截器是基于动态代理的,而过滤器是基于函数回调。
   2.拦截器不依赖于servlet容器,通过动态代理实现,过滤器依赖于servlet容器。
   3.拦截器可以在方法前后,异常前后等调用,而过滤器只能在请求前和请求后各调用一次。
        4.拦截器可以访问action上下文、值栈里的对象,而过滤器不能访问。  

        5.拦截器可以获取IOC容器中的各个bean,而过滤器就不行,这点很重要,在拦截器里注入一个service,可以调用业务逻辑。


猜你喜欢

转载自blog.csdn.net/seanme/article/details/79487604