很简单很实用的一个过滤器,当前台JSP页面和JAVA代码中使用了不同的字符集进行编码的时候就会出现表单提交的数据或者上传/下载中文名称文件出现乱码的问题,那这个类就可以出场了。
web.xml中配置如下:
<filter>
<filter-name>Set UTF-8</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>
</filter>
<filter-mapping>
<filter-name>Set UTF-8</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
设置编码为utf-8;还有一个参数
forceEncoding------->当request中已经被指定了一个字符集的时候是否再将用endcoding对应的字符集设置到request中去。默认为false,意思是当request中指定了编码方式,则不适用用encoding指定的编码方式。
CharacterEncodingFilter中的过滤方法如下:
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
throws ServletException, IOException {<span style="white-space:pre">
</span><pre name="code" class="java" style="color: rgb(51, 51, 51); font-size: 14px; line-height: 28px;"> //当指定了encoding,且forceEncoding为false ,同时request中没有制定编码方式事,设置request和response的编码方式为encoding所指定的编码方式
if (this.encoding != null && (this.forceEncoding || request.getCharacterEncoding() == null)) {request.setCharacterEncoding(this.encoding);if (this.forceEncoding) {response.setCharacterEncoding(this.encoding);}}filterChain.doFilter(request, response);}