解決中文亂碼的filter(包括get和post提交兩種方式)


解決中文亂碼的filter(包括get和post提交兩種方式)

public class TomcatFormFilter implements Filter {
 

public void destroy() {
 // TODO Auto-generated method stub
 
 }

 public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
 // 1. ServletRequest 轉成 HttpServletRequest
 HttpServletRequest req = (HttpServletRequest)request;
 
 // 2. 如果是GET,就生成一個Wrapper對象,覆蓋獲取參數的方法進行轉碼
 if("GET".equalsIgnoreCase(req.getMethod())) {
  req = new MyRequest(req);
 }
 // 3. 如果是POST,request.setCharacterEncoding("UTF-8")
 else if("POST".equalsIgnoreCase(req.getMethod())) {
  req.setCharacterEncoding("UTF-8");
 }
 // 4.調用chain.doFilter繼續向後執行
 chain.doFilter(req, response);
 }

 public void init(FilterConfig arg0) throws ServletException {
 // TODO Auto-generated method stub
 
 }

}


class MyRequest extends HttpServletRequestWrapper {

 public MyRequest(HttpServletRequest request) {
 super(request);
 // TODO Auto-generated constructor stub
 }
 
 
 public String changeEncoding(String input, String srcEncoding, String targetEncoding) {
 try {
  // 1. 獲取源編碼的bytes[]
  byte[] data = input.getBytes(srcEncoding);
  // 2. 將bytes[]按照制定編碼轉換爲String
  return new String(data, targetEncoding);
 } catch (UnsupportedEncodingException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
 }
 
 return input;
 }

 @Override
 public String getParameter(String name) {
 String value = super.getParameter(name);
 
 if(value != null) {
  value = changeEncoding(value, "ISO8859-1", "UTF-8");
 }
 return value;
 }

 @Override
 public String[] getParameterValues(String name) {
 String[] values = super.getParameterValues(name);
 if(values != null && values.length > 0) {
  for (int i = 0; i < values.length; i++) {
   String value = values[i];
   
   values[i] = changeEncoding(value, "ISO8859-1", "UTF-8");
  }
 }
 return values;
 }
 
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章