servlet 中文乱码终极解决方案

 

中文乱码
一j2ee学习中乱码无处不在 为了避免乱码问题 需要注意
1 url传输的编码问题
java.net.URLEncoder java.net.URLDecoder 对应的encode 与decode进行编码解码
在传输数据时候浏览器会自动对要表单传输的数据进行url编码 所使用的编码方式取决于当前网页显示
时候使用的编码方式。
2 对于http请求消息的url地址后的参数,getparameter等方法进行自动url解码使采用的编码方式
取决servlet引擎 tomcat默认用iso8859-1进行解码。
因此无法返回中文
3 对于post方式getparameter采用servletrequest.getcharacterencoding()方法返回的编码方式进行url解码

如果getcharacterencoding返回null则用iso8859-1进行解码 因此无法显示中文
4 servletrequest.setcharacterencoding方法设置字符编码只影响post请求的解码不影响get请求的url解码
乱码的解决方法:
二具体解决途径
1.解决输出乱码
在servlet类中的doGet()方法中的request.setContentType("text/html;charset=gb2312");

2.解决数据库的乱码
1>.字符串的重新格式化 (同上面的 1.解决输出乱码)

2>.在jdbc.url中明确字符集 (不适用于sqlserver)
在连接数据库时:con=DriverManager.getConnection(url,"sa","");
url="jdbc:协议:子协议://IP:端口; 库 ? useUnicode=true & characterEncoding=gb2312";

3.解决输入乱码
1>.设置请求字符集
在servlet类中的doGet()方法中,在request.getParameter()之前加上requset.setCharacterEncoding("gb2312");

2>.字符集的重新格式化
通过String的构造方法: String (byte[] bytes, String charsetName) ----构造一个新的 String,方法是使用指定的字符集解码指定的字节数组。
如:
在.jsp中:username:

在servlet类中:
String user=request.getParamter("user");
user=new String(user.getBytes("ISO-8859-1"),"GB2312");

3>.过滤器 Servlet (对所有的文件都有效)————————《可以解决输入、输出乱码》

<1>.新创建一个servlet时,Interfaces接口:继承javax.servlet.Filter
      options中只需选中:create Inherited Methods; create Constructors;
      建好后在其doFilter()方法中:
arg0.setCharacterEncoding("gb2312"); //实现请求乱码的处理
arg1.setCharacterEncoding("gb2312"); //实现响应乱码的处理
arg2.doFilter(arg0,arg1); //继续执行其他过滤器 或 jsp、servlet
<2>.再在web.xml中把过滤器servlet中的相关内容的改为
      并修改中的/* ; “/*”表示执行任何文件

////////////////////////////////////////////////////////////////////////////////////

简介过滤器:

1.
每个过滤器都会在 web.xml中有单独的配置:

过滤器的别名
过滤器的物理地址,带有完整的包路径的


过滤器的别名
过滤器访问的路径

2.
当由于某种原因想要删除servlet类时,删除后在web.xml中还会保留删除的servlet类的记录,
所以必须手动在web.xml中删除一下已删除的servlet类的信息

来自: http://hi.baidu.com/gohy/blog/item/b5693e65c9422af8f73654ff.html

你可能感兴趣的:(Java)