目录

JavaEESpring-Web-MVC

【JavaEE】Spring Web MVC

此篇博客结尾附有此篇博客的全部代码!!!

一、什么是Spring Web MVC

Spring Web MVC 是 Spring 框架中用于构建 Web 应用程序的模块,它是基于 Java 的轻量级 Web 框架,遵循经典的 Model-View-Controller(模型-视图-控制器)设计模式。

1.1 MVC

MVC 是 Model View Controller 的缩写,它是软件⼯程中的⼀种软件架构设计模式,它把软件系统分为模型、视图和控制器三个基本部分.

  • View(视图): 视图是用户界面,负责将数据呈现给用户。
  • Model(模型) :模型是应用程序的核心,负责处理数据和业务逻辑。
  • Controller(控制器):控制器是模型和视图之间的桥梁,负责处理用户输入和业务逻辑。

https://i-blog.csdnimg.cn/direct/f61f6e7d33be4d13944db0a94b9dc431.png#pic_center

1.2 Spring MVC

MVC 是⼀种架构设计模式, 也是⼀种思想, ⽽ Spring MVC 是对 MVC 思想的具体实现.除此之外, Spring MVC还是⼀个Web框架,总结来说,Spring MVC 是⼀个实现了MVC 模式的 Web 框架,专门用于开发基于 Java 的 Web 应用。 https://i-blog.csdnimg.cn/direct/18806a57e7e04848adc66f7248bbead0.png#pic_center

1.3 Spring web

既然是Web 框架, 那么当⽤⼾在浏览器中输⼊了 url 之后,我们的 Spring MVC 项⽬就可以感知到⽤⼾的请求, 并给予响应。

学习Spring MVC主要从以下三个方面学习:

  • 建立连接
  • 请求
  • 响应

二、注释学习及使用

2.1 @RequestMapping注解

@RequestMapping 是 Spring Web MVC 应⽤程序中最常被⽤到的注解之⼀,它是⽤来注册接⼝的 路由映射的.表⽰服务收到请求时, 路径为 /sayHi 的请求就会调⽤ sayHi 这个⽅法的代码. 路由映射 : 当⽤⼾访问⼀个 URL 时, 将⽤⼾的请求对应到程序中某个类的某个⽅法的过程就叫路由映射. @RequestMapping 既可修饰类,也可以修饰⽅法 ,当修饰类和⽅法时,访问的地址是类路径 + ⽅法路径. @RestController @RequestMapping("/RequestMapping") public class RequestMappingDemo { @RequestMapping("/r1") public String r1(){ return “r1”; } } 运行结果: https://i-blog.csdnimg.cn/direct/221c4fb9f8594611aa28cdb9a4c2b139.png#pic_center 注意: @RequestMapping 的URL 路径最前⾯加不加 / (斜杠)都可以, Spring程序启动时, 会进⾏判断, 如果前面没加 / ,spring会自动拼接一个 / @RestController @RequestMapping(“RequestMapping”) public class RequestMappingDemo { @RequestMapping(“r1”) public String r1(){ return “r1”; } } 这里还是可以运行成功的!

@RequestMapping请求设置

https://i-blog.csdnimg.cn/direct/76e31a9406804fc7b10349f959d81604.png#pic_center 这里给大家介绍一个工具Postman(Postman就是专门测试后端代码的,可以发送不同的请求)。 https://i-blog.csdnimg.cn/direct/9fd12d20748e4e9a89cf57f00f0693bd.png#pic_center 这样设置之后,就只能支持POST请求或者只支持GET请求。

2.2 请求

客户端(如浏览器或移动应用)向服务器发送请求,服务器处理请求并返回响应的过程。在 Java Web 开发中,尤其是使用 Spring 框架时,请求处理是一个核心概念。 访问不同的路径, 就是发送不同的请求. 在发送请求时, 可能会带⼀些参数, 所以学习Spring的请求,主要是学习如何传递参数到后端以及后端如何接收. 传递参数, 咱们主要是使⽤浏览器和Postman来模拟.

2.3 传递单个参数

