Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1447329
  • 博文数量: 254
  • 博客积分: 8696
  • 博客等级: 中将
  • 技术积分: 2961
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-03 16:46
文章分类

全部博文(254)

文章存档

2015年(4)

2014年(18)

2013年(16)

2012年(8)

2011年(25)

2010年(2)

2009年(74)

2008年(107)

分类: Java

2009-05-16 13:50:17

问题代码:
RequestDispatcher rd = request.getRequestDispatcher("index.jsp");
rd.forward(request, response);

跳转的时候抛出异常:
java.lang.IllegalStateException: Cannot forward after response has been committed
com.AppendDevice.doGet(AppendDevice.java:35)
com.AppendDevice.doPost(AppendDevice.java:41)
javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)

上网搜索一下:
jsp默认的buffer是8kb,当我们的输出超过8kb时,就会发生IllegalStateException。在response完成之前,
buffer已经溢出了。
解决方法是修改默认值:<%@ page buffer="16kb" %>
(参考

http://devpinoy.org/blogs/lamia/archive/2006/09/05/
java.lang.IllegalStateException_3A00_-Cannot-forward-after-response-has-been-committed.aspx)

另一种解析:
由于response多次提交或者是由于有页面显示后仍然含请求转向产生的,就是说程序在return之前就已经
执行了跳转或者执行过response,之后遇到return的话,程序想再次执行跳转,也就是重定向,这时功能
也许会实现了,但是控制台会报错,所以控制好跳转是很重要的。
解决方法:
rd.forward(request, response);
return;



阅读(2172) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~