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

16 respostas
N

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();

16 Respostas

T

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.

N

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

A

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

R

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

N

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

A

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.

R

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 ?

Faca no servlet :slight_smile:

Rafael

A
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 >”

A

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

M

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

A

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

A

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

R

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();
}
A

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:

<%<a class="mention" href="/u/page">@page</a> contentType=“text/html pageEncoding=UTF-8%>

<%<a class="mention" href="/u/page">@page</a> import=“java.io.InputStream”%>

<%<a class="mention" href="/u/page">@page</a> import=“java.io.FileInputStream”%>

<%<a class="mention" href="/u/page">@page</a> 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é!

V

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

Criado 26 de janeiro de 2005
Ultima resposta 9 de set. de 2011
Respostas 16
Participantes 11