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

Descargar JSP

Estas en el tema de Descargar JSP en el foro de Java en Foros del Web. Estoy usando JBoss y me gustaria que despues de la ejecucion de una jsp y la generacion de la pagina html, me gustaria descargar ese ...
  #1 (permalink)  
Antiguo 23/01/2012, 10:56
 
Fecha de Ingreso: septiembre-2007
Mensajes: 268
Antigüedad: 16 años, 7 meses
Puntos: 8
Descargar JSP

Estoy usando JBoss y me gustaria que despues de la ejecucion de una jsp y la generacion de la pagina html, me gustaria descargar ese codigo html generado automaticamente. La pantalla tendria un boton para descargar el contenido generado en un archivo de texto.

Habia pensado el servlet generarme el fichero de texto haciendo un calco del codigo en el servlet pero eso haria que tuviera que cambiarlo para todas las paginas que tengo y ademas de eliminarlas porque no voy a tener el codigo dos veces repetido solo lo tendria para en el servlet y con un parametro distinguiria si lo va a redireccionar al browser o a un fichero.

Muchas gracias por las molestias.
  #2 (permalink)  
Antiguo 24/01/2012, 20:22
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 3 meses
Puntos: 260
Sonrisa Respuesta: Descargar JSP

Hola,

No estoy seguro si JBoss tendrá algún método adicional para realizar ese procedimiento, pero lo que yo haría sería cambiar el encabezado. Es decir, cuando el cliente (browser) solicita una página el servidor responde con una respuesta, valga la redundancia, según el protocolo HTTP.

La respuesta normalmente lleva este encabezado,

Código:
HTTP/1.0 200 OK
Date: Fri, 31 Dec 1999 23:59:59 GMT
Content-Type: text/html
Content-Length: 1354

... data y mas data ...
El navegador sabe que debe renderizar la página porque el encabezado 'text/html' así se lo indica, si le pusieras de encabezado 'audio/wave' el navegador 'pensaría' que es un archivo de audio e intentaría abrir el reproductor de audio.

Adicionalmente existe otro encabezado que explícitamente indica que es una descarga,

Código:
Content-disposition: attachment; filename=fname.ext
Así que si le cambias el encabezado a 'text/plain' y le agregas el encabezado 'content-disposition' es muy probable que el navegador abra una ventana para que puedas guardar el documento en lugar de visualizarlo. Adicionalmente tendrías que enviar algún tipo de parámetro para saber si debes usar text/html o text/plain para 'ver' la página o 'descargar' la página.


Ahora ... cómo cambiar ese encabezado dependerá de muchos factores y tendrás que investigar para adecuarlo a lo que necesitas.


Saludos,
  #3 (permalink)  
Antiguo 26/01/2012, 02:01
 
Fecha de Ingreso: septiembre-2007
Mensajes: 268
Antigüedad: 16 años, 7 meses
Puntos: 8
Respuesta: Descargar JSP

Muchas gracias por la aclaración y es una gran respuesta.

Pero no me sirve porque yo lo que quiero es decirle que lo guarde automaticamente no que al usuario le salga una ventana de descarga. Me gustaria que lo guardara en un fichero del servidor.

No se para que alguien querria que en vez de pintar un html lo descargue si para eso solo tiene guardarla o ver codigo fuente y luego guardar. Excepto si es un pop-up, que en ese caso no suele dar esas opciones solo sale la ventana.

Un saludo y gracias.

PD: He encontrado esta pagina http://www.tutorialesycursos.com/blo...gina-web-java/

Que resuelve algo del problema, pero no se si funcionara porque yo me voy a llamar a mi mismo no al exterior y no se funcionara, ademas de que tengo que invocar al servlet y con parametros.

Si le paso los parametros seria por get y no por post.
  #4 (permalink)  
Antiguo 26/01/2012, 14:11
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 3 meses
Puntos: 260
Sonrisa Respuesta: Descargar JSP

Hola,

Cita:
Iniciado por Erickvk Ver Mensaje
... No se para que alguien querria que en vez de pintar un html lo descargue si para eso solo tiene guardarla o ver codigo fuente y luego guardar. Excepto si es un pop-up, que en ese caso no suele dar esas opciones solo sale la ventana. ...
Hola, evidentemente no estas muy acostumbrado a usar los foros de Internet, donde hay personas que tienen la necesidad pero no lo explican correctamente u otros millones de motivos que necesitan hacer cosas que a simple vista parecen absurdas, pero simplemente al final cambian con que era para aplicarlo a otra cosa u otras millones de escusas. Y uno solamente intenta ayudar.

Cita:
Iniciado por Erickvk Ver Mensaje
... Que resuelve algo del problema, pero no se si funcionara porque yo me voy a llamar a mi mismo no al exterior y no se funcionara, ademas de que tengo que invocar al servlet y con parametros ...
Ahora bien ... como sabrás el servidor genera todo el HTML del JSP y los Servlets dentro de un StringBuffer, y solamente tienes que accesar al Output y guardarlo, ya sea al final de tu JSP o con un filter.

Sino alguien más podrá de ser de mayor ayuda,

Saludos.
  #5 (permalink)  
Antiguo 26/01/2012, 14:16
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 15 años
Puntos: 306
Respuesta: Descargar JSP

Puedes recuperar el outputstream del servlet

http://docs.oracle.com/javaee/1.3/ap...putStream.html

