SpringMvc 乱码问题及解决方案_全
概述
每次搭建springmvc项目时总会遇到乱码问题,虽然网上也有很多写解决方案的,但好像都不全,今天在搭建项目事又遇到了,且情况和之前的还不一样,弄了好段时间才终于弄好了,现将乱码问题及其解决方案整理下,以便后续查找.当然若能给您起到一定的帮忙作用,那就更好了.
javaweb项目编码相关配置
- jsp页面: 在jsp页面中设置编码使用UTF-8,如下:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
- **web.xml:**在web.xml中配置编码过滤器,如下:
<filter>
<filter-name>characterEncodingFilter</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>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
- 数据库链接: 在数据库链接上增加编码设置,如mysql的配置(其他数据库的配置参见对应数据库的配置说明):
jdbc:mysql://localhost:3306/dbname?useUnicode=true&characterEncoding=UTF-8
- 数据库/数据表: 在创建数据库和数据表时设置编码,详细参见各个数据库的配置
以上四点配置完了之后,正常的post请求应该不会有乱码问题了,若还有,则需继续
- StringHttpMessageConverter重写: springmvc的StringHttpMessageConverter使用的默认编码是"ISO-8859-1",且springmvc之前的版本应该是有bug,无法修改此编码(后续的版本是否有修正此bug不太清楚),所以只能重写此类,以修改编码.代码片段如下:
public class StringHttpMessageConverter extends AbstractHttpMessageConverter<String> {
public static final Charset DEFAULT_CHARSET = Charset.forName("ISO-8859-1");
private final Charset defaultCharset;
private final List<Charset> availableCharsets;
private boolean writeAcceptCharset = true;
....
}
网上还有说可以在springMvc的配置文件中修改此类的,但是我配置了好像不起作用,参见https://blog.csdn.net/wangyangbto/article/details/48804155
以上5点配置完之后,所有的post请求应该就都没有问题了,但可能会出现get请求参数传入到后台时是乱码,返回的数据却不是乱码的现象,则需要下面的配置.
- 修改tomcat的配置文件server.xml: 如下(其他的服务器应该也有类似的配置):
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URIEncoding="UTF-8" useBodyEncodingForURI="true" />
增加URIEncoding=“UTF-8” useBodyEncodingForURI="true"配置.
但是若您是maven项目,且使用的是maven中的tomcat插件,则需要在启动命令中增加-Dmaven.tomcat.uriEncoding=UTF-8 参数,如下图: