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

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

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

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!

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

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)

Usa Servlet Cara é a mehlor coisa para isso.

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.

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!!

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" />

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.