Spring in Action 4 读书笔记之 Spring MVC 中请求的处理流程

字数869 大约花费3分钟

我计划完成 50 到 100 篇有关 Spring 的文章,这是第十四篇。本文对应 Spring in Action(Spring 实战)第四版第五章的 5.1.1(5.1.1 Following the life of a request),将讲述 Spring MVC 中请求的流程。

每当用户在浏览器点击链接或者提交表单的时候,就会生成一个 request。request 就像一个邮差,负责将信息从一个地方地方传递到另一个地方。

request 很忙,它从离开浏览器开始,一直到跟着 response 返回到浏览器结束,会经过很多站,而每一站都释放一些信息,又带上一些新的信息。下图显示了在 Spring MVC 中,request 在哪些站点停留。

Spring MVC 中请求的处理流程

  1. 第一步,当 request 从浏览器发出时,它携带了用户的请求信息,至少会携带请求的 url 地址,但也可能携带其它数据,比如用户在表单中提交的信息。
    在 Spring MVC 中,DispatcherServlet 实现了第一步的功能。和大多数基于 Java 的 web 框架一样,Spring MVC 通过一个前端控制器 servlet(front controller servlet) 来处理请求。前端控制器是一种通用的 web 应用特征,使用一个单独的 servlet,将请求转发给应用的其它组件,而后面的这些组件负责实际的处理。在 Spring MVC 中,DispatcherServlet 就是这个前端控制器。
  2. 第二步,为请求找到匹配的控制器。DispatcherServlet 的任务是将请求发送给 Spring MVC 控制器(controller)。控制器负责处理这些请求。但是一个 web 应用一般不会只有一个控制器,所以 DispatcherServlet 需要一些帮助来决定将请求发给哪个控制器。要做到这点,DispatcherServlet 需要询问一个或多个 handler mappings,因为 handler mappings 注重请求的 url。
  3. 第三步,DispatcherServlet 将请求发给选中的控制器,在控制器中,请求转交了用户在表单中提交的信息,并且耐心等待控制器处理这些信息。实际上,在设计得比较好的应用中,控制器自身一般很少处理业务逻辑,而是调用 service 来处理。
  4. 第四步,控制器或 service 处理业务逻辑之后,会产生一些信息,返回给用户,并且在浏览器中展示。这些信息被称为 model。把这些信息直接返回给浏览器往往不够,它往往需要以用户友好的方式,比如 html 的方式返回。所以,需要视图,比如 JSP 来展示这些信息。控制器会将 model 打包好,并且决定要渲染 model 的视图名称,然后将请求,以及 model 和视图名称,返回给 DispatcherServlet。
  5. 第五步,DispatcherServlet 需要依靠视图解析器,根据视图名称,匹配具体的视图实现。需要注意的是,视图实现不一定是 JSP, 也可以是其它类型的模板。
  6. 第六步,视图将 model 中的数据进行渲染,生成需要返回给客户端的输出。
  7. 第七步,将结果返回给客户端。

以上就是 Spring MVC 中请求的处理流程,有哪里写得不够清楚的地方,欢迎在评论区进行讨论。

谈谈 IT 的文章均为原创或翻译(翻译会注明外文来源),转载请以链接形式标明本文地址: http://tantanit.com/spring-mvc-request/

谈谈IT

欢迎关注官方微信公众号获取最新原创文章