一:1. 将request进行包装的编码类
public class EncodingHttpServletRequestWrapper extends
HttpServletRequestWrapper {
private HttpServletRequest request;
//重写构造方法
public EncodingHttpServletRequestWrapper(HttpServletRequest request) {
super(request);
// TODO Auto-generated constructor stub
this.request = request;
}
//重写方法
@Override
public String getParameter(String name) {
// TODO Auto-generated method stub
String value = request.getParameter(name);
if(value != null){
try {
return new String(value.getBytes("ISO-8859-1"),"UTF-8");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return super.getParameter(name);
}
}
2.编写过滤器
public class EncodingFilter implements Filter {
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
String method = req.getMethod();
if("GET".equals(method)){//处理GET方式
EncodingHttpServletRequestWrapper wrapper = new EncodingHttpServletRequestWrapper(req);
chain.doFilter(wrapper, response);
}else{//POST方法的处理方式
request.setCharacterEncoding("UTF-8");
chain.doFilter(request, response);
}
}
public void init(FilterConfig fConfig) throws ServletException {
// TODO Auto-generated method stub
}
@Override
public void destroy() {
// TODO Auto-generated method stub
}
}
二。.为防止url后边带的汉字参数乱码,可将参数在客户端编码两次:
- login_name = encodeURI(login_name);
- login_name = encodeURI(login_name);
- 服务器端转码一次:
- String loginName = ParamUtil.getString(request, "login_name"); //赋值的参数loginName
- loginName = java.net.URLDecoder.decode(loginName,"UTF-8"); //对它继续转码,转为中文
以下是转载的:地址为http://sishuok.com/forum/blogPost/list/306.html