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>
posted @ 2022-03-16 20:31  都几点了,还在睡  阅读(386)  评论(0编辑  收藏  举报