Foros del Web » Programación para mayores de 30 ;) » Java »

Problemas con ServletOutputStream

Estas en el tema de Problemas con ServletOutputStream en el foro de Java en Foros del Web. Hola gente, He creado un tagLib (JSP, customtags) que genera una tabla HTML y un link "exportar a excel". Al pulsar el link se abre ...
  #1 (permalink)  
Antiguo 02/08/2005, 07:28
 
Fecha de Ingreso: julio-2005
Mensajes: 9
Antigüedad: 19 años, 8 meses
Puntos: 0
Problemas con ServletOutputStream

Hola gente,

He creado un tagLib (JSP, customtags) que genera una tabla HTML y un link "exportar a excel". Al pulsar el link se abre el excel en otra ventana con los datos de la tabla HTML.

El funcionamiento es el siguiente: el tagLib crea el objeto HSSFWorkBook (objeto para manejo de excel del API POI-HSSF) con los datos de la tabla y lo guarda en sesión. Al pulsar el link se ejecuta una webaction de Struts que obiene el objeto HSSFWorkBook de la sesión y lo saca por el ServletOutputStream (obtenido de la request).

La primera vez que se pulsa el link "exportar a excel" se abre la ventana con el excel correctamente, pero la segunda vez da el siguiente error:

java.lang.IllegalStateException: getOutputStream() ya ha sido llamado para esta respuesta

Si recargas la página de nuevo se vuelve a ejecutar correctamente, pero sino... en fin, que parece que se trate de la misma petición y el stream se haya quedado abierto (o algo así), pero da el mismo error a pesar de ejecutar el flush y el close del stream.

Alguna sugerencia?
  #2 (permalink)  
Antiguo 02/08/2005, 08:40
Avatar de Ani Alamo  
Fecha de Ingreso: julio-2005
Mensajes: 35
Antigüedad: 19 años, 7 meses
Puntos: 1
Creo que no es tan recomendable usar un getOutputStream desde 1 JSP porque su uso es para obtener una respuesta formada por una simple cadena JsWwriter. Esto es porque las JSPs fueron diseñadas para hacer más fácil el envío de cadenas de caracteres. Cualquier otra cosa necesita ser enviada como un stream binario a través de un servlet para evitar errores, no así desde una JSP.
Debes tener cuidado .... si una ves que has impreso en el OutputStream y depués intentas hacer un sendRedirect.... esto no está permitido.... también te generará un "java.lang.IllegalStateException: getOutputStream() ya ha sido llamado para esta respuesta", ya que no se puede hacer un forward después de obtener el printwriter del objeto Response.

Después de esto ... mira en qué parte puede estar fallando tu código ... y si aparentemente todo está ok... pero sigue dando fallos, podrías probar usando de por medio un servlet que se encargue de hacer todo el proceso central de exportación a excel. Y que sea sólo la JSP quien se ecargue de redireccionar hacia el servlet.

Un saludo.
__________________

Ani Alamo Gómez de González


"Sin Dios no soy nada en este mundo, sin El nada puedo ser... ni las hojas de los árboles se mueven, sino es por su gran poder. Bendito seas Señor."

Última edición por Ani Alamo; 02/08/2005 a las 08:46
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:45.