【Spring MVC】第二站-Spring MVC请求

目录

​编辑

一、RequestMapping注解

[1. RequestMapping的属性](#1. RequestMapping的属性)

[2. RequestMapping的请求参数绑定](#2. RequestMapping的请求参数绑定)

[2.1 绑定机制](#2.1 绑定机制)

[2.2 支持的数据类型](#2.2 支持的数据类型)

[2.3 在控制器中使用原生的ServletAPI对象](#2.3 在控制器中使用原生的ServletAPI对象)

二、不常用的注解

[1. RequestParam注解](#1. RequestParam注解)


一、RequestMapping注解

RequestMapping注解的作用是建立请求URL和处理方法之间的对应关系。

RequestMapping注解可以作用在方法和类上。

  1. 作用在上:第一级的访问目录

  2. 作用在方法上:第二级的访问目录

  3. 细节:路径可以不编写 / 表示应用的根目录开始

1. RequestMapping的属性

  1. path 指定请求路径的url

  2. value value属性和path属性是一样的

  3. mthod 指定该方法的请求方式

java 复制代码
@Controller
@RequestMapping(path = "/role") // 一级请求路径
public class RoleController {
    /**
     * /role/save
     * method="当前方法允许请求方式能访问"
     * params="请求路径上传参数"
     * @return
     */
   @RequestMapping(path = "/save",method = {RequestMethod.GET})
    public String save(){
        System.out.println("保存角色...");
        return "suc";
    }

    @RequestMapping(value = "/delete")
    public String delete(){
        System.out.println("删除角色...");
        return "suc";
    }
}

返回数据/页面

java 复制代码
@RequestMapping("/save2")
@ResponseBody  //返回的就是字符串
public String save2(){
    return "a";
}

@RequestMapping(path = "/save3",method = {RequestMethod.GET})
public String save3(){
    System.out.println("保存角色....");
    return "suc";
}

2. RequestMapping的请求参数绑定

2.1 绑定机制

  1. 表单提交的数据都是k=v格式的。

username=haha&password=123

  1. SpringMVC的参数绑定过程是把表单提交的请求参数,作为控制器中方法的参数进行绑定的

  2. 要求:提交表单的name和参数的名称是相同的。

2.2 支持的数据类型

  1. 基本数据类型和字符串类型

  2. 实体类型(JavaBean)

  3. 集合数据类型(List、map集合等)

  1. 基本数据类型和字符串类型

  2. 提交表单的name和参数的名称是相同的

  3. 区分大小写

  4. 实体类型(JavaBean)

  5. 提交表单的name和JavaBean中的属性名称需要一致

  6. 如果一个JavaBean类中包含其他的引用类型,那么表单的name属性需要编写成:对象.属性

例如:address.name

  1. 给集合属性数据封装

JSP页面编写方式:list[0].属性

jsp代码:

html 复制代码
<html>
<head>
    <meta charset="utf-8">
    <title>入门程序</title>
</head>
<body>
<h3>入门</h3><a href="/SpringMVC/hello" >入门程序</a>
    <h1>请求参数绑定入门程序</h1>
    <form action="/SpringMVC/user/save" method="get">
        <input type="text" name="username"/><br/>
        <input type="text" name="age"/><br/>
        <input type="submit"/>
    </form>
    <h1>请求参数绑定入门程序(封装到实体类)</h1>
    <form action="/user/save1" method="post">
        <input type="text" name="username"/><br/>
        <input type="text" name="age"/><br/>
        <input type="submit"/>
    </form>
    <h1>请求参数绑定入门程序(封装到实体类)</h1>
    <form action="/user/save2" method="post">
        <input type="text" name="username"/><br/>
        <input type="text" name="age"/><br/>
        <input type="text" name="account.money"/><br/>
        <input type="submit"/>
    </form>
    <h1>请求参数绑定入门程序(存在list集合)</h1>
    <form action="/user/save3" method="post">
        <input type="text" name="username"/><br/>
        <input type="text" name="age"/><br/>
        <input type="text" name="account.money"/><br/>
        <input type="text" name="accounts[0].money"/><br/>
        <input type="text" name="accounts[1].money"/><br/>
        <input type="submit"/>
    </form>
</body>
</html>

JavaBean代码

java 复制代码
public class Account {
    private Double money;

    public Double getMoney() {
        return money;
    }

    public void setMoney(Double money) {
        this.money = money;
    }

    @Override
    public String toString() {
        return "Account{" +
                "money=" + money +
                '}';
    }
}

实体类:

java 复制代码
public class User {
    private String username;
    private Integer age;
    private Account account;
    private List<Account> accounts;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public Account getAccount() {
        return account;
    }

    public void setAccount(Account account) {
        this.account = account;
    }

    public List<Account> getAccounts() {
        return accounts;
    }

    public void setAccounts(List<Account> accounts) {
        this.accounts = accounts;
    }

    @Override
    public String toString() {
        return "User{" +
                "username='" + username + '\'' +
                ", age=" + age +
                ", account=" + account +
                ", accounts=" + accounts +
                '}';
    }
}

controller代码

java 复制代码
@Controller
@RequestMapping("/user")
public class UserController {

    @RequestMapping("/save")
    public String save(String username,Integer age){
        System.out.println(username);
        System.out.println(age);
        return "suc";
    }

    @RequestMapping("/save1")
    public String save1(User user){
        System.out.println(user.toString());
        return "suc";
    }

    @RequestMapping("/save2")
    public String save2(User user){
        System.out.println(user);
        return "suc";
    }

    @RequestMapping("/save3")
    public String save3(User user){
        System.out.println(user);
        return "suc";
    }

}

requestMapping:

java 复制代码
@RequestMapping("/save4")
public String save4(String name){
    System.out.println(name);
    return "a";
}
@RequestMapping("/save5")
public String save5(String name ,Integer age,char sex){
    System.out.println(name+" "+age+" "+sex);
    return "a";
}

@RequestMapping("/save6")
public String save6(User user){
    System.out.println(user.toString());
    return "a";
}

@RequestMapping("/save7")
public String save7(User user,Integer pageSize,Integer pageIndex){
    System.out.println(user.toString()+" "+pageSize+" "+pageIndex);
    return "a";
}

2.3 在控制器中使用原生的ServletAPI对象

只需要在控制器的方法参数定义HttpServletRequest和HttpServletResponse对象。

java 复制代码
@RequestMapping(value = "/save6.do",method = {RequestMethod.POST})
public String save6(HttpServletRequest request, HttpServletResponse response){
    // 获取到HttpSession对象
    System.out.println(request.getParameter("username"));
    HttpSession session = request.getSession();
    System.out.println(session);
    System.out.println(response);
    return "suc";
}

二、不常用的注解

1. RequestParam注解

  1. 作用:

把请求中的指定名称的参数传递给控制器中的形参赋值

  1. 属性
  1. value:请求参数中的名称

  2. required:请求参数中是否必须提供此参数,默认值是true,必须提供

  1. 代码如下
java 复制代码
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

@Controller
@RequestMapping("/dept")
public class DeptController {
    @RequestMapping("/save")
    public String save(@RequestParam(value = "username",required = false) String name){
        System.out.println(name);
        return "suc";
    }
}
相关推荐
可儿·四系桜37 分钟前
WebSocket:实时通信的新时代
java·网络·websocket·网络协议
forestsea38 分钟前
Maven 插件机制与生命周期管理
java·maven
七月在野,八月在宇,九月在户1 小时前
maven 依赖冲突异常分析
java·maven
金融数据出海1 小时前
黄金、碳排放期货市场API接口文档
java·开发语言·spring boot·后端·金融·区块链
胡斌附体1 小时前
微服务中 本地启动 springboot 无法找到nacos配置 启动报错
java·spring boot·微服务·yml·naocs yml
薯条不要番茄酱1 小时前
【JVM】从零开始深度解析JVM
java·jvm
夏季疯1 小时前
学习笔记:黑马程序员JavaWeb开发教程(2025.3.31)
java·笔记·学习
D_aniel_1 小时前
排序算法-快速排序
java·排序算法·快速排序
长安城没有风2 小时前
数据结构 集合类与复杂度
java·数据结构
D_aniel_2 小时前
排序算法-插入排序
java·排序算法·插入排序