一什么是CharacterEncodingFilter
是spring内置过滤器的一种,用来指定请求或者响应的编码格式。在web开发中经常被从来使用
用法
在web.xml中配置好即可
<filter>
<filter-name>CharacterEncodingFilter</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>
<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>
源码
这里有三个参数,@Nullable表示可以为空,可以不穿,我们传了就用传入的UTF-8,下边两个参数分别是请求和响应的编码是否设置的Boolean变量
public class CharacterEncodingFilter extends OncePerRequestFilter {
@Nullable
private String encoding;
private boolean forceRequestEncoding;
private boolean forceResponseEncoding;
既然是一个过滤器我们就要找他的doFilter方法,看他的父类OncePerRequestFilter的doFilter方法会集成给CharacterEncodingFilter,每当执行时都回去找这个方法
public class CharacterEncodingFilter extends OncePerRequestFilter
他的doFilter方法中做了
this.doFilterInternal(httpRequest, httpResponse, filterChain);
那我们在回来看这个doFilterInternal方法,其实看他的参数就可以了FilterChain就知道这个是执行过滤的方法
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);
}
显示获取我们传入的encoding,不等于空就进来,然后一个判断我们第一个参数是false,第二个参数获取编码,饿哦没没有设置过,所以后边为true,进来之后,设置reques请求编码为我们传入的,第二个判断是相应是否为true,我们设置了为true进去设置响应也为UTF-8 搞定