Spring MVC 工作原理--自我理解

一个Http请求,大致分为请求->响应过程,其中SpringMvc框架接受请求,处理一系列事情后响应给客户端。

大家都知道,Tomcat启动监听读取web.xml配置文件,其中servlet配置<load-on-startup>1</load-on-startup> 随服务启动而自动加载org.springframework.web.servlet.DispatcherServlet。

DispatcherServlet是个关键,没有它就没有SpringMvc应用。它里面包含很多,其中关键点有个HandlerMapping,它是个接口。负责的是@RequestMapping,请求路由处理器。

首先先来了解下annotation-driven 注解驱动

1. <mvc:annotation-driven/>

annotation-driven 注解驱动 在xml中肯定有,那为啥要写,有啥关联?

其实就是帮我们注册了DefaultAnnotationHandlerMapping 和 AnnotationMethodHandlerAdapter (可能这2个已经过时了,不过没关系,知道原理就行)

过时现在最新对应的是RequestMappingHandlerMapping 和 RequestMappingHandlerAdapter ,这更好理解。

RequestMappingHandlerMapping :看源代码肯定是实现了HandlerMapping接口,它会处理@RequestMapping 注解,并将其注册到请求映射表中

 

 。。。。

继承很多

RequestMappingHandlerAdapter:看源代码肯定是实现了HandlerAdapter接口,则是处理请求的适配器,确定调用哪个类的哪个方法,并且构造方法参数,返回值。说白了就是依赖注入处理,

扫描到的@Component@Controller@Service,@Repository等注解标记的组件注册到工厂中,来处理我们的请求。

总结: 

1、说白了注解驱动就干了2件很关键的事情,一个是路由匹配,另一个是注解依赖注入。

2、结合DispatcherServlet 来看,就是DispatcherServlet 中有一个HandlerMapping接口,annotation-driven去实现它,然后Tomcat 服务启动后自动加载annotation-driven 中的2个bean

Spring MVC 框架主要由 DispatcherServlet、处理器映射、控制器、视图解析器、视图组成,其工作原理如图 1 所示

  从图 1 可总结出 Spring MVC 的工作流程如下:

  1. 客户端请求提交到 DispatcherServlet。
  2. 由 DispatcherServlet 控制器寻找一个或多个 HandlerMapping,找到处理请求的 Controller。
  3. DispatcherServlet 将请求提交到 Controller。
  4. Controller 调用业务逻辑处理后返回 ModelAndView。
  5. DispatcherServlet 寻找一个或多个 ViewResolver 视图解析器,找到 ModelAndView 指定的视图。
  6. 视图负责将结果显示到客户端。

再看一张流程图,上下2张结合看,更清楚。

 

原文地址:https://www.cnblogs.com/zjtao/p/12175157.html