JavaServer Pages (JSP)
Inhaltsverzeichnis
Begriff
JavaServer Pages (JSP) sind spezielle HTML- bzw. XML-Seiten, die durch Java-Code in Form von Skripten oder Tags um dynamische Inhalte angereichert werden können. Die zugrunde liegende Technologie wurde von Sun Microsystems entwickelt und ist Bestandteil der Java Plattform, Enterprise Edition (Java EE).
Entstehung
JavaServer Pages sind als Weiterentwicklung der Servlet-Technologie entstanden. Servlets sind Javaklassen mit eingebettetem HTML-Code. Sie sind zur Darstellung von Webinhalten nicht sonderlich geeignet, da sie die grafische Oberfläche mit Hilfe von Strings in einem Print-Befehl darstellen. Der resultierende Quellcode ist relativ unübersichtlich und macht eine vernünftige HTML-Validierung unmöglich.
Im Gegensatz zu Servlets handelt es sich bei JavaServer Pages um HTML-Seiten mit eingebettetem Java Code. Die Quelltextstruktur orientiert sich an Auszeichnungssprache HTML. An erforderlichen Stellen können dynamische Inhalte durch Java-Code ergänzt werden.
Bestandteile
JSP-Seiten bestehen aus drei verschiedenen Elementen: Skripten, Direktiven und Aktionen. Skripte dienen der Einbettung von Java-Programmlogik, Direktiven schicken Nachrichten bzw. globale Informationen an den Servlet Container und Aktionen bündeln schwierig umzusetzende und häufig wiederkehrende Vorgänge, wie z.B. die Bindung von Formular-Elemente an eine externe Datenhaltung.
Skripte
Folgende Skripte können verwendet werden:
Vereinbarung | <%!...%> |
Anweisung | <%...%> |
Ausdruck | <%=...%> |
Bei Verwendung von Vereinbarungen werden die Variablen während der Instanzierung des JSP-Servlets initialisiert. Dadurch ist es erforderlich, dass die Java-Konstrukte innerhalb einer Vereinbarung vollständig in sich abgeschlossen sind. Diese Form eignet sich gut zur frühzeitigen Fehlererkennung. Der Einsatz von Anweisungen erlaubt dem Entwickler, Code-Fragmente mit HTML-Ausgaben zu vermischen, ohne dass dies schon bei der Übersetzung zu Fehlern führt. Variablen werden hier allerdings bei jedem Seitenaufruf neu initialisiert. Mit Hilfe von Ausdrücken kann eine JSP-Variable ausgegeben werden. Sie ersetzen den Print- Befehl aus der J2EE-API.
Direktiven
Direktiven werden durch die Zeichenkette „<%@direktive …%>“ dargestellt. Bislang gibt es drei verschiedene Direktiven: „page“, „include“ und „taglib“. Mit Hilfe der page-Direktive kann dem Web-Container z.B. mitgeteilt werden, ob die Seite an einer Sitzung teilnehmen soll, welche Java-Klassen importiert werden sollen oder welchen Typs der Inhalt der Seite ist. Die „include“-Direktive ermöglicht das Einbinden einer Datei in die JSP-Seite zur Übersetzungszeit und mit Hilfe der „taglib“-Direktive können, Tag-Bibliotheken (s.u.) eingebunden werden.
Aktionen
Aktionen unterteilen sich in Standardaktionen und benutzerdefinierte Aktionen. Während Standardaktionen eine feste Sammlung an Tags zur dynamischen Verarbeitung der JSP-Seite darstellen, werden benutzerdefinierte Aktionen über selbstdefinierte Tag-Bibliotheken (s.u.) eingebunden. Die Syntax einer Aktion lautet <präfix:aktion>, wobei das Präfix als Namensraum zur eindeutigen Idenitifkation bei gleichen Aktionsnamen dient. Standardaktionen erhalten das Präfix „jsp“.
Funktionsweise
Auch wenn es so aussieht als würde der Browser die JSP-Seiten verarbeiten: Der Java-Code wird serverseitig ausgeführt. Wenn eine JSP-Seite auf dem Server erstmalig angefordert wird, übersetzt dieser die Seite zunächst in ein Java Servlet und kompiliert dieses. (Anm: daher konnten JSPs auf dem Tomcat bis Version 5.0 nur mit JDK ausgeführt werden). JSPs sind daher eigentlich keine komplett neue Technologie sondern eine Art Wrapper für Servlets zur Erleichterung der Entwicklung. Nach der Übersetzung werden vom Servlet Container die üblichen Schnittstellenmethoden des Servlets angesprochen, der Java Code ausgeführt und reines HTML zurück an den Browser geschickt. Der Browser bekommt von den dynamischen Inhalten nichts mit. In der Folge wird das Kompilierte Servlet direkt angesprochen sofern der Quellcode der JSP-Seite zwischenzeitlich nicht verändert wurde.
Tag-Bibliotheken
Die Verwendung von Skripten bewirkt eine Vermischung von Auszeichnungs- und Programmcode, da die dynamischen Elemente, mitten im Auszeichnungscode an erforderlicher Stelle implementiert werden. Die Code-Fragmente verzerren dabei das Erscheinungsbild zu lasten Unübersicht. Mit Hilfe von Tag-Bibliotheken besteht die Möglichkeit Programmcode in Tags auszulagern. Dabei werden Java-Code und HTML-Output in Klassen ausgelagert, die von der Klasse „javax.servlet.jsp.tagext.TagSupport“ abgeleitet sind und ein Verhalten des Tags implementieren. Anschließend werden die Klassen in einer Tag-Bibliothek (*.tld-Datei) im Ordner WEB-INF registriert. Über die Taglib-Direktive kann die Tag-Bibliothek in JSP-Dateien bekannt gemacht werden. Dabei wird ein Präfix als Namensraum zur eindeutigen Identifizierung vergeben. So können die registrierten Tags über die Notation <präfix:tag> verwendet werden.
JSTL
Vom „Java Community Process“ werden mit der „JavaServer Pages Standard Tag Library“ (JSTL) bereits eine Reihe von Tag-Bibliotheken zur Kapselung wichtiger Funktionen zur Verfügung gestellt. Eine Referenzimplementierung wird innerhalb des Apache Jakarta Projektes geführt.
JSP in Web Frameworks
Externe Links
JSP-Seite von SUN
Implementierung der JSTL von Apache
JSP Tutorial