Ver Mensaje Individual
  #1 (permalink)  
Antiguo 28/01/2014, 16:19
zyon
 
Fecha de Ingreso: septiembre-2005
Mensajes: 1.289
Antigüedad: 18 años, 7 meses
Puntos: 3
Pregunta Error con getOutputStream

Hola amigos, tengo un problema, por medio de un link para abrir o descargar un arhicvo de mi servidor llamo al siguiente jsp de esta forma:

Código HTML:
<a onclick=\"window.open('salida.jsp?arch=" + cveDenuncia + "_" + listaDocSoporte.get(i).getNombreArchivo() + "');\" href=\"#\">" + listaDocSoporte.get(i).getNombreArchivo() + "</a> 
El jsp es salida.jsp el cuál me permite descargar los archivos que en listo en otro jsp.

El contenido del jsp "salida" solo contiene:

Código HTML:
<%
 /*  */ 
        ServletOutputStream ouputStream = null;

        try {
            String nomFile = request.getParameter("arch");
            FileInputStream archivo = new FileInputStream(request.getServletContext().getRealPath("/") + "archivos/" + nomFile);
            int longitud = archivo.available();
            byte[] datos = new byte[1024];//error aquí
//archivo.read(datos);
//archivo.close();
            response.setContentType("application/octet-stream");
            response.setHeader("Content-Disposition", "attachment;filename=" + nomFile);
            ouputStream = response.getOutputStream();
//byte[] buf = new byte[1024];
            int bytesRead;
            while ((bytesRead = archivo.read(datos)) > 0) {
                ouputStream.write(datos, 0, bytesRead);
            }
            archivo.close();
//ouputStream.write(datos);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            ouputStream.flush();
            ouputStream.close();
            //out.clear();//estas líneas limpian la información enviada a consola
            //out = pageContext.pushBody();
        }
     
    %>
Si lo ejecuto me descarga el cualquier archivo sin problema, el tema es que me manda un error en consola:

Código HTML:
ene 28, 2014 2:59:32 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [jsp] in context with path [/programa] threw exception [java.lang.IllegalStateException: getOutputStream() ya ha sido llamado para esta respuesta] with root cause
java.lang.IllegalStateException: getOutputStream() ya ha sido llamado para esta respuesta
Ya he indagado un poco, pero no encuentro una respuesta que me funcione, en un lado comentan que tal vez mando algo antes al cliente que el archivo com tal, con un out.print tal vez, pero no lo hago, otro sugiere solo limpiar la salida de consola pero no me parece indicado, alguien tiene alguna sugerencia?

Saludos y gracias de antemano!
__________________
Wow! No se que decir...