2009-03-13 3 views
5

Ho il compito di provare a creare un sito che creerà modelli HTML personalizzati. Le personalizzazioni vengono personalizzate in base all'input dell'utente. Attualmente sto usando tomcat/JSP per il resto del front-end. Quello che voglio fare è creare i template HTML in JSP per generare codice HTML condizionale, ma invece di mostrare questo output HTML all'utente, vorrei salvare questo codice in diversi file (che verranno poi compressi e consegnati a l'utente, insieme a immagini, file css, file js). Devo sapere come creare un contenitore falso che eseguirà un file JSP (il processo include e valuta le variabili).Catturare l'output JSP, salvare nel file

Ho letto sull'utilizzo dei filtri server per intercettare l'output del codice JSP, ma non sono sicuro che funzionerà perché a) Ho bisogno di creare diversi file HTML eb) Ho bisogno di visualizzare diversi contenuti per l'utente (es. ecco il file zip, scaricalo) non l'output del JSP in elaborazione.

Grazie!

risposta

4

Ecco un'idea. Creare un servlet per accettare l'input dall'utente, dal servlet utilizzare java.net.HttpURLConnection per passare l'input alla pagina JSP e ottenere il risultato.

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(); 

Poi, nel tuo servlet è possibile comprimere tutti i file che tirare e restituirlo all'utente

0

Perché non utilizzare wget? È possibile caricare le pagine in un contenitore reale e quindi recuperare le pagine generate dal contenitore utilizzando wget.

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

Utilizzando questa opzione in wget avrà un elenco di URL da un file e scaricarli per voi proprio come il testo verrà visualizzato nella vista-src del browser.

Anche wget è disponibile per Windows e Linux.

+0

grazie per l'idea, io amo wget, ma non si adatta alle mie esigenze –

+0

@Roy ha a che fare con il bit zippante, non è vero? – leeand00

+0

@ leeand00 non specificamente, più che altro con il fatto che si tratta di un ambiente java che deve lavorare in più ambienti, e abbiamo sviluppatori di windows, mac e linux che lavorano sulla stessa base di codice, quindi la soluzione deve essere basata su java –

1

Si potrebbe avere un servlet che chiama al JSP aprendo un collegamento URLC e quindi leggendo l'output in un file temporaneo o un buffer. Dovrebbe quindi comprimerlo e scrivere la zip.

1

Io non sono davvero sicuro di aver capito la tua domanda, ma mi prenderò una pugnalata a esso. Perché non creare un servlet e farlo chiamare il file JSP utilizzando la seguente:


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

Avere lo spettacolo jsp il front-end con il/user immessi valori di forma. Una volta completato il modulo, invia il modulo. A questo punto, jsp restituirà il contesto al servlet in cui è possibile analizzare i valori, determinare quali file creare e tornare all'utente. Una volta determinato ciò che si desidera visualizzare all'utente, gettarlo in un altro jsp e passare il contesto a quel jsp.

È possibile farlo in 2 modi. È possibile creare un jsp diverso per i diversi tipi di file che si desidera restituire e chiamare semplicemente quello corretto. Oppure puoi passare qualsiasi struttura/valore tu desideri nel tuo jsp inserendoli nella richiesta e poi inserendoli nel tuo jsp. È possibile utilizzare questo fatto per creare un singolo jsp che in base ai parametri passati (incorporato nella richiesta) visualizzerà le informazioni corrette.

Se ho completamente perso il punto della tua domanda, sentiti libero di cancellare questa risposta.

Modifica: in entrambi i casi è necessario incorporare i valori nella richiesta.

0

Si può anche provare a utilizzare alcuni dei numerosi modelli di motori di luce che sono stati progettati specificamente per tale lavoro. Questo è quello che ho fatto quando ho avuto un compito simile e non ho mai guardato indietro. Controlla ad esempio Velocity.