`
linliangyi2007
  • 浏览: 1009783 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

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前加上
request.setCharacterEncoding("utf-8");


很简单不是嘛,但是如果自己碰到了,思路不对,又要浪费上个把小时时间了。
0
2
分享到:
评论
5 楼 topxiaoke 2009-11-18  
linliangyi2007 写道
topxiaoke 写道
我在使用Tomcat做开发的时候也遇到这个问题,默认编码是ISO-8859-1,我的项目是使用GBK编码,所以用一个Fliter,在请求来时进行编码
request.setCharacterEncoding("GBK");

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


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

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


多谢!嘎嘎,感觉你写的文章很不错,受教了。
4 楼 linliangyi2007 2009-11-17  
topxiaoke 写道
我在使用Tomcat做开发的时候也遇到这个问题,默认编码是ISO-8859-1,我的项目是使用GBK编码,所以用一个Fliter,在请求来时进行编码
request.setCharacterEncoding("GBK");

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


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

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

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

Jboos的Web容器就是Tomcat 那应该是一样的道理了。
2 楼 linliangyi2007 2009-05-04  
liangcoder 写道

多谢分享。

偶一般把它放Filter里。


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

1 楼 liangcoder 2009-05-04  
多谢分享。

偶一般把它放Filter里。

相关推荐

    Go-graceful优雅的重载http服务器零宕机时间兼容systemdsupervisor

    startretries=3 startsecs=10 ``` 同样,将`command`行替换为你的Go程序的路径。然后运行`supervisorctl reread`和`supervisorctl update`更新配置,`supervisorctl start myservice`启动服务。 通过`Go-graceful`...

    graceful:写优雅服务的库

    控制优雅的应用程序 优雅的应用程序可以用信号来控制。 主进程支持以下信号 期限/INT 快速关机 放弃正常关机 合肥 重启工人 启动新的工作进程 优雅关闭旧的工作进程 USR2 升级可执行文件(启动新的主进程和工作进程...

    Laravel开发-graceful-cache

    3. **缓存事件监听**:`graceful-cache`支持监听缓存操作的事件,如添加、获取、删除等,这样开发者可以在特定时刻执行自定义逻辑,如清理依赖关系或记录日志。 4. **细粒度控制**:通过该包装库,开发者可以更精确...

    前端开源库-graceful-ncp

    `graceful-ncp`是一个专门为前端开发者设计的开源库,它实现了优雅的、异步的文件和目录的递归复制功能。这个库的核心目标是提供一种更稳定、更易用的方式来处理文件系统操作,特别是在处理大量文件或复杂目录结构时...

    前端开源库-graceful-readlink

    优雅的前端开源库——`graceful-readlink`是一个针对`fs.readlink`进行优化的模块,主要用于解决Node.js在处理符号链接时可能出现的问题。在Node.js原生的`fs`模块中,`fs.readlink`函数用于读取符号链接(symbolic ...

    前端开源库-graceful-kill

    本文将深入探讨“graceful-kill”的概念、作用以及它如何改善前端应用程序的性能。 1. 优雅地杀死进程 在计算机系统中,进程的正常退出通常涉及清理资源、保存状态和关闭连接等操作。"优雅地杀死"一个进程意味着...

    A fresh 3D image slider with graceful fallback

    标题 "A fresh 3D image slider with graceful fallback" 指的是一种新型的3D图像轮播组件,它带有优雅的回退功能。在网页设计中,图像轮播是一种常见且吸引用户注意力的方式,用于展示多张图片或内容。3D效果则为...

    Graceful Graph

    优雅图(Graceful Graph)是图论中的一个概念,它源于数学和计算机科学,特别是网络流和图遍历的问题。这个概念是由美国数学家Edward G. Kolaitis在1970年代提出的,目的是研究图的标号特性。在英特尔线程挑战赛3月...

    java程序发布成window后服台

    3. **打包Java应用**:将你的Java应用程序打包成JAR文件,包括所有的依赖库。如果你使用Maven,可以使用`maven-assembly-plugin`或`maven-shade-plugin`来完成这个任务。 4. **配置服务启动脚本**:JSW提供了`...

    Laravel开发-graceful-laravel-workers

    3. **优雅关闭(Graceful Shutdown)**:在“graceful-laravel-workers”中,主要目标是实现优雅关闭,即在接收到停止命令时,工作进程会等待当前处理的任务完成后再退出,确保数据的一致性和完整性。 4. **...

    express-graceful-exit, 为了得到零停机,优雅地退出 Express.zip

    express-graceful-exit, 为了得到零停机,优雅地退出 Express express-graceful-exit具有零停机时间的组件为 node.js 使用 Express 部署。 它是为 3. X, 开发的,因此它可能需要与 Express 2.x 兼容。这个模块最初是...

    graceful-fs-fs模块的一个替代拥有各种改进

    优雅的fs(graceful-fs)是Node.js生态系统中一个重要的模块,它作为原生fs模块的一个增强版本,提供了一系列的改进和优化,旨在提高文件系统的操作性能和稳定性。在Node.js开发过程中,文件系统操作是不可或缺的一...

    Functional Programming in C++

    Mastering the functional style of programming can help you tackle the demands of modern apps and will lead to simpler expression of complex program logic, graceful error handling, and elegant ...

    RFC8538 Notification Message Support for BGP Graceful Restart

    **BGP Graceful Restart**(优雅重启)是一种使边界网关协议(BGP)能够在路由器重启时保持部分连接状态的方法,从而减少对网络的影响。在**RFC4724**中定义了这一机制,但它限制了BGP优雅重启的应用范围,即不包括...

    前端开源库-graceful-fs-extra

    `graceful-fs-extra`是一个针对Node.js环境的`fs`模块扩展库,它在原生`fs`模块的基础上增加了一些实用功能,并提供了更优雅的错误处理机制,使得文件操作更加高效和稳定。本文将深入探讨`graceful-fs-extra`库的...

    javaAJAX无刷技术

    在实际开发中,为了兼容各种浏览器和提升用户体验,开发者通常会结合使用AJAX和其他技术,例如使用渐进增强(Progressive Enhancement)或优雅降级(Graceful Degradation)策略,确保即使在JavaScript禁用或不支持...

    BGP Graceful Restart

    【BGP Graceful Restart】是BGP(Border Gateway Protocol)的一种特性,旨在确保在路由器或协议处理组件(如Route Processor,RP)重启时,路由信息的连续性和稳定性,避免网络中断。这一特性允许BGP Speaker...

    go-graceful-restart-example, 具有优雅重启功能的服务器示例.zip

    go-graceful-restart-example, 具有优雅重启功能的服务器示例 服务器使用 Go graceful重新启动安装并运行服务器$ go get github.com/Scalingo/go-graceful-restart-example$ go-graceful-restart-examp

    Scalable IO in Java -Doug Lea

    在Scalable IO in Java中,Doug Lea首先介绍了网络服务的可扩展性目标,包括在增加负载(即更多客户端)的情况下优雅地降级(graceful degradation),以及在资源(如CPU、内存、磁盘和带宽)增加时持续改进性能。...

Global site tag (gtag.js) - Google Analytics