encode
public class CharacterFilter implements Filter{
private String oldEncoding;
private String newEncoding;
public void destroy() {
System.out.println("过滤器销毁");
}
public void doFilter(ServletRequest servletrequest,
ServletResponse servletresponse, FilterChain filterchain)
throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest)servletrequest;
HttpServletResponse response = (HttpServletResponse)servletresponse;
//判断请求方式是get还是post
String method= request.getMethod();
if(method.equalsIgnoreCase("post")){
request.setCharacterEncoding(this.newEncoding);
response.setCharacterEncoding(this.newEncoding);
}else{
//首先应该获得所有参数的值
Map map = request.getParameterMap();
//所有的值
Collection coll = map.values();
Iterator it =coll.iterator();
while(it.hasNext()){
//取出集合中每个元素并转型成String数组
String[] str = (String[])it.next();
for(int i=0;i<str.length;i++){
str[i] = new String(str[i].getBytes(this.oldEncoding),this.newEncoding);
}
}
response.setCharacterEncoding(this.newEncoding);
}
System.out.println("过滤器执行完成。。开始放行");
//放行
filterchain.doFilter(request, response);
}
public void init(FilterConfig filterconfig) throws ServletException {
oldEncoding = filterconfig.getInitParameter("oldEn");
newEncoding = filterconfig.getInitParameter("newEn");
System.out.println("过滤器开始");
}
}
while 中的代码有点不理解,感觉把request中的数据拿出来转码后,并没有再放回request中去啊,为什么后面的程序从request中取到的是转码后的数据