Jakarta Server Pages (JSP), früher JavaServer Pages, ist eine von Sun Microsystems entwickelte, auf JHTML basierende Web-Programmiersprache zur einfachen dynamischen Erzeugung von HTML- und XML-Ausgaben eines Webservers.
Sie erlaubt, Java-Code und spezielle JSP-Aktionen in HTML- oder XML-Seiten einzubetten. Dabei ermöglicht es die JSP-Syntax, mittels spezieller XML-Tags (JSP-Aktionen) vordefinierte Funktionalität einzubinden. Diese JSP-Aktionen werden in sogenannten Tag-Bibliotheken (Tag-Libraries) als Erweiterung der HTML- bzw. XML-Tags definiert.
Jakarta Server Pages werden unter Verwendung eines speziellen JSP-Compilers in Java-Quellcode umgewandelt. Dieser Quellcode, der einem Java-Servlet entspricht, wird im Anschluss durch den Java-Compiler in Bytecode umgewandelt. Die so erzeugten Java-Klassen können dann von einem mit einer Java-Ausführungseinheit ausgestatteten Webserver ausgeführt werden.
JSP, das schon Ende der 1990er Jahre verfügbar war, ist eine vergleichsweise althergebrachte Technik zum Erzeugen von Webanwendungen. Es wird zunehmend von anderen Techniken abgelöst. Unter Verwendung des Frameworks Jakarta Server Faces (JSF) und der neueren Facelets-Technik unter Jakarta EE (Jakarta Enterprise Edition) gilt Oracle JSP als deprecated.
Syntax Bearbeiten
Grundsätzlich lässt sich JSP als eine Art HTML- oder XML-Seite mit zusätzlichen JSP-spezifischen Tags und Java-Code beschreiben. Eine JSP kann grob in die folgenden Elemente aufgeteilt werden:
- statischer Inhalt wie HTML (template text)
- JSP-Direktiven
- JSP-Skriptelemente
- JSP-Aktionen
- JSP-Tag-Bibliotheken (Tag Libraries)
Statischer Inhalt Bearbeiten
Der statische Inhalt sind all jene Elemente, die vom Webserver in die HTTP-Response (Antwort) ohne Veränderung übernommen werden (z. B. HTML-Tags). So wäre ein normales HTML-Dokument gänzlich ohne JSP-Elemente, wie eingebetteten Java-Code oder JSP-Aktionen, eine gültige JSP; denn JSP erlaubt es zwar, dynamische Daten in statischen Inhalt einzufügen, erfordert dies aber nicht. Daraus folgt, dass (wie bei jeder Templatesprache) der Ersteller des statischen Inhalts (also des Designs) keinerlei Java-Kenntnisse benötigt; sobald HTML-Strukturen aber durch Java-Code erzeugt werden erhöht sich deren Komplexität und das Layout kann an diesen Stellen fast nur noch vom Programmierer geändert werden.
Da es sich bei einer JavaServer Page um eine dynamische Komponente handelt, kann diese aber auch gänzlich ohne statische Elemente auskommen. Auf diese Weise ist es möglich, über ein JSP-Dokument auch Binärdaten wie Bilder oder Töne zu erzeugen und an den Client zu senden.
Direktiven Bearbeiten
Eine Direktive dient zum Übermitteln spezieller Seiteninformationen an den JSP-Compiler; dadurch kann man angeben, ob die JSP eine Tag-Library (kurz Taglib) einbindet oder wie im Fehlerfall weiter zu verfahren ist.
Die allgemeine Syntax für eine Direktive ist <%@ … %>
. Folgende Direktiven (mit den am weitesten verbreiteten Attributen) sind vorhanden:
Standardvariablen Bearbeiten
Die folgenden Variablen können in jeder JSP verwendet werden; Sie werden auch als implizite Objekte bezeichnet:
Skriptelemente Bearbeiten
Es gibt drei grundlegende Skriptelemente, die erlauben, Java-Code direkt in die JSP einzufügen:
- Ein Tag, das erlaubt, Code in die Klasse einzufügen. Dieses Tag kann dazu verwendet werden, Daten der Klasse festzulegen. Der Ausdruck wird in Member-Variablen der generierten Servlet-Klasse überführt.
- Ein Tag, das erlaubt, Code in die Methode
_jspService
des generierten Servlets einzufügen. Es werden also lokale Variablen daraus – Methoden können nicht erzeugt werden, hierzu muss die vorstehende Notation verwendet werden.
- Ein Tag, das erlaubt, Code zu expandieren und direkt in die HTTP-Antwort zu schreiben. Das Semikolon wird hier nicht benutzt, da der Code als Ausdruck ausgewertet wird.
Deklarationen Bearbeiten
Deklarationen dienen zur Definition von Variablen und Methoden, die von anderen Elementen in der JSP verwendet werden können. Deklarationen erzeugen keine Ausgabe innerhalb der JSP.
Ausdrücke Bearbeiten
Ausdrücke (expressions) werden dazu verwendet, Variablen oder Methoden direkt in den HTML- oder XML-Ausgabestrom zu integrieren.
Skriptlets Bearbeiten
JSP-Skriptlets können zur Implementierung der Ablauflogik sowie der Erzeugung der XML-Ausgabe eingesetzt werden. Der Skriptlet-Code wird innerhalb der Methode _jspService
des generierten Servlets eingefügt.
Kommentare Bearbeiten
Kommentare sind nur innerhalb der originalen JSP sichtbar, sie werden nicht in den Ausgabestrom geschrieben.
Aktionen Bearbeiten
JSP-Aktionen sind XML-Tags, welche die eingebaute Funktionalität von Webservern einbinden. Die folgenden Aktionen sind verfügbar:
<jsp:include page="mycommon.jsp"> <jsp:param name="extraparam" value="myvalue"/> </jsp:include>
<jsp:forward page="subpage.jsp"> <jsp:param name="forwardedFrom" value="this.jsp"/> </jsp:forward>
<jsp:plugin type="applet" height="100%" width="100%" archive="myjarfile.jar,myotherjar.jar" codebase="/applets" code="com.example.foo.MyApplet.class"> <jsp:params> <jsp:param name="enableDebug" value="true"/> </jsp:params> <jsp:fallback> Your browser does not support applets. </jsp:fallback> </jsp:plugin>
<jsp:setProperty name="myBean" property="lastChanged" value="<%= new Date()%>" />
<jsp:getProperty name="myBean" property="lastChanged" />
<jsp:useBean id="myBean" class="com.example.foo.MyBean" scope="request"> </jsp:useBean>
Tag-Bibliotheken Bearbeiten
Zusätzlich zu den vordefinierten JSP-Aktionen gibt es die Möglichkeit, benutzerdefinierte JSP-Aktionen zu verwenden. Dazu muss eine eigene JSP-Tag-Bibliothek zur Verfügung gestellt werden. Eine Tag-Bibliothek wird über eine XML-Beschreibungsdatei, den sogenannten Tag Library Descriptor (TLD), definiert, der Elemente (Tags) zu einer Bibliothek (Library) zusammenfasst und mit serverseitigen Java-Klassen assoziiert, die die funktionale Logik eines oder mehrerer Tags implementieren.
Im Rahmen des Java Community Process wurde die JavaServer Pages Standard Tag Library (JSTL) erstellt. Diese standardisiert die wichtigsten Customtags in verschiedenen Bibliotheken. Ebenfalls sehr verbreitet sind die Apache Taglibs, die neben der Referenzimplementierung für die JSTL auch viele zusätzliche Tag-Bibliotheken enthalten.
Model-View-Controller Bearbeiten
Sun empfiehlt die Verwendung des Model-2-Entwurfsmusters (ähnlich dem Model View Controller-Entwurfsmuster) beim Benutzen von JSPs. Für sehr kleine Projekte kann das Model 1 benutzt werden. Der Einsatz des Entwurfsmuster dient zur Trennung der Darstellung von der Request-Verarbeitung. Es sollten eigene Servlets für die Request-Verarbeitung verwendet werden. Nach der Request-Verarbeitung sollte eine eigene JSP nur für die Erstellung des Ausgabestroms vorhanden sein. Diese JSP sollte nur HTML oder XML und vordefinierte oder benutzerdefinierte JSP-Aktionen enthalten. Zum Einbinden der Daten sollten JavaBeans verwendet werden.
JSP 2.0 Bearbeiten
Mit Einführung der Servlet-API 2.4 und der Verabschiedung von JSP 2.0 ist es möglich, komplett auf JSP-Skriptelemente zu verzichten. JSPX-Dokumente entsprechen wohlgeformten XML-Dokumenten, deren Tag-Elemente durch eindeutige Namensräume definiert sind. So ist es beispielsweise möglich, XHTML-konforme Ausgaben zu erzeugen, ohne dass Tag-Bezeichner kollidieren.
Das folgende Beispiel zeigt das Gerüst eines wohlgeformten JSPX-Dokumentes zur Erzeugung von XHTML-Code. Über das XML-Wurzelelement „<jsp:root>
“ werden ein Standardnamensraum für XHTML-Elemente definiert (xmlns) und ein Namensraum für JSP-Elemente (xmlns:jsp). Durch das Voranstellen des jeweiligen Namensraums (zum Beispiel <jsp: …
) kann ein Tag auf diese Weise eindeutig referenziert werden. Auch Java Tag Libraries werden auf diese Weise als Namensraum eingebunden; eine entsprechende Direktive gibt es nicht mehr. Die Namensraumdefinition wird an Kindelemente vererbt.
Im Beispiel wird, aus Kompatibilitätsgründen zu aktuellen Browsern, über die JSP-Direktive „page“ als Content-Type "text/html" anstatt "application/xhtml+xml" vereinbart, da viele gängige Browser XHTML-Dokumente sonst als XML-Quelltext interpretieren würden, anstatt die XHTML-Elemente zu interpretieren und darzustellen. Außerdem kennt der Internet Explorer diesen Typ nicht, was dazu führt, dass die Seite als Datei zum Download angeboten wird. (Das passiert allerdings nur, wenn der Webserver die Datei auch als application/xhtml+xml ausliefert.)
<?xml version="1.0" encoding="utf-8"?> <jsp:root xmlns="http://www.w3.org/1999/xhtml" xmlns:jsp="http://java.sun.com/JSP/Page" version="2.0"> <jsp:output doctype-root-element="html" doctype-public="-//W3C//DTD XHTML 1.1//EN" doctype-system="http://www.w3c.org/TR/xhtml11/DTD/xhtml11.dtd" /> <jsp:directive.page contentType="text/html; charset=utf-8" language="java" /> <html xmlns="http://www.w3.org/1999/xhtml"> XHTML- und/oder JSP-Elemente </html> </jsp:root>
Eine weitere Neuerung ist die sogenannte „Expression Language“ (EL). Die Expression-Language besteht aus Skriptelementen, die an Skriptelemente interpretierter Skriptsprachen angelehnt sind. Jedes Skriptelement beginnt mit einem Dollarzeichen und schließt einen Ausdruck (englisch expression) in geschweiften Klammern ein.
${1+2}, ${PI/2}, ${person.name}
Der Ausdruck kann ein einfacher Platzhalter einer Variablen sein, eine Konstante oder ein Term. Auch eine Referenzierung innerhalb abstrakter Datenstrukturen ist über Introspektion möglich.
Eine spezielle Erweiterung des JSP-Compilers ersetzt vor dem Kompiliervorgang jedes Vorkommen der EL-Elemente durch den entsprechenden Java-Code.
Die EL-Elemente wurden so konzipiert, dass sie weitgehend ohne geschützte XML-Entitäten auskommen. Ausnahmen sind gewisse boolesche Vergleiche, die sich aber leicht umschreiben lassen, so wird beispielsweise < zu lt. Die Elemente können also in wohlgeformten XML-Dokumenten eingesetzt werden.
Eine weitere Neuerung in JSP 2.0 sind die sogenannten „Tag Files“, damit lassen sich „Custom Tags“ in Form von JSP-Seiten, ohne spezielle Java-Klassen erstellen. Ihre Verwendung bietet sich insbesondere für „Custom Tags“, die hauptsächlich Visualisierungskomponenten enthalten, an.
Versionen Bearbeiten
- JSP 1.0, Release am 27. September 1999
- JSP 1.1
- JSP 1.2
- JSP 2.0 (JSPX, EL)
- JSP 2.1, Bestandteil von Java EE 5
- JSP 2.2 (10. Dezember 2009, Maintenance Release von JSP 2.1), Bestandteil von Java EE 6
- JSP 2.3 (12. Juni 2013, 2. Maintenance Release von JSP 2.1), Bestandteil von Java EE 7
Siehe auch Bearbeiten
Weblinks Bearbeiten
- JavaServer Pages Technology Produktbeschreibung bei Oracle
- JSP 2.0 – Syntaxreferenz von Sun
- tomcat.apache.org – Referenzimplementierung eines Servlet-Containers (Open Source)
- www.jsptutorial.org – ein Tutorial zu JavaServer Pages und javabasierten Web-Applikationen
Einzelnachweise Bearbeiten
- developer.com
- oracle.com
- JavaServer Pages 1.0 Specification Info: Der Link wurde automatisch als defekt markiert. Bitte prüfe den Link gemäß Anleitung und entferne dann diesen Hinweis. (PDF) (Seite nicht mehr abrufbar, festgestellt im April 2018. Suche in Webarchiven.)