一文理解SpringMVC框架核心

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

所属分类 JAVA

相关标签 数据SpringMVC设计

框架简介

SpringMVC框架通过实现Model-View-Controller(MVC)模式来很好地将数据、业务与展现进行分离

SpringMVC框架和Struts、Struts2非常类似

SpringMVC的设计是围绕DispatcherServlet(前端控制器)展开的

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

框架优点

SpringMVC,基于MVC架构模式的思想,将web层进行职责解耦

请求驱动类型是使用请求-响应模型,框架的目的就是帮助我们简化开发

清晰的角色划分,分工明确,而且扩展点相当灵活,可以很容易扩展,虽然几乎不需要:

  • 前端控制器(DispatcherServlet)
  • 请求到处理器映射(HandlerMapping)
  • 处理器适配器(HandlerAdapter)
  • 视图解析器(ViewResolver)
  • 处理器或页面控制器(Controller)
  • 验证器( Validator)
  • 命令对象(Command请求参数绑定到的对象就叫命令对象)
  • 表单对象(Form Object 提供给表单展示和提交到的对象就叫表单对象)
  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框架无缝集成

核心类

  • 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
    通过页面标签或页面模版技术将模型数据通过页面展示给用户,需要根据业务需求开发具体的页面

数据流程

  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返回响应给用户,到此一个流程结束

米虫

做一个有理想的米虫,伪全栈程序猿,乐观主义者,坚信一切都是最好的安排!

本站由个人原创、收集或整理,如涉及侵权请联系删除

本站内容支持转发,希望贵方携带转载信息和原文链接

本站具有时效性,不提供有效、可用和准确等相关保证

本站不提供免费技术支持,暂不推荐您使用案例商业化

发表观点

提示

昵称

邮箱

QQ

网址

当前还没有观点发布,欢迎您留下足迹!

同类其他

JAVA

Struts2拦截器检测非法请求踢出登录

常规的WEB工程前后台都会设置相关校验规则,并且保持一致。因此服务端收到不符合校验的参数表示该请求存在恶意篡改行为,应当限制并踢出登录

Spring、SpringMVC和SpringBoot

Spring就像一个大家族,里面包含了很多衍生产品,其中最为出名的就是SpringMVC和SpringBoot,那么这三者之间是什么关系呢?SpringMVC和SpringBoot又专门用来做什么呢?

Eclipse中操作Git进行代码关联/拉取/推送

Eclipse可以直接通过GitRepositories直接创建本地项目与Git仓库关联,clone代码,同步、拉取以及推送代码,对于曾经经常使用SVN插件的小伙伴上手会相对容易。

JAVA线程池源码解析与使用

频繁的创建与销毁线程是非常浪费系统资源的行为,多线程编程中是必要考虑到线程复用,线程池就是实现线程复用的一种方式,看看JAVA的线程池如何让使用都有哪些关键参数

Servlet生命周期及数据流转过程

Spring家族大行其道的今天,很多人可能未必还记得JAVA中原生Servlet对象的一些知识,实际上SpringMVC就是基于Servlet进行的封装,记录Servlet对象生命周期及数据流转过程

JAVA单例模式中的饿汉模式与懒汉模式

在绝大多数的JAVA经典应用框架中广泛使用到了单例设计模式,单例设计模式最普遍的分类方式分类分为懒汉模式与饿汉模式两种,其主要区别在于初始化创建对象的时机不同。

选择个人头像

昵称

邮箱

QQ

网址

评论提示

  • 头像:系统为您提供了12个头像自由选择,初次打开随机为你选择一个
  • 邮箱:可选提交邮箱,该信息不会外泄,或将上线管理员回复邮件通知
  • 网址:可选提交网址,评论区该地址将以外链的形式展示在您的昵称上
  • 记忆:浏览器将记忆您已选择或填写过得信息,下次评论无需重复输入
  • 审核:提供一个和谐友善的评论环境,本站所有评论需要经过人工审核