SpringMVC工作流程

讲解看大牛
牛大

牛二

  • 1、 用户发送请求至前端控制器DispatcherServlet。
    DispatcherServlet工作原理:它重写父类FrameworkServlet的doService方法,doService中主要设置了一些属性和调用doDispatch方法,doDispatch用来做分发请求和流程控制doDispatch方法解析

  • 2、 DispatcherServlet收到请求调用HandlerMapping处理器映射器。

  • 3、 处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。
    这一步会调用getHander返回一个HandlerExecutionChain包含处理器和处理器拦截器

  • 4、 DispatcherServlet调用HandlerAdapter处理器适配器。
    获取适配器是通过遍历handlerAdapters列表找的,HandlerAdapter包含了3个方法.
    boolean supports(Object handler);
    ModelAndView handle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception;
    long getLastModified(HttpServletRequest request, Object handler);

  • 5、HandlerAdapter经过适配调用具体的处理器(Controller,也叫后端控制器)。

  • 6、 Controller执行完成返回ModelAndView。

  • 7、 HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet。
    处理器适配器中applyPreHandle中会遍历该HandlerExecutionChain中所有的拦截器,然后使用拦截器通过preHandle对handler进行预处理,如果所有的拦截器都能处理那就会继续往下执行,如果一旦有一个拦截器不能处理,就没必要往下走了,那就会触发triggerAfterCompletion方法,在triggerAfterCompletion中它是倒序遍历的拦截器的,执行完triggerAfterCompletion返回false之后doDispatch这个方法就执行结束了,下面的八、九、十、十一就不再执行。从第五步括号里的备注也能猜出来HandlerExecutionChain.handler处理器是什么,它可以是Controller。

  • 8、 DispatcherServlet将ModelAndView传给ViewReslover视图解析器。

  • 9、 ViewReslover解析后返回具体View

  • 10、DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)。
    注意: 渲染视图是前端控制器做的而不是视图解析器

  • 11、 DispatcherServlet响应用户。

源码分析:

https://www.jianshu.com/p/8a20c547e245

你可能感兴趣的:(SpringMVC工作流程)