问题:在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. CentOS7网卡命名规则

    CentOS6之前基于传统的命名方式如:eth1,eth0.... Centos7提供了不同的命名规则,默认是基于固件.拓扑.位置信息来分配.这样做的优点是命名是全自动的.可预知的,缺点是比eth0. ...

  2. 网络基础Cisco路由交换二

    三层交换技术 作用: 使用三层交换技术实现VLAN间通信. 三层交换=二层交换+三层转发 基于CEF的快速转发 主要包含两个转发用的信息表: 转发信息库(FIB):FIB类似于路由表,包含路由表中转发 ...

  3. Java中的Lock与synchronized

    并发编程学习笔记之Lock与synchronized 一.什么是可重入锁 Lcok在Java中是一个接口,一般在面试问题中问到的可能是ReentrantLock与synchronized的区别.Ree ...

  4. 理解Android DecorView

    一.DecorView为整个Window界面的最顶层View. 二.DecorView只有一个子元素为LinearLayout.代表整个Window界面,包含通知栏,标题栏,内容显示栏三块区域. 三. ...

  5. javaWeb学习之Listener监听

    ] 一.监听器Listener javaEE包括13门规范 在课程中主要学习 servlet技术 和 jsp技术 其中 servlet规范包括三个技术点:servlet  listener  filt ...

  6. Hibernate【映射】知识要点

    前言 前面的我们使用的是一个表的操作,但我们实际的开发中不可能只使用一个表的...因此,本博文主要讲解关联映射 集合映射 需求分析:当用户购买商品,用户可能有多个地址. 数据库表 我们一般如下图一样设 ...

  7. 21个DOS常用命令

    DOS,可别不知道DOS在哪里运行,有好几种方法1.开始菜单---程序---附件---命令提示符2.开始菜单---运行---打命令CMD 一.常用DOS命令(1)cd..                ...

  8. 【BZOJ2431】逆序对数列(动态规划)

    [BZOJ2431]逆序对数列(动态规划) 题面 Description 对于一个数列{ai},如果有i<j且ai>aj,那么我们称ai与aj为一对逆序对数.若对于任意一个由1~n自然数组 ...

  9. [BZOJ1607] [Usaco2008 Dec] Patting Heads 轻拍牛头 (数学)

    Description 今天是贝茜的生日,为了庆祝自己的生日,贝茜邀你来玩一个游戏. 贝茜让N(1≤N≤100000)头奶牛坐成一个圈.除了1号与N号奶牛外,i号奶牛与i-l号和i+l号奶牛相邻.N号 ...

  10. SFTP环境搭建及客户代码调用公共方法封装

    一.背景 在开发应用软件的过程中,广泛使用FTP在各子系统间传送文本数据.但FTP存在安全问题,开放到外网存在安全漏洞,容易被攻击.替换方案是使用SFTP,SFTP提供更高的安全性,当然传输的效率也会 ...