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:


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:
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".
Tag library importieren (Step 1)
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"). Tag library importieren (Step 2)
Jetzt wechselt man in den Webimplementierungsdeskriptor und geht zu "Verweise", Unteroption "JSP-Befehlsbibliotheken". Tag library importieren (Step 3)
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.
Tag library importieren (Step 4)

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").
JSTL.jar importieren
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.
Servlet


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:
Content für SunAppServer
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.
Taglibs für SunAppServer


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 !