Spring MVC工作原理以及核心架构

Spring MVC是一个基于请求驱动的Web框架,并且也使用了前端控制器模式来进行设计,再根据请求映射规则分发给相应的页面控制器(动作/处理器)进行处理。

Spring MVC核心架构


核心架构的具体流程步骤如下:

1、  首先用户发送请求——>DispatcherServlet,前端控制器收到请求后自己不进行处理,而是委托给其他的解析器进行处理,作为统一访问点,进行全局的流程控制;

2、  DispatcherServlet——>HandlerMapping, HandlerMapping将会把请求映射为HandlerExecutionChain对象(包含一个Handler处理器(页面控制器)对象、多个HandlerInterceptor拦截器)对象,通过这种策略模式,很容易添加新的映射策略;

3、  DispatcherServlet——>HandlerAdapter,HandlerAdapter将会把处理器包装为适配器,从而支持多种类型的处理器,即适配器设计模式的应用,从而很容易支持很多类型的处理器;

4、  HandlerAdapter——>处理器功能处理方法的调用,HandlerAdapter将会根据适配的结果调用真正的处理器的功能处理方法,完成功能处理;并返回一个ModelAndView对象(包含模型数据、逻辑视图名);

5、  ModelAndView的逻辑视图名——> ViewResolver, ViewResolver将把逻辑视图名解析为具体的View,通过这种策略模式,很容易更换其他视图技术;

6、  View——>渲染,View会根据传进来的Model模型数据进行渲染,此处的Model实际是一个Map数据结构,因此很容易支持其他视图技术;

7、返回控制权给DispatcherServlet,由DispatcherServlet返回响应给用户,到此一个流程结束。

Spring MVC工作原理

Spring MVC工作原理

Spring MVC工作原理

工作流程步骤如下:

1. 用户发送请求到前端控制器(DispatcherServlet)

2. 前端控制器请求HandlerMapping查找 Handler 【可以根据xml配置、注解进行查找】

3. 处理器映射器HandlerMapping向前端控制器返回Handler

4. 前端控制器请求处理器适配器去执行Handler

5. 处理器适配器去执行Handler

6. 处理器适配器执行完成后,Controller返回ModelAndView

7. 处理器适配器向前端控制器返回ModelAndView,ModelAndView是springmvc框架的一个底层对象,包括Model和view

8. 前端控制器请求视图解析器去进行视图解析【根据逻辑视图名解析成真正的视图(jsp)】    

9. 视图解析器向前端控制器返回View

10. 前端控制器进行视图渲染【视图渲染即. 模型数据(在ModelAndView对象中)填充到request域】

11. 前端控制器向用户响应结果、

DispatcherServlet工作原理

DispatcherServlet工作原理


1. 当DispatcherServlet接到请求时,他先回查找适当的处理程序来处理请求。DispatcherServlet通过一个或者多个处理程序映射,将每个请求映射到处理程序中。处理程序映射配置在web应用程序的上下文中,是实现了HandlerMapping接口的Bean。它负责为请求返回一个适当的处理程序(也就是Controller)。处理程序映射通常根据请求的URL将请求映射到处理程序(Controller)。 

2. 一旦DispatcherServlet选择了适当的控制器,它就会调用这个控制器来处理请求。 

3. 控制器处理完请求后,会将模型和视图名(有时候是视图对象)返回给DispatcherServlet。模型包含了控制器要传递给视图进行显示的属性。如果返回的是视图名称,它会被解析成视图对象再进行呈现。绑定模型和视图的基本类是ModelAndView

4. 当DispatcherServlet接收到模型和视图名称时,它会将逻辑视图名称解析成视图对象再进行呈现。DispatcherServlet从一个或者多个视图解析器中解析视图。视图解析器配置在Web应用程序上下文中,是实现了ViewResolver接口的Bean。它的任务是根据逻辑视图名称返回试图对象。 

5. 一旦DispatcherServlet将视图名称解析称为试图对象,它就会呈现视图对象,并传递控制器返回的模型。视图的任务是将模型属性展示给用户。 

Spring MVC工作原理总结

(1 )启动服务器,根据web.xml 的配置加载前端控制器(也称总控制器) DispatcherServlet 。加载(包括加载springmvc-servlet.xml)时会完成一系列的初始化动作。

(2 )根据servlet 的映射请求(上面的helloWorld 实例中针对.do 请求),并参照“控制器配置文件(即springmvc-servlet.xml 这样的配置文件),把具体的请求分发给特定的后端控制器进行处理(比如上例会分发给HelloWorld 控制器进行处理)

(3 )后端控制器调用相应的逻辑层代码,完成处理并返回视图对象(ModelAndView )给前端处理器。

(4 )前端控制器根据后端控制器返回的 ModelAndView 对象,并结合一些配置(后续有说明),返回一个相应的页面给客户端。

版权声明:本文为JAVASCHOOL原创文章,未经本站允许不得转载。