JavaEE 进阶第七期:Spring MVC - Web开发的“交通枢纽”(一)

专栏:JavaEE 进阶跃迁营
个人主页:手握风云

目录

[一、什么是 Sping Web MVC](#一、什么是 Sping Web MVC)

[1.1. MVC 定义](#1.1. MVC 定义)

[1.2. 什么是 Spring MVC](#1.2. 什么是 Spring MVC)

[1.3. 与 Spring Boot 的关系](#1.3. 与 Spring Boot 的关系)

[二、学习 Spring MVC](#二、学习 Spring MVC)

[2.1. 建立连接(@RequestMapping 注解)](#2.1. 建立连接(@RequestMapping 注解))

[2.2. Postman](#2.2. Postman)


一、什么是 Sping Web MVC

根据 Spring 官方文档(及参考文档内容),Spring Web MVC 的核心定义如下:

Spring Web MVC 是基于 Servlet API 构建的原始 Web 框架,从 Spring 框架诞生之初就被包含其中。其正式名称 "Spring Web MVC" 源于其源模块名称(spring-webmvc),但在实际开发中通常简称为 "Spring MVC"。

关键信息拆解:

  1. 技术基石:基于 Java Servlet 规范实现,依赖 Servlet 容器(如 Tomcat、Jetty 等)运行 ------Servlet 是 Java Web 开发的标准,负责处理 HTTP 请求 / 响应,而 Spring MVC 在此基础上封装了更简洁的开发模式。
  2. 框架归属:是 Spring 框架的核心模块之一,而非独立框架,可无缝集成 Spring 的依赖注入(DI)、AOP 等核心能力。
  3. 核心定位:解决 Java Web 开发中 "请求处理、参数绑定、视图渲染、响应生成" 等核心问题,简化 Web 应用构建。

1.1. MVC 定义

要理解 Spring MVC,需先明确 MVC 设计模式------ 它是软件工程中一种 "分离关注点" 的架构思想,将软件系统分为三个核心部分,Spring MVC 则是该思想在 Web 领域的具体实现。

组件 核心职责 类比场景
Model(模型) 处理业务逻辑、管理数据(如计算、数据库交互),是应用的 "业务核心" 饭店的 "后厨":根据前厅指令制作菜品(处理业务)
View(视图) 与用户交互,展示数据(如 HTML 页面、JSON 数据),是应用的 "界面层" 饭店的 "服务员":接待顾客、传递菜单、端送菜品(展示 / 交互)
Controller(控制器) 作为 "调度中枢",接收用户请求,选择对应的 Model 处理,再指定 View 响应 饭店的 "前厅":接收服务员传递的菜单,调度后厨做菜,再通知服务员端菜

1.2. 什么是 Spring MVC

传统 MVC 侧重 "视图与模型分离",而 Spring MVC 针对 Web 场景做了适配,核心流程调整为:

  1. 用户请求 :浏览器直接发送 HTTP 请求到 Controller(跳过传统 View 的 "前置交互",更符合 Web 场景);
  2. Controller 调度 :Controller 接收请求后,根据请求路径 / 参数选择对应的 Model(业务逻辑层)处理;
  3. Model 处理:Model 执行业务逻辑(如计算、数据查询),返回处理结果;
  4. 响应生成 :Controller 接收 Model 结果后,选择对应的 View(如返回 HTML 页面、JSON 数据),最终通过 Servlet 容器响应给浏览器。

1.3. 与 Spring Boot 的关系

核心区别如下:

  • Spring MVC:是 "Web 开发的核心框架",负责处理 Web 层逻辑(请求 / 响应);
  • Spring Boot:是 "Spring 应用的快速启动工具",通过 "自动配置" 简化 Spring MVC 的部署(如默认集成 Tomcat 嵌入式容器、自动配置 Spring MVC 核心组件)。

类比理解:Spring MVC 好比 "做饭的工具(燃气灶、锅铲)",负责 "做饭(Web 开发)" 的核心动作;Spring Boot 好比 "厨房(带预装工具的场景)",提供现成的 "工具摆放、燃气开通"(自动配置),让你直接用工具做饭,无需手动搭建环境。

实际开发中,创建 Spring Boot 项目时勾选 "Spring Web" 依赖,本质就是引入 Spring MVC 框架,此时项目具备 Web 开发能力。

二、学习 Spring MVC

2.1. 建立连接(@RequestMapping 注解)

@RequestMapping 是 Spring Web MVC 应用程序中最常被用到的注解之一,它是用来注册接口的路由映射的。

java 复制代码
package com.yang.test12_4_1;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {
    // 这里的 / 可以省略,Spring 启动时会自动补全
    @RequestMapping("/hello")
    public String hello() {
        return "hello, Spring MVC";
    }
}
  • 核心作用

@RequestMapping 是 Spring Web MVC 框架中最核心、最常用 的注解之一,其核心作用是实现 URL 路由映射------ 即把客户端(如浏览器、Postman)发送的 HTTP 请求,与后端 Java 程序中的具体方法关联起来,让服务端知道 "哪个请求该由哪个方法处理"。

当客户端访问某个 URL(如 http://127.0.0.1:8080/hello)时,Spring 会通过 @RequestMapping 注解的配置,找到对应的方法并执行,最终将结果响应给客户端。用通俗的话讲:@RequestMapping 就是 "给方法贴个 URL 标签",客户端通过标签就能找到对应的方法。

  • 基本使用方式

@RequestMapping 既可以修饰 ,也可以修饰方法,二者配合使用时,最终的访问路径是 "类路径 + 方法路径"。如上面的代码就是修饰类。

java 复制代码
package com.yang.test12_4_1;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

// 类路径前缀
@RequestMapping("/user")
@RestController
public class HelloController {
    @RequestMapping("/hello")
    public String hello() {
        return "hello, Spring MVC!";
    }
}

注意 @RequestMapping 在修饰方法时不能映射相同的路径,否则会启动失败。

java 复制代码
package com.yang.test12_4_1;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RequestMapping("/user")
@RestController
public class HelloController {
    @RequestMapping("/v1/v2")
    public String v1() {
        return "hello, Spring Boot v1!";
    }

    @RequestMapping("/v1/v2")
    public String v2() {
        return "hello, Spring Boot v2!";
    }
}
  • GET 和 POST 请求

我们可以在浏览器中输入 URL 字符串,就能够建立连接,说明 @RequestMapping 支持 GET 请求。

我们可以通过 form 表单来构造请求。在 static 文件夹下新建 hello.html 文件。这里不能直接在 IntelliJ IDEA 里面打开,需要在地址栏输入链接 http://127.0.0.1:8080/hello.html

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <form action="/user/v1/v2">
        <input type="submit" value="发送请求">
    </form>
</body>
</html>

我们同时可以通过 Fiddler 抓包来查看结果,正是 GET 请求。

从运行结果可以看出:@RequestMapping 既支持 Get 请求,又支持 Post 请求。同理,也支持其他的请求方式。

我们也可以在 POST 里面显示的指定 @RequestMapping 来接收 POST 的情况。

java 复制代码
package com.yang.test12_4_1;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

@RequestMapping("/user")
@RestController
public class HelloController {
    @RequestMapping(value = "/v1/v2", method = RequestMethod.POST)
    public String v1() {
        return "hello, Spring Boot v1!";
    }
}

2.2. Postman

在上面的示例中,我们还需要编写前端代码来进行测试,为了方便,我们还可以使用专业的接口测试工具------Postman。

  • 下载和安装

下载网址:https://www.postman.com/downloads/

  • 创建请求
  • 传参介绍
相关推荐
Rysxt_1 小时前
Vue 集成富文本编辑器教程
前端·javascript·vue.js·富文本
开发者小天1 小时前
React中的受控组件示例
前端·javascript·react.js
奋斗吧程序媛1 小时前
request请求相关
前端·javascript·vue.js
dragoooon341 小时前
[Linux网络基础——Lesson9.「TCP 全连接队列与 tcpdump 抓包」]
前端·git·github
jiayong231 小时前
Spring Bean 生命周期详解
java·后端·spring
光影少年1 小时前
用vite还是webpack多,vite为什么快
前端·webpack·node.js
waeng_luo1 小时前
[鸿蒙2025领航者闯关] 鸿蒙应用中如何管理组件状态?
前端·harmonyos·鸿蒙·鸿蒙2025领航者闯关·鸿蒙6实战·开发者年度总结
克喵的水银蛇1 小时前
Flutter 通用列表项封装实战:适配多场景的 ListItemWidget
前端·javascript·flutter
WX-bisheyuange1 小时前
基于Spring Boot的宠物商城网站设计与实现
前端·javascript·vue.js·毕业设计