标题:SpringMVC解决中文乱码问题

当我们在使用SpringMVC时也许会碰到前端提交的数据或者数据库中取出来的数据变成乱码,下面提供几种方式来解决。

乱码是怎么产生的

我们自定义一个form表单作为参照来进行实验并且解决问题

<form action="/e/t1" method="post">
<input type="text" name="name"/>
<input type="submit"/>
</form>

这是我们定义的表单,呈现效果如下

当我们输入中文提交时,发现浏览器中呈现的是乱码
首先我们先通过常用的设置浏览器字符编码尝试解决

//设置编码
request.setCharacterEncoding("utf-8");

然后再重新部署web项目,重新提交表单得到的结果任然是乱码

在浏览器中按下F12审查元素提交发现 表单在提交的时候中文数据就以及变成了乱码。

最终方案是我们通过过滤器来解决

SpringMVC给我们提供了一个过滤器,我们只需要在web.xml中配置使用即可

<filter><filter-name>encoding</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>encoding</filter-name><url-pattern>/ *</url-pattern>
</filter-mapping>

在某些极端情况下,SpringMVC自带的过滤器对get请求的支持失效

处理方法:
1、修改tomcat配置文件 :设置编码!

 <Connector URIEncoding="utf-8" port="8080" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443" />

如果仍然无法解决,可以使用下面自定义的过滤器,不过一般情况下SpringMVC自带的足以解决大部分问题。(此代码为转载)

package com.kuang.filter;import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.Map;/**
* 解决get和post请求 全部乱码的过滤器
*/
public class GenericEncodingFilter implements Filter {@Overridepublic void destroy() {}@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {//处理response的字符编码HttpServletResponse myResponse=(HttpServletResponse) response;myResponse.setContentType("text/html;charset=UTF-8");// 转型为与协议相关对象HttpServletRequest httpServletRequest = (HttpServletRequest) request;// 对request包装增强HttpServletRequest myrequest = new MyRequest(httpServletRequest);chain.doFilter(myrequest, response);}@Overridepublic void init(FilterConfig filterConfig) throws ServletException {}}//自定义request对象,HttpServletRequest的包装类
class MyRequest extends HttpServletRequestWrapper {private HttpServletRequest request;//是否编码的标记private boolean hasEncode;//定义一个可以传入HttpServletRequest对象的构造函数,以便对其进行装饰public MyRequest(HttpServletRequest request) {super(request);// super必须写this.request = request;}// 对需要增强方法 进行覆盖@Overridepublic Map getParameterMap() {// 先获得请求方式String method = request.getMethod();if (method.equalsIgnoreCase("post")) {// post请求try {// 处理post乱码request.setCharacterEncoding("utf-8");return request.getParameterMap();} catch (UnsupportedEncodingException e) {e.printStackTrace();}} else if (method.equalsIgnoreCase("get")) {// get请求Map<String, String[]> parameterMap = request.getParameterMap();if (!hasEncode) { // 确保get手动编码逻辑只运行一次for (String parameterName : parameterMap.keySet()) {String[] values = parameterMap.get(parameterName);if (values != null) {for (int i = 0; i < values.length; i++) {try {// 处理get乱码values[i] = new String(values[i].getBytes("ISO-8859-1"), "utf-8");} catch (UnsupportedEncodingException e) {e.printStackTrace();}}}}hasEncode = true;}return parameterMap;}return super.getParameterMap();}//取一个值@Overridepublic String getParameter(String name) {Map<String, String[]> parameterMap = getParameterMap();String[] values = parameterMap.get(name);if (values == null) {return null;}return values[0]; // 取回参数的第一个值}//取所有值@Overridepublic String[] getParameterValues(String name) {Map<String, String[]> parameterMap = getParameterMap();String[] values = parameterMap.get(name);return values;}
}

然后在XML中配置过滤器即可

乱码问题,需要平时多注意,在尽可能能设置编码的地方,都设置为统一编码 UTF-8。

SpringMVC解决中文乱码问题相关推荐

