SpringMVC(七):体系结构与执行流程

star2017 1年前 ⋅ 292 阅读

SpringMVC 执行流程主要由四大组件协同完成,分别是:DispatcherServletHandlerMappingHandlerAdapterViewResolver

这些组件对开发者来说是不可见的,开发者只需要在 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 执行流程

SpringMVC执行流程解读

  1. 用户向服务器发送请求,请求被前端控制器 DispatcherServlet 截获。
  2. DispatcherServlet 对请求 URL(统一资源定位符)进行解析,得到 URI(请求资源标识符)。然后根据 URI 调用 HandlerMapping
  3. HandlerMapping 获取 Handler 配置的所有相关的对象,包括 Handler 对象对应的拦截器,把这些对象封装到HandlerExecutionChain 对象当中返回。
  4. DispatcherServlet 根据获得的 Handler,选择一个 HandlerAdapter
  5. HandlerAdapter 提取请求中的模型数据,开始执行 Handler(Controller)
    在填充 Handler入参的过程,根据配置,Spring 还会执行一些额外的工作。
    • 消息转换:将请求消息转换成对象,将对象转换成指定的响应消息。(如:JSON,XML等数据)。
    • 数据转换:对请求消息进行数据类型转换,如 String 转换成 Integer 等。
    • 数据验证:验证数据的有效性(长度、格式、类型),将验证结果存储到 BindingResultError 中。
      HandlerAdapter 会被用于处理多种 Handler ,调用 Handler 实际处理请求的方法。
      HandlerAdapter 设计符合面向对象中的单一职责原则,代码结构清晰,便于维护,最重要的是代码可复用性高。
  6. Handler 执行完后 通过 HandlerAdapter 向 DispatcherServlet 返回一个 ModelAndView 对象,ModelAndView 对象包含视图名和模型。
  7. HandlerAdapter 处理适配置将 ModelAndView 返回给 DispatcherSevlet
  8. DispatcherServlet 根据返回的 ModelAndView 对象,选择一个合适的 ViewResolver(视图解析器) 传 入视图名。
  9. ViewResolver 根据 View 结合配置文件,将逻辑视图解析为物理视图,并返回视图(View)对象。
  10. DispatcherServlet 将对 ModelAndView 传给 View 层(JSTL)。
  11. View 执行视图渲染,将视图返回给用户。

其它参考

  1. 网上其它的流程图

更多内容请访问:IT源点

相关文章推荐

全部评论: 0

    我有话说: