近来,在开始做的NewsMS系统中,要整合Ajax,却发觉问题多多。最烦人的是中文乱码问题。以前,在纯Struts2+JSP时,是没有问题的,而一旦加入Ajax就不一样了(我用的JS库是Jquery)。弄了很长一段时间,还是解决不了。到网上找,有许多文章介绍的方法是:在Ajax中encode一次,而在服务器端decode一次,有的还夸张,要通过双重encode和decode来解决中文提交问题。这样方法应该可以解决问题的,但如果提交的表单字段比较多时,那不是要encode和decode许多次,那可能会使人崩溃掉。
我的测试例子是表单提交的例子,分两种方案:一种是JSP直接提交给Struts,一种是JSP通过Ajax提交给Struts。
在看本文前,大家应该知道的处理中文乱问题的方法:
在Struts.xml中配置:
<constant name="struts.i18n.encoding" value="GBK"/>
当然,我们过去也习惯设置JSP页面的编码为:
<%@ page language="java" contentType="text/html; charset=GBK"
pageEncoding="GBK"%>
<meta http-equiv="Content-Type" content="text/html; charset=GBK">
当然上面的GBK也可以是GB18030,GB2312。
我们暂且把上面的两种的编码设置称为Struts端编码设置和JSP端编码设置。我们来开始我们的探索和测试吧!
1、Struts+JSP时,
Struts设置成GBK,而而JSP端设置成GBK,GB2312,GB18030 --> 没问题
Struts设置成GBK,而而JSP端设置成UTF-8 --> 乱码
Struts设置成UTF-8,而JSP端设置成GBK,GB2312,GB18030 --> 乱码
Struts设置成UTF-8,而JSP设置成UTF-8 -->没问题
2、Struts+Ajax+JSP时,
Struts设置成GBK,而而JSP设置成GBK,GB2312,GB18030 --> 乱码
Struts设置成GBK,而而JSP设置成UTF-8 -->乱码
Struts设置成UTF-8,而JSP端GBK,GB2312,GB18030 --> 没问题
Struts设置成UTF-8,而JSP设置成UTF-8 -->没问题
看看我们的测试结果,想想,得出结论:
结论一、如果Struts端设置为GBK,则它要求传进去的内容编码一定要是GBK或其它的国标编码;如果Struts端设置为UTF-8,则它也一定要求传进去的是UTF-8。
结论二、JSP直接传给Struts和JSP通过Ajax传给Struts是不同的,Ajax的post方法(不推荐用get方法)默认传送的编码方式是UTF-8,而JS能自动把客户端的GB系列的编码转成UTF-8再发送(IE中是这样,其它浏览器不清楚)。这样一来,最终传给Struts端一定是UTF-8,而如果Struts端设置成GBK或其它的GB编码的话,就会出现乱码。
所以,比较合理的编码设置是:Struts端和JSP端都统一设置成UTF-8。这对于Struts+JSP的整合方案和Struts+Ajax+JSP的整合方案都适用。
本文原创,转载请注明出处,谢谢!http://www.blogjava.net/rongxh7(心梦帆影JavaEE技术博客)
posted on 2009-04-09 13:38
心梦帆影 阅读(2805)
评论(4) 编辑 收藏 所属分类:
Struts2.x 、
Jquery