在web.xml文件中配置过滤器
springMVC处理编码的过滤器一定要放到其他过滤器的前面,否则无效
<!--配置编码过滤器
在此之前不能获取任何请求参数,一但获取,编码过滤器就失效了
所以该过滤器写在最上面
-->
<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>
在CharacterEncodingFilter 类中有两者属性:
encoding
forceResponseEncoding
在服务器启动的时候,会读取web.xml里面的配置文件,我们把请求编码设置为utf-8,和相应编码设置为true就能避免编码乱码
public class CharacterEncodingFilter extends OncePerRequestFilter {
@Nullable
private String encoding;
private boolean forceRequestEncoding;
private boolean forceResponseEncoding;
继承类和重写类中的方法
底层执行过滤的方法,
@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);
}
//设置响应编码的类型,设置为true,默认为false
if (isForceResponseEncoding()) {
response.setCharacterEncoding(encoding);
}
}
filterChain.doFilter(request, response);
}