Spring MVC 概述
Spring MVC 是目前主流的实现 MVC 设计模式的框架,是 Spring 框架的一个分支产品,以 Spring IoC 容器为基础(用 IoC 来管理 Spring MVC 各个组件),并利用容器的特性来简化它的配置。Spring MVC 相当于 Spring 的一个子模块,可以很好的和 Spring 结合起来进行开发(如果是其他MVC框架,则需要整合到 Spring 中),是 Java Web 开发者必须掌握的框架。(也是目前最主流的框架)
什么是 MVC 设计模式?
将应用程序分为 Controller、Model、View 三层,Controller 接收客户端请求,调用 Model 生成业务数据,传递给 View。
Spring MVC 就是对这套流程的封装,屏蔽了很多底层代码,开放出接口,让开发者可以更加轻松、便捷地完成基于 MVC 模式的 Web 开发。
Spring MVC 核心组件
-
DispatcherServlet:前置控制器,是整个流程控制的核心,控制其他组件的执行,进行统一调度,降低组件之间的耦合性,相当于总指挥。 -
Handler:处理器,完成具体的业务逻辑。相当于 Servlet 或 Action。 -
HandlerMapping:DispatcherServlet 接收到请求之后,通过 HandlerMapping 将不同的请求映射到不同的 Handler。 -
HandlerInterceptor:处理器拦截器,是一个接口,如果说需要完成一些拦截处理,可以实现该接口。 -
HandlerExecutionChain:处理器执行链,包含两部分内容:Handler 和 HandlerInterception(系统会有一个默认的 HandlerInterceptor,如果需要额外设置拦截,可以添加拦截器)。 -
HandlerAdapter:处理器适配器,Handler 执行业务方法之前,需要进行一系列的操作,包括表单数据的验证、数据类型的转换、将表单数据封装到 JavaBean 等。将前端传送的数据封装成一个对象,之前,这些流程全部由我们手动完成。有了 HandlerAdapter 后,我们直接拿封装好的对象即可。DispatcherServlet 通过 HandlerAdapter 执行不同的 Handler。 -
ModelAndView:装载了模型数据和视图信息,作为 Handler 的处理结果,返回给 DispatcherServlet 。 (也就是 MVC 中的 Model 和 View) -
ViewResolver:视图解析器,DispatcherServlet 通过它 将逻辑视图(不是真实存在的视图,用来映射物理视图的)解析为物理视图(真实存在的视图,如 JSP、HTML),最终将渲染的结果相应给客户端。
Handler 就是 Controller(Servlet 也是 Controller,两者果然类似)。
Spring MVC 工作流程
- 客户端请求被 DispatcherServlet 接收。
- DispatcherServlet 根据 HandlerMapping 映射到 Handler。
- HandlerMapping 生成 Handler 和 HandlerInterceptor,并以 HandlerExecutionChain 的形式一并返回给 DispatcherServlet。
- DispatcherServlet 通过 HandlerAdapter 来调用 Handler 的方法完成业务逻辑处理。
- Handler 返回 ModelAndView 给 HandlerAdapter,而 HandlerAdapter 返回给 DispatcherServlet。
- DispatcherServlet 将获取的 ModelAndView 对象传给 ViewResolver 视图解析器,将逻辑视图解析为物理视图 View。
- ViewResolver 返回一个 View 给 DispatcherServlet。
- DispatcherServlet 根据 View 进行视图渲染(将模型数据 Model 填充到视图 View 中)。
- DispatcherServlet 将渲染后的结果响应给客户端。
Spring MVC 的特点
- 清晰地角色划分(各种组件,解耦)
- 灵活地配置功能
- 提供了大量地控制器接口和实现类
- 分离 View 层的实现
- 国际化支持(根据不同的国家显示不同的文字)
- 面向接口编程
分离 View 层的实现
- 国际化支持(根据不同的国家显示不同的文字)
- 面向接口编程
实际上,真正开发只用到了 View、Model、Handler。其余组件都已经实现好了。