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:<input type="text" name="user">

在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中的相关内容的<servlet></servlet>改为<filter></filter>
      并修改<filter-mapping></filter-mapping>中的<url-patterm>/*</url-patterm> ; “/*”表示执行任何文件

简介过滤器:

1.
每个过滤器都会在 web.xml中有单独的配置:
<filter>
<filter-name>过滤器的别名</filtr-name>
<filter-class>过滤器的物理地址,带有完整的包路径的</filter-class>
</filter>
<filter-mapping>
<filter-name>过滤器的别名</filter-name>
<filter-patterm>过滤器访问的路径</filter-patterm>
</filter-mapping>

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

来自: http://hi.baidu.com/gohy/blog/item/b5693e65c9422af8f73654ff.html
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值