0%

2.5.2 Spring MVC执行的流程

2.5.2 Spring MVC执行的流程

上一节所介绍的Spring MVC应用的开发流程实际上是按请求→响应的流程来开发的,下面通过一个流程图来介绍请求→响应的完整流程。图2.5显示了一次请求→响应的完整流程。
这里有一张图片
按安照图2.5中所标识的序号, Spring MVC请求→响应的完整工作流程如下

  1. 用户向服务器发送请求,请求被Spring的前端控制器DispatcherServlet截获。
  2. DispatcherServlet对请求URL(统一资源定位符)进行解析,得到URI(请求资源标识符)。然后根据该URI,调用HandlerMapping获得该Handler配置的所有相关的对象,包括Handler对象以及Handler对象对应的拦截器,这些对象会被封装到一个HandlerExecutionChain对象当中返回。
  3. DispatcherServlet根据获得的Handler,选择一个合适的HandlerAdapterHandlerAdapter会被用于处理多种Handler,调用Handler实际处理请求的方法,例如hello方法。
  4. 提取请求中的模型数据,开始执行Handler(也就是Controller)。在填充Handler的入参过程中,根据配置Spring将帮你做一些额外的工作:
  • 消息转换。将请求消息(如JSONXML等数据)转换成一个对象,将对象转换为指定的响应信息。
  • 数据转换。对请求消息进行数据转换,如String转换成IntegerDouble等。
  • 数据格式化。对请求消息进行数据格式化,如将字符串转换成格式化数字或格式化日期等。
  • 数据验证。验证数据的有效性(长度、格式等),验证结果存储到BindingResultError中。
  1. handler执行完成后,向DispatcherServlet返回一个ModelAndView对象, ModelAndView对象中应该包含视图名视图名模型.
  2. 根据返回的ModelAndView对象,选择一个合适的ViewResolver(视图解析器)返回给DispatcherServlet
  3. ViewResolver结合ModelView来渲染视图。
  4. 将视图渲染结果返回给客户端。

以上8个步骤, DispatcherServletHandlerMappingHandlerAdapterViewResolver等对象协同工作,完成Spring MVC请求→响应的整个工作流程,这些对象所完成的工作对于开发者来说都是不可见的,开发者并不需要关心这些对象是如何工作的,开发者只需要在Handler(也就是Controller)当中完成对请求的业务处理
提示关于DispatcherServletHandlerMappingHandlerAdapterViewResolver等对象协同工作的知识,对于还不了解Spring MVC的读者来说,可能会感觉很难理解,因为这一节的知识涉及Spring MVC的源代码和Spring MVC的设计思想,建议初学者学习完Spring MVC的知识之后再回过头来看本节的内容。

原文链接: 2.5.2 Spring MVC执行的流程