Servlet取A标签传递的中文参数乱码

重写request对象

public class CustomHttpServletRequest extends HttpServletRequestWrapper {
 protected Logger logger = Logger.getLogger(CustomHttpServletRequest.class);

 private static final String ENCODED = "UTF-8", DECODE = "ISO8859-1";

 public CustomHttpServletRequest(HttpServletRequest request) {
  super(request);
 }

 @Override
 public String getQueryString() {
  String queryString = super.getQueryString();
  if (queryString != null) {
   try {
    return new String(queryString.getBytes(DECODE), ENCODED);
   } catch (UnsupportedEncodingException e) {
    logger.info(e.getMessage(), e);
   }
  }
  return queryString;
 }

 @Override
 public String getParameter(String name) {
  String value = super.getParameter(name);
  if (value != null) {
   try {
    return new String(value.getBytes(DECODE), ENCODED);
   } catch (UnsupportedEncodingException e) {
    logger.info(e.getMessage(), e);
   }
  }
  return value;
 }

 @SuppressWarnings("unchecked")
 @Override
 public Map getParameterMap() {
  Map<String, String[]> values = super.getParameterMap();
  Map<String, String[]> valuesMap = new HashMap<String, String[]>();
  Set<String> names = values.keySet();
  for (Iterator<String> iter = names.iterator(); iter.hasNext();) {
   String name = iter.next();
   String[] v = values.get(name);
   if (v != null) {
    String[] valuesCopy = new String[v.length];
    for (int i = 0; i < v.length; i++) {
     try {
      valuesCopy[i] = new String(v[i].getBytes(DECODE),
        ENCODED);
     } catch (UnsupportedEncodingException e) {
      logger.info(e.getMessage(), e);
     }
    }
    valuesMap.put(name, valuesCopy);// 向新Map放入转码过的值
   }
  }
  return valuesMap;// 返回是副本
 }

 @Override
 public String[] getParameterValues(String name) {
  String[] values = super.getParameterValues(name);
  if (values != null) {
   String[] valuesCopy = new String[values.length];// 原数组是只读的,不能修改
   for (int i = 0; i < values.length; i++) {
    try {
     valuesCopy[i] = new String(values[i].getBytes(DECODE),
       ENCODED);
    } catch (UnsupportedEncodingException e) {
     logger.info(e.getMessage(), e);
    }
   }
   return valuesCopy;
  }
  return values;
 }
}

 

servlet里使用

H2WHttpServletRequest request = new H2WHttpServletRequest(req);

你可能感兴趣的:(servlet)