Ajuda para desvendar um erro - HTTP 500

13 respostas
A

Pessoal... alguém sabe pq q aparece esse erro???
eu nao alterei nada no código, e apareceu isso...

HTTP Status 500 - 

--------------------------------------------------------------------------------

type Exception report

message 

description The server encountered an internal error () that prevented it from fulfilling this request.

exception 

org.apache.jasper.JasperException: getOutputStream() has already been called for this response
	org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:510)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:387)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)


root cause 

java.lang.IllegalStateException: getOutputStream() has already been called for this response
	org.apache.catalina.connector.Response.getWriter(Response.java:599)
	org.apache.catalina.connector.ResponseFacade.getWriter(ResponseFacade.java:195)
	org.apache.jasper.runtime.JspWriterImpl.initOut(JspWriterImpl.java:124)
	org.apache.jasper.runtime.JspWriterImpl.flushBuffer(JspWriterImpl.java:117)
	org.apache.jasper.runtime.PageContextImpl.release(PageContextImpl.java:191)
	org.apache.jasper.runtime.JspFactoryImpl.internalReleasePageContext(JspFactoryImpl.java:115)
	org.apache.jasper.runtime.JspFactoryImpl.releasePageContext(JspFactoryImpl.java:75)
	org.apache.jsp.GeraRelatorio_jsp._jspService(GeraRelatorio_jsp.java:132)
	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:332)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)


note The full stack trace of the root cause is available in the Apache Tomcat/5.5.17 logs.

13 Respostas

P

alice5,
Coloque seu codigo aqui !!

Mas isso deve ser algum tipo de conflito com o stream out.

A

a única parte do meu código q usa isso, é essa, onde eu baixo o arquivo q eu criei:

// baixando o Relatorio.xls para o usuario
File t_file = new File(request.getRealPath("") + "/temp/Relatorio.xls");
long fileSize = t_file.length();
InputStream in = new FileInputStream(t_file);
if (in != null)
{
	response.reset();					 
	response.setContentType("application/x-msdownload");

	String s = "attachment; filename=" + t_file.getName();
	response.setHeader("Content-Disposition", s);
	response.setContentLength((int) fileSize);
	byte[] b = new byte[2048];
	int len = 0;
	while ((len = in.read(b)) > 0)
	{
		response.getOutputStream().write(b, 0, len);
	}
	in.close();
}
P

Este código esta em um jsp ou um servlet ?

A

olha… vou ser bem sincera com vc… eu ainda nao sei a diferença entre esses dois… mas o código ta num arquivo .jsp, e nao tem html!

P

Fiz algumas pequenas alterações e o browser estar fazendo o download normalmente.

Testei no jakarta-tomcat-5.0.18, plataforma windows

Segue o jsp, com algumas alterações

<html>
<head><title>Number Guess</title></head>
<body bgcolor="white">

<jsp:directive.page import="java.io.*"/>


<% 
File t_file = new File(request.getRealPath("") + "/temp/relatorio.xls");
long fileSize = t_file.length();
InputStream in = new FileInputStream(t_file);
if (in != null)
{
   response.reset();               
   //response.setContentType("application/ms-excel"); //Abre o arquivo no bowser
   response.setContentType("application/download");
   
   String s = "attachment; filename=" + t_file.getName();
   response.setHeader("Content-Disposition", s);
   response.setContentLength((int) fileSize);
   byte[] b = new byte[2048];
   int len = 0;
   while ((len = in.read(b)) > 0)
   {
      response.getOutputStream().write(b, 0, len);
   }
   in.close();
}



%>
</body>
</html>
A

olha… não é possível… copiei e colei o código aqui, e deu esse mesmo erro:
java.lang.IllegalStateException: getOutputStream() has already been called for this response

Isso ta com cara de conflito… sei lá… ta falando q a função já foi chamada por essa response… :frowning:

P

alice5,

O jsp esta sendo “chamado” por um servlet ?
Faça um pequeno teste chamando a pagina direto do browser !!

o conflito pode ser entre o JSPWriter out e o stream out do servlet !

P

Mais uma alternativa

tirei o response.getOutputStream() e usei o out, que é o JspWriter
[url]http://java.sun.com/j2ee/sdk_1.2.1/techdocs/api/javax/servlet/jsp/JspWriter.html[/url]

<html>
<head><title>Number Guess</title></head>
<body bgcolor="white">

<jsp:directive.page import="java.io.*"/>


<% 

File t_file = new File(request.getRealPath("") + "/temp/relatorio.xls");
long fileSize = t_file.length();
InputStream in = new FileInputStream(t_file);

if (in != null)
{
   response.reset();               
   //response.setContentType("application/ms-excel"); //Abre o arquivo no bowser
   response.setContentType("application/download");
   
   String s = "attachment; filename=" + t_file.getName();
   response.setHeader("Content-Disposition", s);
   response.setContentLength((int) fileSize);
   byte[] b = new byte[2048];
   int len = 0;
   while ((len = in.read(b)) > 0)
   {
      //response.getOutputStream().write(b, 0, len);
      out.print(b);
   }
   in.close();
}
out.clear();
out = pageContext.pushBody(); 


%>

</body>
</html>
A

Nao deu certo… e pior que esse erro se dá do nada… :frowning:

Bem, eu tenho um arquivo “…temp/Relatorio.xls” que está no meu servidor, e queria fazer o download normal desse arquivo para o usuário… alguém tem alguma rotina que faça isso?

P

Qual erro deu no código do meu post anterior ?
Executei aqui com o tomcat e o download foi feito corretamente.

A

Qual erro utilizando out.print(b)?
Bem, o download deu certo, mas o arquivo ficou todo errado… nem consegui abrir pelo excel!!! :frowning:

P

desculpe-me, não tinha tentado visualizar o arquivo !! :oops:

refiz algumas coisas.....
estou incluindo o codigo do meu servlet e do jsp ...eles estao funcionado aqui !!

Qq coisa coloque o codigo do seu servlet !!!

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 *
 * @author paulo.marcelo
 */
public class HelloWorldExample  extends HttpServlet {
    
    
    public void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        try {
            forward("/download.jsp", request, response);
        } catch (Exception exp) {
            exp.printStackTrace();
        }
    }
    
    public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        doPost(request, response);
    }
    
    private void forward(String pageToForward, HttpServletRequest request, HttpServletResponse response)
	throws ServletException, IOException {
		getServletContext().getRequestDispatcher(pageToForward).forward(request, response);
	}
    
}
<html>
<head><title>Number Guess</title></head>
<body bgcolor="white">

<jsp:directive.page import="java.io.*"/>


<% 

File t_file = new File(request.getRealPath("") + "/temp/relatorio.xls");
long fileSize = t_file.length();
InputStream in = new FileInputStream(t_file);

if (in != null)
{
   response.reset();               
   //response.setContentType("application/ms-excel"); //Abre o arquivo no bowser
   response.setContentType("application/download");
   
   String s = "attachment; filename=" + t_file.getName();
   response.setHeader("Content-Disposition", s);
   response.setContentLength((int) fileSize);
   byte[] b = new byte[2048];
   int len = 0;
   while ((len = in.read(b)) > 0)
   {
      response.getOutputStream().write(b, 0, len);
   }
   in.close();
}

out.clear();
out = pageContext.pushBody(); 


%>

</body>
</html>

att,

A

Deu certo!

Muito obrigada pela ajuda, viu?
Não teria conseguido sem vc!
Valeu mesmo!!! :grin:

Criado 4 de agosto de 2006
Ultima resposta 7 de ago. de 2006
Respostas 13
Participantes 2