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