GENERAR .TXT DESDE JSP

Hola tengo una pregunta, me gustaria saber si podrian ayudarme con esto...

Necesito leer unas tablas en postgres y quelos datos que tengan esas tablas me los arroje en .txt, haciendo todo esto desde jsp
Sabes como lo puedo hacer.... ???

al principio pense en sacar un reporte en .txt con ireport, pero necesito que dentro de un mismo formulario se ejecuten mas o menos 7 consultas a 7 tablas diferentes y que me genere un archivo por cada tabla, asi que creo que el reporte no me seria de utilidad y de verdad no tengo idea de como hacer esto.. no se como hacer que las consultas sql que hago dentro de jsp a las tablas de postgres me generen con algun comando que se yo los archivos, que luego guardare çen una ruta especifica que me de el usuario (la cual la estoy guardadndo o generando con mkdir).

alguna idea????

Gracias por su tiempo. :)

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de ezamudio

si entendí bien...

si entendí bien el problema, tienes que devolver los resultados de 7 tablas diferentes en una sola respuesta? Pues solamente que pongas todo en un archivo de texto mas o menos con este formato:

c1t1|c2t1|c3t1
------------------------------
r1c1t1|r1c2t1|r1c3t1
r2c1t1|r2c2t1|r2c3t1
etc

c1t2|c2t2
---------------
r1c1t2|r1c2t2
r2c1t2|r2c2t2
r3c1t2|r3c2t2
etc

c1t3|c2t3|c3t3|c4t3
etc

O sea los resultados de cada tabla uno tras otro en el mismo archivo. Todo depende de quién lo va a leer, de eso depende la solución.

Otra opción es devolver un ZIP con los resultados de cada tabla en un archivo por separado. Para eso tendrías que cambiar en la respuesta del JSP el tipo MIME y crear un ZipOutputStream sobre el OutputStream el socket para ir escribiendo cada archivo y cerrándolo, generando el zip al vuelo sin tener que almacenarlo primero en el servidor.

El ZipOutputStream maneja un ZipEntry por cada archivo; tendrías que crear el ZipOutputStream, luego para cada tabla creas un nuevo ZipEntry con el nombre del archivo que quieres que tenga los datos de esa tabla, abres el ResultSet, vas obteniendo datos y escribiendo al ZipOutputStream una linea de texto con los datos del renglón en cuestión y cuando terminas de leer el ResultSet lo cierras, luego cierras el ZipEntry... al final de que enviaste todas las tablas no recuerdo si nada más hay que cerrar el ZipOutputStream o hay que hacer otra cosa pero pues en el javadoc de la clase te indica cómo se usa.

Gracias por la idea

Muchas gracias por tu tiempo ezamudio!!

bueno, la cosa es que si debo traer los datos de las columnas en 7 archivos diferentes
hay forma de hacerlo sin utilizar el.zip ????

Imagen de ezamudio

no creo

Por HTTP solamente puedes mandar una petición y devolver una respuesta. Por lo tanto para devolver 7 archivos diferentes necesitas 7 peticiones, o una manera de codificar los 7 archivos en una sola respuesta. No puedes mandar varios attachments en una sola respuesta HTTP, es solamente un archivo. Por eso te sugerí el zip; si no quieres zip puedes usar un TAR pero ese no sé cómo lo puedas generar al vuelo y no es tan conocido como el ZIP. Pero para otros formatos (como tar, o un RAR, etc) es el mismo principio; un archivo que contiene dentro varios archivos, ya sea comprimidos o no.