学会做人 发表于 2013-2-7 16:35:42

过滤器--------解决乱码问题

package com.lovo.util;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
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.HttpServletRequestWrapper;
/**
 * 字符集转换过滤器
 *
 * 过滤器类实现Filter接口
 *
 */
public class CharSetFilter implements Filter{
 
 

 /**
  * 转换包装请求资源编码集,
  * 包装器的内部类,重写getParameter方法  */
 public class StrPackage extends HttpServletRequestWrapper {
  
  //私有的HttpServlet 对象
  private HttpServletRequest request = null;
  
  //构造方法
  public StrPackage(HttpServletRequest request) {
   super(request);
   
   this.request = request;
  }
  
  /**
   * 请求字符集转换,
   */
  public String getParameter(String str) {
   //界面输入的字符串
   String changeStr = this.request.getParameter(str);
   
   //如果为空的话,返回一个空
   if(changeStr==null){
     return null;
   }
   
   //不为空的话做字符串转换
   
   //定义一个字节数组
   byte[] by;
   
   try {
    //得到当前字符串的编码集
    by = changeStr.getBytes("ISO8859-1");
    
    //将界面上的字符串的编码集转化为utf-8
    changeStr = new String(by,"utf-8");
   } catch (UnsupportedEncodingException e) {
   
    e.printStackTrace();
   }
   return changeStr;
  }
 }
  //销毁时触发
 public void destroy() {
  
 }
 public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws IOException, ServletException {
  //封装设置响应编码字符集
  arg1.setContentType("text/html;charset=utf-8");
  
  /**
   * 封装请求编码集
   */
  HttpServletRequest request = (HttpServletRequest)arg0;
  //得到一个请求编码包装对象(转换请求编码集)
  StrPackage newRequest = new StrPackage(request);
  
  //继续向下运行,(新的包装过的请求对象)
  arg2.doFilter(newRequest, arg1); 
  
 }
   //初始化时触发
 public void init(FilterConfig arg0) throws ServletException {
  
 }
}
页: [1]
查看完整版本: 过滤器--------解决乱码问题