您的位置:首页 > 编程语言 > Java开发

关于java web中get方法的解决中文乱码问题

2014-07-16 17:07 531 查看
关于javaWeb的开发中,使用get方法提交中文会乱吗,而每一次都要进行一次转码,这里使用java的过滤器Filter来实现编码的转换,将过滤器过滤全部信息,也就是在web.xml文件中进行如下配置:

<filter-mapping>
<url-pattern>/*</url-pattern>
  </filter-mapping>


当然这里的只是给了配置文件的一小部分,还没有配完全。

同时还是用了HttpServletRequestWrapper这个类,这个类实现了HttpServletRequest和ServletRequest这两个接口,所以这也可以算是一个Request对象,类的构建代码如下:

[code]

public
class
HttpServletRequestWrapperTest extendsHttpServletRequestWrapper {

// 存储所有的name和value
private Map<String, String[]>
map = newjava.util.concurrent.ConcurrentHashMap<>();

public HttpServletRequestWrapperTest(HttpServletRequestrequest) {
super(request);
}

@Override
public Map<String, String[]> getParameterMap() {
return
map;
}

public
void
put(String key, String value[]) {

};

@Override
public String getParameter(String key) {
String[] value = map.get(key);
if (value[0] !=
null && value.length > 0) {
return value[0];
} else {
return
null
;
}
}

@Override
public String[] getParameterValues(String key) {
return
map.get(key);
}
}
[code]

新建的过滤器在doFilter加入如下代码:

public
void
doFilter(ServletRequest request, ServletResponseresponse, FilterChain chain)
throws IOException, ServletException {
//设置这个支付编码在get方法中是没有用的,所以要进行转码
request.setCharacterEncoding("UTF-8");
HttpServletRequest req = (HttpServletRequest)request;
//如果是GET方法
if(req.getMethod().equals("GET")){
HttpServletRequestWrapperTestwrap =
new HttpServletRequestWrapperTest(req);
Map<String,String[]> map = req.getParameterMap();
List<String> list = new ArrayList<>();
for(Map.Entry<String, String[]> entry:map.entrySet()){
for(String value:entry.getValue()){
byte[] debuff = value.getBytes("ISO-8859-1");
String enValue = new String(debuff,"UTF-8");
list.add(enValue);
}
map.put(entry.getKey(), list.toArray(new String[0]));
}
chain.doFilter(wrap, response);
}
//否则执行Post方法
else{
// pass the request along the filter chain
chain.doFilter(request, response);}
}

[code]

上面已经把所有请求的参数进行了字符编码的转化,存储进去了wrap的map对象。

注意到上面的chain.Filter(wrap,response)的一个参数已经变成了wrap,这样以后request.getParameter(“”)获取到的值都已经是转码后的值了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: