ERRO: "getOutputStream() has already been called for this response"

9 respostas
warley

Pessoal… eu estou querendo criar um objeto do tipo ServletOutputStream da seguinte maneira:

ServletOutputStream ouputStream = response.getOutputStream();

para ler um array de bytes

ouputStream.write(bytes, 0, bytes.length);

Só que ao criar o objeto aparece o seguinte erro:

getOutputStream() has already been called for this response

Alguêm sabe o pq deste erro?

Obrigado

9 Respostas

J

Se vc já pegou o PrintWriter não pode mais pegar o OutPutStream.

warley

O q eu tenho q fazer para criar o meu objeto ServletOutputStream em um JSP?

Pois na tela eu tenho q ler um array de bytes.

eu já tentei de tudo!!!

Obrigado!

danieldestro

Você tem que ler ou gravar (escrever) os bytes???

warley

Seguinte…

Eu estou querendo gerar um relatório pelo JasaperReport.

e faço isto da seguinte forma:

byte[] bytes = JasperRunManager.runReportToPdf(CAMINHO_ARQUIVO + NOME_JASPER, parametros, ds);

Só q eu tenho q abrir o relatório na tela do usuário (em um jsp).

Só q para isto eu tenho q cria um objeto do tipo ServletOutputStream para abrir na tele.

Só q tá dando um erro miserável!!!

java.lang.IllegalStateException: getOutputStream() has already been called for this response
	org.apache.coyote.tomcat5.CoyoteResponse.getWriter(CoyoteResponse.java:599)
	org.apache.coyote.tomcat5.CoyoteResponseFacade.getWriter(CoyoteResponseFacade.java:163)
	org.apache.jasper.runtime.JspWriterImpl.initOut(JspWriterImpl.java:122)
	org.apache.jasper.runtime.JspWriterImpl.flushBuffer(JspWriterImpl.java:115)
	org.apache.jasper.runtime.PageContextImpl.release(PageContextImpl.java:190)
	org.apache.jasper.runtime.JspFactoryImpl.internalReleasePageContext(JspFactoryImpl.java:115)
	org.apache.jasper.runtime.JspFactoryImpl.releasePageContext(JspFactoryImpl.java:75)
	org.apache.jsp.relatorioConsolidacao_jsp._jspService(relatorioConsolidacao_jsp.java:94)
	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1056)
	org.apache.struts.tiles.TilesRequestProcessor.doForward(TilesRequestProcessor.java:261)
	org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:388)
	org.apache.struts.tiles.TilesRequestProcessor.processForwardConfig(TilesRequestProcessor.java:316)
	org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:231)
	org.apache.struts.action.ActionServlet.process(ActionServlet.java:1164)
	org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:415)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	br.com.polaris.billing.util.BillingFilter.doFilter(BillingFilter.java:46)
J

Usa Servlet Cara é a mehlor coisa para isso.

danieldestro

Amigo, isso, da maneira como quer, não é possível.

Se seu JSP já imprime alguma coisa na tela, você não vai conseguir.

Ou seu JSP só grava os bytes do PDF na saída, definindo o mime-type correto ou vc não pode mesclar as saídas.

warley

Galera… Eu já tentei fazer isto dentro de Action no Strtus e deu erro tb.

Um Action é um servlet, não é???

Obs: eu usei um extends DispatchAction

Será que eu tenho q fazer em servlet separado???

Obrigado pela ajuda!!

danieldestro

Action do Struts não é um Servlet.

Olha o JSP que eu fiz e funciona:

<%@ page contentType="" %><%@ taglib uri="/struts-bean.tld" prefix="bean" %><%@ page errorPage="errorPage.jsp" %><bean:write name="meuForm" property="arquivoGerado.dados" />
J

Se eu não me engano o próprio Jasper tem um servlet para isso.
Cara faça a action dar uma dispatch para o sevlet do relatório e mais seguro.

Criado 18 de maio de 2005
Ultima resposta 18 de mai. de 2005
Respostas 9
Participantes 3