关于"response already committed" 的问题

博客描述了一次从WebService迁移到EJB2过程中遇到的“response already committed”异常问题。通过逐步排查,最终发现是由类型转换错误导致。文章揭示了不同框架下同一代码表现不一致的原因。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近遇到一个问题,觉得挺有意思。

现在正在将一个项目从web service 转到 EJB2 (是否觉得很奇怪?),转移过程中出现了一些问题。其中一个exception如下:

java.lang.IllegalStateException:   response   already   committed

当时第一个反应是可能页面 forward跳转或者buffer size不够了。因为我们用的是公司自己开发的web framework。所以所有的request flow control 都是封装起来了。xml配置文件之前在webservice下是可以的,页面也一直没有问题。

在网上google了一下,陈述的观点无非是response已经commit过了,也许是因为人为,也许是因为页面大小超过了page的buffer。于是乎尝试用response.setBufferSize()修改page大小,但没有效果。由于第一次遇到这样的问题,而且用的是websphere的portal和公司的framework,所以一开始找不到头绪。

确定是jsp页面的问题后,开始用最笨的方法,尝试着删减页面的代码,最后问题出在了一句代码。

HashMap map = xxxResultBean.getResultMap();

原来这个method返回的是一个TreeMap,用HashMap来reference就出现了casting的问题。由于这个Bean里面定义的field是Map,所以complie是不会有问题,直到page真的load的时候才会crash。

但问题来了,为什么之前在web  service的时候没有问题,但到了EJB就不行了呢?原来在web service和EJB的时候,对class的定义会有所不同,EJB比较遵从原来的class,而web service则不太一样。

一个小问题,用最笨的方法detect。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值