//将request中的文字转换成UTF-8格式,需要扩展Filter接口
public class SetCharacterEncodingFilter implements Filter {
protected String encoding;
protected FilterConfig filterConfig;
protected boolean ignore;
//构造函数,初始化变量
public SetCharacterEncodingFilter() {
encoding = null;
filterConfig = null;
ignore = true;
}
//销毁变量
public void destroy() {
encoding = null;
filterConfig = null;
}
//转码
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
if (ignore || request.getCharacterEncoding() == null) {
String encoding = selectEncoding(request);
if (encoding != null) {
//设定编码方式
request.setCharacterEncoding(encoding);
}
}
//调用请求,转向下一个Filter
chain.doFilter(request, response);
}
//初始化
public void init(FilterConfig filterConfig) throws ServletException {
this.filterConfig = filterConfig;
//获得编码方式,信息从Web.xml文件读取(后面有代码可参照)
encoding = filterConfig.getInitParameter("encoding");
//获得ignore的值
String value = filterConfig.getInitParameter("ignore");
if (value == null) {
ignore = true;
} else if (value.equalsIgnoreCase("true")) {
ignore = true;
} else if (value.equalsIgnoreCase("yes")) {
ignore = true;
} else {
ignore = false;
}
}
//选择编码方式
protected String selectEncoding(ServletRequest request) {
return encoding;
}
}
Web.xml代码:
<filter>
<filter-name>characterEncoding</filter-name>
<filter-class>xxxx.xxxx.filter.SetCharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>