程序员scholar 程序员scholar
首页
  • Java 基础

    • JavaSE
    • JavaIO
    • JavaAPI速查
  • Java 高级

    • JUC
    • JVM
    • Java新特性
    • 设计模式
  • Web 开发

    • Servlet
    • Java网络编程
  • Web 标准

    • HTML
    • CSS
    • JavaScript
  • 前端框架

    • Vue2
    • Vue3
    • Vue3 + TS
    • 微信小程序
    • uni-app
  • 工具与库

    • jQuery
    • Ajax
    • Axios
    • Webpack
    • Vuex
    • WebSocket
    • 第三方登录
  • 后端与语言扩展

    • ES6
    • Typescript
    • node.js
  • Element-UI
  • Apache ECharts
  • 数据结构
  • HTTP协议
  • HTTPS协议
  • 计算机网络
  • Linux常用命令
  • Windows常用命令
  • SQL数据库

    • MySQL
    • MySQL速查
  • NoSQL数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • RabbitMQ
  • 服务器

    • Nginx
  • Spring框架

    • Spring6
    • SpringMVC
    • SpringBoot
    • SpringSecurity
  • SpringCould微服务

    • SpringCloud基础
    • 微服务之DDD架构思想
  • 日常必备

    • 开发常用工具包
    • Hutoll工具包
    • IDEA常用配置
    • 开发笔记
    • 日常记录
    • 项目部署
    • 网站导航
    • 产品学习
    • 英语学习
  • 代码管理

    • Maven
    • Git教程
    • Git小乌龟教程
  • 运维工具

    • Docker
    • Jenkins
    • Kubernetes
  • 算法笔记

    • 算法思想
    • 刷题笔记
  • 面试问题常见

    • 十大经典排序算法
    • 面试常见问题集锦
关于
GitHub (opens new window)
首页
  • Java 基础

    • JavaSE
    • JavaIO
    • JavaAPI速查
  • Java 高级

    • JUC
    • JVM
    • Java新特性
    • 设计模式
  • Web 开发

    • Servlet
    • Java网络编程
  • Web 标准

    • HTML
    • CSS
    • JavaScript
  • 前端框架

    • Vue2
    • Vue3
    • Vue3 + TS
    • 微信小程序
    • uni-app
  • 工具与库

    • jQuery
    • Ajax
    • Axios
    • Webpack
    • Vuex
    • WebSocket
    • 第三方登录
  • 后端与语言扩展

    • ES6
    • Typescript
    • node.js
  • Element-UI
  • Apache ECharts
  • 数据结构
  • HTTP协议
  • HTTPS协议
  • 计算机网络
  • Linux常用命令
  • Windows常用命令
  • SQL数据库

    • MySQL
    • MySQL速查
  • NoSQL数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • RabbitMQ
  • 服务器

    • Nginx
  • Spring框架

    • Spring6
    • SpringMVC
    • SpringBoot
    • SpringSecurity
  • SpringCould微服务

    • SpringCloud基础
    • 微服务之DDD架构思想
  • 日常必备

    • 开发常用工具包
    • Hutoll工具包
    • IDEA常用配置
    • 开发笔记
    • 日常记录
    • 项目部署
    • 网站导航
    • 产品学习
    • 英语学习
  • 代码管理

    • Maven
    • Git教程
    • Git小乌龟教程
  • 运维工具

    • Docker
    • Jenkins
    • Kubernetes
  • 算法笔记

    • 算法思想
    • 刷题笔记
  • 面试问题常见

    • 十大经典排序算法
    • 面试常见问题集锦
关于
GitHub (opens new window)
npm

(进入注册为作者充电)

  • SpringMVC

    • SpringMVC 入门
      • 1. 什么是 Spring MVC
      • 2. MVC 的定义与解释
      • 3. MVC 和 Spring MVC 的关系
      • 4. 如何学习Spring MVC
        • 创建项目时选择 Spring Web 依赖
        • 编写 Spring MVC 控制器代码
        • 请求映射注解的区别与使用
        • 1. @RequestMapping 注解
        • 2. @GetMapping 和 @PostMapping 注解
        • 3. 扩展:处理其他类型的请求
        • 4. 路径前的斜杠(/)问题
    • Spring MVC 数据接收
    • Spring MVC 数据返回
    • Spring MVC 路径匹配规则
    • Spring MVC 内容协商策略
    • Spring MVC 异步请求处理
    • Spring MVC 静态资源处理
    • Spring MVC 自定义格式化器
    • SpringMVC 自定义拦截器
    • SpringMVC 配置跨域(CORS)
    • Spring MVC 自定义视图控制器
    • Spring MVC 自定义视图解析器
    • Spring MVC 自定义方法参数解析器
    • Spring MVC 自定义返回值处理器
    • Spring MVC 自定义消息转换器
    • Spring MVC 消息转换器扩展
    • Spring MVC 自定义异常处理器
    • Spring MVC 自定义异常处理器扩展
  • SpringMVC
  • SpringMVC
