Spring Web MVC入门
1. Spring Web MVC
什么是 Spring Web MVC? |
MVC官方文档介绍
Spring Web MVC是Spring框架中的一个用来做网站开发的部分,它是基于Servlet技术的。
虽然它的正式名字叫“Spring Web MVC”,但大家一般都简称它“SpringMVC”。
什么是 Servlet ? |
Servlet是一种技术,用来创建动态网页。
它其实是一种规范,也就是规定了如何写Java Web应用的规则。但单靠规范本身不能做任何事,必须要开发者根据这些规则写代码,才能实现它的功能。
很多公司都可以根据这个规范来开发相应的软件,比如Tomcat、Weblogic、Jetty等,它们被叫做“Servlet容器”。
这些容器的作用就是管理和运行开发者写的Servlet代码。
从上述定义我们可以得出一个信息:Spring Web MVC是一个Web框架。 下面咱们简称之为:Spring MVC
然而要真正的理解什么是Spring MVC?我们首先要搞清楚什么是MVC?
1.1 MVC 定义
MVC是Model View Controller的缩写,它是软件工程中的一种软件架构设计模式,它把软件系统
分为模型
、视图
和控制器
三个基本部分。
- Model:数据的管理者,负责存取和处理数据,如数据库操作。
- View:数据的展示者,用户看到的界面,如网页或APP界面。
- Controller:协调者,接收用户请求,选择对应的Model处理,并返回结果到View。
- Model:是看不见的数据管家 (数据库操作/计算逻辑),
后厨
- View:是看得见的界面(你操作的按钮/表格),
点餐菜单
- Controller: 是传话小秘书 (在界面和数据之间跑腿传话),
传菜单的服务员
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.
这时候可能有些 uu 就懵了,前面创建的不是SpringBoot项目吗?怎么又变成了Spring MVC项目?他们之间到底有着什么样的关系?
- SpringBoot是2014年发布的,Spring是2004年发布的,在2014年发布之前,就不能用Spring实现MVC架构吗?显然不是了。
- Spring Boot只是实现Spring MVC的其中一种方式而已。
- Spring Boot可以添加很多依赖,借助这些依赖实现不同的功能。Spring Boot通过添加Spring Web MVC框架,来实现web功能。
不过Spring在实现MVC时,也结合自身项目的特点,做了一些改变,相对而言,下面这个图或许更加合适一些……
现在请求不再先走
view
再走controller
,请求可以直接发送到controller
;
controller
在受到model
传回来的响应后,可以返回给view
,也可以直接返回浏览器
;后端开发一般就不会让请求和响应交互过程走
view
,不过核心没变 ,比如上面的例子中,去饭店吃饭:
- 一些饭店是前厅来负责接待客户,帮助客户点餐,也就是
Controller
来负责接收用户的请求。- 去公司面试,直接由面试官来接待候选人,省去了HR中间的交接过程。
2. 学习Spring MVC
既然是Web框架,那么当用户在浏览器中输入了url
之后,我们的Spring MVC项目就可以感知到用户的请求,并给予响应。
咱们学习Spring MVC,重点也就是学习如何通过浏览器
和用户程序
进行交互。主要分以下三个方面:
建立连接:让用户(浏览器)能找到并访问你的 Spring 程序,简单来说就是让用户输入网址时能够打开你的网页。
请求:用户在网页上点击、输入等操作时,会发送一些信息(比如表单数据)。你的程序需要能接收到这些信息,以便做进一步处理。
响应:当程序处理完用户的请求后,需要把处理结果(比如网页内容)返回给用户,这就是响应。
总结一下:就是让用户通过浏览器访问程序,获取信息,再把结果返回给用户。
对于Spring MVC来说,掌握了以上3个功能就相当于掌握了Spring MVC。
2.1 项目准备
Spring MVC项目创建和Spring Boot创建项目相同,在创建的时候选择Spring Web就相当于创建了Spring MVC的项目。
Spring MVC使用Spring Boot的方式创建
创建项目时,勾选上Spring Web模块即可,如下图所示:
2.2 建立连接
在Spring MVC中使用 @RequestMapping
来实现URL
路由映射,也就是浏览器连接程序的作用
我们先来看看代码怎么写,创建一个 UserController
类,实现用户通过浏览器和程序的交互,具体实现代码如下:
资源路径:类路径+方法路径(资源路径要唯一),建议给所有的类都加上类路径,可以:
- 使用唯一命名类路径,避免报错;
- 提高可读性;
方法名和路径名称无需一致
接下来,我们运行程序
,访问:http://127.0.0.1:8080/sayHi,就可以看到程序返回的数据了:
加上类路径也可以:
2.2.1 @ RequestMapping 注解介绍
@RequestMapping
是Spring Web MVC应用程序中最常被用到的注解之一,它是用来注册接口的路由映射的。
表示服务收到请求时,路径为 /sayHi
的请求就会调用 sayHi
这个方法的代码。
路由映射:当用户访问一个URL时,将用户的请求对应到程序中某个类的某个方法的过程就叫路由映射。
既然
@RequestMapping
已经可以达到我们的目的了,我们为什么还要加@RestController
呢?我们把
@RestController
去掉,再来访问一次:
可以看到,程序报了404,找不到该页面。
这就是
@RestController
起到的作用。一个项目中,会有很多类,每个类可能有很多的方法,Spring程序怎么知道要执行哪个方法呢?
Spring会对所有的类进行扫描,如果类加了注解
@RestController
,Spring 才会去看这个类里面的方法有没有加@RequestMapping
这个注解,当然它的作用不止这一点。
2.2.2 @ RequestMapping使用
@RequestMapping
既可修饰类,也可以修饰方法,当修饰类和方法时,访问的地址是资源路径,资源路径=类路径+方法路径
。
@RequestMapping
标识一个类
:设置映射请求的请求路径的初始信息
。
@RequestMapping
标识一个方法
:设置映射请求请求路径的具体信息
。
访问地址:http://127.0.0.1:8080/user/sayHi
注意:
@RequestMapping
的URL路径最前面加不加/
(斜杠)都可以,Spring程序启动时,会进行判断,如果前面没有加,Spring会拼接上一个/
。
访问 http://127.0.0.1:8080/user/sayHi,依然可以正确响应。
通常情况下,我们加上
/
。
@RequestMapping
的URL路径也可以是多层路径,最终访问时,依然是类路径+方法路径
。
访问路径:http://127.0.0.1:8080/user/m1/say/hi
2.2.3 @ RequestMapping是GET还是POST请求?
GET请求 |
浏览器发送的请求类型都是GET,通过以上案例,可以看出来 @RequestMapping
支持GET请求。
POST请求 |
我们通过 form 表单来构造请求:
创建test.html
,HTML代码:
前端代码放在
static
目录下,访问方式为:http://127.0.0.1:8080/test.html
如果有多层目录,访问链接从
static
目录开始写。
如上图,访问链接为:http://127.0.0.1:8080/html/test.html。
从运行结果可以看出:@RequestMapping
既支持GET请求,又支持POST请求。同理,也支持其他的请求方式。
那如何指定GET或者POST类型呢?
指定GET/POST方法类型 |
我们可以显式地指定 @RequestMapping
来接收POST的情况,如下所示: