分享

URL 中文传参,JAVA后台 request.getParameterMap()乱码的解决办法

 三十的狼 2018-03-04
                          package cn.itcast.web.filter;


import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.HashMap;
import java.util.Map;


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;
import javax.servlet.http.HttpServletResponse;


public class CharacterEncodingFilter2 implements Filter {


public void doFilter(ServletRequest req, ServletResponse resp,
FilterChain chain) throws IOException, ServletException {


HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) resp;

//解决post中文乱码问题
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");

//解决get中文乱码问题
MyRequest myrequest = new MyRequest(request);  //自己定义一个request
chain.doFilter(myrequest, response);   //servlet  myrequest.getParameter("username")
}

//继承HttpServletRequestWrapper ://sun公司提供的包装类
//自定义request,解决get中文乱码问题
class MyRequest extends  HttpServletRequestWrapper{  //request
private HttpServletRequest request;
public MyRequest(HttpServletRequest request){
super(request);
this.request = request;
}
//重构方法
public String getParameter(String name) {
String value = this.request.getParameter(name);  //获取用户提交的数据 get  乱码
if(value==null){
return null;
}
//判断是否是get请求方式
if(!request.getMethod().equals("GET")){
return value;
}
try {
value = new String(value.getBytes("iso8859-1"),this.request.getCharacterEncoding());
} catch (UnsupportedEncodingException e) {
throw new RuntimeException(e);
}
return value;
}
//重构方法
@Override
public Map getParameterMap() {
try{
if(!this.request.getMethod().equals("GET")){//判断是否是get请求方式,不是get请求则直接返回
return this.request.getParameterMap();
}

Map<String,String[]> map = this.request.getParameterMap();  //接受客户端的数据
Map<String,String[]> newmap = new HashMap();   
for(Map.Entry<String, String[]> entry : map.entrySet()){
String name = entry.getKey();
String values[] = entry.getValue();

if(values==null){
newmap.put(name, new String[]{});
continue;
}
String newvalues[] = new String[values.length];
for(int i=0; i<values.length;i++){
String value = values[i];
value = new String(value.getBytes("iso8859-1"),this.request.getCharacterEncoding());
newvalues[i] = value; //解决乱码后封装到Map中
}

newmap.put(name, newvalues);
}

return newmap;
}catch (Exception e) {
throw new RuntimeException(e);
}
}


@Override
public String[] getParameterValues(String name) {
// TODO Auto-generated method stub
return super.getParameterValues(name);
}
}


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


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


}

}


转载地址:

http://blog.csdn.net/furongkang/article/details/6761099

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多