SpringMVC框架实践中出现的中文乱码问题解决,为什么POST请求乱码?
在练习SpringMVC框架的时候,对于前端的get或post请求时,我们总是碰到get请求方式中文正常编译,但是对于post的请求,总是会出现乱码的问题。如何解决呢,添加过滤器的配置即可。
在web.xml中配置过滤器就好了。代码在后边:
那具体产生的原因是?
SpringMVC的底层其实就是Servlet的实现。
浏览器向服务器发送请求,是以请求协议包的形式完成的,请求协议包结构如下:
当请求协议包进到服务器端之后,get请求方式,参数信息包裹在请求头中,Http服务器用utf-8字符集进行解码,而对于post的请求方式,参数信息包裹在请求体中,Http服务器用的ISO-8859-1字符集进行解码(这是东欧语系),所以就会产生post请求乱码。
<!--注册声明过滤器,解决post请求乱码问题-->
<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>
<!--强制请求对象(HttpServletRequest)encoding编码的值-->
<init-param>
<param-name>forceRequestEncoding</param-name>
<param-value>true</param-value>
</init-param>
<!--设置强制应答对象(HttpServletResponse)的编码值-->
<init-param>
<param-name>forceResponseEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<!--强制所有请求都要通过该过滤器-->
<url-pattern>/*</url-pattern>
</filter-mapping>