程序做着做着IDEA报错:
java.lang.IllegalStateException: Cannot call sendError() after the response has been committed
在response提交之后不能发送错误请求。
出现原因:
- 重复调用sendRedirect方法
– 这个可能是代码中有多个逻辑判断跳转,程序执行完一个跳转马上执行下一个跳转。
对此我们要在执行完后立即return。 - 在调用方法之前输出流被关闭了
– 这种问题就是我出现的,也是最常出现的。就是在使用完out对象输出后,调用close()关闭
解决办法:在调用close之后的return改为return null; - 在调用方法之前输出刷新了
– 在使用完out对象输出后,调用flush()刷新
最后网上搜索后,还有一种情况:
还有一种比较特殊的情况,属于第三种
在JSP页面编码时出现的错误,JSP页面中有很多HTML内容,我在结尾处使用了response.sendRedirect()后报错。单代码本身是没有问题的,后来找了半天发现,如果把HTML代码减少一些,就不会报错。
最后总结原因就是因为JSP翻译为Servlet后,所有HTML代码都是通过JspWrite对象的write方法打印输出的,JspWriter与PrintWrite都继承自java.io.Writer ,在调用write()方法写入的时候是写入到缓冲区,当缓冲区满的时候就会自动刷新输出。所以刷新输出后,再调用response.sendRedirect()就会报错了。