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执行的流程