第一节 SpringMVC运行原理
1、SpringMVC原理
①执行流程图
②执行流程
2、SpringMVC常见API
①中央控制器DispatcherServlet
②处理器映射器HandlerMapping
③处理器执行链HandlerExecutionChain
④处理器适配器HandlerAdapter
⑤视图解析器ViewResolver

第一节 SpringMVC运行原理

1、SpringMVC原理

①执行流程图

01 SpringMVC运行原理 - 图1

②执行流程

  1. 首先浏览器发送请求——>DispatcherServlet,前端控制器收到请求后自己不进行处理,而是委托给其他组件进行处理,作为统一访问点,进行全局的流程控制
  2. DispatcherServlet——>HandlerMapping,处理器映射器将会把请求映射为HandlerExecutionChain对象(包含一个Handler处理器对象、多个HandlerInterceptor拦截器)对象
  3. DispatcherServlet——>HandlerAdapter,处理器适配器将会把处理器包装为适配器,从而支持多种类型的处理器,即适配器设计模式的应用,从而很容易支持很多类型的处理器
  4. HandlerAdapter——>调用处理器相应功能处理方法,并返回一个ModelAndView对象(Model部分是业务对象返回的模型数据,View部分为逻辑视图名)
  5. DispatcherServlet——> ViewResolver,视图解析器将把逻辑视图名解析为物理视图,返回View对象
  6. DispatcherServlet——>View,View会根据传进来的Model模型数据进行渲染,此处的Model实际是一个Map数据结构
  7. DispatcherServlet——>响应,返回控制权给DispatcherServlet,由它返回响应给用户,到此一个流程结束

2、SpringMVC常见API

①中央控制器DispatcherServlet

01 SpringMVC运行原理 - 图2
发现他的上级类中有HttpServlet,而Servlet的执行入口是service(),一会就从这个方法入手开始SpringMVC执行过程的讲解。

②处理器映射器HandlerMapping

项目中会有多个@RequestMapping,每个RequestMapping对应一个类或者一个方法。用户给一个请求路径,如何获取该路径所对应的方法呢?这就要通过HandlerMapping来实现了。返回的结果就是访问路径所对应的处理器。
查看源码,发现HandlerMapping是一个接口,有多个实现类。该接口只有一个方法。当使用注解方式时,使用的处理器映射器是RequestMappingHandlerMapping。
01 SpringMVC运行原理 - 图3

③处理器执行链HandlerExecutionChain

为什么请求Handler,要返回HandlerExecutionChain呢。因为Handler的执行前后会有一个或者多个拦截器执行,并且拦截器是链式执行的。所有HandlerExecutionChain中就包含了要执行的一个处理器和多个拦截器的信息。
01 SpringMVC运行原理 - 图4
处理器就是我们开发的使用@Controller标记的控制器。而拦截器也己经经过,要实现三个方法,分别在不同的时机执行。以后都会看到三个方法执行的代码的。

④处理器适配器HandlerAdapter

处理器的执行是通过处理器适配器来执行的。因为会有XML方式、注解方式等处理器形式,具体执行会有不同,通过不同的HandlerAdapter来实现。这里用到了适配器设计模式。HandlerAdapter在SpringMVC中是一个接口。其中的handle()就是执行处理器。当使用注解方式时,使用的处理器映射器是RequestMappingHandlerAdapter。
01 SpringMVC运行原理 - 图5

⑤视图解析器ViewResolver

ViewResolver实现逻辑视图到物理视图的解析,比如:对于如下视图解析器,”main”是逻辑视图,而添加了后缀前缀的“/WEB-INF/jsp/main.jsp”就是物理视图。




在SpringMVC中ViewResolver作为一个接口存在,可以有不同的实现类,比如上面的InternalResourceViewResolver。

回目录 下一节