public class CharacterEncodingFilter implements Filter{
private String encoding;
private Boolean forceEncoding=false;
@Override
public void init(FilterConfig config) throws ServletException {
this.encoding=config.getInitParameter("encoding");
forceEncoding=Boolean.valueOf(config.getInitParameter("force"));
System.out.println("字符编码过滤器初始化");
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
//类型转换
HttpServletRequest req=(HttpServletRequest) request;
HttpServletResponse resp=(HttpServletResponse) response;
//设置编码
//1.应用中没有编码并且我自己设置了编码
//2.应用中已经有编码了,但是依然要使用我自己的编码;强制使用
if(hasLength(encoding)&&(req.getCharacterEncoding()==null||forceEncoding)) {
req.setCharacterEncoding(encoding);
}
//放行
chain.doFilter(req, resp);
}
private boolean hasLength(String str) {
return str!=null&&!"".equals(str.trim());
}
public void destroy() {
}
}
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>web.filter.CharacterEncodingFilter</filter-class>
<!-- 设置编码 -->
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
<!-- 是否强制使用改编码 -->
<init-param>
<param-name>force</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
如果在是否强制使用编码那里设置false,那人家还是会用自己的编码