SpringMVC 请求与响应处理详解

ops/2025/4/1 6:52:48/

引言

在 Java Web 开发中,SpringMVC 作为 Spring 框架的重要模块,提供了强大的请求和响应处理机制。本文将深入探讨 SpringMVC 中请求和响应的处理方式,结合实际案例,帮助开发者更好地理解和应用这些功能。

一、SpringMVC 请求处理

1. RequestMapping 注解

RequestMapping 注解用于建立请求 URL 和处理方法之间的映射关系,可以作用在类或方法上。

  • 作用在类上:作为一级请求路径。

  • 作用在方法上:作为二级请求路径。

@Controller
@RequestMapping("/user")
public class UserController {@RequestMapping("/save")public String save() {return "success";}
}

访问路径为:http://localhost:8080/项目名/user/save

属性说明
  • path/value:指定请求路径的 URL。

  • method:指定允许的 HTTP 请求方法,如 RequestMethod.GET、RequestMethod.POST。

  • params:指定请求参数的条件。

@RequestMapping(value = "/save", method = RequestMethod.POST, params = "age=18")
public String save(@RequestParam("age") int age) {// 处理逻辑
}

2. 请求参数绑定

SpringMVC 支持多种类型的数据绑定,包括基本数据类型、字符串、实体类和集合类型。

基本数据类型和字符串

表单提交的参数名称需与方法参数名称一致。

@RequestMapping("/save")
public String save(String username, Integer age) {System.out.println("Username: " + username + ", Age: " + age);return "success";
}

对应的表单:

<form action="/user/save" method="post"><input type="text" name="username"><input type="text" name="age"><input type="submit" value="Submit">
</form>

预览

实体类绑定

表单参数名称需与实体类属性名称一致。

public class User {private String username;private Integer age;// getter 和 setter
}@RequestMapping("/save1")
public String save1(User user) {System.out.println(user);return "success";
}

对应的表单:

<form action="/user/save1" method="post"><input type="text" name="username"><input type="text" name="age"><input type="submit" value="Submit">
</form>

预览

集合类型绑定

支持 List 和 Map 类型的参数绑定。

@RequestMapping("/save2")
public String save2(@RequestParam("users") List<User> users) {System.out.println(users);return "success";
}

对应的表单:

<form action="/user/save2" method="post"><input type="text" name="users[0].username"><input type="text" name="users[0].age"><input type="text" name="users[1].username"><input type="text" name="users[1].age"><input type="submit" value="Submit">
</form>

预览

3. 使用 Servlet API

在控制器中可以直接使用 HttpServletRequest 和 HttpServletResponse 对象。

@RequestMapping("/save3")
public String save3(HttpServletRequest request, HttpServletResponse response) {String username = request.getParameter("username");int age = Integer.parseInt(request.getParameter("age"));System.out.println("Username: " + username + ", Age: " + age);return "success";
}

4. RequestParam 注解

用于绑定请求参数到方法参数。

@RequestMapping("/save4")
public String save4(@RequestParam("username") String name, @RequestParam("age") int age) {System.out.println("Username: " + name + ", Age: " + age);return "success";
}

二、SpringMVC 响应处理

1. 使用 ModelAndView

通过 ModelAndView 对象返回视图和模型数据。

@RequestMapping("/save5")
public ModelAndView save5() {ModelAndView modelAndView = new ModelAndView();modelAndView.addObject("msg", "保存成功");modelAndView.setViewName("result");return modelAndView;
}

对应的视图 result.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Result</title>
</head>
<body>
<h1 th:text="${msg}"></h1>
</body>
</html>

预览

2. 使用 Servlet API 进行输出

直接通过 HttpServletResponse 输出内容。

@RequestMapping("/save6")
public void save6(HttpServletResponse response) throws IOException {response.getWriter().println("保存成功");
}

3. 重定向与转发

请求转发

请求转发 本身是一种服务器端行为   浏览器的地址栏不发生变化 从始至终都是一个请求 request信息在servlet当中是共享的 只能在网站内部资源之间进行转发

@RequestMapping("/test1")
public String test1() {return "forward:/otherPage";
}
请求重定向

重定向  本身是一种客户端行为  地址栏是发生改变的  浏览器会发起两次请求 request域当中的信息是不共享的  可以访问网站外部资源

