Document

Werbung
JSP-Theorie
jetzt lerne ich
KAPITEL 3
Nachdem Sie im letzten Kapitel erste Schritte mit JSP unternommen haben,
sehen wir uns in diesem Kapitel die JSP-Syntax ein wenig näher an. Die JSPSyntax wird in mehrere Abschnitte aufgeteilt:
1. Scriptlets
2. Ausdrücke
3. Deklarationen
4. Direktiven
5. Vordefinierte Variablen und Objekte
6. Verwendung von JavaBeans
7. Verwendung von Java-Applets
3.1
Scriptlets, Deklarationen und
Ausdrücke
Scriptlets sind nichts anderes als das Einfügen von Java-Code in den HTMLCode und dürften auch die häufigste Anwendung sein. Diese Scriptlets haben
Sie im letzten Kapitel kennen gelernt. Ein Scriptlet befindet sich in einer JSPDatei innerhalb von <% ...%>. Alternativ zu dieser Schreibweise können Sie
auch eine XML-basierte Notation verwenden:
53
jetzt lerne ich
3 JSP-Theorie
<jsp:scriptlet>
zahl=zahl+1;
</jsp:scriptlet>
Eine Deklaration ist nichts anderes, als das Deklarieren von Variablen oder
Objekten innerhalb der JSP-Datei. Ein weiterer Java-Code, der als Scriptlet
innerhalb von <% ... %> erscheint, kann dann mit diesen Variablen oder Objekten arbeiten. Deklarationen können an beliebigen Stellen vorgenommen
werden. Ein Scriptlet kann mit den gesetzten Variablen arbeiten. Es kann aber
auch ein so genannter Ausdruck (engl. expression) erstellt werden. Ausdrücke können nur den Wert von Variablen anzeigen oder Methoden aufrufen.
Deren Ergebnis wird in einen String konvertiert und angezeigt.
Deklarationen und Ausdrücke werden ähnlich wie ein Scriptlet notiert:
Listing 3.1:
Eine Deklaration und ein
Ausdruck
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><title>JSP</title></head>
<body>
<%! private int zahl=100; %>
<p>Die Variable a besitzt den Wert</p>
<%= zahl %>
</body></html>
Eine Dekaration befindet sich in einer JSP-Datei immer innerhalb von <%!
...%>. Hier kann jede Java-Variable oder jedes Java-Objekt deklariert werden.
Beachten Sie aber, dass die Deklaration mit einem Semikolon abgeschlossen
wird.
Das Auslesen einer Variablen erfolgt über einen so genannten Ausdruck. Dieser erfolgt immer über <%=...%>. Nach dem Gleichheitszeichen wird einfach
der Name der auszulesenden Variablen angegeben. Beachten Sie, dass anders als bei der Deklaration am Ende des Ausdrucks kein Semikolon notiert
wird.
Alternativ zu dieser Schreibweise können Sie auch eine XML-basierte Notation für die Deklaration vornehmen:
<jsp:declaration>
private int zahl=100;
</jsp:declaration>
Innerhalb von <jsp:declaration> ... </jsp:declaration> nehmen Sie die
Deklaration vor. Für den Ausdruck existiert in der JSP-Syntax das Tag
<jsp:expression>:
<jsp:expression>
zahl
</jsp:expression>
54
Direktiven
3.2
jetzt lerne ich
Direktiven
Direktiven betreffen die aktuelle JSP-Datei und beeinflussen den Aufbau der
JSP-Seite. JSP kennt drei Direktiven:
쐽 Page
쐽 Include
쐽 Taglib
Die Page-Direktive gibt Auskunft über die verwendete Sprache, kann JavaKlassen importieren und eine Fehler-Seite angeben. Die zweite Direktive lautet Include und bindet eine externe JSP-Datei ein. Dadurch kann Code in
mehrere separate Dateien aufgeteilt werden. In diesem Abschnitt beschäftigen wir uns mit den Direktiven Page und Include.
Die dritte Direktive lautet Taglib und bietet die Möglichkeit, eigene Tags zu definieren, die in der JSP-Datei eingesetzt werden können. Mehr dazu in Kapitel
13.
3.2.1
Die Page-Direktive
Die Page-Direktive gibt Auskunft über die aktuelle JSP-Datei. Sie wird dann
notwendig, wenn beispielsweise Java-Klassen importiert werden müssen. In
den Codebeispielen des letzten Kapitels war keine Page-Direktive enthalten,
denn sie war auch nicht nötig. Eine minimale Page-Direktive sieht so aus:
<%@ page language="java" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><body>
<%! private int zahl=100; %>
<p>Die Variable a besitzt den Wert</p>
<%= zahl %>
</body></html>
Listing 3.2:
Die PageDirektive
Die Page-Direktive wird über <%@ page ...%> angegeben. Sie kann mehrere
Attribute enthalten, die bestimmte Einstellungen für die JSP-Datei festlegen.
Über das Attribut language wird die Sprache der JSP-Seite angegeben. Diese
ist natürlich java. Die Position der Page-Direktive ist innerhalb der JSP-Datei
beliebig. Ideal ist jedoch der Anfang der JSP-Datei oder bevor der erste JSPCodeabschnitt auftaucht. Alternativ kann auch eine XML-basierte Syntax verwendet werden:
<jsp:directive.page language="java" />
55
jetzt lerne ich
3 JSP-Theorie
Allgemein hat die Page-Direktive diese Form und besitzt folgende Attribute:
<%@ page
language="java"
import="package.class"
extends="package.class"
session="true|false"
buffer="none|8kb|sizekb"
autoFlush="true|false"
isThreadSafe="true|false"
info="text"
errorPage="relativeURL"
contentType="mimeType"
isErrorPage="true|false"
pageEncoding="characterSet|ISO-8859-1"
%>
Das Attribut language
Gibt die verwendete Programmiersprache an. Derzeit ist nur der Wert java
möglich.
Das Attribut import
Importiert Java-Pakete und -Klassen. Sollen mehrere Pakete importiert werden, müssen diese durch ein Komma voneinander getrennt werden:
<%@ page language="java" import="java.io.*, java.sql.*,java.util.*"
%>
Folgende Java-Pakete brauchen nicht angegeben zu werden, da sie automatisch importiert werden:
java.lang.*
javax.servlet.*
javax.servlet.jsp.*
javax.servlet.http.*
Die vier Pakete sind in J2EE enthalten und die Basis-Pakete sowohl für Java
allgemein (java.lang.*), sowie für Servlets und JSPs (javax.servlet.*,
javax.servlet.jsp.*, javax.servlet.http.*).
Das Attribut extends
Gibt den Namen der Superklasse für die Klasse an, in die die aktuelle JSPDatei kompiliert wird. Das Attribut extends sollte mit Vorsicht eingesetzt
werden, denn es muss darauf geachtet werden, dass diese Klasse von einer
geeigneten Servlet-Klasse abgeleitet ist, damit das JSP von der JSP-Engine
richtig ausgeführt werden kann.
56
Direktiven
jetzt lerne ich
Das Attribut session
Legt fest, ob das Session-Management eingesetzt wird (true) oder nicht
(false). Ist der Wert true, kann das session-Objekt eingesetzt werden. Der
Default-Wert ist true.
Das Attribut buffer
Legt die Größe des Puffers für das out-Objekt fest. Standardmäßig ist dieser
Wert auf 8 Kilobyte gesetzt, kann aber auch mit anderen Werten belegt werden.
Das Attribut autoFlush
Legt fest, ob der Puffer geleert werden soll, wenn dieser voll ist (true) oder
nicht (false). Ist der Puffer voll und autoFlush auf false gesetzt, wird die Fehlermeldung Buffer Overflow ausgegeben.
Das Attribut isThreadSafe
Legt fest, ob die JSP-Datei mehrfache Anfragen gleichzeitig bearbeiten kann
(true) oder nicht (false).
Das Attribut info
Gibt einen Text an, der in die kompilierte JSP-Datei eingefügt wird. Der Text
ist im Browser nicht sichtbar und kann nachträglich über die Methode Servlet.getServletInfo() ermittelt werden.
Das Attribut errorPage
Gibt eine JSP-Datei an, die bei einer Fehlermeldung aufgerufen wird. Soll ein
Pfadname angegeben werden, so ist die Pfadangabe relativ zum aktuellen
Verzeichnis, in dem sich die aktuelle JSP-Datei befindet. Mehr zu Error-Dateien und Fehlermeldungen in Kapitel 4.3.
Das Attribut isErrorPage
Legt fest, ob die aktuelle JSP-Datei eine Error-Datei ist (true) oder nicht (false). Die Error-Datei muss in der Page-Direktive im Attribut errorPage der JSPDateien angegeben werden, bei denen ein Fehler auftreten kann. Mehr zu Error-Dateien und Fehlermeldungen in Kapitel 4.3.
Das Attribut contentType
Gibt den MIME-Typ und eventuell auch den zugrunde liegenden Zeichensatz
der JSP-Datei an. Die Default-Werte sind text/html und iso-8859-1.
57
3 JSP-Theorie
jetzt lerne ich
Das Attribut pageEncoding
Gibt den zugrunde liegenden Zeichensatz der JSP-Datei an. Der Default-Wert
ist iso-8859-1.
Beispiel
<%@ page language="java"
import="java.io.*"
contentType="text/html;charset=iso-8859-15"
errorPage="error.jsp"
%>
Das gleiche Beispiel in der XML-Syntax lautet:
<jsp:directive.page language="java"
import="java.io.*"
contentType="text/html;charset=iso-8859-15"
errorPage="error.jsp"
</jsp:directive.page>
3.2.2
Die Include-Direktive
Über die Direktive Include können externe Dateien in die aktuelle JSP-Datei
eingebunden werden. Die externen Dateien werden zum Zeitpunkt des Kompilierens eingefügt. Folgende Dateien können eingebunden werden:
쐽 JSP-Dateien
쐽 HTML-Dateien
쐽 XML-Dateien
쐽 Textdateien
Die Include-Direktive wird über
<%@ include file="datei" %>
angegeben. Alternativ ist auch eine XML-basierte Form möglich:
<jsp:directive.include file="datei" />
Allgemein hat die include-Direktive diese Form:
<%@ include file="datei" %>
Das Attribut file
Gibt die einzubindende externe Datei an. Muss ein Pfadname angegeben werden, so ist die Angabe des Pfads relativ zum aktuellen Verzeichnis.
58
Vordefinierte Objekte
jetzt lerne ich
Beispiel
<%@ include file="daten.xml" %>
<jsp:directive.include file="test.jsp" />
3.2.3
Die Taglib-Direktive
Über die Direktive Taglib werden selbstdefinierte Tags angegeben, die in der
aktuellen JSP-Datei verwendet werden können. Diese selbstdefinierten Tags
müssen vorher erstellt worden sein. Das Erstellen von eigenen Tags ist umfangreich und setzt JSP-Wissen voraus. Daher befindet sich eine Beschreibung der Taglibs erst in Kapitel 13.
3.3
Vordefinierte Objekte
Innerhalb einer JSP-Datei existieren vordefinierte Objekte, die Sie direkt einsetzen können, ohne diese Objekte vorher über eine Deklaration zu erstellen.
Diese vordefinierten Objekte werden auch als implizite Objekte bezeichnet.
Im letzten Kapitel haben Sie mit dem out-Objekt gearbeitet. Dies ist eines der
vordefinierten Objekte in JSP. Folgende vordefinierte Objekte kennt JSP:
쐽 out: Für Ausgaben an den Client zuständig. Das Objekt ist von der Klasse
JspWriter abgeleitet.
쐽 request: Für Anfragen zuständig, insbesondere bei der Auswertung von
Formularen notwendig. Abgleitet von HttpServletRequest aus dem Paket
javax.servlet.http. Das Kapitel 5 beschäftigt sich mit dem request-Objekt und der Auswertung von HTML-Formularen durch JSP.
쐽 response: Für das Hinzufügen von HTTP-Informationen beim Senden
über das out-Objekt von Ergebnissen einer ausgeführten JSP-Datei. Abgeleitet von HttpServletResponse aus dem Paket javax.servlet.http.
쐽 session: Für das Sessionsmanagement zuständiges Objekt. Abgeleitet von
HttpSession aus dem Paket javax.servlet.http.
쐽 application: Über dieses Objekt können Daten applikationsweit, d.h.
über mehrere JSP-Dateien hinweg, gespeichert werden. Abgeleitet von
ServletContext aus dem Paket javax.servlet.
쐽 config: Objekt zur Konfiguration. Abgeleitet von ServletConfig aus dem
Paket javax.servlet.
쐽 pageContext: Allgemeines Objekt zum Zugriff auf die Seitenattribute der
aktuellen JSP-Datei. Abgeleitet von PageContext aus dem Paket javax.servlet.jsp.
59
3 JSP-Theorie
jetzt lerne ich
쐽 page: Derzeit identisch mit der Java-Referenz this. Kann möglicherweise
in der Zukunft mit anderen Werten belegt werden, falls eine andere Programmiersprache als Java eingesetzt wird.
3.4
Verwendung von JavaBeans
JavaBeans lassen sich ohne Probleme in eine JSP-Datei integrieren und deren Methoden aufrufen. Dazu dienen drei spezielle JSP-Tags:
쐽 <jsp:useBeans>
쐽 <jsp:setProperty>
쐽 <jsp:getProperty>
Das Tag <jsp:useBean> bindet die konkrete Bean-Klasse ein, während über
<jsp:setProperty> Werte von Bean-Eigenschaften gesetzt und über
<jsp:getProperty> ausgelesen werden können. Das Kapitel 7 beschäftigt sich
mit der Einbindung von JavaBeans innerhalb von JSP.
3.5
Zusammenfassung
In diesem Kapitel habe ich Ihnen erläutert, was Scriptlets, Deklarationen und
Ausdrücke sind. Sie haben die drei Direktiven von JSP kennen gelernt. Wir
haben uns die Page- und Include-Direktive etwas näher angesehen. In einem
kurzen Überblick haben wir auch gesehen, wie JavaBeans und Java-Applets
eingebunden werden können.
JSP besitzt mehrere vordefinierte Objekte, von denen Sie schon in Kapitel 2
das out-Objekt kennen gelernt haben. Insgesamt sind acht Objekte vordefiniert. Vordefinierte Objekte sind Objekte, die sofort zur Verfügung stehen und
nicht explizit deklariert werden müssen.
3.6
Fragen und Antworten
Was ist ein Scriptlet?
Ein Scriptlet ist ein Stück Java-Code, das in den HTML-Code über das Tag <%
... %> eingebunden wird.
Was ist eine Deklaration?
Eine Deklaration in JSP ist eine Zuweisung einer Variablen oder eines Objekts. Eine Deklaration kann außerhalb eines Scriptlets stehen und wird über
das Tag <%! ...%> angegeben.
60
Übungen
jetzt lerne ich
Was ist ein Ausdruck?
Ein Ausdruck in JSP ist ein Wert, der aus Variablen oder Methodenaufrufen
erzeugt und in die Ausgabe eingefügt wird. Ein Ausdruck kann außerhalb eines Scriptlets stehen und wird über das Tag <%= ...%> angegeben.
3.7
Übungen
1. Was ist die Page-Direktive?
2. Wo liegt der Unterschied zwischen der Include- und der Page-Direktive?
61
Herunterladen