针对项目中用到多个拦截器的一些想法和思考

本文基于Springmvc的拦截器进行分析和总结。只是在项目中用到了拦截器的多个使用场景,有点归纳姑且记录下。

按照国际惯例,文字记录下什么是Springmvc的拦截器以及拦截器的具体方法(虽然文字难咀,但是回头看文字的提炼,就更加印象深刻了)。

1介绍

不罗嗦三点:

1.1什么是拦截器

java里的拦截器是动态拦截action调用的对象。它提供了一种机制可以使开发者可以定义在一个action执行的前后执行的代码,

它提供了一种机制可以使开发者可以定义在一个action执行的前后执行的代码,也可以在一个action执行前阻止其执行。

1.2为什么要使用拦截器

个人觉得重点是:它提供了部分action代码,以及可以对url进行操作,另外在设计权限的项目中,可以考虑用拦截器。

1.3需要实现的方法

1.3.1 preHandler : 是controller的前置方法,当方法返回false整个请求就结束了。多个Interceptor,然后SpringMVC会根据声明的前后顺序

一个接一个的执行,而且所有的Interceptor中的preHandle方法都会在 。

1.3.2 WebRequestInterceptor和HandlerInterceptor的preHandler的方法的区别就在与webRepuestInterceptor的preHandler的方法是没有

拦截的功能,是没有返回值的。

1.3.3 postHandle: 就是在当前请求进行处理之后,也就是Controller方法调用之后执行,但是它会在DispatcherServlet进行视图返回渲染之前被调用。

1.3.4 afterHandler:该方法将在整个请求结束之后,也就是在DispatcherServlet 渲染了对应的视图之后执行,可用于清理资源。

2.图解+代码分析

2.1写拦截器


2.2配置一个Controller层


3.功能效果显示

首先在配置web.xml以及Springmvc文件的前提下,向服务器发出/first.do,的请求。如下图我们可以看出来具体的拦截过程(单个):


方法梳理:

第一个方法preHandle尤其重要,他可以根据返回值,改变请求往下的流程,起着先导作用;

第二个方法posHandle请求通过处理器后,紧接着做一系列的操作;

最后经过最后一个方法afterCompletion,进行客户端的响应。


在配置web.xml以及Springmvc文件的前提下,向服务器发出/first.do,的请求。如下图我们可以看出来具体的拦截过程(2个):

方案一:开启开启第一道拦截器,改为true,第二道拦截器进行false,查看请求流程:


方法解析:

结合上述图所示,他经过第一道拦截器时,通道开放,往下继续走,当他走到第二道拦截时,发现通道关闭了,但还是走了二道通道的第一方法,

完了请求在这停止,无法通过处理器,但是第一道拦截器已经开启了其通道,故走了最终响应的afterCompletion方法。

方案二:开启第一道拦截器,改为false,第二道拦截器进行true。

方法解析:

根据流程图,走完第一个方法后,停止前进。

方案三:两道通道全部打开,查看请求流程:

结果如图(注意看下图的输出顺序):


个人总结:个人任务拦截器中单个相信大家使用没有问题。但是在涉及到多个拦截器的时候,就会涉及到拦截请求的顺序以及在请求完成后的返回的response 的

发回的顺序,这就在复杂的业务中需要分层处理的时候可以用到。


最后感谢汽车部落格大大对于本文的例子的参考和思路的启发。

猜你喜欢

转载自blog.csdn.net/learn_zhangk/article/details/62887684
今日推荐