首页 > 编程语言 > 详细

SpringMVC 执行流程

时间:2020-03-08 16:33:58      阅读:125      评论:0      收藏:0      [点我收藏+]

SpringMVC框架的请求流程

技术分享图片

  1. 用户发起 request,进入前端控制器DispatcherServlet
  2. DispatcherServlet请求处理映射器HandlerMapping查找Handler
  3. HandlerMapping根据用户请求的 url ,查找与之匹配的Handler(也就是 Controller 中配置了相应路径的一个方法),返回一个执行链;
  4. DispatcherServlet再请求处理适配器HandlerAdapter执行Handler
  5. Handler被执行;
  6. Handler返回ModelAndView对象;
  7. HandlerAdapter又将ModelAndView返回给DispatcherServlet
  8. DispatcherServlet请求视图解析器View resolver对视图进行解析;
  9. View resolver根据View的信息,匹配相应的视图结果并返回;
  10. DispatcherServlet收到View后,对视图进行渲染,将Model中的数据填充到视图中的 request 区域,生成最终的视图;
  11. 返回 response 。

不难看出,DispatcherServlet是整个流程控制的核心,由它调用其他组件处理请求、返回响应,相当于一个转发器或中央处理器,降低了其他组件之间的耦合度。如果不使用 SpringMVC,我们可能需要在web.xml中为每一个请求都配置一个 Servlet,但是现在就只需要配置一个前端控制器:

<servlet>
    <servlet-name>SpringMVC</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <!-- springMVC 配置文件 -->
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:spring-*.xml</param-value>
    </init-param>
    <!-- 容器在应用启动时就加载并初始化这个servlet,值越小,优先级越高 -->
    <load-on-startup>1</load-on-startup>
    <!-- 支持异步处理 -->
    <async-supported>true</async-supported>
</servlet>

关于异步处理,详见:Servlet 3.0 新特性详解,张建平,IBM

在处理适配器HandlerAdapter执行Handler的过程中,Spring 还做了这些额外工作:

  • HttpMessageConverter(消息转换):将请求信息,如 Json、XML 等数据转换成一个对象;处理结束后,将对象转换成指定的响应信息;
  • 数据转换:对请求信息进行类型的转换,我们知道客户端的请求参数是以字节流传输给服务端,而服务端通过request.getParameter取到的参数都是字符串形式,所以需要转换成真正有效的类型,比如String转换成IntegerDouble等;
  • 数据格式化:对请求信息进行格式化,比如日期的格式化;
  • 数据验证:验证请求数据的有效性,并将验证结果存储到BindingResultError中。

技术分享图片

整理自:SpringMVC+Mybatis快速开发与项目实战,黄文毅,清华大学出版社

SpringMVC 执行流程

原文:https://www.cnblogs.com/zzzt20/p/12442573.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!