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

Ola PessoALL,
estou tentando retornar um gif para a pagina mas a excecao acima sobe e naum consigo saber o porque

O codigo eh esse:

HttpServletResponse response = (HttpServletResponse) 
pageContext.getResponse();
response.setContentType( "image/gif" );
HttpSession session = pageContext.getSession(); // recupera a sessão
Object objBoleto = session.getAttribute("boleto"); //recupera o boleto da sessão

Bill boleto = null;
if ( objBoleto == null ) {
    throw new Exception( "boleto nao encontrado" );
} else {
   boleto = (Bill) objBoleto;
}
ServletOutputStream output = response.getOutputStream();

// gera a imagem do boleto e joga no ServletOutputStream
GeradorImagem geradorImagem = new GeradorImagem();
geradorImagem.getImage( boleto, true, output );

output.flush();
output.close();

Onde está sendo executado esse código, em um Servlet puro, ou em um JSP? Se for em um JSP há vários web containers (tal como o iPlanet Application Server 6.5) que não permitem que se faça o que você quer fazer, não obstante o que está definido na especificação de servlets.

Esse codigo esta em um Servlet puro e utilizo o SUN ONE 7.
O gif aparece na tela, porem a excecao eh disparada…

Se alguém souber como fazer isso eu agradeço, pois estou com o mesmo problema.

Isso ocorre quando uma chamada a getWriter() eh feita apos a chamda a response.getOutputStream();, ou vice-versa. Verifique o seu codigo por algo que chame o getOutputStream() ou getWriter() mais de uma vez.

Rafael

Cara… na verdade isso acontece dependendo do servidor de aplicacao utilizado, no caso o SUN ONE 7(me parece q no 8 tb).

Bom… para solucionar o problema retorne uma string do seu metodo a partir de um ByteArrayOutputStream.

No JSP faca… out.println( xxxx.geraImagem( pageContext ));

Cuidado no JSP !!! Nao pode haver quebra de linha fora do scriplet… Estranho mas eh isso mesmo…

Espero ter ajudado…

Flw

O problema é que eu uso um jsp pra retornar a imagem e ele automáticamente chama o getWriter() me disseram que eu tenho que usar um servlet “puro” pra fazer isso.
Alguém saberia como fazer ?

Utilizando o Jetty também recebo essa exceção quando abro páginas que fazem requisições a um servlet e também contém imagens, que são geradas a partir de outro servlet.

Mas no meu caso só é irritante, pois as imagens são mostradas corretamente.

[quote=amilhoranza]O problema é que eu uso um jsp pra retornar a imagem e ele automáticamente chama o getWriter() me disseram que eu tenho que usar um servlet “puro” pra fazer isso.
Alguém saberia como fazer ?[/quote]

Faca no servlet :slight_smile:

Rafael

Galera Descobri o problema !!!
É só tirar as quebras de linha do jsp que exibe a imagem exemplo:
Eu tinha o seguinte código no meu jsp que exibe a imagem
<jsp:useBean id=“img” scope=“page” class=“com.catho.Boleto” />
<%
response.setContentType(“image/jpeg”);
response.setHeader (“Pragma”, “no-cache”);
response.setHeader (“Cache-Control”, “no-cache”);
response.setDateHeader (“Expires”,0);
%>
<%!boolean retorno;%><%! String barras;%>
<%
barras = request.getParameter(“p_barra”);
retorno = img.criaImagem(barras,pageContext,50);
%>


código correto
<jsp:useBean id=“img” scope=“page” class=“com.catho.Boleto” /><%
response.setContentType(“image/jpeg”);
response.setHeader (“Pragma”, “no-cache”);
response.setHeader (“Cache-Control”, “no-cache”);
response.setDateHeader (“Expires”,0);
%><%!boolean retorno;%><%! String barras;%><%
barras = request.getParameter(“p_barra”);
retorno = img.criaImagem(barras,pageContext,50);
%>

Não deixe quebras de linha no jsp senão ele vai chamar o getWriter() pra escrever um “< BR >”

Só corrigindo o post acima, não é que chama o getWriter("< br >") ele chama o out.print("\r\n");

Pessoal…q esquisito…tirei as quebras de linha e deu certo mesmo…
Toh usando Tomcat

estou com o mesmo problema mas memo tirando as quebras não deu

estou com esse problema, mas quando gero um arquivo excel…
usando classes do jfree chart

Pessoal,

sei que esse tópico é um pouco antigo, mas estive com o mesmo problema. Consegui solucionar, basta fazer um out.clear() antes de chamar outStream.write();
Se alguém precisar segue exemplo abaixo:

ServletOutputStream outStream = null;
try {
	out.clear();
	outStream = response.getOutputStream();
	outStream.write(content);			
} finally {
	outStream.flush();
	outStream.close();
}

E aí, pessoal, em especial rvoltz!

Cara, estou com o problema que os demais aí em cima relataram.

Tentei fazer o que tu disse, mas continuou a dar aquela exceção. Segue o meu código em um JSP:

<%@page contentType=“text/html” pageEncoding=“UTF-8”%>
<%@page import=“java.io.InputStream”%>
<%@page import=“java.io.FileInputStream”%>
<%@page import=“java.io.File”%>

<%

               if (request.getParameter("file") != null) {

                   File arquivo = new File("C:\\Documents and Settings\\alunos\\Desktop\\SiteAlexandre\\web\\JARs\\" + request.getParameter("file"));

                   InputStream in = new FileInputStream(arquivo);
                   byte[] buffer = new byte[(int) arquivo.length()];
                   ServletOutputStream download = response.getOutputStream();

                   response.reset();
                   response.setHeader("Content-disposition", "attachment;filename=" + request.getParameter("file"));
                   response.setContentType("application/zip");
                   response.setContentLength(buffer.length);

                   int nLidos;

                   while ((nLidos = in.read(buffer)) >= 0) {
                       download.write(buffer, 0, nLidos);
                   }

                   download.flush();
                   download.close();
                   download.close();

               }

%>

turbinando
    <a href="tunnig.jsp?file=CPFValidator.rar" style="text-decoration: none">CPFValidator</a></br>
    <a href="tunnig.jsp?file=ManagerDB2010.rar" style="text-decoration: none">ManagerDB2010</a></br>
    <a href="tunnig.jsp?file=ManagerNetWork2010.rar" style="text-decoration: none">ManagerNetWork2010</a></br>
    <a href="principal.jsp" style="text-decoration: none" target="principal">Voltar</a>

</body>

Se alguém puder dar uma olhada e me ajudr a tirar essa maldita exceção, fico agradecido! Já tentei de tudo!

Até!

Olá pessoal, estou iniciando e não entendi de q classe é o objeto out???