scholar
2024-08-17
目录

SpringMVC 入门

# 1. 什么是 Spring MVC

Spring MVC(Spring Web MVC) 是基于 Servlet API 构建的一个 Web 框架,它是 Spring 框架中的 Web 模块,帮助开发者实现基于 MVC 设计模式的 Web 应用程序。

Spring、Spring MVC、Spring Boot 之间的关系

  • Spring 是核心框架,提供了依赖注入、面向切面编程等基础功能。
  • Spring MVC 是 Spring 的 Web 模块,实现了 MVC 设计模式的 Web 应用开发框架。
  • Spring Boot 是 Spring 的脚手架,帮助快速搭建 Spring 应用,简化配置。

提示

现在大多数 Java Web 项目都是基于 Spring Boot 开发的,添加 Spring Web 依赖后,实际上就是一个 Spring MVC 项目。因此,Spring Boot 项目中使用的 Web 模块本质上就是 Spring MVC。

# 2. MVC 的定义与解释

MVC 是 Model-View-Controller 的缩写,是一种设计模式。MVC 将软件系统分为三个部分:

  1. Model(模型):负责处理应用的数据逻辑,通常与数据库交互。
  2. View(视图):负责数据显示,通常通过模板渲染模型数据。
  3. Controller(控制器):负责用户输入的处理,将用户请求转发给模型并返回视图。

MVC 在实际开发中的理解

  • 用户输入请求 → 由 Controller 接收并处理 → Controller 调用 Model 进行数据处理 → Model 返回数据 → Controller 将数据传递给 View → View 渲染并返回给用户。

# 3. MVC 和 Spring MVC 的关系

MVC 是一种设计思想,Spring MVC 是这种思想的具体实现。Spring MVC 继承了 Servlet API,是一个标准的 Java Web 框架。

Spring MVC 的现代应用

尽管 MVC 最初包含了视图渲染的功能,但随着前后端分离架构的兴起,Spring MVC 在现代开发中主要负责后端业务逻辑和数据处理,将 JSON 数据返回给前端,前端负责渲染 UI。

总结

  • Spring MVC 是基于 MVC 设计模式的 Web 框架,它是 Spring 的核心组成部分,通过继承 Servlet API 实现了 Web 应用开发的标准化流程。
  • 在现代 Web 开发中,Spring MVC 主要负责处理请求、调用业务逻辑和返回数据,而不再涉及 UI 的渲染。

# 4. 如何学习Spring MVC

学习 Spring MVC,主要掌握以下 3 个关键功能:

  1. 请求映射功能:将用户请求映射到相应的 Java 方法上(实现 URL 到方法的映射)。
  2. 参数获取功能:从请求中获取用户传递的参数。
  3. 数据返回功能:将处理后的数据返回给用户(如返回 JSON 数据、页面视图等)。

掌握了这三个功能,基本上就掌握了 Spring MVC 的核心。

# 创建项目时选择 Spring Web 依赖

在学习如何连接用户请求和 Java 程序之前,首先需要创建一个 Spring MVC 项目。现代 Spring MVC 项目通常是基于 Spring Boot 构建的,因此在创建项目时,只需在依赖中选择添加 Spring Web 模块即可。

项目创建示例

# 编写 Spring MVC 控制器代码

下面是一个简单的 Spring MVC 控制器示例代码,通过该代码可以映射一个简单的请求路径并返回字符串响应。

示例代码

@Controller  // 标识这是一个 Spring MVC 控制器类,必须添加该注解,否则无法处理请求
@ResponseBody // 将返回值直接写入 HTTP 响应体,通常用于返回 JSON 数据或纯文本数据
@RequestMapping("/web") // 类级别的请求映射,指定了基础路径(可省略)
public class WebController {

    @RequestMapping("/hello") // 方法级别的请求映射,完整路径为 "/web/hello"
    public String hello() {
        return "你好,世界"; // 返回的内容将直接作为响应体内容
    }
}
1
2
3
4
5
6
7
8
9
10

