已解决java.lang.IllegalStateException异常的正确解决方法,亲测有效!!!
文章目录
报错问题
粉丝群里面的一个小伙伴敲代码时发生了报错(当时他心里瞬间凉了一大截,跑来找我求助,然后顺利帮助他解决了,顺便记录一下希望可以帮助到更多遇到这个bug不会解决的小伙伴),报错信息如下:
今天运行项目时出现的这个问题,java.lang.IllegalStateExceptio,第一次见到这个异常
错误原因:该异常表示,当前对客户端的响应已经结束,不能在响应已经结束(或说消亡)后再向 客户端(实际上是缓冲区)输出任何内容。
解决方法
解决方法如下
首先解释下flush(),我们知道在使用读写流的时候数据先被读入内存这个缓冲区中, 然后再写入文件,但是当数据读完时不代表数据已经写入文件完毕,因为可能还有 一部分仍未写入文件而留在内存中,这时调用flush()方法就会把缓冲区的数据强行 清空输出,因此flush()的作用就是保证缓存清空输出。 response是服务端对客户端请求的一个响应,其中封装了响应头、状态码、内容等, 服务端在把response提交到客户端之前,会向缓冲区内写入响应头和状态码,然后 将所有内容flush。这就标志着该次响应已经committed(提交)。对于当前页面中 已经committed(提交)的response,就不能再使用这个response向缓冲区写任何东西 (注:同一个页面中的response.XXX()是同一个response的不同方法,只要其中一个 已经导致了committed,那么其它类似方式的调用都会导致 IllegalStateException异常)。
能够导致响应已经committed的操作包括:forward, redirect, flushBuffer。
可以将项目从tomcat中先移除再部署上去,实在不行就把myeclipse中所有项目都清空一下,再从新部署上去。
总之,可以确定这个问题不是代码造成的问题,应该是部署出了问题,将整个项目中心部署一下。tomcat重新启动一下。
声明
解决方法也是我在网上找的,如有侵权联系我删除
来源地址:https://blog.csdn.net/weixin_50843918/article/details/129680776