import java.io.IOException;
import javax.servlet.*;
/**
* 对缓存控制表的操作类
* @author freechan
*
*/
public class EncodingFilter implements Filter{
protected String encoding;
protected FilterConfig filterConfig;
protected boolean ignore;
public EncodingFilter(){
encoding = "GBK";
filterConfig = null;
ignore = true;
}
public void destroy(){
encoding = null;
filterConfig = null;
}
/**
* 对当前request进行encoding设置(如果不选择忽略客户端设置的话)
* @param request 当前处理的SevletRequest
* @param chain 当前Filter链
* @throws IOException I/O错误发生
* @throws ServletException Servelt错误发生
*/
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);
}
chain.doFilter(request, response);
}
/**
* @param filterConfig Filter设置对象
* @throws ServletException
*/
public void init(FilterConfig filterConfig) throws ServletException{
this.filterConfig = filterConfig;
encoding = filterConfig.getInitParameter("encoding");
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;
}
}