SpringMVC 请求与响应处理详解

引言

在 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 应用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值