本文内容来自朱要光老师编著的《SpringMVC+MyBatis开发从入门到项目实战》书的第8章。
在学习SpringMVC框架之前,首先需要了解SpringMVC框架的整体请求流程和使用到的API流。SpringMVC的整体请求流程如下:
第一步:用户单击某个请求路径,发起一个request请求,此请求会被前端控制器(DispatcherServlet)处理。
第二步:前端控制器(DispatcherServlet)请求处理器映射器(HandlerMapping)去查找 Handler。可以依据注解或者XML配置去查找。
第三步:处理器映射器(HandlerMapping)根据配置找到相应的 Handler(可以包含若干个 Interceptor 拦截器),返回给前端控制器(DispatcherServlet)。
第四步:前端控制器(DispatcherServlet)请求处理器适配器(HandlerAdapter)去执行相应的 Handler(常称为Controller
)。
第五步:处理器适配器(HandlerAdapter)执行 Handler。
第六步:Handler 执行完毕后返回给处理器适配器(HandlerAdapter)一个 ModelAndView 对象(SpringMVC底层对象,包括 Model 数据模型和 View 视图信息)。
第七步:处理器适配器(HandlerAdapter)接收到 Handler 返回的 ModelAndView 对象后,将其返回给前端控制器(DispatcherServlet)。
第八步:前端控制器(DispatcherServlet)接收到 ModelAndView 对象后,会请求视图解析器(ViewResolver) 对视图进行解析。
第九步:视图解析器(ViewResolver)根据 View 信息匹配到相应的视图结果,反馈给前端控制器(DispatcherServlet)。
第十步:前端控制器(DispatcherServlet)接收到 View 具体视图后,进行视图渲染,将 Model 中的模型填充到 View 视图中的 request 域,生成最终的视图(View)。
第十一步:前端控制器(DispatcherServlet)向用户返回请求结果。
以上就是 SpringMVC 的整个请求处理流程,其中用到的组件有:前端控制器(DispatcherServlet)、处理器映射器(HandlerMapping)、处理器适配器(HandlerAdapter)、处理器(Handler)、视图解析器(ViewResolver)、视图(View)。
流程中出现的各个组件的功能说明如下:
组件 | 说明 |
---|---|
前端控制器(DispatcherServlet) | 其作用是接收用户请求,然后给用户反馈结果。它的作用相当于一个转发器或中央处理器,控制整个流程的执行,对各个组件进行统一调度,以降低组件之间的耦合性,有利于组件之间的扩展。 |
处理器映射器(HandlerMapping) | 其作用是根据请求的URL路径,通过注解或者XML配置,寻找匹配的处理器(Handler)信息。 |
处理器适配器(HandlerAdapter) | 其作用是根据映射器找到的处理器(Handler)信息,按照特定规则执行相关的处理器(Handler)。 |
处理器(Handler) | 其作用是执行相关的请求处理逻辑,并返回相应的数据和视图信息,将其封装至 ModelAndView 对象中。 |
视图解析器(ViewResolver) | 其作用是进行解析操作,通过 ModelAndView 对象中的 View 信息将逻辑视图名解析成真正的视图 View (如通过一个JSP路径返回一个真正的JSP页面)。 |
视图(View) | 其本身是一个接口,实现类支持不同的 View 类型(JSP、FreeMarker、Excel等)。 |