专栏名称: OSC开源社区
OSChina 开源中国 官方微信账号
目录
相关文章推荐
程序员的那些事  ·  事业编一年 8 万 40 年退休挣 320 ... ·  2 天前  
OSC开源社区  ·  【直播预告】AiEditor:面向AI的下一 ... ·  4 天前  
程序员的那些事  ·  年薪154w!又一新兴岗位崛起!这才是程序员 ... ·  4 天前  
程序员的那些事  ·  65 ... ·  4 天前  
51好读  ›  专栏  ›  OSC开源社区

SpringMVC 执行流程及源码解析

OSC开源社区  · 公众号  · 程序员  · 2017-04-15 08:31

正文

请输入标题     bcdef

在SpringMVC中主要是围绕着DispatcherServlet来设计,可以把它当做指挥中心。这里先说明一下SpringMVC文档给出的执行流程,然后是我们稍微具体的执行流程,最后是流程大致的源码跟踪。关于很很很详细的源码解析,这里暂先不做。

请输入标题     abcdefg


官方文档中的流程


首先看下SpringMVC文档上给的流程图:



这张图片给了我们大概的执行流程:


1、用户请求首先发送到前端控制器DispatcherServlet,DispatcherServlet根据请求的信息来决定使用哪个页面控制器Controller(也就是我们通常编写的Controller)来处理该请求。找到控制器之后,DispatcherServlet将请求委托给控制器去处理。


2、接下来页面控制器开始处理用户请求,页面控制器会根据请求信息进行处理,调用业务层等等,处理完成之后,会把结果封装成一个ModelAndView返回给DispatcherServlet。


3、前端控制器DispatcherServlet接到页面控制器的返回结果后,根据返回的视图名选择相应的试图模板,并根据返回的数据进行渲染。


4、最后前端控制器DispatcherServlet将结果返回给用户。


更具体的流程


上面只是总体流程,接下来我们稍微深入一点,看下更具体的流程,这里没有图,只有步骤解析:


1、用户请求发送到前端控制器

DispatcherServlet。


2、前端控制器 DispatcherServlet 接收到请求后,DispatcherServlet 会使用 HandlerMapping 来处理,HandlerMapping 会查找到具体进行处理请求的 Handler 对象。


3、HandlerMapping 找到对应的 Handler 之后,并不是返回一个 Handler 原始对象,而是一个 Handler 执行链,在这个执行链中包括了拦截器和处理请求的 Handler。 HandlerMapping 返回一个执行链给 DispatcherServlet。


4、DispatcherServlet 接收到执行链之后,会调用 Handler 适配器去执行Handler。


5、Handler 适配器执行完成 Handler(也就是我们写的 Controller)之后会得到一个 ModelAndView,并返回给 DispatcherServlet。


6、DispatcherServlet 接收到 Handler 适配器返回的 ModelAndView 之后,会根据其中的视图名调用视图解析器。


7、视图解析器根据逻辑视图名解析成一个真正的 View 视图,并返回给 DispatcherServlet。


8、DispatcherServlet 接收到视图之后,会根据上面的 ModelAndView 中的 model 来进行视图中数据的填充,也就是所谓的视图渲染。


9、渲染完成之后,DispatcherServlet 就可以将结果返回给用户了。








请到「今天看啥」查看全文