SpringMVC
执行流程主要由四大组件协同完成,分别是:DispatcherServlet
,HandlerMapping
,HandlerAdapter
和 ViewResolver
。
这些组件对开发者来说是不可见的,开发者只需要在 Controller
(Handler)层完成对请求业务的处理。
Java 体系结构
Java标准提供的体系结构分四层,分别是:
- 应用层:C/S、Java Swing
C/S结构的客户端应用层在Java开发中很少用到,几乎放弃了;所以有的也说Java标准体系结构分三层,则排除了应用层,指的是JavaEE Web的三层架构。 - 表现层(action):Struts2,SpringMVC
SpringMVC是一个表现层MVC框架,类似Struts2,struts2严格按照mvc设计模式设计框架。 - 业务层(service):EJB,spring
EJB标准因太重了,现在已很少使用。 - 持久层(DAO):Hibernate,mybatis
体系分层的目的主要是:耦合性低、重用性高、可维护性高、利于管理。
MVC 设计模式
使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式,C用来确保M和V的同步,一旦M改变,V应该同步更新。
MVC 分层有助于管理复杂的应用程序,简化了分组开发,不同开发人员可同时开发视图、控制器逻辑和业务逻辑。
MVC 设计模式已经成为软件分层架构的设计典范,被推荐为 JavaEE 平台的设计模式。
MVC设计模式:
- 模型(Model):应用程序核心,JavaBean组件,域模型层+业务逻辑层+持久层
- 视图(View):处理数的居显示,能看到的用户界面,如页面,JSP
- 控制器(Controller):处理用户交互,接收用户请求,委托给模型处理,把模型返回的数据返回给视图。
也有认为MVC
应归属于三层架构中表现层,M
是数据模型,包含数据的对象;在SpringMVC
中有个专门的Model
类来封装数据,用于主V
之间的数据交互,传值。
Spring MVC 执行流程
Spring MVC 是遵循MVC设计模式设计的web表现层框架,实现业务数据的处理和显示之间的解耦。
Spring MVC 实际上是按请求→响应来的流程来开发的。下图也是一次请求→响应的完整流程。
SpringMVC角色划分
- 前端控制器(DispatcherServlet)
用户请求到达前端控制器,由它调用其它组件处理用户请求(请求分发),是流程控制中心,降低组件之间的耦合性。
Spring 根据配置扫描所有带@Controller
的控制器类,前端控制器会扫描使用了该注解的类的方法,并检测是否使用了@RequestMapping
注解。
- 处理器映射器(HandlerMapping)
负责根据用户请求找到处理器,Spring 提供了配置文件方式、实现接口方式、注解方式来实现处理器的映射。
- 处理器适配器(HandlerAdapter)
对处理器进行执行(执行Controller方法 ),对用户请求进行处理。
- 视图解析器(ViewResolver)
将处理结果生成view视图。逻辑视图→物理视图→视图对象→渲染展示。
特点:分工明确,和其它框架缝集成,可适配,可定制,功能强大的数据验证、格式化、绑定机制,强大的JSP标签库。
备注:在 SpringMVC 的各个组件中,处理映射器,处理适配器,视图解析器 称为三大组件。
SpringMVC执行流程解读
- 用户向服务器发送请求,请求被前端控制器 DispatcherServlet 截获。
- DispatcherServlet 对请求
URL
(统一资源定位符)进行解析,得到URI
(请求资源标识符)。然后根据 URI 调用 HandlerMapping 。 - HandlerMapping 获取 Handler 配置的所有相关的对象,包括 Handler 对象对应的拦截器,把这些对象封装到HandlerExecutionChain 对象当中返回。
- DispatcherServlet 根据获得的
Handler
,选择一个 HandlerAdapter 。 - HandlerAdapter 提取请求中的模型数据,开始执行 Handler(Controller)。
在填充 Handler入参的过程,根据配置,Spring 还会执行一些额外的工作。- 消息转换:将请求消息转换成对象,将对象转换成指定的响应消息。(如:JSON,XML等数据)。
- 数据转换:对请求消息进行数据类型转换,如 String 转换成 Integer 等。
- 数据验证:验证数据的有效性(长度、格式、类型),将验证结果存储到 BindingResult 或 Error 中。
HandlerAdapter 会被用于处理多种 Handler ,调用 Handler 实际处理请求的方法。
HandlerAdapter 设计符合面向对象中的单一职责原则
,代码结构清晰,便于维护,最重要的是代码可复用性高。
- Handler 执行完后 通过
HandlerAdapter
向 DispatcherServlet 返回一个 ModelAndView 对象,ModelAndView 对象包含视图名和模型。 - HandlerAdapter 处理适配置将 ModelAndView 返回给 DispatcherSevlet。
- DispatcherServlet 根据返回的 ModelAndView 对象,选择一个合适的 ViewResolver(视图解析器) 传 入视图名。
- ViewResolver 根据 View 结合配置文件,将逻辑视图解析为物理视图,并返回视图(View)对象。
- DispatcherServlet 将对 ModelAndView 传给 View 层(JSTL)。
- View 执行视图渲染,将视图返回给用户。
其它参考
网上其它的流程图
更多内容请访问:IT源点
注意:本文归作者所有,未经作者允许,不得转载