warley
#1
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.
warley
#3
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???
warley
#5
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.
warley
#8
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.