springmvc字符编码过滤器CharacterEncodingFilter浅析

一、在web.xml中的配置

    <!-- characterEncodingFilter字符编码过滤器 -->
    <filter>
        <filter-name>characterEncodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>characterEncodingFilter</filter-name>
        <!--这里的url根据你项目需求自己改-->
        <url-pattern>/</url-pattern>
    </filter-mapping>

二、CharacterEncodingFilter过滤器类浅析

打开该类源码,可以看到该类有三个类属性

private String encoding;

private boolean forceRequestEncoding = false;

private boolean forceResponseEncoding = false;

主要方法只有一个,也就是下面这个

    @Override
protected void doFilterInternal(
        HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
        throws ServletException, IOException {

    String encoding = getEncoding();
    if (encoding != null) {
        if (isForceRequestEncoding() || request.getCharacterEncoding() == null) {
            request.setCharacterEncoding(encoding);
        }
        if (isForceResponseEncoding()) {
            response.setCharacterEncoding(encoding);
        }
    }
    filterChain.doFilter(request, response);
}

可以看到这个作用器的作用就是在request和response没有设置字符编码方式的时候设置一个编码方式。注意

if (isForceResponseEncoding()) {
    response.setCharacterEncoding(encoding);
}

是在

filterChain.doFilter(request, response);

之前执行的,也就是说设置的是response的默认编码方式,可以自己在代码里修改为其他的编码方式,网上有些文档说的是设置的是最终的编码方式,这是错的。


原创不易,转帖请注明出处—shizhongqi

猜你喜欢

转载自blog.csdn.net/lianjunzongsiling/article/details/77926370
今日推荐