java代码
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class EncodingFilter implements Filter {
private String encoding = "UTF-8";
protected FilterConfig filterConfig;
public void init(FilterConfig filterConfig) throws ServletException {
this.filterConfig = filterConfig;
String defaultEncoding = filterConfig.getInitParameter("defaultEncoding");
// 本过滤器默认编码是UTF-8,但也可以在web.xml配置文件里设置自己需要的编码
if (defaultEncoding != null) {
encoding = filterConfig.getInitParameter("defaultEncoding");
}
}
public void doFilter(ServletRequest srequset, ServletResponse sresponse, FilterChain filterChain)
throws IOException, ServletException {
// 强制转换为Http方式的
HttpServletRequest request = (HttpServletRequest) srequset;
HttpServletResponse response = (HttpServletResponse) sresponse;
// 设置 request和response的编码
request.setCharacterEncoding(encoding);
response.setCharacterEncoding(encoding);
filterChain.doFilter(srequset, sresponse);
}
public void destroy() {
this.encoding = null;
}
}
其中defaultEncoding
是在web.xml
中配置的,web.xml
中相关配置如下:
<filter>
<filter-name>EncodingFilter</filter-name>
<filter-class>com.example.filter.EncodingFilter</filter-class>
<init-param>
<param-name>defaultEncoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>EncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>