Spring MVC数据绑定和响应——简单数据绑定(三)POJO绑定

一、POJO数据绑定的使用场景

        在使用简单数据类型绑定时,可以很容易的根据具体需求来定义方法中的形参类型和个数,然而在实际应用中,客户端请求可能会传递多个不同类型的参数数据,如果还使用简单数据类型进行绑定,那么就需要手动编写多个不同类型的参数,这种操作显然比较繁琐。为解决这个问题,可以使用POJO类型进行数据绑定。

二、POJO数据绑定的概念

        POJO类型的数据绑定就是将所有关联的请求参数封装在一个POJO中,然后在方法中直接使用该POJO作为形参来完成数据绑定。

        下面通过用户注册案例演示POJO的数据绑定,该案例要求表单提交的数据绑定在处理器User类型的形参中,案例具体实现步骤如下所示。

1、创建一个User类用于封装用户信息。

public class User {private String username;        //用户名private String 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;}
}

2、在UserController.java类中,定义registerUser( )方法用于接收用户注册信息。

// 接收表单用户信息
@RequestMapping("/registerUser")
public void registerUser(User user) {String username = user.getUsername();String password = user.getPassword(); 	System.out.println("username="+username+",password="+password);
}

3、创建register.jsp文件,在register.jsp中编写用户注册表单。 

<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>注册</title></head>
<body><form action="${pageContext.request.contextPath}/registerUser" method="post">用户名:<input type="text" name="username" /><br />密&nbsp;&nbsp;&nbsp;码:<input type="password" name="password" /><br />
<input type="submit" value="注册"/></form></body>	
</html>

三、POJO绑定时参数名称问题

        在POJO类型数据绑定时,客户端请求的参数名称(本例中指form表单内各元素name的属性值)必须与要绑定的POJO类中的属性名称保持一致。这样客户端发送请求时,请求数据才会自动绑定到处理器形参POJO对象中,否则处理器参数接收的值为null。

4、启动chapter12项目,在浏览器中访问register.jsp页面,访问地址为http://localhost:8080/chapter12/register.jsp。

5、在register.jsp所示页面的表单中,分别填写注册的用户名为“enjoy”,密码为“123”,然后单击“注册”按钮即可完成注册数据的提交。当单击“注册”按钮后,控制台打印信息如图所示。 

username=enjoy,password=123

        从图中可以看出,程序成功打印出了用户名和密码。这表明registerUser()方法获取到了客户端请求中的参数username和参数password的值,并将username和password的值分别赋给了getUserNameAndId( )方法中user形参的username属性和password属性,实现了POJO数据绑定。

(四)解决请求参数中的中文乱码问题

        1、在客户端请求中,难免会有中文信息传递,例如,在register.jsp中的用户名输入框中输入用户名“享受请求时,虽然registerUser( )方法可以获取到user的属性值,但是在控制台中打印的信息却出现了乱码,控制台打印乱码信息

        2、为了防止客户端传入的中文数据出现乱码,可以使用Spring提供的编码过滤器来统一编码。要使用编码过滤器,只需要在web.xml中添加如下代码

<filter>	<filter-name>CharacterEncodingFilter</filter-name>	
<filter-class> org.springframework.web.filter.CharacterEncodingFilter
</filter-class>
<init-param><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param></filter>
<filter-mapping><filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>	</filter-mapping>

        上述代码中,在<filter>元素中,首先使用<fillter-class>元素配置了编码过滤器类org.springframework.web.filter.CharacterEncodingFilter,然后使用<init-param>元素设置统一的编码为UTF-8。最后配置<filter-mapping>元素,拦截前端页面中的所有请求,并交由名称为CharacterEncodingFilter的编码过滤器类进行处理,将所有的请求信息内容以UTF-8的编码格式进行解析

        3、配置完成后,再次在注册页面中输入中文用户名“黑马以及密码“123”,此时控制台正确打印中文信息,如图所示