Cita:
No se para que alguien querria que en vez de pintar un html lo descargue si para eso solo tiene guardarla o ver codigo fuente y luego guardar. Excepto si es un pop-up, que en ese caso no suele dar esas opciones solo sale la ventana.
Pues guardar la página generada tiene menos sentido todavía, para poder devolver una página conoces su estructura y su contenido. Así que lo lógico es guardar solo los datos.
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #6 (permalink)  
Antiguo 27/01/2012, 01:54
 
Fecha de Ingreso: septiembre-2007
Mensajes: 268
Antigüedad: 16 años, 7 meses
Puntos: 8
Respuesta: Descargar JSP

Cita:
Iniciado por HackmanC Ver Mensaje
Hola,



Hola, evidentemente no estas muy acostumbrado a usar los foros de Internet, donde hay personas que tienen la necesidad pero no lo explican correctamente u otros millones de motivos que necesitan hacer cosas que a simple vista parecen absurdas, pero simplemente al final cambian con que era para aplicarlo a otra cosa u otras millones de escusas. Y uno solamente intenta ayudar.



Ahora bien ... como sabrás el servidor genera todo el HTML del JSP y los Servlets dentro de un StringBuffer, y solamente tienes que accesar al Output y guardarlo, ya sea al final de tu JSP o con un filter.

Sino alguien más podrá de ser de mayor ayuda,

Saludos.
Lo siento pero no queria faltar, no me referia a que tu respuesta fuera mala o que este fuera de lugar, creo que tus dos respuestas son muy buenas y la primera soluciona parte del problema pero no lo suficiente, la segunda no se como hacerlo con un JSP.

La verdad no se para que han pedido esto, pero supongo que es para crear plantillas y asi hacer presentaciones sin tener problemas con bbdd o cosas asi.
Como cada cliente tiene su entorno.

Muchas gracias por la ayuda.
  #7 (permalink)  
Antiguo 27/01/2012, 12:01
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 3 meses
Puntos: 260
Sonrisa Respuesta: Descargar JSP

Hola,

Cita:
Iniciado por Erickvk Ver Mensaje
Lo siento pero no queria faltar, no me referia a que tu respuesta fuera mala o que este fuera de lugar, ...
Bueno, bueno, para ser sincero muchas veces, en lo personal, me equivoco al dar una respuesta, pero también es cierto que a veces sirve de base para otras respuestas, de nuevo solamente se hace con el ánimo de ayudar, el hecho es que es un foro para comunicarnos simplemente.

Cita:
Iniciado por Erickvk Ver Mensaje
... La verdad no se para que han pedido esto, pero supongo que es para crear plantillas y asi hacer presentaciones sin tener problemas con bbdd o cosas asi. ...
La operación es muy simple, crea un PrintWriter personalizado, yo lo hice con un StringBuilder pero por supuesto tienes que hacerlo de otra forma,

Código Java:
Ver original
  1. private class myPrintWriter extends PrintWriter {
  2.         StringBuilder sb = new StringBuilder();
  3.         public myPrintWriter(OutputStream out) {
  4.             super(out);
  5.         }
  6.         @Override
  7.         public void write(int c) {
  8.             super.write(c);
  9.             sb.append(c);
  10.         }
  11.         @Override
  12.         public void write(char[] buf, int off, int len) {
  13.             super.write(buf, off, len);
  14.             sb.append(buf);
  15.         }
  16.         @Override
  17.         public void write(char[] buf) {
  18.             super.write(buf);
  19.             sb.append(buf);
  20.         }
  21.  
  22.         @Override
  23.         public void close() {
  24.             super.close();
  25.             System.out.println(sb);
  26.         }
  27.     }

Crea un wrapper personalizado, que cambie el OutputStream del response por por el Writer anterior,

Código Java:
Ver original
  1. private class myServletResponse extends HttpServletResponseWrapper {
  2.         private PrintWriter pw;
  3.         public myServletResponse(HttpServletResponse response) {
  4.             super(response);
  5.             try {
  6.                 pw = new myPrintWriter(response.getOutputStream());
  7.             } catch (IOException ex) {
  8.                 System.err.println(ex);
  9.             }
  10.         }
  11.         @Override
  12.         public PrintWriter getWriter() throws IOException {
  13.             return pw;
  14.         }
  15.         public void finish() {
  16.             pw.flush();
  17.             pw.close();
  18.         }
  19.     }

Por último crea un filter personalizado,

Código java:
Ver original
  1. public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
  2.         myServletResponse msr = new myServletResponse((HttpServletResponse)response);
  3.         chain.doFilter(request, msr);
  4.         msr.finish();
  5.     }

Por supuesto que tienes que modificarlo y agregar al filter correctamente, el resultado estaba en el StringBuilder y aparecerá en el archivo log del stdout de tomcat, y lógicamente lo tienes que modificar para que lo grabe en algún otro lugar. Yo creo que esta es la forma mas simple, usando directamente el Output también es posible pero tendrías que agregarlo a cada unidad de compilación procesada.

Saludos,
  #8 (permalink)  
Antiguo 30/01/2012, 03:39
 
Fecha de Ingreso: septiembre-2007
Mensajes: 268
Antigüedad: 16 años, 7 meses
Puntos: 8
Respuesta: Descargar JSP

Muchas gracias por la ayuda.

PD: Vuelvo a pedir perdon si en algo te he ofendido que no tenia la minima intencion.

Etiquetas: jsp
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 10:03.