SpringMVC框架结构&Interceptor拦截器
SpringMVC框架结构
先回顾一下SpringMVC的一些知识。
参考链接:https://www.cnblogs.com/HigginCui/p/5856780.html
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.前端控制器DispatcherServlet将ModelAnView传给视图解析器ViewResolver。
9.视图解析器ViewResolver解析后返回具体的视图View。
10.前端控制器DispatcherServlet对视图View进行渲染视图(即:将模型数据填充至视图中),这一步图中的箭头应该是双向的。
11.前端控制器DispatcherServlet响应用户。
Interceptor
preHandle在请求处理之前调用,即在一个请求进入Controller层前执行这个方法。如果preHandle返回false,则请求就不会往下处理了。return true才会执行Controller层方法。
postHandle在当前请求进行处理之后,也就是Controller方法调用结束之后执行,但它会在DispatcherServlet进行视图的解析和渲染之前被调用,所以可以在这个方法中可以对Controller处理之后的ModelAndView对象进行操作。
afterCompletion该方法会在整个请求结束之后,也就是在DispatcherServlet渲染了对应的视图之后执行,这个方法的主要作用是用于资源清理工作。
preHandle按拦截器定义顺序调用
postHandler按拦截器定义逆序调用
afterCompletion按拦截器定义逆序调用
postHandler在拦截器链内所有拦截器返回成功调用
afterCompletion只有在preHandle返回true才调用