JavaEE简单示例——SpringMVC的简单数据绑定

简单介绍:

在前面我们介绍过如何将我们自己创建的类变成一个servlet来处理用户发送的请求,但是在大多数的时候,我们在请求 的时候会携带一些参数,而我们现在就开始介绍我们如何在Java类中获取我们前端请求中携带的参数。

首先,我们在Java类中获取浏览器请求中携带的参数的过程就被称为数据绑定,这也是我们数据绑定的基本概念。首先我们来介绍 数据绑定的基本原理: 在SpringMVC数据绑定过程中,SpringMVC框架会通过数据绑定组件(DataBinder)对请求中的参数内容进行类型转换,然后将转换后的 值赋给处理器的形参,这样SpringMVC就完成了客户端请求参数的获取和绑定。 原理很复杂,但是原理越复杂,使用就越是简单。我们只需要知道,从浏览器请求传递的参数会成为我们处理器方法的形参 而对于形参的使用我们就非常熟悉了,下面我们就开始创建一个带参数的方法,并将浏览器发送的请求参数输出在控制台。

使用方法:

简单的数据绑定就是绑定基本的数据类型,笔记int或者String,在数据绑定方面,比较重要的反而不是Java类的编写 因为简单的数据绑定就是使用基本数据类,复杂的数据类型绑定就是使用数据或者Java类,都是一些比较简答的应用 重点在于前端页面的表单的编写。 在简单数据绑定这一节,我们需要注意的是,Java形参的属性名和表单中表单的name属性的值要保持一致,因为这样 才能正确的接收到来自表单提交的值。

然后是复杂数据绑定,复杂数据绑定无非就是,绑在对象上,绑在列表上,绑在集合上,绑在集合的对象上,我们会一一的演示 这样操作是如何在表单中体现的

将数据绑定到类的方法非常简单,只需要我们将处理器方法的形参的参数修改成我们想要将数据绑定的类,这个类中的属性 的属性名和表单中name属性的值保持一致即可。然后我们通过类的get方法获取类的参数,这个参数就是我们请求中携带的参数:

代码实现:

简单数据绑定:

对于简单数据绑定的方法非常简单,我们只需要在页面中创建一个表单,然后提交到控制器类中,在控制器方法中添加参数即可,唯一需要注意的是,控制器类的方法的参数一定要和表单中的<input>标签的name属性的值相同才能自动进行数据绑定

首先我们创建一个表单页面:

<form action="${pageContext.request.contextPath}/DataBinger">
  <table>
    <tr>
      <td>用户名:</td> <td><label>

      <input type="text" name="username">
    </label></td>
    </tr>
    <tr>
      <td>密码:</td>  <td><label>

      <input type="password" name="password">
    </label></td>
    </tr>
    <tr>
      <td> <input type="submit" value="提交"> </td>
    </tr>
  </table>
</form>

然后我们创建一个控制器类和控制器方法:

@RequestMapping("/DataBinger")
    public String DataBinger(String username , String password){
        System.out.println("用户名是:"+username);
        System.out.println("密码是:"+password);
        return "index";
    }

 所谓的控制器类的方法的参数一定要和表单中的<input>标签的name属性的值相同才能自动进行数据绑定的意思就是:

完成之后,我们就启动Tomcat测试一下:

 

我们在浏览器中打开我们刚才创建的页面,然后输入值,如果成功完成了数据绑定,那么在我们提交之后,我们会在控制台看到我们输入的值:

 可以看到,控制台确实输出了我们刚才输入的值,这就表示我们顺利完成了简单的数据绑定。 

复杂数据绑定——将参数绑定到类中:

首先我们要对复杂数据绑定的实现流程有一个基本的概念,首先要明确,我们是要将接收到的数据绑定到一个类中,所以我们需要一个类来接收我们的数据:

package SpringMVC.DataBindingAndResponse;

public class user {
    private String username;
    private String password;

