【JavaEE】Spring Web MVC

发布于:2025-03-17 ⋅ 阅读:(16) ⋅ 点赞:(0)


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

一、什么是Spring Web MVC

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

1.1 MVC

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

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

在这里插入图片描述

1.2 Spring MVC

MVC 是⼀种架构设计模式, 也是⼀种思想, ⽽ Spring MVC 是对 MVC 思想的具体实现.除此之外, Spring MVC还是⼀个Web框架,总结来说,Spring MVC 是⼀个实现了MVC 模式的 Web 框架,专门用于开发基于 Java 的 Web 应用。

在这里插入图片描述

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";
    }
}

运行结果:
在这里插入图片描述
注意:
@RequestMapping 的URL 路径最前⾯加不加 / (斜杠)都可以, Spring程序启动时, 会进⾏判断, 如果前面没加 / ,spring会自动拼接一个 /

@RestController
@RequestMapping("RequestMapping")
public class RequestMappingDemo {
    @RequestMapping("r1")
    public String r1(){
        return "r1";
    }
}

这里还是可以运行成功的!

@RequestMapping请求设置

在这里插入图片描述
这里给大家介绍一个工具Postman(Postman就是专门测试后端代码的,可以发送不同的请求)。
在这里插入图片描述

这样设置之后,就只能支持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;
    }
}

在这里插入图片描述

2.4 传递多个参数

    @RequestMapping("r2")
    public String r2(String name,Integer age){
        return "返回姓名:" + name + "返回年龄:"+ age;
    }

在这里插入图片描述

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();
    }

在这里插入图片描述

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

@RequestParam 的主要作用是从 HTTP 请求中提取参数值,并将其传递给控制器方法的参数。

    @RequestMapping("r4")
    public String r4(@RequestParam("n") String name){
        return "返回参数" + name;
    }

在这里插入图片描述

    @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);
    }

在这里插入图片描述
用postman传递数组,红框和绿框传递方式都可以。

2.7 传递集合,@RequestParam

集合参数:和数组类似, 同⼀个请求参数名有为多个, 且需要使⽤ @RequestParam 绑定参数关系

    @RequestMapping("r7")
    public String r6(@RequestParam ArrayList<String> array){
        return array.toString();
    }

在这里插入图片描述

2.8 传递JSON数据

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

语法:

  • 数据在 键值对(Key-Value) 中
  • 数据由逗号, 分隔
  • 对象⽤ { } 表⽰
  • 数组⽤ [ ] 表⽰
  • 值可以为对象, 也可以为数组, 数组中可以包含多个对象
  • 键key和值value之间通过冒号分割
  • 键值对之间使用逗号分割
    在这里插入图片描述
测试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());
    }
}

在这里插入图片描述

JSON传参

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

@RequestBody: 请求正⽂,意思是这个注解作⽤在请求正⽂的数据绑定,请求参数必须在写在请求正⽂中

    @RequestMapping("r8")
    public String r8(@RequestBody Person person){
        return person.toString();
    }

在这里插入图片描述

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;
    }

在这里插入图片描述

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();
    }

在这里插入图片描述
此篇博客的全部代码!!!