springmvc字符编码过滤器CharacterEncodingFilter浅析

来源:互联网 发布:网络博客游戏怎么举报 编辑:程序博客网 时间:2024/05/22 01:33

一、在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;

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

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

原创粉丝点击