username=享受,password=123

        从图中所示的打印信息可以看出,服务器端正确获取中文数据,这说明编码过滤器配置成功。

        以上可以解决post请求乱码问题,对于get请求中文参数出现乱码,可以在使用参数之前重新编码,如String username = new String(user.getUsername().getBytes(“ISO8859-1”),“UTF-8”);,其中ISO8859-1Tomcat默认编码,需要将Tomcat编码后的内容再按UTF-8编码

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

adb shell执行定时2小时命令

在Android设备上使用adb shell来执行一个定时2小时后运行的命令并不直接支持&#xff0c;因为adb shell是即时执行shell命令的工具&#xff0c;不支持内置的定时任务功能。但是&#xff0c;你可以通过几种方法来实现类似的功能&#xff1a; 方法一&#xff1a;使用sleep命令 …

dbeaver数据库链接工具

1、下载dbeaver 一个绿色版一个安装版&#xff0c;官网开源版 2、安装 3、可以导入之前navicat的链接 导入 选择navicat 反编译密码的&#xff1a;https://tool.lu/coderunner navicat 版本15的密码解密&#xff1a;https://www.iatodo.com/navicatpw

css动画自定义动画间隔时间

function playAnimation(element) {var animationName rubberBand;var duration 2000; // 动画持续时间&#xff0c;单位为毫秒element.style.animation ${animationName} 1s ease;element.addEventListener(animationend, function() {// 动画结束后重置样式&#xff0c;以…

服务运营 | MS文章精选:线上点单,当真免排队?餐饮零售与医疗场景中的全渠道运营

编者按&#xff1a; 小A走进了一家奶茶店&#xff0c;准备向店员点单&#xff0c;但却在屏幕上看到还有98杯奶茶待制作&#xff08;因为线上订单突然暴增&#xff09;。因此&#xff0c;小A不满地嘟囔着离开了奶茶店。这个例子展示了线上渠道可能会对线下渠道造成一些负面影响…

使用AES,前端加密,后端解密,spring工具类了

学习python的时候&#xff0c;看到很多会对参数进行加密&#xff0c;于是好奇心驱使下&#xff0c;让我去了解了下AES加密如何在java中实现。 首先 npm install crypto-js 然后在你的方法中&#xff0c;给你们前端源码看看&#xff0c;因为我用的ruoyi框架做的实验&#xff…

四川音盛佳云电子商务有限公司抖音电商的先行者

在当今数字时代&#xff0c;电商行业风起云涌&#xff0c;各大平台竞相争夺市场份额。而在这其中&#xff0c;四川音盛佳云电子商务有限公司以其独特的抖音电商服务模式&#xff0c;悄然崛起&#xff0c;成为了行业中的一股不可忽视的力量。今天&#xff0c;就让我们一起走进音…

【GD32F303红枫派使用手册】第二十六节 EXMC-液晶驱动实验

26.1 实验内容 通过本实验主要学习以下内容&#xff1a; LCD显示原理 EXMC NOR/SRAM模式时序和8080并口时序 LCD显示控制 26.2 实验原理 使用MCU的EXMC外设实现8080并口时序&#xff0c;和TFT-LCD控制器进行通信&#xff0c;控制LCD显示图片、字符、色块等。 26.2.1 TFT…

图像超分辨率重建

一、什么是图像超分辨 图像超分辨是一种技术&#xff0c;旨在通过硬件或软件的方法提高原有图像的分辨率。这一过程涉及从一系列低分辨率的图像中获取一幅高分辨率的图像&#xff0c;实现了时间分辨率向空间分辨率的转换。超分辨率重建的核心思想是利用多帧图像序列的时间带宽来…

计算机毕业设计Thinkphp/Laravel学生考勤管理系统zyoqy

管理员登录学生考勤管理系统后&#xff0c;可以对首页、个人中心、公告信息管理、年级管理、专业管理、班级管理、学生管理、教师管理、课程信息管理、学生选课管理、课程签到管理、请假申请管理、销假申请管理等功能进行相应操作&#xff0c;如图5-2所示。学生登录进入学生考勤…

金蝶云苍穹考试题目大全

前言 受不了某些地方看个答案还要收费&#xff0c;总结多份试卷 题目有重复&#xff0c;关键字检索即可 试卷一 金蝶云苍穹考试题目大全 单选题 开发知识错题反馈1.0分 1.关于编码规则的适用范围说法错误的是 A.单据没有设置主业务组织的情况下&#xff0c;则校验用户当前登…

【Spine学习16】之 人物面部绑定

1、创建头部骨骼 一根头骨 以头骨为父结点创建一个面部控制器face-holder 2、创建头发和face面部控制结点的变换约束 左右头发的约束指向为face结点 3、设定后发的变换约束&#xff0c;约束指向为face结点&#xff0c;反方向移动 设置参数为-100 同理&#xff0c;耳朵也依…

C# 中的 App.manifest 文件:优化应用程序配置与权限管理

前言 在开发 C# 应用程序时&#xff0c;可能会忽略一个重要的文件——App.manifest。这个文件看似不起眼&#xff0c;却在应用程序的运行和用户体验上扮演着关键角色。了解和正确配置 App.manifest 文件&#xff0c;不仅可以确保应用程序在不同操作系统上的兼容性&#xff0c;…

解决uniapp,textarea拉起页面被顶起和键盘被输入框遮挡的问题。

1&#xff1a;Android、ios 同时解决&#xff1b; 2&#xff1a;我们在开发的时候会发现textarea或者input拉起键盘的时候整个页面被顶起了&#xff0c;header也被顶没了&#xff1b;官方给了:adjustPositionfalse属性&#xff0c;设置完之后页面就不会被顶起&#xff0c;但是…

谈谈SQL优化

SQL优化是数据库性能优化中的关键环节&#xff0c;旨在提高查询执行的效率和响应速度。下面是一些常见的SQL优化技巧和策略&#xff0c;涵盖索引、查询设计、表结构设计等方面&#xff1a; 1. 索引优化 创建索引&#xff1a;为常用查询的过滤条件&#xff08;WHERE 子句&…

了解json

一.什么是json 1.什么是json是一种轻量级的数据交互&#xff0c;可以按照指定的json格式去组织和封装数据 2.json本质上是一个带有特定格式的字符串 二.json主要功能&#xff1a;json就是一种在各个编程语言中流通的数据格式&#xff0c;负责不同语言中的数据传递和交互&…

【Python时序预测系列】基于CNN+Bi-LSTM实现单变量时间序列预测(案例+源码)

这是我的第309篇原创文章。 一、引言 基于CNN&#xff08;卷积神经网络&#xff09;和Bi-LSTM&#xff08;双向长短期记忆网络&#xff09;的单变量时间序列预测是一种结合空间特征提取和时间依赖建模的方法。以下是一个基于Python和TensorFlow/Keras实现的示例&#xff0c;展…

C++ 高频面试题

C 初级面试题及其详细解答 1. 解释 C 中的基本数据类型。 解答&#xff1a; C 提供了几种基本数据类型&#xff0c;包括&#xff1a; int&#xff1a;整型&#xff0c;用于存储整数。float 和 double&#xff1a;浮点型&#xff0c;用于存储小数。char&#xff1a;字符型&am…

Android 强制使用移动网络访问接口

Android 强制使用移动网络访问接口_安卓连接wifi强制使用移动数据-CSDN博客 Android应用层实现恢复出厂设置功能_android7 intent 打开恢复出厂设置-CSDN博客

YOLOv8改进 | 主干网络| 可变形卷积网络C2f_DCN【CVPR2017】

&#x1f4a1;&#x1f4a1;&#x1f4a1;本专栏所有程序均经过测试&#xff0c;可成功执行&#x1f4a1;&#x1f4a1;&#x1f4a1; 专栏目录&#xff1a;《YOLOv8改进有效涨点》专栏介绍 & 专栏目录 | 目前已有40篇内容&#xff0c;内含各种Head检测头、损失函数Loss、B…

java SQL server 多实例的情况

而对于java&#xff0c;对付多个数据库实例就有些要注意的了&#xff1a; 首先&#xff0c;同样连接字符串上加上“\实例名”&#xff1a; jdbc:sqlserver://127.0.0.1\\mssqlserver2008;DatabaseNameLPT; 此处应去掉端口1433。因为连接数据库自命名实例的url中没有端口号1433…