17.5 Skript-Elemente
 
Die Spezifikation unterscheidet verschiedene Skript-Elemente für Ausdrücke, Scriptlets und Deklarationen. Allen gemeinsam ist, dass sie mit dem Tag <% beginnen und mit %> enden. Skript-Tags können nicht geschachtelt werden.
Hinter dem öffnenden Tag kann noch ein weiteres Zeichen folgen, wie diese Aufzählung zeigt:
|
<% .. %>
Eingebettete Java-Stücke (Scriptlets) besitzen dieses Format. Hier lassen sich beliebige Deklarationen tätigen und Ausgaben machen. |
|
<%= .. %>
Der Ausdruck wird in die Seite eingebaut. |
|
<%! .. %>
Diese Umgebung definiert Variablen und Methoden. |
Es ist wegen der ähnlichen Schreibweise wichtig, die Unterscheidung zwischen Deklaration (!), Ausdruck (=) und Scriptlet aufrecht zu halten, da es sonst zu Compilermeldungen des JSP-Übersetzers kommt.
17.5.1 Scriptlets
 
Scriptlets liegen zwischen den Tags <% und %>. Zwischen ihnen kann beliebiger Java-Quellcode eingebettet werden.
Listing 17.3
WirFuehlIchMich.jsp
<% if ( Math.random() > 0.5 ) { %>
Wow, bist du gut drauf.
<% } else { %>
Du bist ja ein super Hecht.
<% } %>
Auf die Klammern könnte im Prinzip verzichtet werden, doch ist es eine gute Idee, Probleme zu umgehen und die Blöcke deutlich zu machen.
Eine oft genannte und berechtigte Kritik ist, dass JSP keine Tags zur einfachen Bedingungswahl zur Verfügung stellt. Dies kann mit selbst definierten Tags abgefangen werden.
17.5.2 Ausdrücke
 
JSP-Ausdrücke sind eine Abkürzung für out.println() innerhalb von Scriptlets. Innerhalb der Tags <%= und %> steht ein gültiger Java-Ausdruck ohne abschließendes Semikolon (da es automatisch in ein print() gesetzt wird, und da steht ja auch kein Semikolon vor der zweiten Klammer).
Listing 17.4
Expressions.jsp
<% double w=2; %> Die Wurzel von <%= w %> ist <%= Math.sqrt(w) %>
<p>
Die aktuelle Zeit ist <%= new java.util.Date() %>
<p>
Hallo <%= request.getRemoteHost() %>.
Meine Ausgabe ist:
Die Wurzel von 2.0 ist 1.4142135623730951
Die aktuelle Zeit ist Sat Apr 14 10:26:29 GMT+02:00 2001
Hallo 127.0.0.1.
17.5.3 Deklarationen
 
Die bisherigen Einbettungen waren lokal in der service()-Methode. Zwischen den Tags <%! und %> lassen sich nun Objektvariablen oder Methoden deklarieren. Sie werden außerhalb der Methode service() definiert. In Ausdrücken können wir dann die Methoden aufrufen und die Variablen nutzen.
Listing 17.5
Points.jsp
<%! double d; %>
<%! java.awt.Point p = new java.awt.Point(2,3),
q = new java.awt.Point(5,8); %>
<%! public java.awt.Point zufall(
java.awt.Point p, java.awt.Point q ) {
return ( Math.random() > 0.5 ) ? p : q; } %>
<%= zufall(p,q) %>
Der Gültigkeitsbereich der Eigenschaften umfasst die aktuelle Datei sowie möglicherweise zusätzlich geladene Dateien. Häufig wird so in Ausdrücken oder Scriptlets auf diese Eigenschaften verwiesen.
17.5.4 Kommentare und Quoting
 
Kommentare
In einer Server-Seite können zwei Arten von Kommentaren eingesetzt werden. Einmal Kommentare, die nicht im HTML-Text umgebaut werden und folglich auch nicht zum Browser wandern. Sie haben eines der beiden Formate:
<%-- Kommentar --%>
<% /** Kommentar **/ %>
JSP-Kommentare lassen sich, genauso wie normale Kommentare, nicht schachteln.
Der zweite Typ Kommentar ist ein HTML-Kommentar, der auf der Client-Seite sichtbar ist. Er hat folgendes Format:
<!-- Kommentar -->
Das Elegante dieser Schreibweise ist, dass in den Kommentar noch Ausdrücke eingesetzt werden können. Um zum Beispiel eine Versionsnummer, die in der Variablen 'version' gehalten wird, zu schreiben, reicht Folgendes:
<!-- <%= version %> -->
Quoting
Das Quoting ersetzt spezielle Zeichenketten, die andernfalls falsch interpretiert werden können. Wir kennen dieses schon von Strings, die ein »"« einbringen wollen. Hier musste \" geschrieben werden, damit das Anführungszeichen nicht fälschlicherweise als Endzeichen angesehen wird. In JSP haben wir ebenso die üblichen Regeln für das Quoting. Für die Skriptelemente ist aber <% %> eine Zeichenkette, die als Einheit gilt. In Zeichenketten schreiben wir daher für <% einfach <\% und für %> dies ebenso mit einem Backslash %\>.
|