2.5.2 Spring MVC执行的流程
上一节所介绍的Spring MVC
应用的开发流程实际上是按请求→响应
的流程来开发的,下面通过一个流程图来介绍请求→响应
的完整流程。图2.5显示了一次请求→响应的完整流程。
按安照图2.5中所标识的序号, Spring MVC
请求→响应的完整工作流程如下
- 用户向服务器发送请求,请求被
Spring
的前端控制器DispatcherServlet
截获。 DispatcherServlet
对请求URL
(统一资源定位符)进行解析,得到URI
(请求资源标识符)。然后根据该URI
,调用HandlerMapping
获得该Handler
配置的所有相关的对象,包括Handler
对象以及Handler
对象对应的拦截器
,这些对象会被封装到一个HandlerExecutionChain
对象当中返回。DispatcherServlet
根据获得的Handler
,选择一个合适的HandlerAdapter
。HandlerAdapter
会被用于处理多种Handler
,调用Handler
实际处理请求的方法,例如hello
方法。- 提取请求中的模型数据,开始执行
Handler(也就是Controller)
。在填充Handler
的入参过程中,根据配置Spring
将帮你做一些额外的工作:
- 消息转换。将请求消息(如
JSON
、XML
等数据)转换成一个对象,将对象转换为指定的响应信息。 - 数据转换。对请求消息进行数据转换,如
String
转换成Integer
、Double
等。 - 数据格式化。对请求消息进行数据格式化,如将字符串转换成格式化数字或格式化日期等。
- 数据验证。验证数据的有效性(长度、格式等),验证结果存储到
BindingResult
或Error
中。
handler
执行完成后,向DispatcherServlet
返回一个ModelAndView
对象,ModelAndView
对象中应该包含视图名
或视图名和
模型.- 根据返回的
ModelAndView
对象,选择一个合适的ViewResolver
(视图解析器)返回给DispatcherServlet
ViewResolver
结合Model
和View
来渲染视图。- 将视图渲染结果返回给客户端。
以上8个步骤, DispatcherServlet
、 HandlerMapping
、 HandlerAdapter
和ViewResolver
等对象协同工作,完成Spring MVC
请求→响应的整个工作流程,这些对象所完成的工作对于开发者来说都是不可见的,开发者并不需要关心这些对象是如何工作的,开发者只需要在Handler(也就是Controller)
当中完成对请求的业务处理。
提示关于DispatcherServlet
、 HandlerMapping
、 HandlerAdapter
和ViewResolver
等对象协同工作的知识,对于还不了解Spring MVC
的读者来说,可能会感觉很难理解,因为这一节的知识涉及Spring MVC
的源代码和Spring MVC
的设计思想,建议初学者学习完Spring MVC
的知识之后再回过头来看本节的内容。
原文链接: 2.5.2 Spring MVC执行的流程