.jsp

.jsp

JavaServer Pages, abgekürzt JSP, ist eine von Sun Microsystems entwickelte auf JHTML basierende Technik, die im Wesentlichen zur einfachen dynamischen Erzeugung von HTML- und XML-Ausgaben eines Webservers dient. Sie erlaubt, Java-Code und spezielle JSP-Aktionen in statischen Inhalt einzubetten. Dies hat den Vorteil, dass die Logik unabhängig vom Design implementiert werden kann.

Die JSP-Syntax ermöglicht mittels spezieller XML-Tags (JSP-Aktionen), vordefinierte Funktionalität einzubinden. Diese JSP-Aktionen werden in so genannten Tag-Bibliotheken (Tag-Library) als Erweiterung der HTML- bzw. XML-Tags definiert.

JavaServer 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 Webserver mit entsprechender Servlet-Engine ausgeführt bzw. interpretiert werden.

Inhaltsverzeichnis

Syntax

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

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 durch Java-Code erzeugt werden, geht die Verbindung jedoch verloren, und das Layout kann an diesen Stellen 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

Eine Direktive dient zum Übermitteln von speziellen 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 verbreitetsten Attributen) sind vorhanden:

include
weist den JSP-Compiler an, den vollständigen Inhalt einer externen Datei in die Originaldatei zu kopieren. Diese Einbettung geschieht zur „Translation Time“, also statisch einmalig mit der Übersetzung der JSP in ein Servlet.
<%@ include file="BeispielDatei.ext" %>
page
import
generiert ein Java-Import-Statement in der Datei
<%@ page import="java.util.*" %>
contentType
gibt die Art des Datei-Inhaltes an. Sollte dann eingesetzt werden, wenn man kein HTML benutzt oder den Default-Zeichensatz nicht verwendet (s. Internet Media Type)
<%@ page contentType="text/html" %>
errorPage
gibt die Seite an, die im Fehlerfall angezeigt werden soll
<%@ page errorPage="ErrorHandler.jsp" %>
isErrorPage
gibt an ob diese Seite eine Error-Page ist oder nicht; wenn ja, ist das exception-Objekt verfügbar
<%@ page isErrorPage=false %><%-- die Seite ist keine Error-Page --%>
isThreadSafe
gibt an, ob das aus der JSP generierte Servlet threadsicher ist oder nicht
<%@ page isThreadSafe=true %><%-- eine threadsichere JSP --%>
taglib
gibt an, dass eine Taglib verwendet werden soll. Es müssen ein Präfix und eine URI für die Taglib vergeben werden.
<%@ taglib prefix="MeinPrefix" uri="taglib/MeineTagLib.tld" %>

Standardvariablen

Die folgenden Variablen können in jeder JSP verwendet werden; Sie werden auch als implizite Objekte bezeichnet:

application
Anwendungsobjekt; lebt, solange der Server läuft.
config
eine Konfigurationsschnittstelle
out
JSPWriter, der die Daten in den HTTP-Response-Stream schreibt
page
das Servlet selbst
pageContext
eine Instanz des PageContext, welche die Daten der gesamten Seite enthält
request
das HTTP-Request-Objekt, also die Anfrage vom Client an den Server
response
das HTTP-Response-Objekt, also die Antwort vom Server an den Client
session
das HTTP-Session-Objekt. Es kann dazu benutzt werden, Information über den Benutzer von einem Request zum nächsten weiterzureichen.

Skriptelemente

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.
<%! int serverInstanceVariable = 1; %>
  • Ein Tag, das erlaubt, Code in die Methode _jspService des resultierenden Servlets einzufügen. Es werden also lokale Variablen daraus – Methoden können nicht erzeugt werden, hierzu muss die vorstehende Notation verwendet werden.
<% int localStackBasedVariable = 1; %>
  • 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.
<%= "expanded inline data " + 1 %>

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 Klassenvariable 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, welche die eingebaute Funktionalität von Webservern einbinden. Die folgenden Aktionen sind verfügbar:

jsp:include
die angegebene JSP wird vom Java-Servlet aufgerufen, dabei werden der Request und der Response übergeben. Ist die angegebene JSP abgearbeitet, kommt die Steuerung zur gegenwärtigen JSP zurück. Diese JSP-Aktion bewirkt, dass der eingebettete JSP-Code von allen einbettenden JSPs gemeinsam genutzt und nicht 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 innerhalb eines jsp:include- oder jsp:forward-Blocks verwendet werden. Falls der Parameter schon im Request vorhanden war, wird der Parameter überschrieben, also der Wert aus dem „Query String“ mit dem definierten value-Attribut ersetzt.
jsp:forward
der Request und der Response werden 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 ein 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%" width="100%"
            archive="myjarfile.jar,myotherjar.jar"
           codebase="/applets"
               code="com.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: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. Ist eine Bean vom definierten Typ nicht vorhanden, wird sie also initial neu erstellt. Das optionale Attribut scope gibt an, wie lange die Bean zur Verfügung steht, d. h. in welchem Gültigkeitsbereich die Bean hinterlegt wird. 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. (Standard)
