Zum Inhalt springen

Jakarta Server Pages

aus Wikipedia, der freien Enzyklopädie
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 2. März 2004 um 23:16 Uhr durch Zwobot (Diskussion | Beiträge) (Zwobot - Bot-unterstützte Begriffsklärung: CGI). Sie kann sich erheblich von der aktuellen Version unterscheiden.


JavaServer Pages, abgekürzt JSP, sind eine von Sun Microsystems entwickelte Technologie, die im Wesentlichen zur einfachen dynamischen 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.

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 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 eine JSP erlaubt es zwar 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.


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 Direktiven sind vorhanden:

  • include, diese Direktive weist den JSP-Compiler an, den vollständigen Inhalt einer externen Datei in die Originaldatei zu kopieren.
<%@ include file="BeispielDatei.ext" %>
  • page
    • import, ein Java-Import-Statement wird in der Datei generiert
    • contentType, gibt die Art des Datei-Inhaltes 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 soll
    • isErrorPage, gibt an ob diese Seite eine Error-Page ist oder nicht
    • isThreadSafe, gibt an ob das aus der JSP generierte Servlet threadsicher 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 threadsichere JSP

  • tagLib, diese Direktive gibt an, dass 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" %>

Skriptelemente

Standardvariablen

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, Information über den Benutzer von einem Request zum nächsten weiterzureichen.

Deklarationen

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; %>

Ausdrücke

Ausdrücke (expressions) werden dazu verwendet, Variablen oder Methoden direkt in den HTML- oder XML-Ausgabestrom zu integrieren.

Die Klassenvaribale ist <%= variableMeinerKlasse %>

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); %>

Kommentare

Kommentare sind nur innerhalb der originalen JSP sichtbar, sie werden nicht in den Ausgabestrom geschrieben.

<%-- Kommentar innerhalb einer JSP --%>

Aktionen

JSP-Aktionen sind XML-Tags die die eingebaute Funktionalität von Webservern einbinden. Die folgenden Aktionen sind verfügbar:


  • jsp:include, die angegebene 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, dass JSP-Code zwischen zwei JSPs geteilt anstatt kopiert wird.
<jsp:include page="mycommon.jsp" >
<jsp:param name="extraparam" value="myvalue"/>
</jsp:include>
  • jsp:param, definiert einen Parameter, der zu den Request-Parametern hinzugefügt wird. Diese Aktion kann innherhalb 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 verwendetem 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%"
&nbsp&nbsp archive="myjarfile.jar,myotherjar.jar"
&nbsp&nbsp codebase="/applets"
&nbsp&nbsp code="com.foo.MyApplet" >
&nbsp<jsp:params>
&nbsp&nbsp<jsp:param name="enableDebug" value="true" />
&nbsp</jsp:params>
&nbsp<jsp:fallback>
&nbsp&nbsp Your browser does not support applets.
&nbsp</jsp:fallback>
</jsp:plugin>
  • jsp:fallback, definiert den Inhalt der angezeigt wird, falls der Browser keine Applets unterstützt.
  • jsp:setProperty, diese Aktion setzt ein 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 verwendet eine Java-Bean wieder. Das Attribut scope gibt an wie lange Attribute zur Verfügung stehen. Folgende Werte können definiert 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()%>" />


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 wird über eine XML-Beschreibungsdatei, den so genannten Tag Library Descriptor (TLD), definiert, der Elemente (Tags) zu einer Bibliothek (Library) zusammenfasst und mit serverseitigen Java-Klassen assoziert, die die funktionale Logik eines oder mehrerer Tags implementieren.

Model-View-Controller

Sun empfiehlt die Verwendung des "Model View Controller Patterns" beim Benutzen von JSPs. Das Pattern hat den Sinn die Darstellung von der Request-Verarbeitung 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
Model View Controller Pattern

Siehe dazu auch: MVC-Modell

Versionen

  • JSP 1.0
  • JSP 1.1
  • JSP 1.2
  • JSP 2.0

Siehe auch: ASP, CGI, ColdFusion, J2EE, PHP, Servlet