SpringMvc 乱码问题及解决方案(全)

SpringMvc 乱码问题及解决方案_全

概述

每次搭建springmvc项目时总会遇到乱码问题,虽然网上也有很多写解决方案的,但好像都不全,今天在搭建项目事又遇到了,且情况和之前的还不一样,弄了好段时间才终于弄好了,现将乱码问题及其解决方案整理下,以便后续查找.当然若能给您起到一定的帮忙作用,那就更好了.

javaweb项目编码相关配置

  1. jsp页面: 在jsp页面中设置编码使用UTF-8,如下:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
  1. **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>  
  1. 数据库链接: 在数据库链接上增加编码设置,如mysql的配置(其他数据库的配置参见对应数据库的配置说明):
jdbc:mysql://localhost:3306/dbname?useUnicode=true&characterEncoding=UTF-8
  1. 数据库/数据表: 在创建数据库和数据表时设置编码,详细参见各个数据库的配置

以上四点配置完了之后,正常的post请求应该不会有乱码问题了,若还有,则需继续

  1. 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请求参数传入到后台时是乱码,返回的数据却不是乱码的现象,则需要下面的配置.

  1. 修改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 参数,如下图:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/shui878412/article/details/88605492