    @Override
    public String toString() {
        return "user{" +
                "username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }

    public String getUsername() {
        return username;
    }

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

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public user(String username, String password) {
        this.username = username;
        this.password = password;
    }

    public user() {
    }
}

准备好存放数据的类之后,我们就要开始测试参数的传递了,传递参数最方便直观的方式就是在JSP页面中创建一个表格进行提交数据,表格的内容如下:

<h1>这是测试复杂数据绑定-绑定对象</h1>
<form action="${pageContext.request.contextPath}/BinderObjrct">
  <table>
    <tr>
      <td>用户名:</td> <td><label>
<%--注意这里的name的参数要和Java类中的属性名保持一致--%>
      <input type="text" name="username">
    </label></td>
    </tr>
    <tr>
      <td>密码:</td>  <td><label>
<%--这里也是要和java类中的属性值保持一致--%>
      <input type="password" name="password">
    </label></td>
    </tr>
    <tr>
      <td> <input type="submit" value="提交"> </td>
    </tr>
  </table>
</form>

准备好了页面内容之后,我们就开始编写控制器类了,之前我们需要在控制器方法的形参中直接写入了参数,这次我们方法的形参改成类:

//    测试复杂数据绑定之将参数绑定到Java类中
    @RequestMapping("/BinderObjrct")
//    在完成了基本的配置之后,我们可以直接通过将泛型修改成对象的方式获取对象
    public String DataBingerToProject(user u){
        System.out.println(u.getUsername());
        System.out.println(u.getPassword());
        return "index";
    }

需要注意的是,这次我们表单中的<input>标签的name属性的值,要和我们存放数据的类的属性保持一致,才能顺利的接收到数据,也就是如下图表示:

 配置好之后,我们就可以来到我们的项目中打开Tomcat开始测试了:

我们在页面的表单中输入我们的值,如果顺利的进行数据绑定之后,我们就可以像之前那样在控制台看到我们输入的值:

 我们依然顺利的看到了我们的值,这就表示我们已经顺利的将页面表单中传递的参数传入到了类中,并可以取出参数进行操作了 

当表单中的属性值和处理器类方法中的参数值不一样的时候:

在开发中,我们的前端开发和后端开发经常是分开的,所以这时候我们就会遇到一些问题,比如前端人员的命名方式和 后端人员的命名方式不一样,导致表单中name的属性和Java类中属性名不一致,这时候又无法修改成一致的状态,导致 无法自动获取表单提交的参数的时候,这时候该怎么办呢? 为了应对这种情况的发生,Spring的提供了@RequestParam,这个注释是我们在使用简单数据绑定的时候 需要写在方法的形参的参数前面即可, 下面我们就来演示一下当表单中的请求参数和Java类中的属性名 不一样的情况。 @RequestParam注解只需要使用一个属性就可以了,就是value属性,value属性就是我们前端的参数名,表示接收哪一个 参数名传递的参数,当属性只有一个value的时候,value关键字可以不写 这是当参数值和属性名不一样的时候才会使用到的,但是在正常的开发中,还是尽量让参数保持一致:

表单中的内容:

<h1>这是测试复杂数据绑定-当表单中的参数名和方法的参数名不一样的时候</h1>
<form action="${pageContext.request.contextPath}/BinderObjrctOrtherParams">
    <table>
        <tr>
            <td>用户名:</td> <td><label>
            <%--这时候name的值和Java类的值不一样了--%>
            <input type="text" name="username">
        </label></td>
        </tr>
        <tr>
            <td>密码:</td>  <td><label>
            <%--这里的name的值也不一样了--%>
            <input type="password" name="password">
        </label></td>
        </tr>
        <tr>
            <td> <input type="submit" value="提交"> </td>
        </tr>
    </table>
</form>

 处理器方法:

//    测试当前端页面的表单的参数值和形参中的属性值不相同的情况
    @RequestMapping("/BinderObjrctOrtherParams")
//    注意这里的参数,方法的参数和表单中的并不一样,但是我们使用注解,注解中的值就是表单中的参数值
    public String BinderObjrctOrtherParams(@RequestParam("username")String name,
                                           @RequestParam("password") String passwd){
//        这样我们依然可以正常的获取数据
        System.out.println(name);
        System.out.println(passwd);
        return "index";
    }

我们只需要在处理器方法的形参的参数前面使用 @RequestParam注解,这个注解的值就是表单中input标签的name属性的值,配置完成之后,我们继续打开Tomcat进行测试:

我们在表单中输入我们想要传递的参数,然后点击提交,如果能在控制台上看到我们输入的参数,那么就表示我们的配置是正确的:

 

顺利的看到我们输入的参数,说明我配置的是正确的 

注意点:

需要注意的是,表单中的<input>标签的name属性一定要和Java中的参数的属性名保持一致,如果出现我们的参数传递过去了但是在控制台中没有输出,优先考虑是不是属性值写的不一样导致的,其次就是注意我们的提交路径,要和处理器类方法中的@RequestMapping注解中的值保持一致才能顺利的提交到方法中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/4817.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot自定义注解+异步来实现日志管理

一、前言 我们在企业级的开发中&#xff0c;必不可少的是对日志的记录&#xff0c;实现有很多种方式&#xff0c;常见的就是基于AOP注解进行保存&#xff0c;同时考虑到程序的流畅和效率&#xff0c;我们可以使用异步进行保存&#xff01; 二、基础环境 1. 导入依赖 我这里…

C#,码海拾贝(06)——连分式(Continued Fraction)曲线插值算法,《C#数值计算算法编程》源代码升级改进版

一、连分式法 连分式法是一种有理函数逼近法&#xff0c;其基本出发点是&#xff1a;将原型展开成连分式&#xff0c;然后截取前面几个起主要作用的偏系数构成简化模型&#xff0c;连分式法计算简便&#xff0c;拟合精度较高&#xff0c;是一种很有效的传递函数简化法。 Cont…

【Spring Cloud Alibaba】5.创建服务消费者(Feign)

文章目录简介什么是 Feign开始搭建创建项目修改POM文件添加启动类创建 Feign 接口添加Controller添加配置文件启动项目测试访问Nacos访问接口测试负载均衡通过终端启动多个服务提供者实例简介 接下来我们创建一个服务消费者&#xff0c;通过Feign来进行与服务提供者交互&#…

KDZD程控超低频高压发生器

一、产品概述 本产品接合了现代数字变频技术&#xff0c;采用微机控制&#xff0c;升压、降压、测量、保护自动化。由于电子化&#xff0c;所以体积小重量轻、大屏幕液晶显示&#xff0c;清晰直观、且能显示输出波形、打印试验报告。 设计指标符合《电力设备专用测试仪器通用…

SSM—【笔记】1.1Spring

Spring好处 简化开发&#xff0c;降低企业级开发的复杂性框架整合&#xff0c;高效整合其他技术&#xff0c;提高企业级应用开发与运行效率 简化开发&#xff1a;1、IoC、2、AOP[2.1衍生出事务处理 ] 框架整合&#xff1a;MyBatis、Mybatis-plus、Struts、Struts2、Hibernat…

Android开发-Android常用组件-ToggleButton开关按钮 Switch开关

4.7 开关按钮ToggleButton和开关Switch 1.开关按钮ToggleButton 属性名 说明 android:disabledAlpha 设置按钮在禁用时的透明度 android:textOff 按钮没有被选中时显示的文字 android:textOn 按钮被选中时显示的文字 另外&#xff0c;除了这个我们还可以自己写个 selec…

Spring Cloud之一:注册与发现-Eureka工程的创建

系列目录&#xff08;持续更新。。。&#xff09; Spring Cloud&#xff1a;什么是微服务 Spring Cloud之一&#xff1a;注册与发现-Eureka工程的创建 Spring Cloud之二&#xff1a;服务提供者注册到Eureka Server Spring Cloud之三&#xff1a;Eureka Server添加认证 Spr…

SpringBoot(3)整合Mybatis

文章目录一、导入依赖二、编写配置文件三、在启动类上添加注解&#xff0c;表示mapper接口所在位置四、定义mapper接口五、定义mapper.xml映射文件六、service层七、controller层八、修改idea检查代码的严格程度一、导入依赖 <dependency><groupId>org.mybatis.spr…

华为OD机试题,用 Java 解【新员工座位安排系统】问题 | 含解题说明

华为Od必看系列 华为OD机试 全流程解析+经验分享,题型分享,防作弊指南华为od机试,独家整理 已参加机试人员的实战技巧华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典本篇题目:新员工座位安排系统 题目 工位…

Ganache 安装

一. 下载Ganache Ganache下载链接 根据系统选择对应安装文件 或者brew安装 brew install --cask ganache 二.打开app 点击quickstart 点击save按钮&#xff0c;保存workspace&#xff0c;此时已启动对应端口为7545 三.打开truffle项目&#xff0c;设置配置文件 我已初始化…

华为OD机试题,用 Java 解【卡片组成的最大数字】问题 | 含解题说明

华为Od必看系列 华为OD机试 全流程解析+经验分享,题型分享,防作弊指南华为od机试,独家整理 已参加机试人员的实战技巧华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典本篇题目:卡片组成的最大数字 题目 小组…

大数据分析工具Power BI(七):DAX使用场景及常用函数

DAX使用场景及常用函数 Power BI中DAX函数非常多,功能非常强大,下面结合一些实际场景来讲解DAX一些常用的函数,这些场景包含求和、计数、相除、排序、累计、环比、同比,为了更方便后续的可视化展示数据,我们新创建可视化展示的页面,创建一个新表存储后续展示的度量值,具…

iptables-ipset仅允许国内访问---端口白名单

前言&#xff1a;境外肉鸡攻击有点多&#xff0c;并业务无境外访问需求&#xff0c;IDC机房网络防火墙无法实现8K多条的china大陆地址导入&#xff1b;为实现仅china大陆地址访问&#xff0c;在业务端口如这里的80&#xff0c;使用iptables防火墙ipset过滤实现访问控制,对于访问…

HttpMessageConverter

基本介绍 我们进行Web开发&#xff0c;但是前端传入的 JSON 数据到底是如何被解析成 Java 对象作为 API入参的&#xff0c;后端返回的结果又是如何把 Java 对象解析成 返回给前端的&#xff0c;在整个数据流转的过程中&#xff0c;这些工作都是由谁来完成的呢&#xff1f; 从…

【UML建模】类图 类与接口表示方式、关系、基数详解

文章目录1.概述2.类的表示方式2.1.类与接口2.2.属性、方法、访问权限3.类之间的关系3.1.继承与实现3.2.关联、聚合、组合3.2.1.用代码表达关联关系3.2.2.用代码表达组合关系3.2.3.用代码表达聚合关系3.3.依赖3.3.1.依赖关系的代码实现4.基数5.总结1.概述 在我们的日常学习、工…

斐波拉契数列,有人买了一对小兔子,已知小兔子一个月后长成大兔子,大兔子每个月生一对小兔子,问:两年(24个月)之后,他一共有几对兔子。

[01]斐波拉契数列&#xff0c;有人买了一对小兔子&#xff0c;已知小兔子一个月后长成大兔子&#xff0c;大兔子每个月生一对小兔子&#xff0c;问:两年(24个月)之后&#xff0c;他一共有几对兔子。 第i月份大兔子小兔子总兔子1011210131124213532565387851381382192113341034…

Qt 正则表达式匹配失败的一个原因

在Qt中做正则表达式时&#xff0c;遇到一个很坑爹的问题&#xff0c;还是经验不足导致。 在正则表达式中&#xff0c;有很多需要元字符&#xff0c;是需要使用普通字符加转义符号搭配使用的。比如\w&#xff0c;\s。对于这类字符&#xff0c;在Qt中使用时&#xff0c;对\再次进…

Prometheus监控实战系列二十:监控Kubernetes集群(下)

本文承接上篇&#xff0c;在本篇中我们会讲解Prometheus如何应用基于Kubernetes的服务发现功能&#xff0c;检索目标信息并进行监控。 在监控策略上&#xff0c;我们将混合使用白盒监控与黑盒监控两种模式&#xff0c;建立起包括基础设施(Node)、应用容器&#xff08;Docker)、…

【新】(2023Q2模拟题JAVA)华为OD机试 - 时间格式化

最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为od机试,独家整理 已参加机试人员的实战技巧本篇题解:时间格式化 题目 运维工程师…

(一)人工智能应用--深度学习原理与实战--初识深度学习

认识人工智能、机器学习与深度学习的关系 人工智能(Artificial IntelLigence)诞生于20世纪50年代,其简洁定义为:让计算机自动完成通常由人类完成的智力任务。人工智能是一个综合性领域。最早期出现的预定义规则的专家系统(Expert System) -----由程序员精心设计出明确的规则…