@RequestMapping("/test2")
public String test2() {return "redirect:/otherPage";
}

4. 返回 JSON 数据

使用 @ResponseBody 注解将 Java 对象转换为 JSON 响应。

@RequestMapping("/find")
@ResponseBody
public User find() {return new User("张三", 25, '男');
}

需要引入 Jackson 相关依赖:

<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.9.0</version>
</dependency>

三、总结

本文详细介绍了 SpringMVC 中请求和响应的处理方式,包括 RequestMapping 注解的使用、参数绑定、Servlet API 的应用、重定向与转发、JSON 响应、文件上传下载以及异常处理等内容。通过这些技术点的讲解和示例,开发者可以更高效地使用 SpringMVC 构建功能完善的 Web 应用。


http://www.ppmy.cn/ops/170852.html

相关文章

游戏引擎学习第184天

"我们有所有的代码"α 我们将进行一个完整的游戏开发过程&#xff0c;并且会展示。我们从零开始编写引擎&#xff0c;所以我们涵盖的内容从最底层的代码到最高层次的模块都有。虽然我们不能说是“高层次high level”的内容&#xff0c;但我们确实拥有所有的代码&…

蓝桥杯算法实战分享

蓝桥杯算法实战分享 蓝桥杯是国内知名的程序设计竞赛&#xff0c;涵盖算法、数据结构、编程技巧等多个领域。本文将从实战角度分享蓝桥杯算法竞赛的常见题型、解题思路和优化技巧&#xff0c;帮助参赛者更好地备战。 1. 常见题型与解题思路 蓝桥杯的题型主要包括以下几类&…

故障识别 | 基于改进螂优化算法(MSADBO)优化变分模态提取(VME)结合稀疏最大谐波噪声比解卷积(SMHD)进行故障诊断识别,matlab代码

基于改进螂优化算法&#xff08;MSADBO&#xff09;优化变分模态提取&#xff08;VME&#xff09;结合稀疏最大谐波噪声比解卷积&#xff08;SMHD&#xff09;进行故障诊断识别 一、引言 1.1 机械故障诊断的背景和意义 在工业生产的宏大画卷中&#xff0c;机械设备的稳定运行…

循环神经网络 - 给网络增加记忆能力

为了处理时序数据并利用其历史信息&#xff0c; 我们需要让网络具有短期记忆能力。而前馈网络是一种静态网络&#xff0c;不具备这种记忆能力。在正式学习循环神经网络之前&#xff0c;我们先来了解一下给网络增加短期记忆能力的三种方法。 一、延时神经网络 延时神经网络&am…

PoE交换机如何助力智慧城市基础设施建设?

随着全球城市化的加速发展&#xff0c;智慧城市的概念正逐步成为现实。通过技术手段提升居民生活质量、优化城市运营并促进可持续发展已成为趋势。弹性且高效的网络是智慧城市基础设施的关键支撑&#xff0c;而以太网供电&#xff08;PoE&#xff09;交换机在构建这些网络中发挥…

在鸿蒙 ArkUI 中使用本地数据缓存

前言 在移动应用开发中&#xff0c;数据缓存是一个常见需求&#xff0c;尤其是当我们需要存储用户的偏好设置、临时数据或离线内容时。鸿蒙 ArkUI 提供了 Storage 模块&#xff0c;使得开发者可以轻松地将数据缓存到本地存储。本文将详细介绍如何在鸿蒙 ArkUI 中使用本地数据缓…

数据可视化TensorboardX和tensorBoard安装及使用

tensorBoard 和TensorboardX 安装及使用指南 tensorBoard 和 TensorBoardX 是用于可视化机器学习实验和模型训练过程的工具。TensorBoard 是 TensorFlow 官方提供的可视化工具&#xff0c;而 TensorBoardX 是其社区驱动的替代品&#xff0c;支持 PyTorch 等其他框架。以下是它…

go - grpc入门

前期准备 工具安装及使用 grpc开发 编写proto文件 proto文件是符合Protocol Buffers语言规范的数据交换协议文件&#xff0c;就像以前WebService定义服务时使用的XML文件。现在一般都是用proto3了&#xff0c;这里创建一个名为 hello.proto 的文件&#xff0c;放到项目的pr…