前提:在我们使用SSM框架搭建项目中,经常会出现前端界面往数据库插入中文显示???等乱码问题,解决思路如下
- 前端jsp界面保证字符编码为utf-8:
<%@ page language="java" contentType="text/html; charset=UTF-8"
- 采用断点调试,观察在SpringMVC中是否能正常接收并显示中文参数,如果显示乱码,说明SpringMVC对接收的参数采取了自己默认的编码方式:ISO-8859-1
- 然后我们需要在web.xml配置文件中配置一个过滤器,将请求参数在SpirngMVC中的编码方式指定为utf-8:
<filter>
<filter-name>encodingFilter</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>
<init-param>
<param-name>forceRequestEncoding</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>forceResponseEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
- 但是上述过滤器仅解决了post请求的乱码问题,为了解决get请求的乱码问题,我们需要在tomcat的配置文件server.xml中找到对应端口的定义处添加编码格式utf-8:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
URIEncoding="UTF-8"/>
- 最关键的点在这里:如果你是更改的tomcat安装目录的server.xml配置文件,那么在用eclipse运行项目时会发现配置没起作用,其实是因为eclipse在运行项目时是用的eclipse中配置的tomcat,那么问题就好解决了,打开eclipse中的tomcat配置文件,改为上述配置即可。
- 如果此时后台可以正常显示,但是插入数据库仍显示乱码,说明那就是数据库的问题了。我们需要依次检查并修改数据库编码、表编码、列编码为:UTF-8
- 开始我以为做到这一步就可以正常显示了,但是亲测,这还有一个大坑要填。仅在数据库中设置编码是不够的,我们还需要针对mybatis做数据更新产生的乱码处理,在数据库配置后加编码限制:
jdbc.url= jdbc:mysql://localhost:3306/crm?useUnicode=true&characterEncoding=utf-8
附:中文乱码的两种情况:
- 请求时:前------>后
因为springmvc会对请求中的参数采取自己默认的编码方式:ISO-8859-1,所以需要做上述配置来解决前端界面传入中文字符到后端出现乱码的问题。
- 响应时:后------>前
大多数情况下springmvc在响应视图时会经过视图解析器识别返回的jsp界面响应编码格式为utf-8,所以不需要我们进行响应字符转码;但是当springmvc的返回值类型为void时,这种情况下是不经过springmvc视图解析器的,所以需要我们自行转码!如下:
response.setCharacterEncoding("utf-8");
response.setContentType("application/json;charset=utf-8");
response.getWriter().write("");
ps:快两个月没写博客了,感觉自己在基地的这几个月变懒了。