问题:在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方式提交。

解决ssm项目表单数据提交到数据库乱码问题的更多相关文章

  1. 【ASP.NET 问题】System.InvalidOperationException: 对象的当前状态使该操作无效 【大量表单数据提交】错误解决

    出现的问题描述: 当页面的数据量比较大时,出现异常,详细信息: System.InvalidOperationException: 对象的当前状态使该操作无效 问题的原因:出现这个异常的原因是因为微软 ...

  2. Java中上传文件和表单数据提交如何保持数据的一致性?

    学生申请学科竞赛活动,表单中有学科竞赛的申报信息和部分附件,需要做到将上传文件和表单数据提交保持一致性. 将上传文件和插入表单数据放到事务汇总去处理,由于表单的数据我们可以控制,但是上传的文档不好控制 ...

  3. SSM获取表单数据插入数据库并返回插入记录的ID值

    以下指示插入操作以及获取记录值的ID的部分操作代码!!! 首先是简单的表单实现 <%@ page language="java" contentType="text ...

  4. 多个表单数据提交下的serialize()应用

    在实际开发场景中,难免遇到需要多个表单的数据传递问题. 之所以要进行多表单的数据传递是因为可以进行数据分组,便于数据的维护. 这个时候,出于不依赖jquery的考虑,有一个原生js函数来解决这个问题无 ...

  5. django(7)modelform操作及验证、ajax操作普通表单数据提交、文件上传、富文本框基本使用

    一.modelForm操作及验证 1.获取数据库数据,界面展示数据并且获取前端提交的数据,并动态显示select框中的数据 views.py from django.shortcuts import ...

  6. SSM项目实现连接两个mysql数据库

    最近做项目需要用到另一个数据库的内容,多方查找终于实现了功能. 我们都知道,在SSM框架中,我们在applicationContext.xml配置文件中添加数据源就可以实现数据库增删改查,但是只能连接 ...

  7. PHP的两种表单数据提交方式

    1 通过隐藏表单提交 //通过隐藏表单提交 if ($_POST['action'] == 'register'){ echo '你提交了数据'; exit(); } ?> <!DOCTY ...

  8. asp.net 表单数据提交,常见方式与错误总结

    在ASP中,我们通常把表单提交到另外一个页面(接受数据页面).但是在ASP.NET中,服务端表单通常都是提交到本页面的,如果我设置 form1.action="test.aspx" ...

  9. 解决表单GET提交后台数据乱码问题

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/ForeverCjl/article/details/36180933     ​在页面上提交数据到s ...

随机推荐

  1. java读取数据写入txt文件并将读取txt文件写入另外一个表

    package com.xsw.test; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.F ...

  2. 【Unity3D】Unity3D开发《我的世界》之三、创建一个Chunk

    转载请注明出处:http://www.cnblogs.com/shamoyuu/p/unity_minecraft_03.html 一.引入int类型的Vector3 我们都知道Unity3D里Vec ...

  3. 用DirectDraw封装的位图动画类

    头文件 [cpp] view plaincopyprint? #pragma once #include <vector> using namespace std; #include &l ...

  4. 【linux】linux下网络的配置

    linux网络的配置 一.配置网络vi  /etc/sysconfig/network 配置网络vi /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE= ...

  5. 常用YUV转RGB代码

    常用YUV转RGB [java] view plaincopyprint? public class YuvToRGB { private static int R = 0; private stat ...

  6. zTree实现地市县三级级联数据库映射

    zTree实现地市县三级级联数据库映射 Province.hbm.xml: <?xml version="1.0" encoding="UTF-8"?&g ...

  7. 资料--Linux开发

    <Linux/UNIX系统编程手册>凯利斯克 (Michael Kerrisk) <UNIX环境高级编程>(第2版),史蒂文斯著 <深入理解 Linux 内核>(第 ...

  8. ASP.NET CSS 小结

    1.ASP.NET 引用CSS 1.Site.master里面设置webopt <webopt:bundlereferencerunat="server"path=" ...

  9. springboot--如何优雅的使用mybatis

    这两天启动了一个新项目因为项目组成员一直都使用的是mybatis,虽然个人比较喜欢jpa这种极简的模式,但是为了项目保持统一性技术选型还是定了 mybatis.到网上找了一下关于spring boot ...

  10. 【BZOJ1013】球形空间产生器(高斯消元)

    [BZOJ1013]球形空间产生器(高斯消元) 题面 Description 有一个球形空间产生器能够在n维空间中产生一个坚硬的球体.现在,你被困在了这个n维球体中,你只知道球 面上n+1个点的坐标, ...