session
Attribute sind nur solange verfügbar, wie die Benutzer-Session existiert.
application
Attribute sind immer verfügbar.
„Verfügbar“ heißt hier, wie lange bzw. von wo der Entwickler auf die Bean zugreifen kann. Ist die Bean beispielsweise im Request-Scope, so kann der Entwickler mit dieser Bean sowohl innerhalb der aktuellen JSP als auch in nachgelagerten (inkludierten) arbeiten. „Page-Scope“ beschränkt den möglichen Zugriff auf die aktuelle JSP-Seite. „Session“ beschreibt alle Requests einer Benutzersitzung zu dieser Web-Anwendung. „Application“ sind alle Requests aller Benutzer der gleichen Web-Anwendung dieses Web-Servers.
Beispiel:
   <jsp:useBean id="myBean" class="com.foo.MyBean" scope="request">     
   </jsp:useBean>

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 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 Jakarta Taglibs, die neben der Referenzimplementierung für die JSTL auch viele zusätzliche Tag-Bibliotheken enthalten.

Model-View-Controller

Sun empfiehlt die Verwendung des Model-2-Entwurfsmusters (ähnlich dem „Model View Controller Pattern“) beim Benutzen von JSPs. Für sehr kleine Projekte kann das Model 1 benutzt werden. Das Entwurfsmuster hat den Sinn, die Darstellung von der Request-Verarbeitung und Datenspeicherung zu trennen. 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.

Siehe dazu auch: MVC-Modell

JSP 2.0

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 so genannte „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 (engl. 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

  • JSP 1.0
  • JSP 1.1
  • JSP 1.2
  • JSP 2.0 (JSPX, EL)
  • JSP 2.1 (im Rahmen von EE 5)

Siehe auch

Active Server Pages (ASP), ASP.NET, Apache Tomcat, ColdFusion, Common Gateway Interface (CGI), J2EE, JavaServer Faces, JHTML, JSTL, PHP, Ruby on Rails, Servlet, Struts, OSCache

Weblinks


Wikimedia Foundation.

Игры ⚽ Нужна курсовая?

Schlagen Sie auch in anderen Wörterbüchern nach:

  • Jsp — Cette page d’homonymie répertorie les différents sujets et articles partageant un même nom. {{{image}}}   Sigles d une seule lettre   Sigles de deux lettres > Sigles de trois lettres …   Wikipédia en Français

  • JSP — is a three letter abbreviation with multiple meanings, as described below:* JavaServer Pages * Java stored procedure * Jackson Structured Programming * Joint Service Publication * JSP Records * Japan Socialist Party * Japanese Surrendered… …   Wikipedia

  • JSP — Стиль этой статьи неэнциклопедичен или нарушает нормы русского языка. Статью следует исправить согласно стилистическим правилам Википедии. JSP (JavaServer Pages)  технология, позволяющая веб разработчикам легко создавать содержимое, которое… …   Википедия

  • JSP — JavaServer Pages, abgekürzt JSP, ist eine von Sun Microsystems entwickelte auf JHTML basierende Technik, die im Wesentlichen zur einfachen dynamischen Erzeugung von HTML und XML Ausgaben eines Webservers dient. Sie erlaubt, Java Code und… …   Deutsch Wikipedia

  • Jsp — JavaServer Pages, abgekürzt JSP, ist eine von Sun Microsystems entwickelte auf JHTML basierende Technik, die im Wesentlichen zur einfachen dynamischen Erzeugung von HTML und XML Ausgaben eines Webservers dient. Sie erlaubt, Java Code und… …   Deutsch Wikipedia

  • .jsp — JavaServer Pages Le JavaServer Pages ou JSP est une technologie basée sur Java qui permet aux développeurs de générer dynamiquement du code HTML, XML ou tout autre type de page web. La technologie permet au code Java et à certaines actions… …   Wikipédia en Français

  • JSP — I JSP   [Abk. für Java Server Pages], Programmierung: eine von der Firma Sun Microsystems entwickelte Server seitige Programmiersprache zur Entwicklung von plattformunabhängigen Internetanwendungen …   Universal-Lexikon

  • JSP — Cette page d’homonymie répertorie les différents sujets et articles partageant un même nom.   Sigles d’une seule lettre   Sigles de deux lettres > Sigles de trois lettres   Sigles de quatre lettres …   Wikipédia en Français

  • JSP — abbr. Jackson Structured Programming (JSD) abbr. Java Server Pages (Java, Sun, JSP) comp. abbr. Java Server Page …   United dictionary of abbreviations and acronyms

  • JSP Records — is a record label founded in 1978 by John Stedman (John Stedman Productions). Based in London, England it predominantly releases remastered CDs of public domain jazz and blues recordings. JSP s releases typically undergo extensive manual cleanup… …   Wikipedia

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”