Java - IllegalStateException en JSP

 
Vista:

IllegalStateException en JSP

Publicado por Langas (1 intervención) el 03/01/2007 11:41:48
Hola, estoy creando una aplicación en JSP sobre Tomcat 5.5 para generar un archivo de texto en mi máquina local y que pueda ser descargado por un usuario remoto. Para ello hago uso de un taglib que contiene el método sendFile:

private void sendFile(String s, HttpServletResponse httpservletresponse)
throws JspException
{
String s1 = System.getProperty("file.separator");
try
{
pageContext.getOut().clearBuffer();
}
catch(Exception exception) { }
int i = s.lastIndexOf(s1);
if(i < 0 && s1.equals("\\"))
{
i = s.lastIndexOf("/");
}
String s2;
if(i > 0 && i != s.length() - 1)
{
s2 = s.substring(i + 1);
} else
{
s2 = s;
}
httpservletresponse.setContentType(getContentType(s2) + "; name=" + s2);
if(!inline)
{
httpservletresponse.setHeader("Content-Disposition", "attachment;filename=\"" + s2 + "\"");
} else
{
httpservletresponse.setHeader("Content-Disposition", "inline;filename=\"" + s2 + "\"");
}
ServletOutputStream servletoutputstream;
try
{
servletoutputstream = httpservletresponse.getOutputStream();
}
catch(Exception exception1)
{
throw new JspException("Could not get OutputStream: " + exception1.getMessage());
}
if(!dumpFile(s, servletoutputstream))
{
throw new JspException("Could not download file");
}
try
{
servletoutputstream.flush();
servletoutputstream.close();
}
catch(Exception exception2) { }
}

El problema es que Tomcat me da una IllegalStateException, diciéndome que ya he llamado a getOutputStream para esa respuesta, lo que no entiendo, ya que no estoy llamando a getWriter. Esta es la traza del error:

03-ene-2007 11:19:09 org.apache.catalina.core.StandardWrapperValve invoke
GRAVE: Servlet.service() para servlet jsp lanzó excepción
java.lang.IllegalStateException: getOutputStream() ya ha sido llamado para esta respuesta
at org.apache.catalina.connector.Response.getWriter(Response.java:599)
at org.apache.catalina.connector.ResponseFacade.getWriter(ResponseFacade.java:195)
at org.apache.jasper.runtime.JspWriterImpl.initOut(JspWriterImpl.java:124)
at org.apache.jasper.runtime.JspWriterImpl.flushBuffer(JspWriterImpl.java:117)
at org.apache.jasper.runtime.PageContextImpl.release(PageContextImpl.java:191)
at org.apache.jasper.runtime.JspFactoryImpl.internalReleasePageContext(JspFactoryImpl.java:115)
at org.apache.jasper.runtime.JspFactoryImpl.releasePageContext(JspFactoryImpl.java:75)
at org.apache.jsp.descargaInformeAgregado_jsp._jspService(descargaInformeAgregado_jsp.java:241)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:332)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:524)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
at java.lang.Thread.run(Unknown Source)

Y la parte relevante del código fuente de la aplicación (las String tempInforme y nombreInforme ya están inicializadas; "do: download" es la etiqueta del taglib):

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /></head>
<body>
<%
String dirInforme = "/files/temp";
String rutaInforme = "webapps/tarific/files/temp/" + nombreInforme;
BufferedWriter salidaInforme = new BufferedWriter(new FileWriter(rutaInforme));
File ficheroInforme = new File(rutaInforme);
salidaInforme.write(tempInforme);
salidaInforme.close();
if (!(ficheroInforme.exists())){
%>
ERROR. El archivo no se ha guardado correctamente
<%
} else {
%>
<do:download file="<%=nombreInforme%>" dir="<%=dirInforme%>"/>
<%
}
Registros.close();
StatementRegistros.close();
ConnRegistros.close();
%>
</body>
</html>

¿Alguien puede ayudarme? Muchas gracias por vuestra atención.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder