Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

getOutputStream() has already been called for this response

Tags:

java

jsp

tomcat

I google the error message getOutputStream() has already been called for this response and many people said it is because of the space or newline after <% or %>, but in my code , there is no a space or a newline. I am using tomcat6 on linux.

<%@     page import="java.servlet.*,     javax.servlet.http.*,     java.io.*,     java.util.*,     com.lowagie.text.pdf.*,     com.lowagie.text.*"     %><%     response.setContentType("application/pdf");     Document document = new Document();     try{         ByteArrayOutputStream buffer = new ByteArrayOutputStream();         PdfWriter.getInstance(document, buffer);         document.open();         PdfPTable table = new PdfPTable(2);         table.addCell("1");         table.addCell("2");         table.addCell("3");         table.addCell("4");         table.addCell("5");         table.addCell("6");         document.add(table);         document.close();         DataOutput dataOutput = new DataOutputStream(response.getOutputStream());         byte[] bytes = buffer.toByteArray();         response.setContentLength(bytes.length);         for(int i = 0; i < bytes.length; i++)         {         dataOutput.writeByte(bytes[i]);         }     }catch(DocumentException e){         e.printStackTrace();     }  %> 

~

org.apache.jasper.JasperException: java.lang.IllegalStateException: getOutputStream() has already been called for this response     org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:522)     org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:410)     org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)     org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)     javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 

root cause

java.lang.IllegalStateException: getOutputStream() has already been called for this response     org.apache.catalina.connector.Response.getWriter(Response.java:610)     org.apache.catalina.connector.ResponseFacade.getWriter(ResponseFacade.java:198)     org.apache.jasper.runtime.JspWriterImpl.initOut(JspWriterImpl.java:125)     org.apache.jasper.runtime.JspWriterImpl.flushBuffer(JspWriterImpl.java:118)     org.apache.jasper.runtime.PageContextImpl.release(PageContextImpl.java:188)     org.apache.jasper.runtime.JspFactoryImpl.internalReleasePageContext(JspFactoryImpl.java:118)     org.apache.jasper.runtime.JspFactoryImpl.releasePageContext(JspFactoryImpl.java:77)     org.apache.jsp.Account.Domain.testPDF_jsp._jspService(testPDF_jsp.java:94)     org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)     javax.servlet.http.HttpServlet.service(HttpServlet.java:717)     org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)     org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)     org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)     javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
like image 361
Southsouth Avatar asked Nov 21 '09 17:11

Southsouth


People also ask

How do you solve getOutputStream () has already been called for this response?

Just comment out the call to getOutputStream() and everything will be Ok. To learn more about Servlet and JSP, read Head First Servlet and JSP, one of the best books from the last 10 years for learning JSP and Servlet.

What is Java getOutputStream?

The getOutputStream() method of Java Socket class returns an output stream for the given socket. If you close the returned OutputStream then it will close the linked socket.


1 Answers

Ok, you should be using a servlet not a JSP but if you really need to... add this directive at the top of your page:

<%@ page trimDirectiveWhitespaces="true" %> 

Or in the jsp-config section your web.xml

<jsp-config>   <jsp-property-group>     <url-pattern>*.jsp</url-pattern>     <trim-directive-whitespaces>true</trim-directive-whitespaces>   </jsp-property-group> </jsp-config> 

Also flush/close the OutputStream and return when done.

dataOutput.flush(); dataOutput.close(); return; 
like image 159
RealHowTo Avatar answered Sep 29 '22 10:09

RealHowTo