SpringMVC框架的优点、核心类、数据传输流程

SpringMVC框架是围绕DispatcherServlet(前端控制器)展开的,本文描述SpringMVC的优点、各个核心类(角色)作用,并说明用户请求数据到最终视图返回完整的数据传输过程(图解)

SpringMVC框架的优点、核心类、数据传输流程

所属分类: JAVA
专题标签: SpringMVC MVC 核心

SpringMVC框架简介

SpringMVC框架通过实现Model-View-Controller(MVC)模式来很好地将数据、业务与展现进行分离
SpringMVC框架和Struts、Struts2非常类似
SpringMVC的设计是围绕DispatcherServlet(前端控制器)展开的
DispatcherServlet:

  1. 负责将请求派发到特定的handler(处理程序)
  2. 给处理程序分派请求,执行视图解析,处理语言环境和主题解析,支持上传文件
  3. 通过映射来决定哪一个处理程序应当处理传入的请求
  4. 通过可配的handler mappings、view resolution、locale以及theme resolution来处理请求并且转到对应的视图。

SpringMVC框架优点

SpringMVC,基于MVC架构模式的思想,将web层进行职责解耦
请求驱动类型是使用请求-响应模型,框架的目的就是帮助我们简化开发。
清晰的角色划分,分工明确,而且扩展点相当灵活,可以很容易扩展,虽然几乎不需要:

  • 前端控制器(DispatcherServlet)
  • 请求到处理器映射(HandlerMapping)
  • 处理器适配器(HandlerAdapter)
  • 视图解析器(ViewResolver)
  • 处理器或页面控制器(Controller)
  • 验证器( Validator)
  • 命令对象(Command请求参数绑定到的对象就叫命令对象)
  • 表单对象(Form Object 提供给表单展示和提交到的对象就叫表单对象)

SpringMVC优点列举

  1. SpringMVC拥有强大的灵活性、非入侵性和可配置性
  2. SpringMVC提供了一个前端控制器DispatcherServlet,开发者无须额外开发控制器对象
  3. SpringMVC分工明确,包含控制器、验证器、命令对象、模型对象、处理程序映射视图解析器,等等,每一个功能实现由一个专门的对象负责完成
  4. SpringMVC可以自动绑定用户输入,并正确地转换数据类型。例如:SpringMVC能自动解析字符串,并将其设置为模型的int或float类型的属性
  5. SpringMVC使用一个名称/值的Map对象实现更加灵活的模型数据传输
  6. SpringMVC内置了常见的校验器,可以校验用户输入,如果校验不通过,则重定向回输入表单。输入校验是可选的,并且支持编程方式及声明方式
  7. SpringMVC支持国际化,支持根据用户区域显示多国语言,并且国际化的配置非常简单
  8. SpringMVC支持多种视图技术,最常见的有JSP技术以及其他技术,包括Velocity和FreeMarker
  9. SpringMVC提供了一个简单而强大的JSP标签库,支持数据绑定功能,使得编写JSP页面更加容易
  10. SpringMVC属于Spring框架的子项目,比起其他轻量级WEB框架最大的优势:与Spring框架无缝集成

SpringMVC核心类

  • DispatcherServlet:前端控制器
    用户请求到达前端控制器,它就相当于MVC模式中的Controller
    虽然实际应用中开发依旧需要开发业务自有的Controller层,但DispatcherServlet相当于一个总的入口
    DispatcherServlet是整个流程控制的中心,由它调用其它组件处理用户的请求,降低组件之间的耦合性

  • HandlerMapping:处理器映射器
    HandlerMapping负责根据用户请求找到Handler即处理器
    SpringMVC框架提供了不同的映射器实现不同的映射方式
    例如:配置文件方式,实现接口方式,注解方式等

  • Handler:处理器
    Handler是继DispatcherServlet前端控制器的后端控制器,在DispatcherServlet的控制下Handler对具体的用户请求进行处理
    Handler涉及到具体的用户业务请求,所以一般情况需要程序员根据业务需求开发Handler(也就是我们实际开发的Controller)

  • HandlAdapter:处理器适配器
    通过HandlerAdapter对处理器进行执行,这是适配器模式的应用,通过扩展适配器可以对更多类型的处理器进行执行

  • View Resolver:视图解析器
    View Resolver负责将处理结果生成View视图
    View Resolver根据逻辑视图名解析成物理视图名即具体的页面地址,再生成View视图对象
    对View进行渲染将处理结果通过页面展示给用户

  • View:视图
    SpringMVC框架提供了很多的View视图类型的支持
    包括:jstlView、freemarkerView、pdfView等
    我们最常用的视图就是jsp
    通过页面标签或页面模版技术将模型数据通过页面展示给用户,需要根据业务需求开发具体的页面

SpringMVC数据流转流程

  1. 用户发送请求—>DispatcherServlet
    前端控制器收到请求后自己不进行处理,而是委托给其他的解析器进行处理,作为统一访问点,进行全局的流程控制

  2. DispatcherServlet—>HandlerMapping
    HandlerMapping将会把请求映射为HandlerExecutionChain对象(包含一个Handler处理器(页面控制器)对象、多个HandlerInterceptor拦截器)对象,通过这种策略模式,很容易添加新的映射策略

  3. DispatcherServlet—>HandlerAdapter
    HandlerAdapter将会把处理器包装为适配器,从而支持多种类型的处理器,即适配器设计模式的应用,从而很容易支持很多类型的处理器

  4. HandlerAdapter—>处理器功能处理方法的调用
    HandlerAdapter将会根据适配的结果调用真正的处理器的功能处理方法,完成功能处理

  5. 返回一个ModelAndView对象(Model模型数据)
    包含模型数据、逻辑视图名

  6. ModelAndView的逻辑视图名—> ViewResolver
    ViewResolver将把逻辑视图名解析为具体的View,通过这种策略模式,很容易更换其他视图技术

  7. View—>渲染
    View会根据传进来的Model模型数据进行渲染,此处的Model实际是一个Map数据结构,因此很容易支持其他视图技术

  8. 返回给DispatcherServlet
    由DispatcherServlet返回响应给用户,到此一个流程结束