@RequestMapping(“Demo”) @RestController public class Demo1 { @RequestMapping(“r1”) public String r1(String name){ return “返回参数:"+name; } } https://i-blog.csdnimg.cn/direct/cbdc96818d8b4a64b56881b374a3412d.png#pic_center

2.4 传递多个参数

@RequestMapping(“r2”) public String r2(String name,Integer age){ return “返回姓名:” + name + “返回年龄:"+ age; } https://i-blog.csdnimg.cn/direct/505c47c6a1f848db8e2d7a15886e7dff.png#pic_center

2.4 传递对象

public class Person { private String name; private int age; public Person(String name, int age) { } public String getName() { return name; } public int getAge() { return age; } public void setName(String name) { this.name = name; } public void setAge(int age) { this.age = age; } @Override public String toString() { return “Person{” + “name=’” + name + ‘'’ + “, age=” + age + ‘}’; } } @RequestMapping(“r3”) public String r3(Person person){ return person.toString(); } https://i-blog.csdnimg.cn/direct/58450d890f7d41f8a7d11dc590d14f91.png#pic_center

2.5 @RequestParam注解 后端参数重命名

@RequestParam 的主要作用是从 HTTP 请求中提取参数值,并将其传递给控制器方法的参数。 @RequestMapping(“r4”) public String r4(@RequestParam(“n”) String name){ return “返回参数” + name; } https://i-blog.csdnimg.cn/direct/27ee53bcfb4f4bff8299be41dabf8a34.png#pic_center @RequestMapping(“r4”) public String r4(@RequestParam(value = “n”,required = false) String name){ return “返回参数” + name; } 这样设置之后,n就不是必传参数了!

2.6 传递数组

@RequestMapping(“r6”) public String r6(String[] str){ return Arrays.toString(str); } https://i-blog.csdnimg.cn/direct/86ddb15814e64ded9eaeb343b9559ad1.png#pic_center 用postman传递数组,红框和绿框传递方式都可以。

2.7 传递集合,@RequestParam

集合参数:和数组类似, 同⼀个请求参数名有为多个, 且需要使⽤ @RequestParam 绑定参数关系 @RequestMapping(“r7”) public String r6(@RequestParam ArrayList array){ return array.toString(); } https://i-blog.csdnimg.cn/direct/32c12b5cf78e43c1bfa9928e4d8cb7bf.png#pic_center

2.8 传递JSON数据

JSON就是⼀种数据格式, 有⾃⼰的格式和语法, 使⽤⽂本表⽰⼀个对象或数组的信息, 因此JSON本质是字符串. 主要负责在不同的语⾔中数据传递和交换. 语法:

  • 数据在 键值对(Key-Value) 中
  • 数据由逗号, 分隔
  • 对象⽤ { } 表⽰
  • 数组⽤ [ ] 表⽰
  • 值可以为对象, 也可以为数组, 数组中可以包含多个对象
  • 键key和值value之间通过冒号分割
  • 键值对之间使用逗号分割 https://i-blog.csdnimg.cn/direct/01141dd92d104f5fbdecc1bbae393e93.png#pic_center
测试Java对象和JSON转换

用test类来测试一下(下面图片有详细创建及测试): @Test注释:

  • @Test 用于标记测试方法。
  • 测试方法必须是 public 和 void 类型,且不能接受任何参数。

ObjectMapper 是 Jackson 库中的一个核心类,用于处理 JSON 数据的序列化(将对象转换为 JSON 字符串)和反序列化(将 JSON 字符串转换为对象)。

使用类ObjectMapper下面的writeValueAsString方法。 类对象必须要有无参构造函数。 import com.abcdefg.springmvc.demo.Person; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import org.junit.jupiter.api.Test; public class TestJson { @Test void r8() throws JsonProcessingException { ObjectMapper objectMapper = new ObjectMapper(); //创建对象 Person person = new Person(); person.setAge(1); person.setName(“zhangsan”); //对象转JSON String j = objectMapper.writeValueAsString(person); System.out.println(j); } @Test void r9() throws JsonProcessingException { ObjectMapper objectMapper = new ObjectMapper(); //JSON String s = “{"name":"John","age":30}”; //JSON转对象 Person person = objectMapper.readValue(s, Person.class); System.out.println(person.toString()); } } https://i-blog.csdnimg.cn/direct/96d4651b904d4cac82754392745a9212.png#pic_center

JSON传参

实现JSON对象交互要使用@RequestBody注解:

@RequestBody: 请求正⽂,意思是这个注解作⽤在请求正⽂的数据绑定,请求参数必须在写在请求正⽂中 @RequestMapping(“r8”) public String r8(@RequestBody Person person){ return person.toString(); } https://i-blog.csdnimg.cn/direct/a89b6d5c74fa40049247d2576614cd0e.png#pic_center

JSON优点
  1. 简单易⽤: 语法简单,易于理解和编写,可以快速地进⾏数据交换
  2. 跨平台⽀持: JSON可以被多种编程语⾔解析和⽣成, 可以在不同的平台和语⾔之间进⾏数据交换和传输
  3. 轻量级: 相较于XML格式, JSON数据格式更加轻量级, 传输数据时占⽤带宽较⼩, 可以提⾼数据传输速度
  4. 易于扩展: JSON的数据结构灵活,⽀持嵌套对象和数组等复杂的数据结构,便于扩展和使⽤
  5. 安全性: JSON数据格式是⼀种纯⽂本格式,不包含可执⾏代码, 不会执⾏恶意代码,因此具有较⾼的安全性

2.9 获取URL中参数@PathVariable

和字⾯表达的意思⼀样, 这个注解主要作⽤在请求URL路径上的数据绑定 @RequestMapping("/article/{id}/{he}”) public String r9(@PathVariable Integer id, @PathVariable(“he”) String type){ return id+”:"+type; } https://i-blog.csdnimg.cn/direct/755a8428a4344c32b59f1c8fec6a3647.png#pic_center

2.10 上传文件@RequestPart

MultipartFile 是 Spring 提供的一个接口,用于封装上传文件的相关信息,例如文件名、文件内容、文件大小等。 @RequestMapping(“r10”) public String r10(@RequestPart(“file”) MultipartFile file) throws IOException { file.transferTo(new File(“D:/Project/pic/tmp/"+ file.getOriginalFilename())); return file.getOriginalFilename(); } https://i-blog.csdnimg.cn/direct/ce7448df824a414781f0d95c9d45896b.png#pic_center [此篇博客的全部代码!!!]( biog/commit/9e485e629f39c6ff800310be6a82c9a5d19d86a7)