Spring MVC 简介
spring 官方 logo
1. 前言
从本节课开始和大家一起学习 Spring MVC。
WEB MVC 框架有很多,但是,Spring MVC 却有着其它 WEB MVC 框架无可比拟的优势,本节课将从 以下几个方面简要介绍 Spring MVC ,让大家对它有一个初步印象。
- Spring MVC 与 Spring 的关系;
- Spring MVC 的功能;
- Spring MVC 的特性;
- Spring MVC 和其它 MVC 开发框架的比较。
2. Spring MVC 和 Spring 的关系
要真正理解、掌握 Spring MVC 的使用 ,前提是要有 Spring 的知识储备。
为什么?
因为它们是一家人。
大家都学过 Spring ,知道 Spring 刚出世时,提供了 IOC & DI 和 AOP 两大核心功能模块,这两大核心模块不亚于是编程界的倚天、屠龙,对企业项目开发过程产生了巨大的影响。
对初学者而言,所谓学习 Spring ,其课程的主要内容就是讲解 IOC 和 AOP 的概念及其使用。
后来,Spring 在这 2 大核心功能的的基础之上,延伸出更多的功能模块,由这些功能模块为企业项目开发提供了较完整的、全方位的解决方案。
spring 模块体系 总结一下,其实 Spring 这个概念有 2 层含义:
- 狭义角度: Spring 指的是 Spring Core 核心功能模块。是一个个体概念;
- 广义角度: Spring 是一个提供了众多功能模块的生态圈。是一个整体概念。
Spring MVC 和 Spring 的关系,也可以从 2 个方面理解:
- 水平角度: Spring MVC 是 Spring 生态圈中的一个功能模块。两者是包含与被包含的关系;
- 垂直角度: Spring MVC 是建立在 Spring 核心基础功能之上的一个实用性的 WEB MVC 框架,是 Spring 的延伸和扩展。
Spring MVC 的版本是跟着 Spring 走的,Spring 3.X 是一个分水岭,此版本提供更多实用性的功能,现在最新版本是 5.X 。本课程使用的是 5.1.13.RELEASE 。
Tips: 学习时,你可以根据需要更改版本号,从使用角度来讲,版本微调没有多大区别。
3. Spring MVC 是什么?
Spring MVC 是什么?答案很简单,它是一个 WEB MVC 框架。
3.1 Spring MVC 的功能
MVC 是分离思想,对程序分层仅仅只是提供了指导性的想法,并没有具体的可实施的方案。不同的项目中,具体的分层细节可由架构师把控。经过时间检验后,行业中会存留一些事实上的标准。
Spring MVC 就是一款为 WEB 项目提供的 MVC 分层框架,在基于 Spring 的基础功能或借助于 Spring 生态圈中的其它功能模块,为 WEB 项目提供了具体的 MVC 分层方案。
随着课程内容的展开,大家会逐步体会到 Spring MVC 是如何使用 MVC 理念 撑起整个 WEB 项目,以及如何简化开发者的工作。
但是,要真正了解 Spring MVC 的功能,则要先从理解 MVC 开始。
3.2 MVC 是什么
一个应用程序,当功能越来越庞大、逻辑越来越复杂、代码越来越多时,必然会采用分而治之的方案。分,容易,如何分才能分得清晰、便于维护,这是一个与管理有关的学问。
MVC 提出了一种分离的策略,这种想法或思想一问世,便让世人茅塞顿开。
MVC 的分离思想:
- 把整个应用程序中和用户进行交互的功能代码归纳在一起,这部分代码整体称为 V (View 或叫视图层);
- 把专门用来进行数据传递或数据逻辑处理的功能代码归纳在一起,称其为 M(Model 或叫l模型层)。
C 指的是哪一部分功能代码呢?
因为V 和 M 是要经常交流、沟通的,V 需要展示 M 处理过的数据,同时,M 也可能需要 V 提供的用户交互时输入的数据。虽然分了,但两者之间存在依赖关系。我们不让 V 和 M 直接交流,而是在两者之间引入了一个叫做 C(控制器)的对象,所以说 C 就是 V 和 M 之间的桥梁!
这个 C(控制器)对象感觉在硬生生的拆散别人,不过这种拆分是善意且友好的。
为什么这么说?
- 满足 OOP 中的低耦合性原则,解耦 V 和 M 之间的关系;
- M 需要用户交互时输入的数据时,可以不用管 V 是谁,只要有控制器传数据就可以;
- 同时,V 也不用关心 M 在哪里,只要有数据提供给自己就可以。
如果现在要编写一个 WEB 视图和 Swing 视图的双客户端应用程序时,只需要换一个 C 就可以,M 可以重用。
4. Spring MVC 的特性
要了解 Spring MVC 的功能特性,就需要从 WEB 应用开发的源头说起。
WEB 应用程序的主流开发技术有 3 种:
- servlet;
- php;
- .net。
Servlet 是基于 Java 语言的动态 web开发技术,Servlet 指的是 J2EE 中所提出来的企业级服务器开发规范。
原生 Servlet 构建的 MVC 开发模式有几个缺点:
- Servlet 本身采用单例设计模式,生命周期由服务器维护,存在线程安全隐患的问题;
- 理论上讲,每一次不同的 http 请求需要一个 Servlet 组件来响应,当请求类型比较多时,Servlet 就会相应增加,也意味着每一个 Servlet 都可以成为进入服务器的入口。想想你家里对外开了好多扇门,小偷终能找到破绽;
- 随着 Servlet 数量的增加,对服务器的存储空间也会产生压力;
- 使用 Servlet 响应用户请求时,每一个响应逻辑都需要开发者不厌其烦地做些重复的事情,如,解析请求包中的数据、构建响应包、设置页面跳转等等。
这些问题,在 Spring MVC 中都得到了很好的解决。
- 使用 Spring MVC 时,就只有一个门可以进入应用程序,这个门叫前端(中央)控制器,所有请求统一经过这个前端控制器分流到具体的内部响应组件;
- Spring MVC 是 Spring 家族中的一员,有句话叫做“近水楼台先得月”。使用 Spring MVC 时所需要的 WEB 组件也好、其它的逻辑组件也好,都经由 Spring IOC 创建,Spring IOC 容器对组件的生命周期可进行伸缩性设置管理,可根据组件特性保证其线程安全性;
- Spring MVC 和 Spring 有直属血缘的关系,两者完美结合,使得程序的安全性和稳定性有一定的保证;
- Spring MVC 利用 Spring 的自动注入功能,能轻松地装配好各组件之间的依赖,开发者只需要关注编写自己的业务逻辑便可,和所有框架理念一样,解放双手,释放大脑。
Spring MVC 设计的初衷,就是要做成一款轻量级框架,其内在的原力让我们一起在后续课程中慢慢释放。
6. Spring MVC 与 Struts MVC
WEB MVC 框架领域中有一款叫做 Struts MVC 的前辈,曾经也风光无限。当然,现在还是有很多企业在使用。
Struts MVC 和 Spring MVC 是功能类型相同的框架,本体功能是一样的。Struts MVC 相比较 Spring MVC, 没有自己的生态圈。
MVC 框架与其它框架有一个显著的不同点,MVC 是一个项目级别的架构思想,MVC 框架用于程序的整体架构设计,Struts MVC 很多功能需要借助于 Spring 实现,很显然没 Spring MVC 与 Spring 的吻合度好。
Spring MVC 后面是 Spring 这个靠山。爱屋及乌、就近原则会让开发者更趋向于选择 Spring MVC。
7. 学习基础
学习本课程,学习者需要一定的基础知识:
- JAVA 基础知识;
- 熟悉了解基于 Servlet 的 WEB 开发;
- 熟悉了解 Spring 相关知识。
8. 小结
本节课和大家一起讲解 Spring MVC 与 Spring 的关系,Spring 是基础,Spring MVC 是 Spring 向 WEB 应用开发方向的延伸。背靠 Spring 强大的基础核心功能,让 Spring MVC 快速崛起,成为现代企业开发的标配。
Spring MVC 的具体功能是什么?
本文从 MVC 聊起,意在让大家明白 Spring MVC 为 WEB 项目提供了一种优秀的 MVC 分层实现方案。