2009-03-13 3 views
5

Ich bin beauftragt mit dem Erstellen einer Website, die benutzerdefinierte HTML-Vorlagen erstellen wird. Die Anpassungen basieren auf Benutzereingaben. Ich verwende momentan Tomcat/JSP für den Rest des Frontends. Ich möchte die HTML-Vorlagen in JSP erstellen, um bedingten HTML-Code auszugeben, aber anstatt diese HTML-Ausgabe dem Benutzer anzuzeigen, möchte ich diesen Code in mehreren Dateien speichern (die dann gezippt und zugestellt werden) der Benutzer, zusammen mit Bildern, CSS-Dateien, JS-Dateien). Ich muss wissen, wie man einen gefälschten Behälter herstellt, der eine JSP-Akte durchführt (Prozess umfaßt und bewertet Variablen).Capture JSP-Ausgabe, in Datei speichern

Ich lese über die Verwendung von Server-Filtern, um die Ausgabe von JSP-Code abzufangen, aber ich bin mir nicht sicher, dass dies funktioniert, weil a) ich mehrere HTML-Dateien erstellen muss und b) muss ich unterschiedliche Inhalte für den Benutzer anzeigen Hier ist Ihre Zip-Datei, laden Sie es) nicht die Ausgabe der JSP wird verarbeitet.

Danke!

Antwort

4

Hier ist eine Idee. Erstellen Sie ein Servlet, um die Eingabe des Benutzers zu akzeptieren. Verwenden Sie im Servlet java.net.HttpURLConnection, um die Eingabe an die JSP-Seite zu übergeben und das Ergebnis zu erhalten.

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

in Ihrem Servlet Dann können Sie alle Dateien, zip Sie ziehen aus und senden es an den Benutzer

0

Warum nicht wget verwenden? Sie könnten die Seiten in einen echten Container laden und dann die generierten Seiten mit wget aus dem Container abrufen.

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

diese Option in wget wird eine Liste von URLs aus einer Datei nehmen und laden Sie sie für Sie ebenso wie der Text in der Ansicht-src des Browsers angezeigt wird.

Auch wget ist für und Linux verfügbar.

+0

danke für die idee, ich liebe wget, aber es passt nicht meine bedürfnisse –

+0

@Roy Hat mit dem Zipping Bit zu tun, nicht wahr? – leeand00

+0

@ leeand00 nicht speziell, auch mit der Tatsache, dass dies eine Java-Umgebung ist, die in mehreren Umgebungen arbeiten muss, und wir haben Windows, Mac und Linux-Entwickler arbeiten auf der gleichen Codebasis, so dass die Lösung Java-basiert sein muss –

1

Sie könnten ein Servlet haben, das die JSP aufruft, indem es eine URLConnection öffnet und dann die Ausgabe in eine temporäre Datei oder einen Puffer einliest. Dann würde es zippen und den Zip raus schreiben.

1

Ich bin wirklich nicht sicher, ob ich verstehe Ihre Frage, aber ich werde es einen Stich nehmen. Warum nicht ein Servlet erstellen und haben es Ihre jsp-Datei mit dem folgenden Aufruf:


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

Haben die zeigen jsp das vordere Ende mit der Form/Benutzer eingegebenen Werte. Wenn das Formular ausgefüllt ist, senden Sie das Formular. An diesem Punkt gibt der JSP einen Kontext an das Servlet zurück, in dem Sie die Werte analysieren können, um festzustellen, welche Dateien erstellt und an den Benutzer zurückgegeben werden sollen. Sobald Sie bestimmt haben, was Sie dem Benutzer anzeigen möchten, werfen Sie ihn in ein anderes JSP und übergeben Sie den Kontext an dieses JSP.

Sie können dies auf 2 Arten tun. Sie können für die verschiedenen Dateitypen, die Sie zurückgeben möchten, ein anderes JSP erstellen und einfach das richtige aufrufen. Oder Sie können beliebige Strukturen/Werte, die Sie wollen, in Ihre JSP übergeben, indem Sie sie in die Anfrage einbetten und dann in Ihre JSP bekommen. Sie können diese Tatsache verwenden, um ein einzelnes JSP zu erstellen, das basierend auf übergebenen Parametern (eingebettet in die Anforderung) die richtigen Informationen anzeigt.

Wenn ich den Punkt Ihrer Frage vollständig verpasst haben, können Sie diese Antwort löschen.

Bearbeiten: In jedem Fall müssen Sie Ihre Werte in die Anfrage einbetten.

0

Sie können auch einige der vielen leichten Template-Engines verwenden, die speziell für solche Aufgaben entwickelt wurden. Das habe ich gemacht, als ich ähnliche Aufgaben hatte und nie zurückblickte. Schauen Sie sich zum Beispiel Velocity an.