java.lang.IllegalStateException怎么解决

 我来答
千锋教育
2016-01-04 · 做真实的自己 用良心做教育
千锋教育
千锋教育专注HTML5大前端、JavaEE、Python、人工智能、UI&UE、云计算、全栈软件测试、大数据、物联网+嵌入式、Unity游戏开发、网络安全、互联网营销、Go语言等培训教育。
向TA提问
展开全部
  该异常表示,当前对客户端的响应已经结束,不能在响应已经结束(或说消亡)后再向客户端(实际上是缓冲区)输出任何内容。
  常见解决办法:
  ①在response.sendRedirect()方法后加return语句即可,如下:
response.sendRedirect("login.jsp");
return;
②检查提交的url是否有误。
  ③如果你的页面中用了清缓存代码response.flushbuffer();又用到了response.sendRedirect(url);
  你可以把response.flushbuffer();去掉,或者用JS的window.location.href="url";来做转向。
  ④如果你用了OutputStream,而web容器生成的servlet代码中有out.write(””),这个和JSP中调用的
  response.getOutputStream()冲突。out.write()这个是字符流,而response.getOutputStream()
  是字节流,你不能在同一个页面中调用多个输出流。无论先调用哪一个,在调用第二个时都会抛出
  IllegalStateException,因为在jsp中,out变量是通过response.getWriter得到的。在多个使用了
  outputStream的<%%>语句之间不能有空格及多余的字符。也就是页面中除了使用了
  outputStream的<%%>之外不能有空格或其它任何字符,在之内的语句可以有空格及回车。
  在JSP页面做输出的时候有两种方式.一是通过JspWriter,另一个是通过
  OutputStream,但二者互相排斥.如果并存的话就会报告以上异常.
  在不得不使用OutputStream的时候.我们必须要把JspWriter舍弃掉了。找到
  请求异常的页面所对应的Servlet..把其中所有使用JspWriter的语句全部去掉.
  或者是到你的JSP文件里把动态输出的代码注释掉.这里注意换行和空格制表符均
  为JspWriter输出.应该一起去掉.保存文件重新启动服务器你会发现上述异常
  消失了。
  由于jsp container在处理完成请求后会调用releasePageContet方法释放
所用的PageContext object,并且同时调用getWriter方法,由于getWriter方法
与在jsp页面中使用流相关的getOutputStream方法冲突,所以会造成这种异常,
解决办法是:只需要在jsp页面的最后加上两条语句:
out.clear();
out=pageContext.pushBody();
即可(其中out,pageContext均为jsp内置对象!) 。
yj83855039
推荐于2017-09-30 · TA获得超过590个赞
知道小有建树答主
回答量:985
采纳率:33%
帮助的人:492万
展开全部
解决:
法一:在JSP文件中,加入下面两句

<%
out.clear();
out = pageContext.pushBody();
%>
此法的缺陷:
很多开发项目并不是JSP前端,如freemarker,velocity等
造成问题的"response.getOutputStream()"并未被写在JSP里,而是写在servlet/action里

法二: 在action中,不要return 回具体的result文件,而是return null
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式