首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

Graceful Java Programming 幽雅Java编程 小贴士3

2012-10-27 
Graceful Java Programming 优雅Java编程 小贴士3Http请求编码是个老问题了,不论是UTF-8还是GBK,在咖啡的

Graceful Java Programming 优雅Java编程 小贴士3
Http请求编码是个老问题了,不论是UTF-8还是GBK,在咖啡的印象中,这个应该是7年前,刚学Java web时候碰到的。

最近在做一个老项目,准确的说是在老项目上做修改的时候,编码问题又发生了。

问题背景:

1.一个历经三年前的项目,使用的是Jboss,老项目的编码在Jboss上设置了Http Encoding=GBK。就是说,老项目的设计者只考虑了客户端使用GBK的编码提交的。

2.新添加的功能,我们使用jQuery,通过AJAX提交POST请求,这里有两个限制
   第一。AJAX的Post请求是UTF-8的编码,这个无法修改
   第二。我们提交的表单有50多个字段,没法使用GET转换绕开编码,因为会超长。

问题发生了,也在网络上找了半天,没发现解决方案(这也是偶要写blog的原因,希望大家不再走弯路)。

解决过程:

尝试1(失败).使用request.getParameter,而后转码,不论如何处理,由于在Jboss上设置了编码,在参数获取的时候,服务器会默认进行一次GBK的转码,这样编码就出错了,是无法转换回正常的UTF-8的。

尝试2(成功,但很麻烦).直接读取request.getOutputStream中的byte流。这个方法是可以的,但所有的参数就必须要自己解析了(注意:request.getParameter 和 request.getOutputStream中,哪个先执行了,则另一个就失效,读不到数据的)

最佳答案
在所有的request.getParameter被调用之前,对request进行编码设置,即纠正jboss的默认设置,而后再取参数就正常了。在request.getParameter前加上

 多谢分享。

偶一般把它放Filter里。 2 楼 linliangyi2007 2009-05-04   liangcoder 写道
多谢分享。

偶一般把它放Filter里。


这个做法就是把我们害惨的原因之一啊,我们就项目的filter也加了这么一段,搞死人了!
如果一定放filter,请配置filter时设置指定范围的路径吧,不要用"/*"啊!这样做后面的程序员就麻烦了

3 楼 topxiaoke 2009-11-17   我在使用Tomcat做开发的时候也遇到这个问题,默认编码是ISO-8859-1,我的项目是使用GBK编码,所以用一个Fliter,在请求来时进行编码
request.setCharacterEncoding("GBK");

Jboos的Web容器就是Tomcat 那应该是一样的道理了。 4 楼 linliangyi2007 2009-11-17   topxiaoke 写道我在使用Tomcat做开发的时候也遇到这个问题,默认编码是ISO-8859-1,我的项目是使用GBK编码,所以用一个Fliter,在请求来时进行编码
request.setCharacterEncoding("GBK");

Jboos的Web容器就是Tomcat 那应该是一样的道理了。

呵呵,提醒你以后使用jQuery AJAX时候的问题。
如果这么简单,就不用写这个帖子了。

估计看客们都把偶当菜鸟咯,嗨~~~

5 楼 topxiaoke 2009-11-18   linliangyi2007 写道topxiaoke 写道我在使用Tomcat做开发的时候也遇到这个问题,默认编码是ISO-8859-1,我的项目是使用GBK编码,所以用一个Fliter,在请求来时进行编码
request.setCharacterEncoding("GBK");

Jboos的Web容器就是Tomcat 那应该是一样的道理了。

呵呵,提醒你以后使用jQuery AJAX时候的问题。
如果这么简单,就不用写这个帖子了。

估计看客们都把偶当菜鸟咯,嗨~~~


多谢!嘎嘎,感觉你写的文章很不错,受教了。

热点排行