web请求字符编码转换的filter代码

来源:互联网 发布:电信网络尖兵 编辑:程序博客网 时间:2024/05/26 16:01

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;
 }