参考资料:http://m.oschina.net/blog/376339

乱码的本质是涉及到编解码的几个过程所用的编码方式不一样。

一、从服务端到客户端

在整个服务器端数据返回到浏览器的过程中,涉及到三次编码:

第一次:java文件以什么编码存放在硬盘中

第二次:字符串是以什么编码方式转换成字节数组的,若未指定@RequestMapping的produces属性,同时也未给StringHttpMessageConverter指定编码方式,则字符串默认是以ISO-8859-1形式转换成字节数组的。

    可以通过produces = "text/html;charset=UTF-8"来指定编码:@RequestMapping(value = "/register", method = RequestMethod.POST, produces = "text/html;charset=UTF-8")

第三次:数据发送给浏览器后,浏览器接收到一堆字节数组,浏览器又是以什么编码方式来解码的。

只有三者统一才不会出现乱码。具体见上述参考文章。

二、客户端到服务端

此过程涉及到两次编码:

第一次:当你输入http://localhost:8080/test?name=中国   的时候,浏览器将以什么样的编码方式将中国转化成字节数组,这称为URL编码 。不同的浏览器会采用不同编码方式来将 中国 转换成字节数组,一般为UTF-8;而程序中按默认编码对中文进行url encode,中文环境一般为GBK,这点应注意。

第二次:当浏览器发送请求时,服务器是以请求的content-type来解析请求数据的,当浏览器请求没有指定content-type时,不同的服务器应该有不同的策略,并且可以进行设置。

如Tomcat服务器,默认采用的是ISO-8859-1(不支持中文),可以通过修改Tomcat的conf/server.xml文件,在Connector标签中增加 URIEncoding='UTF-8' 来修改Tomcat的默认编码解析方式(在Tomcat 8中默认已为UTF-8,这个应特别注意,否则经下面所说的代码方法处理后的代码放在Tomcat8反而会乱码,笔者就因为这个原因导致本机能正确跑的代码放在生产环境中后跑的结果不正确,浪费了好多时间);

对于默认采用的是ISO-8859-1的服务器,此也可以通过在代码中解码再编码数据来解决乱码:

// GET方式:http的url传过来的数据Tomcat默认是用iso-8859-1(不支持中文)解码的,故数据先用iso-8859-1编码得到原文后再用与url相同的编码方法解码
userName = new String(userName.getBytes("iso8859-1"), "utf-8");

三、java Servlet中中文乱码

1、post

对于post方法中的乱码,浏览器通常是以UTF-8字符编码将表单数据传输到服务器端的,因此服务器也需要设置以UTF-8字符编码进行接收。

可以通过request.setCharacterEncoding("utf-8");解决;或在代码中解码再编码数据来解决乱码

2、get

在代码中解码再编码数据来解决乱码

Spring MVC GET 从客户端数据到服务器端的乱码和服务器端数据到客户端的乱码相关推荐

  1. 基于spring mvc+bootstrap 集成的返利平台 新增内容-自动对接京东数据

    本系统基于最新版的spring mvc+adminlte构成,使用ant来做打包工具.在系统中,大量使用了开源的代码,再次特别感谢这些开源工作者. 后端使用了 spring mvc mybatis,目 ...

  2. Spring MVC数据验证

    文章目录 客户端验证 服务器端验证 自定义 Spring 验证器 Validator接口 ValidationUtils 类 Spring MVC验证器应用实例 JSR 303 验证 Hibernat ...

  3. Spring MVC和Thymeleaf:如何从模板访问数据

    在典型的Spring MVC应用程序中, @Controller类负责使用数据准备模型映射并选择要呈现的视图. 该model map允许视图技术的完整抽象,对于Thymeleaf而言,它被转换为Thy ...

  4. 基于佟刚老师视频教程的Spring MVC数据类型转换学习总结

    基于Spring MVC数据类型转换的学习笔记总结 问题 页面中数据格式为字符串格式,后台pojo中对应的类型可能为另外一种对象. 如: 在前台页面输入一个固定格式的时间字符串,在后台接收为一个jav ...

  5. 浅谈Spring MVC知识

    关于MVC框架,我相信大家都不陌生,都会说也就是模型-视图-控制器这三层的框架结构,如果你参加面试的时候考官会问:"MVC框架是什么?你说一说."其实我们都知道这个问题还需要问的, ...

  6. Spring MVC拦截器~~~登陆验证拦截

    [ 30 分 钟 轻 松 入 门 Spring MVC][web 三 大 组 件 之 ~ ~ Filter 过 滤 器] Interceptor 拦截器学习: 1.了解spring mvc拦截器的概念 ...

  7. spring mvc 基于maven的完整demo

    记录一下使用maven构建第一个spring mvc工程的经过. 环境: eclipse Kepler Service Release 2 jdk 1.7 tomcat7.0.52 这里假定eclip ...

  8. Spring MVC,Ajax和JSON第3部分–客户端代码

    如果您一直关注有关Spring,Ajax和JSON的简短博客系列,那么您会回想起我到目前为止已经创建了一个Spring MVC Web应用程序,该应用程序显示一个表单,该表单允许用户选择一堆项目并向服 ...

  9. Spring MVC,Ajax和JSON第2部分–服务器端代码

    在上一个博客中,我说过我将谈论Spring,Ajax和JSON,但是没有. 原因是我想使用(很少)可信的购物网站场景来设置场景. 在这种情况下,当用户单击"电子商务"页面链接时,服 ...

  10. Spring MVC数据验证简介

    用户的输入一般是随意的,为了保证数据的合法性,数据验证是所有 Web 应用必须处理的问题. 在 Spring MVC 框架中有以下两种方法可以验证输入数据: 利用 Spring 自带的验证框架. 利用 ...

最新文章

  1. 心脏病预测模型(基于Python的数据挖据)
  2. linux 图形界面 X Server 关闭 启动
  3. Linux下的静态库、动态库和动态加载库
  4. 计算机组成解疑补漏之SDR、DDR及相关计算
  5. 深度学习核心技术精讲100篇(三十五)-美团餐饮娱乐知识图谱——美团大脑揭秘
  6. python 压缩文件 调用7z_Python:如何从Python压缩的7z文件中读取一行?
  7. PCM信号是什么信号?
  8. Linux Shell脚本_禁止定时任务发送邮件
  9. 圆管当量直径_截面相同时,正方型截面的当量直径大于圆管直径。( )。
  10. GMaps.js - 轻松集成Google Maps的jQuery插件
  11. scala数据类型_Scala数据类型示例教程
  12. Android开发工程师,前行路上的14项技能
  13. 从30天到1天,专业视频制作背后的技术探索之路
  14. 深度学习中的注意力机制
  15. 塔夫茨计算机科学,塔夫茨大学计算机科学研究生语言及申请要求-费用-课程设置...
  16. iOS限制输入表情(emoji)
  17. pytorch加载自己的数据集,数据集载入-视频合集
  18. onblur事件不支持冒泡的解决办法
  19. 谁给国潮榜样的他“抄下去”的理由
  20. 对不起,我爱你黄陈晨

热门文章

  1. Ecshop购物流程结算步骤 显示商品缩略图
  2. 用chattr保护文件系统的安全
  3. 强连通 Tarjan
  4. Java的12个语法糖【转】
  5. X-007 FriendlyARM tiny4412 u-boot移植之内存初始化
  6. Java RTTI运行时类型识别
  7. 求1-100之间的所有素数
  8. Javascript模块规范(CommonJS规范AMD规范)
  9. jquery 插件
  10. [正则表达式]文本框输入内容控制