过滤器和拦截器

过滤器和拦截器

Filter过滤器:拦截web访问url地址

Intercept拦截器:拦截以.action结尾的url,拦截action的访问

Spring AOP拦截器:拦截spring管理的Bean的访问(业务层service

 

String AOP,是AOP的一种实现,使用的是代理模式。

FilterJ2EE的规范,filter可以用来设置字符串、控制权限、控制转向等等。Filter也是AOP的一种实现。

Interceptor:是struct2中的概念,同样是AOP的一种实现

 

Filter(过滤器)与interceptor(拦截器)联系与区别

1:拦截器是基于java的反射机制使用代理模式,而过滤器基于函数回调。

2:拦截器不依赖servlet容器,过滤器依赖servlet容器

3:拦截器只能对action起作用,而过滤器几乎对所有的请求起作用

4:拦截器可以访问action上下文,堆栈里面的对象,而过滤器不可以

5:执行顺序:过滤前-拦截前-action处理-拦截后-过滤后

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

7:拦截器可以获取IOC容器中的各个bean,过滤器不行,在拦截器中注入一个service可以调入逻辑业务

 

总结:

过滤器:java web中,传入的requestresponse提前过滤掉一些信息,或者提前设置一些参数,然后在传入servlet或者structsaction进行业务逻辑,比如过滤掉非法url(不是login.do的地址请求,如果用户没有登录就过滤掉),或者在传入servlet或者structsaction前统一设置字符集,或者去除一些非法字符(比如聊天中的非法文字)。Filter流程是线性的url传来之后,检查之后可以保持原来的流程继续向下执行,被下一个filterservlet接受等

 

拦截器:动态拦截action调用的对象,它提供一种机制可以使开发者可以定义在一个action执行的前后执行的代码,也可以在一个action执行前阻止自其执行,同时也提供了一种可以提取action中可重用部分的方式。在AOP中拦截器用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操作。

 

springMVC拦截器的实现一般有两种方式

   第一种方式是要定义的Interceptor类要实现了SpringHandlerInterceptor 接口

  第二种方式是继承实现了HandlerInterceptor接口的类,比如Spring已经提供的实现了HandlerInterceptor接口的抽象类HandlerInterceptorAdapter

HandlerInterceptor 接口中定义了三个方法,我们就是通过这三个方法来对用户的请求进行拦截处理的。

     preHandle() 这个方法在业务处理器处理请求之前被调用,SpringMVC 中的Interceptor 是链式的调用的,在一个应用中或者说是在一个请求中可以同时存在多个Interceptor 。该方法的返回值是布尔值Boolean 类型的,当它返回为false 时,表示请求结束,后续的Interceptor Controller 都不会再执行;当返回值为true 时就会继续调用下一个Interceptor preHandle 方法,如果已经是最后一个Interceptor 的时候就会是调用当前请求的Controller 方法。

     postHandle():这个方法在当前请求进行处理之后,也就是Controller 方法调用之后执行,但是它会在DispatcherServlet 进行视图返回渲染之前被调用,所以我们可以在这个方法中对Controller 处理之后的ModelAndView 对象进行操作。postHandle 方法被调用的方向跟preHandle 是相反的,也就是说先声明的Interceptor postHandle 方法反而会后执行。

     afterCompletion():该方法也是需要当前对应的Interceptor preHandle 方法的返回值为true 时才会执行。顾名思义,该方法将在整个请求结束之后,也就是在DispatcherServlet 渲染了对应的视图之后执行。这个方法的主要作用是用于进行资源清理工作的。


猜你喜欢

转载自blog.csdn.net/qq_39667655/article/details/80287005