版权声明:本文为 小异常 原创文章,非商用自由转载-保持署名-注明出处,谢谢!
本文网址:https://blog.csdn.net/sun8112133/article/details/104613402
文章目录
经过上一篇 Spring MVC 之 HelloWorld 这个小例子,相信大家对 Spring MVC 已经有了一个基本的认识了,而本篇博客主要是介绍 Spring MVC 的核心组件以及它是如何进行工作的。
一、核心组件
核心组件 是组成 Spring MVC 重要的部件,关于 Spring MVC 中常用的核心组件我总结了以下 8 种:
1、DispatcherServlet(前端控制器)
这个组件我们把它称为是 前端控制器,它负责调度其他组件的执行,相当于是中央处理器,它可以降低不同组件之间的耦合性,它也是 Spring MVC 最核心的组件,因为各个组件的调度都是由它来控制的。
我们在程序中会把它配置到
web.xml中,一般情况下我们要接收所有的请求(/)和配置 Spring MVC 的配置管理文件,HelloWorld 中我们已经接触过了。
2、Handler(处理器)
这个组件我们把它称为是 处理器,它可以完成具体的业务逻辑,也就是我们程序中的 控制器。
在之前的 HelloWorld 中我们也接触过它,就是
HelloController类,我们要在该类上加@Controller注解,并在 Spring MVC 配置管理文件 中配置自动扫描注解,使得@Controller注解生效,需要注意的是这里只能加@Controller注解,不能加其他的配置 Bean 的注解(如:@Component等),否则效果只能是放到 IOC 容器中,并不能处理浏览器请求。
3、HandlerMapping(处理器映射器)
这个组件我们把它称为是 处理器映射器,前端控制器(DispatcherServlet)得通过它才能将请求映射到不同的 处理器(Handler)。
4、HandlerInterceptor(处理器拦截器)
这个组件我们把它称为是 处理器拦截器,它是一个接口,如果需要完成一些拦截处理,可以实现该接口。
5、HandlerExecutionChain(处理器执行链)
这个组件我们把它称为是 处理器执行链,它是由 处理器(Handler) 和 处理器拦截器(HandlerInterceptor)这两部分组成的一条 处理器执行链。
6、HandlerAdapter(处理器适配器)
这个组件我们把它称为是 处理器适配器,它可以完成执行业务逻辑之前的一些预处理,如:数据类型转换、封装等。前端控制器(DispatcherServlet)也得通过它来调用不同的 处理器(Handler),因为它可以在调用前做一些预处理操作。
7、ModelAndView(模型视图)
这个组件我们把它称为是 模型视图,它里面装载了 模型数据 和 视图信息,它是 处理器(Handler) 处理后的最终结果,每次 处理器(Handler) 处理后都会把它返回给 前端控制器(DispatcherServlet)。
8、ViewResolver(视图解析器)
这个组件我们把它称为是 视图解析器,前端控制器(DispatcherServlet)是通过它将 逻辑视图 转换成 物理视图 ,最终将渲染结果响应给客户端。
二、工作流程
- 浏览器 请求被 前端控制器【DispatcherServlet】接收;
- 前端控制器【DispatcherServlet】根据 处理器映射器【HandlerMapping】映射到对应的 处理器【Handler】;
- 处理器【Handler】和 处理器拦截器【HandlerInterceptor】封装成 处理器执行链【HandlerExecutionChain】返回给 前端控制器【DispatcherServlet】;
- 前端控制器【DispatcherServlet】通过 处理器适配器【HandlerAdapter】调用 处理器【Handler】中的方法完成业务逻辑处理;
- 再将业务逻辑处理的结果(模型视图【ModelAndView】)返回给 前端控制器【DispatcherServlet】;
- 前端控制器将获取的 模型视图【ModelAndView】传送给 视图解析器【ViewResolver】;
- 视图解析器【ViewResolver】将逻辑视图解析为 物理视图【View】,并返回给 前端控制器【DispatcherServlet】;
- 前端控制器【DispatcherServlet】将 物理视图【View】进行渲染(将模型数据填充到视图中);
- 前端控制器【DispatcherServlet】将渲染后的视图响应给 浏览器。