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类,实现用户通过浏览器和程序的交互,代码如下:

java 复制代码
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方法类型
java 复制代码
@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

在上面案例中,我们想要测试后端代码的方法时,需要去写前端代码,又麻烦又痛苦,实际工作中,项目开发会分给不同的团队,界面显示交给"前端开发工程师",业务逻辑交给"后端开发工程师",准备从事后端开发的我们其实是不太需要掌握前端技能的,我们可以借助专业的接口测试工具 PostmanApifox ,我们以 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 等

相关推荐
peerless_fu34 分钟前
rabbitmq AI复习
spring·rabbitmq
wangwren1 小时前
SpringAI--RAG知识库
java·rag·spring ai·pgvector
LaLaLa_OvO1 小时前
修改SpringBootApplication类的入参后,引用外部yml的启动命令要修改
java
黎黎黎明⁠⁢1 小时前
SpringBoot整合Sa-Token:实现RBAC权限模型
java·sa-token·springboot·idea
Java知识库1 小时前
聊聊JVM怎么调优?(实战总结)
java·开发语言·jvm·程序员·编程
不穿铠甲的穿山甲1 小时前
Intellij IDEA 查找接口实现类的快捷键
java·ide·intellij-idea
CodingKnight1 小时前
IntelliJ IDEA Ultimate修改软件地区使用
java·ide·intellij-idea
小红的布丁2 小时前
单例模式的隐秘危机
java·开发语言
movie__movie2 小时前
springcloud openfeign 请求报错 java.net.UnknownHostException:
java·spring cloud·openfeign
Timmer丿2 小时前
kafka学习笔记(三、消费者Consumer使用教程——使用实例及及核心流程源码讲解)
java·笔记·学习·kafka