Spring MVC极简入门:从@Reuest到Postman的全链路开发
一、Spring Web MVC
Spring Web MVC 是基于 Servlet API 构建的原始 Web 框架,从⼀开始就包含在 Spring 框架中。它的正式名称“Spring Web MVC”来自其源模块的名称(Spring-webmvc),但它通常被称为"Spring MVC" ,官方文档介绍:
https://docs.spring.io/spring-framework/reference/web/webmvc.html
什么是Servlet呢?
Servlet 是运行在 Web 服务器或应用服务器上的 Java 程序,用于处理客户端(通常是浏览器)的 HTTP 请求并生成动态响应。(是⼀种实现动态页面的技术. 准确来讲Servlet是⼀套 Java Web 开发的规范,或者说是⼀套 Java Web 开发的技术标准,类似于JDBC是数据库的访问标准)它是 Java EE(Enterprise Edition)规范的核心组件之一,通常用于构建 Web 应用程序的后端逻辑。
总的来说:Spring Web MVC是一个Web框架,简称Spring MVC
1.1、MVC定义
MVC 是 Model View Controller 的缩写,它是软件工程中的⼀种软件架构设计模式,它把软件系统分为模型、视图和控制器三个基本部分
注意:此处视图与MySql中的视图不同
MySQL:视图是一个临时表
MVC:视图可以理解为一个界面
• View:专门用来与浏览器交互、展示数据的资源
• Controller:是应用程序的主体部分,用于处理程序中数据逻辑的部分
• Model:作为分发器,决定用哪个模型处理请求,并跳转视图
抽象理解:去和平饭店吃饭~~~
乌鸦走进饭店,服务员小姐姐走过来接待乌鸦点餐说到:“乌鸦,您请坐!你要吃什么?”,乌鸦:“来份炒鸡拌饭,不掀桌~~”,服务员给后厨赶紧发送命令,后厨忙里忙外做好,通知服务员小姐姐取餐,小姐姐把拌饭端到乌鸦所在的位置
在此过程中:
服务员(视图):接待用户,帮助用户点餐,把饭端给顾客
前台(控制器):根据顾客点餐情况,选择给哪个后厨下达命令
后厨(模型):根据前台的要求完成顾客的用餐需求
1.2、Spring MVC
MVC 是一架构设计模式, 也是一种思想, 而Spring MVC 是对 MVC 思想的具体实现. 除此之外, Spring MVC还是一个Web框架.
总得来说:Spring MVC 是一个实现了MVC模式的Web框架
在创建 Spring Boot 项目时,我们勾选的 Spring Web 框架,其实就是 Spring MVC 框架
关系:
Spring Boot 只是Spring MVC的其中一种方式
Spring Boot 可以添加很多依赖,借助这些依赖实现不同的功能;Spring Boot 通过添加Spring Web MVC 框架,来实现 Web 功能
不过Spring 实现MVC时,结合自身项目特点,做出了一些改变如下图:
二、学习Spring MVC
既然是Web 框架,当用户中浏览器中输入URL 之后,我们的Spring MVC 项目就可以感知到用户的请求,并给与响应,学习Spring MVC也就是重点学习如何通过浏览器和用户程序进行交互
主要有以下三方面:
(1)建立连接:将用户(浏览器)和Java程序连接起来(访问一个地址能够调用我们的Spring 程序)
(2)请求:用户发送请求的时候会带有一些参数,在程序中要想办法获取到参数
(3)响应:执行了业务逻辑之后,要把程序执行的结果返回给用户
2.1、建立连接
前提:创建Spring Web模块的项目
在Spring MVC中使用 @RequestMapping 来实现URL路由映射,也就是浏览器连接程序的作用
我们先创建一个 UserController 类,实现用户通过浏览器和程序的交互,代码如下:
package org.aokey.springtext;import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RequestMapping("url")
@RestController
public class UserController {@RequestMapping("demo1")public String demo1(){return "路径测试!!!";}
}
代码运行成功后,在浏览器中访问:http://127.0.0.1:8080/url/demo1,就可以看到返回的数据了
注意:方法名和路径名可以不一致
2.1.1、 @RequestMapping注解介绍
@RequestMapping 是Spring Web MVC应用程序中最常用到的注解之一,它是用来注册接口的路由映射的。
表示服务收到请求时,路径为/url/demo1的请求就会调用demo1这个方法
路由映射: 当用户访问⼀个 URL 时, 将用户的请求对应到程序中某个类的某个方法的过程就叫路由映射.
那么通过@RequestMapping注解我们就可以调用到方法达到目的,为什么我们还要加上@RestController这个注解呢?
我们将@RestController注解删除后,再来运行并访问:
可以看到,程序报了404,找不到该页面,我们暂时理解为,这就是@RestController起到的作用
通常在一个项目中会有很多类,每个类可能有很多方法,那Spring程序怎么知道要执行那个方法呢?
其实Spring会对所有的类进行扫描,如果类加了注解@RestController,Spring才会去看这个类里面的方法有没有加@RequestMapping注解,暂时这么理解后续再介绍该知识
2.1.2、@RequestMapping使用
@RequestMapping注解既可修饰类,也可以修饰方法,当同时修饰类和方法时,访问的地址为:类路径+方法路径
@RequestMapping标识一个类:设置映射请求的请求的请求路径的初始信息
@RequestMapping标识一个方法: 设置映射请求的请求的请求路径的具体信息
注意:需要访问的方法前必须加上@RequestMapping注解,类可以不加(但为了避免错误和提高可读性建议加上),另外注解里路径前加不加 / 都可以,(当我们没有添加时,Spring会自动拼接上一个 / )
运行后我们发现只访问类路径会报错 :
2.1.3、 @RequestMapping是GET请求还是POST请求?
(1)GET请求:
浏览器发送的请求类型都是Get,我们访问127.0.0.1:8080/url/demo1后,使用Fiddler抓包后发现,@RequestMapping是支持GET请求的
(2)POST请求:
我们通过form表单来构造请求:
创建text.html,HTML代码:
从运行结果上可看出:@RequestMapping 既支持Get请求,又支持Post请求,当然也支持其他的请求方式
2.1.4、指定GET/POST方法类型
@RequestMapping("url")
@RestController
public class UserController {@RequestMapping(value = "demo1", method = RequestMethod.GET)public String demo1(){return "路径测试!!!";}@RequestMapping(value = "demo2", method = RequestMethod.POST)public String demo2(){return "路径测试!!!";}
}
上述代码指定了不同方法支持的GET/POST类型的请求
图中注解里面的参数默认赋值给 value 属性,若多个参数,就要手动写属性名并赋值
当然也可以同时指定多个方法类型
三、Postman
在上面案例中,我们想要测试后端代码的方法时,需要去写前端代码,又麻烦又痛苦,实际工作中,项目开发会分给不同的团队,界面显示交给“前端开发工程师”,业务逻辑交给“后端开发工程师”,准备从事后端开发的我们其实是不太需要掌握前端技能的,我们可以借助专业的接口测试工具 Postman 和 Apifox,我们以 Postman 来举例
3.1、下载安装postman
POstman下载链接https://www.postman.com/downloads/
3.2、创建请求
创建一个请求并命名:
界面介绍:
3.3、传参介绍
3.3.1、普通传参
也就是通过查询字符串来传参
学习HTTP环节,我们通过URL来访问互联网上的某一资源,URL的格式如下:
其中,我们要查询的字符串就是请求的参数
3.3.2、form-data
表单提交的数据, 在 form 标签中加上 enctyped="multipart/form-data" , 通常用于提交图片/文件. 对应 Content-Type: multipart/form-data
3.3.3、x-www-form-urlencoded
form表单, 对应 Content-Type: application/x-www-from-urlencoded
3.3.4、raw
可以上传任意格式的文本,比如text、json、xml、html 等