java.lang.IllegalStateException怎么解决
2个回答
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内置对象!) 。
常见解决办法:
①在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内置对象!) 。
展开全部
解决:
法一:在JSP文件中,加入下面两句
<%
out.clear();
out = pageContext.pushBody();
%>
此法的缺陷:
很多开发项目并不是JSP前端,如freemarker,velocity等
造成问题的"response.getOutputStream()"并未被写在JSP里,而是写在servlet/action里
法二: 在action中,不要return 回具体的result文件,而是return null
法一:在JSP文件中,加入下面两句
<%
out.clear();
out = pageContext.pushBody();
%>
此法的缺陷:
很多开发项目并不是JSP前端,如freemarker,velocity等
造成问题的"response.getOutputStream()"并未被写在JSP里,而是写在servlet/action里
法二: 在action中,不要return 回具体的result文件,而是return null
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询