java.lang.IllegalStateException: Cannot call sendRedire() after the response has been committed 异常解析

Cannot call sendRedirect() after the response has been committed 异常解析

字面意思是response已经被提交无法再调用sendRedirect方法,出现该异常的原有有好几种:

  • 重复调用sendRedirect方法
    • 这个可能是代码中有多个逻辑判断跳转,执行完某个跳转后,程序继续往下执行其他的跳转。我们应该在执行完后立即return
  • 在调用方法之前输出流被关闭了
    • 在使用完out对象输出后,调用close()关闭
  • 在调用方法之前输出刷新了
    • 在使用完out对象输出后,调用flush()刷新

还有一种比较特殊的情况,属于第三种
在JSP页面编码时出现的错误,JSP页面中有很多HTML内容,我在结尾处使用了response.sendRedirect()后报错。单代码本身是没有问题的,后来找了半天发现,如果把HTML代码减少一些,就不会报错。
最后总结原因就是因为JSP翻译为Servlet后,所有HTML代码都是通过JspWrite对象的write方法打印输出的,JspWriter与PrintWrite都继承自java.io.Writer ,在调用write()方法写入的时候是写入到缓冲区,当缓冲区满的时候就会自动刷新输出。所以刷新输出后,再调用response.sendRedirect()就会报错了。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值