java.lang.IllegalStateException: getOutputStream() has already been called for this response

嚴重: Servlet.service() for servlet jsp threw exception

java.lang.IllegalStateException: getOutputStream() has already been called for this response


at org.apache.catalina.connector.Response.getWriter(Response.java:610)

at org.apache.catalina.connector.ResponseFacade.getWriter(ResponseFacade.java:198)

at org.apache.jasper.runtime.JspWriterImpl.initOut(JspWriterImpl.java:125)

at org.apache.jasper.runtime.JspWriterImpl.flushBuffer(JspWriterImpl.java:118)

at org.apache.jasper.runtime.PageContextImpl.release(PageContextImpl.java:188)

at org.apache.jasper.runtime.JspFactoryImpl.internalReleasePageContext(JspFactoryImpl.java:118)

at org.apache.jasper.runtime.JspFactoryImpl.releasePageContext(JspFactoryImpl.java:77)

at org.apache.jsp.pic_jsp._jspService(pic_jsp.java:88)

at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)

at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)

at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)




問題分析:前臺程序可以正常運行,但是當查看流程進行到哪一步的時候,控制檯就報這個錯誤。

              具體的原因就是在tomcat中jsp編譯成servlet之後在函數

 _jspService(HttpServletRequest request, HttpServletResponse response)


                  的最後有一段這樣的代碼

finally {

  1. if (_jspxFactory != null) {              
  2.       _jspxFactory.releasePageContext(_jspx_page_context);  
  3.  }  
       if (_jspxFactory != null) {            
             _jspxFactory.releasePageContext(_jspx_page_context);
        }
     }


              這裏是在釋放在jsp中使用的對象,會調用response.getWriter(),因爲這個方法是和
              response.getOutputStream()相沖突的!所以會出現以上這個異常。


解決方法:

              在使用完輸出流以後調用以下兩行代碼即可:

out.clear();
out = pageContext.pushBody();


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章