springMVC框架下编码与解码(中文乱码)

编写项目中突然用到了中文,然后发生了一大堆的乱码,于是在百度上奋斗良久,终于解决了问题。

项目在java8环境下搭建,使用spring4.3.6

1)前端页面部分

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>登录--统一后台管理系统</title>
    <link rel="stylesheet" href="../font/iconfont/iconfont.css">
    <link rel="stylesheet" href="../css/basic.css">
    <link rel="stylesheet" href="../css/login.css">
</head>
<body>
    <div class="login-container">
        <div class="login-main">

<meta>标签设置页面的编码方式,html5之后可以省略写成<meta charset="UTF-8">,是<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />的简略缩写。

2)服务器端

网上经常看到的是

    <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>

然而使用之后发现并没有生效,查看org.springframework.web.filter.CharacterEncodingFilter包后发现了大问题。

public class CharacterEncodingFilter extends OncePerRequestFilter {

	private String encoding;

	private boolean forceRequestEncoding = false;

	private boolean forceResponseEncoding = false;


	/**
	 * Create a default {@code CharacterEncodingFilter},
	 * with the encoding to be set via {@link #setEncoding}.
	 * @see #setEncoding
	 */
	public CharacterEncodingFilter() {
	}

	/**
	 * Create a {@code CharacterEncodingFilter} for the given encoding.
	 * @param encoding the encoding to apply
	 * @since 4.2.3
	 * @see #setEncoding
	 */
	public CharacterEncodingFilter(String encoding) {
		this(encoding, false);
	}

forceEncoding是在request请求已有编码方式时,强行替换编码方式的条件,默认为false,然而这里被拆分成forceRequestEncoding和forceResponseEncoding两个部分,所以web.xml需要进行调整,调整之后为

<!-- 字符过滤 -->
	<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>

修改完毕后继续测试,依旧乱码!!!

百度之后发现,编码器如果没有正确设置,哪怕用了过滤器也会乱码,继续修改

设置完毕在测试,依旧乱码!!!!!

继续百度,终于发现,request.setCharacterEncoding()方法只针对post方法有效,对于get方法emmm,修改之后终于没有讨厌的乱码了。

至此问题解决!

ps:get方法中文乱码,如果有什么好的解决办法希望能教我一下,感谢!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章