  1. SpringMVC 解决中文乱码的过滤器

    <!--配置解决中文乱码问题的过滤器--><filter><filter-name>characterEncodingFilter</filter-name& ...

  2. 配置解决中文乱码的过滤器

    <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html ...

  3. 解决中文乱码和自定义类型转换器

    一.解决maven项目创建过慢的问题: archetypeCatalog       internal 二.解决参数中文乱码的解决 在web.xml中配置Spring提供的过滤器类 <!--配置 ...

  4. springmvc字符 中文乱码问题

    springmvc字符 中文乱码问题 1.字符过滤器 输入中文测试,发现乱码 以前乱码问题通过过滤器解决 , 而SpringMVC给我们提供了一个过滤器 , 可以在web.xml中配置,修改了xml文 ...

  5. 详解Spring MVC请求参数类型,解决中文乱码问题,自定义类型转换器,Spring MVC相关注解

    #SpringMVC SpringMVC请求 简单类型 简单类型包括:基本类型,基本类型的包装类型,字符串 编写Controller @RequestMapping("/param" ...

  6. sqlserver mysql 乱码_SQLServer数据库如何解决中文乱码问题?方法有哪些?

    很多使用数据库的人都知道,在安装SQLServer数据库是,如果设置不当就会出现一些中文乱码.主要原因是,很多人在使用默认安装系统时,一般不会考虑到默认排序的规则是拉丁文的排序规则,只是点击下一步,在 ...

  7. php utf-8读取,PHP读取文件,解决中文乱码UTF-8的方法分析

    PHP读取文件,解决中文乱码UTF-8的方法分析,方法,中文,操作技巧,文本,本文 PHP读取文件,解决中文乱码UTF-8的方法分析 易采站长站,站长之家为您整理了PHP读取文件,解决中文乱码UTF- ...

  8. java txt中文乱码,JAVA读取TXT文件 可解决中文乱码问题

    import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.I ...

  9. AJAX解决中文乱码问题

    一.解决中文乱码问题的方法1:页面端发出的数据作一次encodeURI,如:encodeURI($("#userName").val()                       ...

最新文章

  1. synchronized为可重入锁
  2. Launcher代码大全
  3. hadoop1.2.1伪分布模式安装教程
  4. spfa 判断负环 (转载)
  5. VS2013安装OpenCV4.1版本并搭建一个小程序
  6. Spring Boot使用缓存功能
  7. TXSQL企业级特性揭秘:加密与审计
  8. 城市大数据:内涵、服务架构与实施路径
  9. Linux学习(六):命令与文件的查阅,Root用户和个人用户使用which命令的差别...
  10. linux下使用yum安装Apache+php+Mysql+phpMyAdmin
  11. Docker学习总结(21)——Docke网络bridge详解
  12. 定时线程的使用 java_Java线程Timer定时器用法详细总结
  13. 封装和@property
  14. GitHub通过Git上传文件(夹)
  15. 震惊!99%的网络工程师都不知道的组播问题
  16. waves效果器_学会EQ效果器,浑厚亮嗓又大气
  17. Python字符串杂谈
  18. php网站系统说明,PHP电影网站系统光线CMS(GXCMS)模板制作标签说明
  19. MC(monitorcat) 监控军刀
  20. 计算机主板电池没电什么情况,主板电池没电会怎么样-电脑主板坏了会出现什么样的情况?...

热门文章

  1. mysql splunk_Splunk初识
  2. python 魔法函数 运行时_python内置函数和魔法函数
  3. 南部翔宇实验小学:阅读名著 传承经典
  4. ModuleNotFoundError: No module named ‘tensorflow_hub‘
  5. 微信公众号授权链接有#的问题
  6. MySQL添加用户并授予权限
  7. 在线计算机七年级,《计算机的组成》ppt课件初中信息技术人教版七年级上册.ppt...
  8. Django 教程之配置后台管理页面xadmin
  9. Node.js中multer的相关操作
  10. 小程序隐私保护指引数值参考