关于java web中get方法的解决中文乱码问题
2014-07-16 17:07
531 查看
关于javaWeb的开发中,使用get方法提交中文会乱吗,而每一次都要进行一次转码,这里使用java的过滤器Filter来实现编码的转换,将过滤器过滤全部信息,也就是在web.xml文件中进行如下配置:
当然这里的只是给了配置文件的一小部分,还没有配完全。
同时还是用了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(“”)获取到的值都已经是转码后的值了。
<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(“”)获取到的值都已经是转码后的值了。
相关文章推荐
- java web 解决当get 请求时 中文乱码问题
- 关于javaweb中文写入数据库时乱码的解决方法
- JAVA POST与GET方法中文乱码问题解决方法
- 关于Get,Post请求中文乱码问题有效解决方法
- 关于WebView的loaddata方法中文乱码问题解决,记录而已。
- JAVA POST与GET数据传递时中文乱码问题解决方法
- Java各种中文乱码问题的解决(1)get和post请求
- java小技巧:解决Get方法传中文参值时的乱码错误
- java get方法提交中文乱码问题
- NetBox环境下ajax用get获取数据,中文乱码的问题解决:对象不支持此属性或方法: 'Response.CharSet'
- web中关于中文乱码的解决方法
- 【java】怎样解决tomcat中get提交中文参数为乱码的问题
- Java中解决中文乱码问题的方法
- Java读properties文件中文乱码问题的解决方法
- Ubuntu/Debian下JAVA 中文/图片中文字体乱码显示问题解决方法
- java web中配置Filter解决jsp中文乱码问题
- 深入Java中文编码乱码问题及最优解决方法
- Java各种中文乱码问题的解决(1)get和post请求