SpringMVC 润物无声,使用起来非常简单,但它的底层架构设计是非常细腻的,这套流程还请你熟记于心。

一、流程详解

结合下图来记忆 SpringMVC 的工作流程。

image.png

步骤一

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

步骤二

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

步骤三

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

步骤四

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

步骤五

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

步骤六

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

步骤七

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

二、名词解释

请结合上一节的图和七个步骤理解地进行消化吸收。

2.1、 DispatcherServlet

DispatcherServlet 是整个流程控制的中心,它就相当于 MVC 模式中的 C ,也就是控制中心。由它调用其它组件处理用户的请求,DispatcherServlet 的存在降低了组件之间的耦合性。

2.2、 HandlerMapping

HandlerMapping 负责根据用户请求找到 Handler 即处理器(也就是我们所说的 Controller),SpringMVC 提供了不同的映射器实现不同的映射方式,例如:配置文件方式、实现接口方式、注解方式等,在实际开发中,我们常用的方式是注解方式。

2.3、Handler

Handler 是继 DispatcherServlet 前端控制器的后端控制器,在DispatcherServlet 的控制下 Handler 对具体的用户请求进行处理。由于 Handler 涉及到具体的用户业务请求,所以一般情况需要开发人员根据业务需求开发 Handler。(这里所说的 Handler 就是指我们每天都接触的 Controller)

2.4、 HandlAdapter

通过 HandlerAdapter 对处理器进行执行,这是适配器模式的应用,通过扩展适配器可以对更多类型的处理器进行执行。

2.5、ViewResolver

ViewResolver 负责将处理结果生成 View 视图,ViewResolver 首先根据逻辑视图名解析成物理视图名即具体的页面地址,再生成 View 视图对象,最后对 View 进行渲染将处理结果通过页面展示给用户。 SpringMVC 框架提供了很多的 View 视图类型,包括:jstlView、freemarkerView、pdfView 等。一般情况下需要通过页面标签或页面模版技术将模型数据通过页面展示给用户,需要由程序员根据业务需求开发具体的页面。