package com.common.utils;
import javax.servlet.*;
import java.io.IOException;
public class SetCharacterEncodingFilter implements Filter {
protected String encoding = null; //编码方式
protected FilterConfig filterConfig = null; //参数配置对象
rotected boolean ignore = true; //是否采用改编码
//读取两个参数的值
public void init(FilterConfig filterConfig) throws ServletException {
this.filterConfig = filterConfig;
this.encoding = filterConfig.getInitParameter("encoding");
String value = filterConfig.getInitParameter("ignore");
if (value == null)
this.ignore = true;
else if (value.equalsIgnoreCase("true"))
this.ignore = true;
else if (value.equalsIgnoreCase("yes"))
this.ignore = true;
else
this.ignore = false;
}
//过滤处理,如果ignore为true,则使用该指定的编码
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
// 有条件地选择设置字符编码使用
if (ignore || (request.getCharacterEncoding() == null)) {
String encoding = this.encoding;
if (encoding != null)
request.setCharacterEncoding(encoding);
}
chain.doFilter(request, response);
}
//销毁时置空参数对象
public void destroy() {
this.encoding = null;
this.filterConfig = null;
}
}
web.xml配置:
SetCharacterEncodingFilter
com.web0248.filter.SetCharacterEncodingFilter
encoding
utf-8
ignore
true
SetCharacterEncodingFilter
action
SetCharacterEncodingFilter
*.jsp
补充说明:在web.xml文件中,所有filter元素必须出现在任意filter-mapping元素之前,filter-mapping元素又必须出现在所有servlet或servlet-mapping元素之前。
从前到后的顺序为:...→filter→filter-mapping→listener→servlet→servlet-mapping→...
}