JSP-Beispiele
Beispiel 1
Dieses einfache Beispiel führt die gleiche Logik aus wie das Beispiel der Stateful Session Bean.
Es errechnet Oberfläche und Volumen eines Quaders.
Das Beispiel soll folgende Grundelemente einer JSP zeigen:
- Verwenden des Session-Contexts zum Speichern der bisherigen Berechnungen.
- "jsp:useBean"-Tag für das Erzeugen einer Bean im Session-Context, die bei weiteren
Requests wiederverwendet wird.
- "jsp:useBean"-Tag für das Erzeugen einer Java-Klasse im Page Context und automatisches Befüllen aus Request-Parametern.
- Einbinden einer externen Seite mit jsp:include.
- Bei Fehlern an den Eingaben wird automatisch die Errorpage aufgerufen.
Achtung: Dies scheint nicht beim Sun Application Server Beta Q4 2004 zu funktionieren. Hier wird ein
Serverfehler gemeldet.
Beispiel 2
In diesem Beispiel wird ein großer Teil der Anwendungslogik in ein Servlet ausgelagert.
Beim Absenden des Formulars ist nicht die JSP-Seite das Ziel, sondern ein Servlet. Dieses
wertet die Request-Parameter aus, erzeugt die Bean mit den aktuellen Request-Werten, berechnet
Volumen und Oberfläche.
Anschließend wird der Request an "index.jsp" weitergeleitet, diese Seite gibt die errechneten
Werte aus.
Das Beispiel zeigt dieses:
- Trennung von Anwendungslogik und Anzeigelogik
- Verwaltung der Session über Servlet.
- Weiterleiten des Requests vom Servlet an die JSP.
- Speichern von Objekten im Request, so dass weitere Serverkomponenten sie nutzen können.
Achtung, Bug im Sun AppServer Beta Q4 2004: Beim Weiterleiten einer Exception (ungültige Parameter)
scheint der Server diese automatisch abzufangen und unsere Errorpage zu ignorieren.
Dies scheint der gleiche Bug wie im letzten Beispiel zu sein.
Beispiel 3
In diesem Beispiel wird Beispiel 2 weitergeführt: auf der JSP-Seite "index.jsp" soll
kein Stück Javacode mehr zu sehen sein. Stattdessen soll alle dynamische Formatierung von
TagLibs erledigt werden.
Das Beispiel verwendet folgende Taglibraries:
-jakarta-taglibs-request-1.0.1 (Arbeiten mit dem Request, z.B. Ausgabe von Attributen im Request)
-jakarta-taglibs-standard-1.0.6 (Implementation des Java-Standard-Taglib- Standards).
Achtung: Die Java Standard Tag Library kann nicht in der Version 1.1 verwendet werden, da
diese einen JSP-Container vorraussetzt, der JSP 2.0 (erst in J2EE 1.4) vorraussetzt und deshalb
nicht vom WebSphere-Server geladen werden kann, der maximal Tomcat 4.1 enthält.
Tipps für IBM Websphere:
Download des WebSphere-Projekts (dies ist ein Projektaustausch-Export, die Importanleitung findet man im
Stateless-Beispiel): JSP3Export.zip
Nach dem Anlegen des Web-Projekts müssen die zu verwendenden Tag-Libraries importiert werden.
Die geschieht, indem man das WebProjekt wählt und im Contextmenü "Importieren" -> "Importieren..."
wählt. In dem erscheinenden Dialog wählt man "JSP Tag Library" und klickt auf "Weiter".
Man wählt die JAR-Datei der Taglib aus (bei der Jakarta-Request-Taglib ist dies
"jakarta-taglibs-request-1.0.1\taglibs-request.jar").
Jetzt wechselt man in den Webimplementierungsdeskriptor und geht zu "Verweise", Unteroption
"JSP-Befehlsbibliotheken".
Man klickt auf "Hinzufügen" und gelangt in einen Dialog, der alle im Projekt vorhandenen
Tag-Libraries anzeigt. Hier wählt man die Taglib aus (im Beispiel gibt es nur eine Taglib,
allerdings unter 2 Namen). Unter dem URI wird die Taglib in der JSP referenziert. Hier kann
man einen beliebigen Namen vergeben, die angegebenen URL ist nicht zwingend.
Für die JavaStandard Taglib muss man außerdem ein weiteres JAR zufügen: "jstl.jar"
Dazu in den Projektnavigator wechseln und im Projekt unter "WebContent\WEB-INF\lib"
die Datei "jstl.jar" importieren (Rechtsklick -> "Importieren..." -> "Dateisystem").
Die JAR-Abhängigkeit wird dadurch automatisch zugefügt (Eigenschaften des Projekts, Unterpunkt
"Java-Erstellungspfad" -> "Bibliotheken").
Die Quelldateien (drei JSPs, ein Servlet und zwei Hilfsklassen) kann man in das Projekt
importieren. Das Servlet muss allerdings als solches deklariert werden. Dazu im Webimplementierungsdeskriptor
auf die Seite "Servlets" wechseln. Über "Hinzufügen" kann man das vorhandene Servlet auswählen.
Auf der rechten Seite muss noch eine URL-Zuordnung (Bindung des Servlets an einen URL-Pfad)
zufügen.
Tipps für den Sun AppServer:
Im Gegensatz zum WebSphere muss man beim AppServer die JSTL 1.1 verwenden. Mit der Version 1.0
bekommt man beim Ausführen eine Fehlermeldung. Des Eclipse-Projekt aus dem Beispiel ist
leider trotz Lomboz nicht compilierbar, da er die TagLibs nicht auflösen kann. Wahrscheinlich
müßte man statt einem Standard-Java-Projekt ein Lomboz-Webprojekt anlegen.
Beim Deploy muss man manuell die JARs der Taglibs ("taglibs-request.jar", "standard.jar" und
"jstl.jar", alle im "dependencies"-Ordner im Projekt) zum "Contents" zufügen. Außerdem sind
die TLD-Dateien (Definition der Taglib) nötig. Die JARs werden automatisch in den Ordner "lib"
importiert, die TLDs allerdings nicht in "tags", wie zu erwarten wäre. Das Ergebnis sollte so aussehen:
Auf der Registerkarte "File Ref's" definiert man jetzt die verwendeten TagLibs und gibt ihnen
symbolische Namen, unter denen sie in der JSP verwendet werden können.
Beispiel 4
Dieses Beispiel zeigt, wie eine Datei zum Webserver hochgeladen werden kann und dort geparst wird.
Download des WebSphere-Projekts (dies ist ein Projektaustausch-Export, die Importanleitung findet man im
Stateless-Beispiel): JSPFileUploadExport.zip
Hinweise zum Beispiel:
-Es verwendet die Apache Commons-Library "Commons Fileupload 1.0". Quelle siehe Links auf Startseite.
-Auf "index.html" wird ein Formular definiert. Wichtig hierbei: Methode muss "POST" sein. Als Encoding-Type muss
"multipart/form-data" angegeben werden.
-Ziel des Formulars ist eine JSP-Seite, die die hochgeladene Datei zeilenweise ausgibt.
Beispiel 5
Dieses Beispiel erweitert Beispiel 4, indem das Parsen des Requests und das Ausgeben der Datei über
eine eigens erstellte Taglib durchgeführt wird.
Projektaustausch-Datei dazu JSPFileUploadExportTagLib.zip
Hinweise zum Beispiel:
Ziel des Beispiels ist es, ein eigenes Tag zu definieren, das einen bestimmten Request-Parameter als Datei
interpretiert und diese wie ein Iterator-Tag zeilenweise ausgibt.
Vorgehen hierzu:
-Schritt 1: TagLib-Definitionsdatei (*.tld) erstellen. Leider bietet hier WebSphere keine Funktion im "Neu"-Dialog.
Deshalb per Hand eine Textdatei erstellen, die diesen Rahmen enthalten sollte:
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN" "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">
<taglib>
<tlibversion>1.0</tlibversion>
<jspversion>1.1</jspversion>
<shortname>diskfileupload</shortname>
<uri>http://www.informatik.fh-wiesbaden.de/~knauf</uri>
....
</taglib>
(URI und Shortname können frei vergeben werden).
Anschließend in WebSphere wechseln. Im Projektnavigator im Webprojekt unter "WebContent\WEB-INF\" einen Ordner "tags"
erstellen und die erstellte "tld"-Datei dort hinein importieren. Jetzt kann man sie per Doppelklick öffnen und
kann immerhin einigermaßen komfortabel das XML editieren.
Es wird ein Tag "lineoutput" zugefügt, die Tagklasse muss angegeben werden. Es soll außerdem JSP-Content enthalten dürfen.
Ein Attribut "requestparameter" (Name des Request-Parameters, in dem sich die Datei versteckt) muss ebenfalls angegeben werden.
Jetzt die Klasse "com.knauf.jsp.fileupload.tags.DiskFileUploadLineOutputTag" implementieren, die die Logik enthält.
Als letzten Schritt einen Verweis auf die Taglib anlegen. Hierbei habe ich die vorgegebene URI (/WEB-INF/tags/diskfileupload.tld)
auf "http://www.informatik.fh-wiesbaden.de/~knauf" geändert.
Und schon ist unsere erste Taglib zur Verwendung freigegeben !