SpringMvc---设置请求编码格式和响应编码格式


 

get请求乱码

当get请求出现乱码,只需要到tomcat的conf目录下修改server.xml文件,在配置端口号的地方,设置端口号后加上,空格

URIEnconding="UTF-8"

 

post请求乱码

在web.xml文件中注册CharacterEncodingFilter过滤器【Spring自带的】,通过CharacterEncodingFilter过滤器设置请求和响应参数编码格式。

首先能看见CharacterEncodingFilter中有三个参数,其中encoding代表编码,另两个分别代表是否强制请求编码格式为xxx,是否强制响应编码格式为xxx。

 

在CharacterEncodingFilter源码【一部分】中:

private String encoding;
private boolean forceRequestEncoding;
private boolean forceResponseEncoding;
​
public CharacterEncodingFilter() {
    this.forceRequestEncoding = false;
    this.forceResponseEncoding = false;
}

 

 

然后在具体处理过滤请求的方法【doFilterInternal】中,可以看见在设置了encoding后就会将请求编码格式设置为你设置的请求编码格式。

在下面的判断中可以发现,当设置了请求参数后,第一个判断的判断条件中,它是判断,第一个条件默认是false,并没有对他修改,所以他是false ;第二个条件也没有设置,他的值为true,最后结果为true,这样就把请求编码格式改为UTF-8。

第二个判断,只有一个条件,就是得你自己在filter的初始化参数中定义【forceResponseEncoding】的值,当定义后,响应的编码格式就会变成你设置的格式。

protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
    String encoding = this.getEncoding();
    if (encoding != null) {
        if (this.isForceRequestEncoding() || request.getCharacterEncoding() == null) {
            request.setCharacterEncoding(encoding);
        }
​
        if (this.isForceResponseEncoding()) {
            response.setCharacterEncoding(encoding);
        }
    }
​
    filterChain.doFilter(request, response);
}

 

 

设置如下:

<!--设置请求编码和相应编码解决post请求的乱码问题-->
<!--使用CharacterEncodingFilter解决乱码问题,服务器启动时先初始化监听器在初始化过滤器,所以这个过滤器设置在哪里都不会影响他的初始化-->
    <filter>
        <filter-name>CharacterEncodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<!--设置请求编码,通过设置filter初始化参数,告诉CharacterEncodingFilter类修改请求编码-->
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
<!--设置响应编码,通过设置forceResponseEncoding的值告诉CharacterEncodingFilter类修改相应编码-->
        <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>
 

 

 

 

 

 

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM