SpringMVC框架结构&Interceptor拦截器

SpringMVC框架结构

先回顾一下SpringMVC的一些知识。
参考链接:https://www.cnblogs.com/HigginCui/p/5856780.html
SpringMVC框架结构&Interceptor拦截器
1.用户发送请求至前端控制器DispatcherServlet

2.前端控制器DispatcherServlet收到请求后调用处理器映射器HandlerMapping。

3.处理器映射器HandlerMapping根据请求的Url找到具体的处理器,生成处理器对象Handler处理器拦截器HandlerIntercepter(如果有则生成)一并返回给前端控制器DispatcherServlet

4.前端控制器DispatcherServlet通过处理器适配器HandlerAdapter调用处理器Controller(Handler)。

5.执行处理器(Controller,也叫后端控制器)

6.处理器Controller执行完后返回ModelAnView

7.处理器映射器HandlerAdapter将处理器Controller执行返回的结果ModelAndView返回给前端控制器DispatcherServlet

8.前端控制器DispatcherServletModelAnView传给视图解析器ViewResolver

9.视图解析器ViewResolver解析后返回具体的视图View

10.前端控制器DispatcherServlet对视图View进行渲染视图(即:将模型数据填充至视图中),这一步图中的箭头应该是双向的。

11.前端控制器DispatcherServlet响应用户。

Interceptor

SpringMVC框架结构&Interceptor拦截器
preHandle在请求处理之前调用,即在一个请求进入Controller层前执行这个方法。如果preHandle返回false,则请求就不会往下处理了。return true才会执行Controller层方法。

postHandle在当前请求进行处理之后,也就是Controller方法调用结束之后执行,但它会在DispatcherServlet进行视图的解析和渲染之前被调用,所以可以在这个方法中可以对Controller处理之后的ModelAndView对象进行操作。

afterCompletion该方法会在整个请求结束之后,也就是在DispatcherServlet渲染了对应的视图之后执行,这个方法的主要作用是用于资源清理工作。

preHandle按拦截器定义顺序调用
postHandler按拦截器定义逆序调用
afterCompletion按拦截器定义逆序调用
postHandler在拦截器链内所有拦截器返回成功调用
afterCompletion只有在preHandle返回true才调用