Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 835|回复: 0

解决ssm项目表单数据提交到数据库乱码问题

[复制链接]
  • TA的每日心情
    奋斗
    2024-11-24 15:47
  • 签到天数: 804 天

    [LV.10]以坛为家III

    2053

    主题

    2111

    帖子

    72万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    726782
    发表于 2021-7-14 19:50:24 | 显示全部楼层 |阅读模式

    问题:在ssm整合的项目里,从前台页面获取表单数据存到数据库中乱码

    先说解决办法然后分析:问题出在form表单的提交方式上,我的web.xml配置过滤器都已经指定了编码集,为什么没有生效?原因是,对于在web.xml中配置的过滤器指定编码集只是对表单的post提交方式有效,而我的jsp页面form表单没有指定method,而对于表单没有指定提交方式,默认是get方式,也就是在浏览器的地址栏可以看到你提交的表单数据,指定form表单的提交方式为post就好了,不会出现乱码。不过在这之前要保证数据库编码集和连接数据库的url后面加上指定的编码集。

    之前没有遇到这个问题,正常的在jsp页面的表单中添加数据,点击提交,ssm项目中form表单的action配置的是controller中的mapping路径,ssm项目的流程是用户提交数据会根据用户的action中的路径找到controller中的mapping配置对应的方法,注意,这时候controller中的方法中的形参(一般是一个对象)就已经有值了,这里是spring mvc强大之处了,只要你的表单中的name属性和对象中的属性名一致,spring mvc就会将这些数据自动装入对象中,也就是在controller中方法的形参(一个对象)在从jsp页面跳转过来的时候就已经有值了。说了这么多看下图,当你从jsp页面过来的时候,在方法中输出对象的信息,是可以输出对象的属性值的。


    在web.xml中都已经配置了过滤器用来指定编码集,jsp页面也指定了编码集。

    问题就出现在了这里,在逐步的排查中,根据浏览器的调试页面查看表单传过来的数据发现没有乱码,怀疑是数据库那里乱码,但是所有的字段包括数据库都是utf-8的编码集,不可能有错,怀疑是在controller的addUser方法中调用了service中的方法的时候,在spring注入的时候乱码,但是当我写下上图中的代码(在方法的第一句输出对象的属性值)的时候,控制台输出的信息就是乱码的(一堆问号),问题的位置确定了,也就是在spring mvc装入属性值的时候就已经乱码,导致后来存入数据库的数据乱码。

    在我们配置的web.xml文件中的过滤器只对post方式提交有效,如果是get方式是不起作用的,如果想用get方式就需要到Tomcat根目录下找到conf中的server.xml文件,在Connector标签中加入URIEncoding="UTF-8",如下

    <Connector port="8080" protocol="HTTP/1.1"   
               connectionTimeout="20000"   
               redirectPort="8443" URIEncoding="UTF-8" />
    其实在表单提交上还是用post提交好些,像表单参数没有展示出来,还有就是没有url长度的限制,在以前看到的get请求的长度限制是255个字节,其实远远比这个长,不同的浏览器还有不同的长度限制,所以还不如指定post方式提交。


    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2025-2-1 00:54 , Processed in 0.090068 second(s), 29 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表