Jakarta Server Pages
JSP oder JavaServer Pages ist eine von Sun Microsystems entwickelte Technologie, die im Wesentlichen zur einfachen dynmaischen Erzeugung von HTML- und XML Ausgaben eines Webservers dient. Diese Technologie erlaubt es Java Code und spezielle JSP-Aktionen in statischen Inhalt einzubetten. Dies hat den Vorteil, dass bei dieser Technologie die Logik unabhängig vom Design implementiert werden kann.
Die JSP-Syntax erlaubt es mittels spezieller XML-Tags (JSP-Aktionen) vordefinierte Funktionalität einzubinden. Diese JSP-Aktionen werden in so genannten Tag Bibliotheken (Tag Libaries) als Erweiterung der HTML bzw. XML Tags definiert.
JSPs werden mit Hilfe eines JSP-Compilers in ein Java Servlet kompiliert. Ein JSP-Compiler kann ein Servlet im Java Code erzeugen, der dann wiederum durch einen Java-Compiler zu Bytecode kompiliert wird, oder aber er kann direkt Bytecode für das Servlet erzeugen. Der so erzeugte Code kann dann von einem Webserver mit entsprechender Servlet Engine ausgeführt werden.
JSP Syntax
Grundsätzlich lassen 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
- JSP-Direktiven
- JSP-Skriptelemente
- JSP-Aktionen
- JSP Tag-Bibliotheken (Tag Libaries)
Statischer Inhalt
Der statische Inhalt sind alle jenen Element die vom Webserver in den HTTP-Response (Antwort) ohne Veränderung übernommen werden (z.B.: HTML-Tags). So wäre ein normales HTML-Dokument gänzliche ohne JSP-Elemente, wie eingebetteten Java Code oder JSP-Aktionen, eine gültige JSP. Denn eine JSP erlaubt es nur dynamische Daten in statischen Inhalt einzufügen, setzt es aber nicht voraus.
Ein großer Vorteil der JSP-Technologie ist, dass der Ersteller des statischen Inhalts (also des Designs) über keine Java-Kenntnisse verfügen muss.
JSP Direktiven
Eine Direktive dient zum Übermitteln von speziellen Seiteninformationen an den JSP-Compiler, dadurch kann man angeben, ob die JSP eine TagLib einbindet oder wie im Fehlerfall weiter zu verfahren ist.
Die allgemeine Syntax für eine Direktive ist <@ ... %>
. Folgende Dirketive sind vorhanden:
- include, diese Direktive weist den JSP-Compiler an, den Inhalt einer ganzen externen Datei in die Originaldatei zu kopieren.
<%@ include file="BeispielDatei.ext" %>
- page
- import, ein Java import Statement wird in das File generiert
- contentType, gibt die Art des Fileinhaltes an. Sollte dann eingesetzt werden, wenn man kein HTML benutzt oder den Default Zeichensatz nicht verwendet
- errorPage, gibt die Seite an die im Fehlerfall angezeigt werden sollte
- isErrorPage, gibt an ob diese Seite eine Error Page ist oder nicht
- isThreadSafe, gibt an ob das aus der JSP generierte Servlet Thread sicher ist oder nicht
- <%@ page import="java.util.*" %> //import
- <%@ page contentType="text/html" %> //contentType
- <%@ page isErrorPage=false %> //es wird keine Error Page verwendet
- <%@ page isThreadSave=true %> //eine Thread sichere JSP
- tagLib, diese Direktive gibt an das eine Taglib verwendet werden soll. Es muss ein Prefix und eine URI für die TagLib vergeben werden.
<%@ taglib prefix="MeinPrefix" uri="taglib/MeineTagLib.tld" %>
JSP Skriptelement
Standard Skript Variablen
Die folgenden Variablen können in jeder JSP verwendet werden.
- out, JSPWriter, der die Daten in den HTTP-Response Stream schreibt
- page, das Servlet selber
- pageContext, eine Instanz des PageContext, welche die Daten der gesamten Seite enthält
- request, das HTTP Request Objekt
- response, das HTTP Response Objekt
- session, das HTTP Session Objekt. Es kann dazu benutzt werden, um Information über den Benutzer von einem Request zum nächsten weiterzureichen
JSP-Deklaration
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.
<%! int variableMeinerKlasse = 0; %>
JSP-Ausdruck
Ausdrücke (Expressions) werden dazu verwendet, um Variablen oder Methoden direkt in den HTML oder XML Ausgabestrom zu integrieren.
Die Klassenvaribale ist <%= variableMeinerKlasse %>
JSP-Skriptlets
JSP-Skriptlets können zur Implementierung der Ablauflogik sowie der Erzeugung der HTML- oder XML Ausgabe eingesetzt werden. Der Skriptlet Code wird innerhalb der _jspService() Methode des generierten Servlets eingefügt.
<% int variable = 0; out.println("Der Wert der Variable ist : " + variable); %>
JSP-Kommentare
Kommentare sind nur innerhalb der orginalen JSP sichtbar, sie werden nicht in den Ausgabestrom generiert.
<%-- Kommentar innerhalb einer JSP --%>
JSP-Aktionen
JSP-Aktionen sind XML-Tags die die eingebaute Funktionalität von Webservern einbinden. Die folgenden Aktionen sind verfügbar:
- jsp:include, die angegebe JSP wird vom Java Servlet aufgerufen, dabei wird der Request und der Response übergeben. Ist die angegeben JSP abgearbeitet, kommt die Steuerung zur gegenwärtigen JSP zurück. Diese JSP Aktion bewirkt das JSP Code zwischen zwei JSPs geteilt anstattt kopiert wird.
<jsp:include page="mycommon.jsp" >
- <jsp:param name="extraparam" value="myvalue"/>
</jsp:include>
- jsp:param, definiert einen Parameter, der zu den Requestparametern hinzugefügt wird. Diese Aktion kann innherhalt eines jsp: include oder jsp: forward Blocks verwendet werden.
- jsp:forward, der Request und der Response wird an eine andere JSP oder ein Servlet übergeben. Die Steuerung kommt nicht zur gegenwärtigen JSP zurück.
<jsp:forward page="subpage.jsp" >
- <jsp:param name="forwardedFrom" value="this.jsp" />
</jsp:forward>
- jsp:plugin, diese Aktion generiert je nach verwendeten Browser einen Tag zum Einbinden eines Java Applets. Dies wird benötigt, da in den älteren Versionen der Browser von Netscape (Navigator)und Microsoft (Internet Explorer) verschiedene Tags zum Einbinden eines Applets verwendet werden.
<jsp:plugin type=applet height="100%" weight="100%"
-    archive="myjarfile.jar,myotherjar.jar"
-    codebase="/applets"
-    code="com.foo.MyApplet" >
-  <jsp:params>
-   <jsp:param name="enableDebug" value="true" />
-  </jsp:params>
-  <jsp:fallback>
-    Your browser does not support applets.
-  </jsp:fallback>
</jsp:plugin>
- jsp:fallback, definiert den Inhalt der angezeigt wird falls der Browser keine Applets unterstüzt.
- jsp:setProperty, diese Aktion setzt in Property in der definierten Java Bean.
<jsp:setProperty name="myBean" property="lastChanged" value="<%= new Date()%>" />
- jsp:getProperty, diese Aktion holt sich ein Property von der definierten Java Bean.
<jsp:getProperty name="myBean" property="lastChanged" />
- jsp:useBean, diese Aktion erstellt oder wiederverwendet eine Java Bean. Das Attribute scope gibt an wie lange Attribute zur Verfügung stehen. Folgende Werte können definert werden:
- request- Attribute sind nur solange verfügbar, wie der Request existiert.
- page - Attribute sind nur für die gegenwärtige JSP verfügbar
- session - Attribute sind nur solange verfügbar, wie die Benutzer Session existiert
- application - Attribute sind immer verfügbar
<jsp:useBean id="myBean" class="com.foo.MyBean" scope="request" />
- <jsp:getProperty name="myBean" property="lastChanged" />
<jsp:setProperty name="myBean" property="lastChanged" value="<%= new Date()%>" />
JSP Tag-Bibliotheken
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 ist ein XML-Beschreibungsfile, dass die benutzerdefinierten Aktionen definiert und die dazugehörigen Java Klassen, die den Tag implementieren, angibt.
Model View Controller Paradigma
Sun empfiehlt die Verwendung des Model View Controller Patterns beim Benutzen von JSPs. Das Pattern hat den Sinn die Darstellung von der Requestverarbeitung und Datenspeicherung zu trennen. Es sollten eigene Servlets oder JSPs 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 Java Beans verwendet werden.
Model View Controller Pattern | |
---|---|
![]() |
Versionen
- JSP 1.0
- JSP 1.1
- JSP 1.2
- JSP 2.0
Siehe auch
Weblinks
- http://java.sun.com/products/jsp/index.html, Produktbeschreibung von SUN
- http://java.sun.com/products/jsp/tags/11/tags11.html, JSP Syntaxreferenz von SUN
- http://jakarta.apache.org/tomcat/, Referenzimplementierung eines Servlet Containers (Open Source)