这两天有朋友给我发了两个毕设让我给他改改”乱码问题”,对于这个问题还是比较常见的.我们平时正常的思路都是:
检查一下网页,源文件,数据库三方的编码格式是否相同?
传输数据时编码格式是否相同?
然后从Form表单就开始检查,到达数据接受的第一个地方开始下断点也就是输出一下看看是否为乱码(System.out.println(“========here”+userName);)之类的…查看一下是在哪一步出现的问题.然而这两天遇到的问题特别怪异,也让我费了很大劲…
项目是基于Struts1开发的,唉也不说啥了,不是咱写的人家用这种老框架你能咋办?你说他闲的蛋疼??有Struts2不用干吗用淘汰的东西?PS:人家愿意你管得着吗?
闲话少说,通过各种检查发现提交的时候都开始是乱码,这很让人纠结…最后没办法从过滤器(Filter)入手了…这也是恩师陈鹏给出的解决方案…
新建类EncodingFilter继承自Servlet的Filter类,然后实现它的doFilter方法,代码如下:
package biyesheji.struts;
import java.io.IOException;
import javax.servlet.Filter;
importjavax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
publicclass EncodingFilter implements Filter {
publicvoid destroy() {
// TODO Auto-generated method stub
}
publicvoid doFilter(ServletRequest arg0, ServletResponse arg1,
FilterChain arg2) throws IOException, ServletException {
arg0.setCharacterEncoding(“gb2312”);
arg2.doFilter(arg0, arg1);
}
publicvoid init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
}
}
最后在web.xml里面配置filter,让过滤器过滤每一个提交的.do请求,并强制使用gb2312编码,其实个人推荐UTF-8,大家以后见想的时候用这个比较好走向国际嘛
很好的解决了问题…如图1:
最后还是说,能来这看到这篇文章希望能对您有点帮助`