hunterli0408 2009-02-12 17:52
浏览 210
已采纳

JSP页面上输出12K(welogic上)后无法再跳转(高分悬赏!)

最近在项目中遇到这样一个奇怪的问题:
在页面上输入数据,点击submit按钮,程序跑到后台,然后什么都不做,直接返回到本画面。
画面上根据先前输入的数据生成自定义Tag。Tag会做一些业务判断,然后自动跳转到其他画面。
现在的问题是,在往其他画面跳的时候,老是报Cannot Forward a Response that is Already Committed
这个异常。

最后测试发现,几乎所有的服务器都有这个问题。就是在JSP页面上,当输出的字节数
超过8K(tomcate)/12K(weblogic)的时候,response.isCommitted()就变成了true,这个时侯就没法再
跳转了。

现在我想知道的是,这种限制是JSP页面特意的限制吗?谁能给一个正式的解释。
[b]问题补充:[/b]
谢谢各位的帮助,现在已经基本上知道深层的原因了。
主要是JSP页面在编译为HTML时,服务器不是直接往客户端浏览器写出,而是首先生成一个缓冲区。这个缓冲区的大小根据服务器的不同而不同,tomcate为8KB。当生成的HTML太大,超过缓冲区大小的时候,服务器就会向客户端写出,这个时候response的状态就会变为committed,就不能再往其他画面跳转了。因此,如果想实现在JSP页面上进行跳转,有两种途径:
1.在默认缓冲区写满之前跳转
2.修改缓冲区大小,使跳转动作发生在缓冲区写满之前

对于第二种途径,只要在进入JSP页面之后,立刻调用response.setBufferSize(int size)就可以了。保险起见,可将大小设为JSP编译后生成的HTML的大小。

TO:gembler
我们这个画面是一个测试工具画面,主要用来测试项目的自定义Tag。其中一个Tag有页面跳转逻辑,所以才会出这种问题。至于为什么跳转逻辑要放到Tag中,就不太清楚了。

  • 写回答

4条回答 默认 最新

  • iteye_418 2009-02-12 18:25
    关注

    这个是因为缓冲区大小的限制吧,setBufferSize()可以设置缓冲区大小,这个大小默认应该是8192,至于weblogic可能自己在实现web容器的时候,扩大了一些。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 keil的map文件中Image component sizes各项意思
  • ¥30 BC260Y用MQTT向阿里云发布主题消息一直错误
  • ¥20 求个正点原子stm32f407开发版的贪吃蛇游戏
  • ¥15 划分vlan后,链路不通了?
  • ¥20 求各位懂行的人,注册表能不能看到usb使用得具体信息,干了什么,传输了什么数据
  • ¥15 Vue3 大型图片数据拖动排序
  • ¥15 Centos / PETGEM
  • ¥15 划分vlan后不通了
  • ¥20 用雷电模拟器安装百达屋apk一直闪退
  • ¥15 算能科技20240506咨询(拒绝大模型回答)