2009-03-13 27 views
5

Tengo la tarea de intentar crear un sitio que cree plantillas HTML personalizadas. Las personalizaciones se basan en la personalización de la entrada del usuario. Actualmente estoy usando tomcat/JSP para el resto de la interfaz. Lo que quiero hacer es crear las plantillas HTML en JSP para generar código HTML condicional, pero en lugar de mostrar este resultado HTML al usuario, me gustaría guardar este código en varios archivos (que luego se abrirán y se enviarán a el usuario, junto con imágenes, archivos css, archivos js). Necesito saber cómo crear un contenedor falso que ejecutará un archivo JSP (el proceso incluye y evalúa variables).Capturar salida JSP, guardar en el archivo

He leído sobre el uso de filtros de servidor para interceptar el resultado del código JSP, pero no estoy seguro de que esto funcione porque a) Necesito crear varios archivos HTML yb) Tengo que mostrar diferentes contenidos al usuario (es decir aquí está tu archivo zip, descárgalo) no es el resultado del JSP que se está procesando.

Gracias!

Respuesta

4

Aquí hay una idea. Cree un servlet para aceptar la entrada del usuario, desde el servlet use java.net.HttpURLConnection para pasar la entrada a la página JSP y obtener el resultado.

URL urlPage = new URL(url); 
HttpURLConnection conn = (HttpURLConnection)urlPage.openConnection(); 
conn.connect(); 
BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream())); 

//then loop through lines of webpage with br.readLine(); 

Luego, en el servlet se puede comprimir todos los archivos que tirar y lo devolverá al usuario

0

¿Por qué no utilizar wget? Puede cargar las páginas en un contenedor real y luego recuperar las páginas generadas desde el contenedor utilizando wget.

--input-file=FILE read URLs from file. 

uso de esta opción en wget tendrá una lista de URL de un archivo y descargar de forma que al igual que el texto se muestra en la vista-src del navegador.

También wget está disponible para Windows y Linux.

+0

gracias por la idea, me encanta wget, pero no se ajusta a mis necesidades –

+0

@Roy tiene que ver con la velocidad de compresión ¿no? – leeand00

+0

@ leeand00 no específicamente, más por el hecho de que este es un entorno Java que tiene que funcionar en múltiples entornos, y tenemos desarrolladores de Windows, Mac y Linux que trabajan en la misma base de código, por lo que la solución debe estar basada en Java –

1

Puede tener un servlet que llame al JSP abriendo una URLConnection y luego leyendo el resultado en un archivo temporal o un búfer. Luego lo comprimiría y escribiría el zip.

1

Realmente no estoy seguro de entender su pregunta, pero voy a tomar una puñalada en ella. Por qué no crear un servlet y tenerla llame a su archivo JSP utilizando la siguiente:


    RequestDispatcher d = getServletContext().getRequestDispatcher(jspName); 
    d.forward(request, response); 

hacer que ésta se JSP el extremo frontal con los valores de la forma/introducidos por el usuario. Cuando se completa el formulario, envíe el formulario. En ese momento, jsp devolverá el contexto al servlet, donde podrá analizar los valores, determinar qué archivos crear y devolver al usuario. Una vez que haya determinado lo que desea mostrar al usuario, inclúyalo en otra jsp y pase el contexto a esa jsp.

Puede hacerlo de 2 maneras. Puede crear una jsp diferente para los diferentes tipos de archivos que desea devolver y simplemente llame a la correcta. O bien, puede pasar las estructuras/valores que desee a su jsp incrustándolos en la solicitud y luego obteniéndolos dentro de su jsp. Puede utilizar este hecho para crear una única jsp que, según los parámetros pasados ​​(integrados en la solicitud), muestre la información adecuada.

Si me olvidé por completo de su pregunta, no dude en eliminar esta respuesta.

Editar: De cualquier manera tendrá que insertar sus valores dentro de la solicitud.

0

También puede intentar usar algunos de los muchos motores de plantillas ligeras que fueron diseñados específicamente para tal trabajo. Eso es lo que hice cuando tuve una tarea similar y nunca miré hacia atrás. Consulte Velocity por ejemplo.