1. 什么是 Spring Web MVC
Spring Web MVC 是基于 Servlet API 构建的原始 Web 框架,从已开是就包含在 Spring 框架中。它的正式名称“Spring Web MVC”是自其源模块的名称(Spring-webmvc),但它通常被称为“Spring mvc”
[!quote] 什么是
Servlet
Servlet
是一种实现动态页面的技术。准确来讲Servlet
是一套Java Web
开发的规范,或者说是一套 JavaWeb 开发的技术标准。只有规范并不能做任何事,必须要有人去实现它。所谓实现Servlet
规范,就是真正编写代码去实现Servlet
规范提到的各种功能,包括类、方法、属性等。Servlet
规范是开放的,除了Sun
公司,其他公司也能实现Servlet
规范,目前常见的实现了Servlet
规范的产品包括Tomcat
、Weblogic
、Jetty
、Jboss
、WebSphere
等,它们都被称为“Servlet
容器”。Servlet
容器用来管理程序猿编写的Servlet
类
从上述定义我们可以得出一个信息:Spring Web MVC
是一个 Web
框架。下面我们简称“Spring MVC
”
然而要真正理解什么是 Spring MVC
,我们首先要搞清楚什么是 MVC
1.1 MVC 定义
MVC 是 Model View Controller 的缩写,它是软件工程中的一种软件架构设计模式,它把软件系统分为:模型、视图和控制器三个部分
View
(视图):指在应用程序中专门用来与浏览器进行交互,展示数据的资源Model
(模型):是应用程序的主体部分,用来处理程序中数据逻辑的部分Controller
(控制器):可以理解为一个分发器,用来决定视图发来的请求,需要用哪一个模型来处理,以及处理完后需要跳回哪一个视图。即用来连接视图和模型
我们去饭店吃饭,我们坐下,服务员让我们点单。点完之后,服务员就把单给到前台,然后前台把单给到后厨
- 服务员 ==>
View
,接待我们的 - 前台==>
Contriller
,出现一些冲突(菜不对等等情况),就会去前台 - 后厨 ==>
Model
,菜做好之后,把菜品给到前台,前台再把菜给到服务员,服务员给我们上菜
我们是和服务员进行交互,前台是控制他们两个之间的关系
去面试,HR 和部门的负责人对接。候选人到达公司,HR 接待;HR 去找部门的负责人安排面试;部门的负责人安排一个小伙去进行面试
- HR ==>
View
- 部门负责人 ==>
Controller
- 面试官 ==>
Model
1.2 什么是 Spring MVC
MVC
是一种设计模式,也是一种思想,而 Spring MVC
是对 MVC
思想的具体实现。除此之外,Spring MVC
还是一个 Web
框架
总结来说:Spring MVC
是一个实现了 MVC
模式的 Web
框架
所以,Spring MVC
主要关注有两个点:
MVC
Web
框架
Spring MVC
全称是 Spring Web MVC
其实,Spring MVC
我们在前面已经用过了,在创建 Spring Boot
项目的时候,我们勾选的 Spring Web
框架,其实就是 Spring MVC
框架:
可以看到,Spring Web
的介绍是:
- Build web, including RESTful, applications using Spring MVC. Uses Apache Tomcat as the default embedded container使用
Spring MVC
构建Web
应用程序,包括 RESTful 应用程序。 - 使用 Apache Tomcat 作为默认的嵌入式容器。
前面创建的不是 Spring Boot
项目吗?为什么又变成了 Spring MVC
项目?它们之间到底有着什么样的关系?
Spring Boot
是 2014 年发布的,Spring
是 2004 年发布的,在 2014 发布之前,就不能用 Spring
实现 MVC
了吗?显然不是
Spring Boot
只是实现Spring MVC
的其中一种方式而已Spring Boot
可以添加很多依赖,借助这些依赖实现不同的功能。Spring Boot
通过添加Spring Web MVC
框架,来实现Web
功能
比如,厨房可以用来做饭,但真实实现做饭功能的是火以及各种做饭相关的工作和食材。厨房就好比是
Spring Boot
,厨房可以装柜子,实现收纳功能,装燃气灶,实现做饭功能。做饭这个事,就是MVC
,在几千年前,有火就可以实现做饭
不过 Spring
在实现 MVC
的时候,也结合自身项目的特点,做了一些改变,相对而言,下面这个图也许更加适合一些
不过核心没变
- 比如上面的例子中,去饭店吃饭。一些饭店是前厅来负责接待客户,帮助客户点餐,也就是
Controller
来负责接收用户的请求 - 去公司面试,直接由面试官来接待候选人,省去了中间
HR
的交接环节
2. 学习 Spring MVC
既然是 Web
框架,那么当用户在浏览器中输入了 URL
之后,我们的 Spring MVC
项目就可以感知到用户的请求,并给予响应。我们也是主要学习如何通过浏览器和用户程序进行交互,主要分为以下三个方面:
- 建立连接:将用户(浏览器)和
Java
程序连接起来,也就是访问一个地址能够调用到我们的Spring
程序 - 请求:用户请求的时候会带一些参数,在程序中要想办法获取到参数,所以请求这块主要是获取参数的功能
- 响应:执行了业务逻辑之后,要把程序执行的结果返回给用户,也就是响应
比如用户区银行存款
- 建立连接:去柜台
- 请求:带着银行卡,身份证去存款
- 响应:银行返回一张存折
对于 Spring MVC
来说,掌握了以上三个功能就相当于掌握了 Spring MVC
2.1 项目准备
Spring MVC
项目创建和 Spring Boot
创建项目相同,在创建的时候选择 Spring Web
就相当与创建了 Spring MVC
的项目
在项目创建的时候,勾选上 Spring web
模块即可,如下图所示:
2.2 建立连接
在 Spring MVC 中使用 @RequestMapping
来实现 URL
路由映射,也就是浏览器连接程序的作用
创建一个 UserController
类,实现用户通过浏览器和程序的交互,具体实现代码如下:
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class UserController { @RequestMapping("/sayHello") public String sayHi() { return "hello, spring mvc"; } }
方法名和路径名称无需一致接下来访问:
http://127.0.0.1:8080/sayHi,就可以看到程序返回的数据了