代码解析

  • @Controller:用于标识一个类为控制器,Spring 会将其作为 Bean 加载并注册到上下文中。必须添加,否则该类无法处理 HTTP 请求。
  • @RequestMapping:用于映射请求路径,可以标注在类或方法上。
    • 当标注在类上时,指定基础路径(如 /web),所有方法的路径都会在此基础上进行拼接。
    • 当标注在方法上时,指定具体路径(如 /hello)。此路径与类级别路径组合形成完整的 URL。
  • @ResponseBody:将方法的返回值直接写入 HTTP 响应体,通常用于返回 JSON 数据或纯文本。如果不使用此注解,Spring 会尝试将返回值作为视图名称进行解析。
  • 路径访问:在浏览器中访问 http://127.0.0.1:8080/web/hello 时,会映射到 hello() 方法,返回的字符串直接展示在页面上。

注意事项

  1. @Controller 不能被替代:不能使用其他注解(如 @Service、@Component)替代 @Controller,否则请求将无法映射到该类。
  2. 路径映射:@RequestMapping 可以只在方法上使用,但不能只在类上使用。方法级别的映射路径是必须的。
  3. 返回视图时的注解选择:如果返回的是静态页面视图(如 JSP、HTML),可以省略 @ResponseBody 注解。如果返回的是 JSON 数据,必须使用 @ResponseBody 或 @RestController(@RestController 是 @Controller 和 @ResponseBody 的组合)。

# 请求映射注解的区别与使用

在 Spring MVC 中,处理用户请求的关键在于如何映射不同的 HTTP 请求类型(如 GET、POST 等)到控制器方法。最常用的注解包括 @RequestMapping、@GetMapping 和 @PostMapping 等。

# 1. @RequestMapping 注解

  • 功能:@RequestMapping 是最基础的请求映射注解,可以处理多种请求类型,包括 GET、POST、PUT、DELETE 等。
  • 用法:@RequestMapping 可标注在类或方法上。标注在类上时,指定基础路径;标注在方法上时,指定具体路径和请求类型。

示例代码:处理 GET 请求

// 默认处理所有请求类型(包括 GET 和 POST, 建议用在类上)
@RequestMapping("/hello")

// 明确指定处理 GET 请求 (用在方法上建议明确指定method 参数)
@RequestMapping(value = "/hello", method = RequestMethod.GET)
1
2
3
4
5

# 2. @GetMapping 和 @PostMapping 注解

  • 功能:@GetMapping 和 @PostMapping 是 @RequestMapping 的简化版本,专用于处理 GET 和 POST 请求。
  • 优点:相比 @RequestMapping,这些注解更加直观简洁,更符合 RESTful 风格的开发实践。

示例代码:处理 GET 请求

// 使用 @GetMapping 专门处理 GET 请求,推荐使用这种写法
@GetMapping("/hello")
1
2

示例代码:处理 POST 请求

// 使用 @PostMapping 专门处理 POST 请求,推荐使用这种写法
@PostMapping("/hello")
1
2

# 3. 扩展:处理其他类型的请求

在实际开发中,除了 GET 和 POST 请求外,还需要处理 PUT、DELETE、PATCH 等请求。Spring MVC 提供了相应的注解:

  • @PutMapping:处理 PUT 请求,用于更新资源。
  • @DeleteMapping:处理 DELETE 请求,用于删除资源。
  • @PatchMapping:处理 PATCH 请求,用于部分更新资源。

示例代码:处理 PUT 请求

@PutMapping("/update")
public ResponseEntity<String> updateResource() {
    return ResponseEntity.ok("资源已更新");
}
1
2
3
4

示例代码:处理 DELETE 请求

@DeleteMapping("/delete")
public ResponseEntity<String> deleteResource() {
    return ResponseEntity.ok("资源已删除");
}
1
2
3
4

# 4. 路径前的斜杠(/)问题

在Spring框架中,无论是@RequestMapping还是@PostMapping等具体的HTTP方法注解,路径前的斜杠(/)都是可选的。Spring会自动处理类级别和方法级别路径的拼接,无论是否添加斜杠,最终的URL都会正确组合。例如:

@RestController
@RequestMapping("userInfo")
public class UserInfoController {
    
    @PostMapping("addUserInfo")
    public String addUserInfo(...) {
        // 方法实现
    }
}
1
2
3
4
5
6
7
8
9

上述配置会映射到/userInfo/addUserInfo。为了代码一致性和可读性,建议在整个项目中统一是否使用斜杠。

总结:

  • 斜杠可选:路径前的斜杠在映射注解中可以有也可以没有,Spring会正确拼接。
  • 保持一致:为了代码整洁,建议在项目中统一路径定义风格。
  • 路径拼接:类级别和方法级别的路径会自动组合,无需担心斜杠问题。
编辑此页 (opens new window)
上次更新: 2025/01/21, 07:18:26
Spring MVC 数据接收

Spring MVC 数据接收→

Theme by Vdoing | Copyright © 2019-2025 程序员scholar
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式