Ver Mensaje Individual
  #7 (permalink)  
Antiguo 27/01/2012, 12:01
Avatar de HackmanC
HackmanC
 
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 17 años
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,