$K(JavaServer Pages Technology Model) $KK(JSP Elemente) $R(Objective) Identify, describe, or write the JSP code for the following elements: (a) template text, (b) scripting elements (comments, directives, declarations, scriptlets, and expressions), (c) standard and custom actions, and (d) expression language elements. $R\ $KKK(template Text) Alles was kein JSP Element ist ein Template Text. Templates können jede Art von Text sein: HTML,WML, XML oder einfacher Text. Auch wenn JSP fast immer im Zusammenhang mit HTML gebraucht wird, basiert JSP nicht auf HTML. Der Template Text wird so wie er ist, dem Browser mitgegeben. Der Template Text ist immer der statische Teil einer JSP, er wird mit den dynamischen Teil (den JSP Elementen) gemischt und das Ergebnis wird als Response Stream weitergereicht. Möchte man ein JSP Element darstellen, ohne dass es interpretiert wird, so geht dies durch durch quoten * A literal <% wird durch einen Slash nach der eckigen Klammer gequotet: <\% * Expression Language können durch den einen Slash vor dem Dollarzeichen gequotet werden \$. Dies funktioniert aber nur, falls für die Seite die Expression Language eingestellt ist. $KKK(Skripting Elemente) Kommentare Kommentare dienen nur der Dokumentation und werden folgendermassen gebildet $S() <%-- Dies ist ein Kommentar --%> $S\ JSP Kommentare können nicht ineinander verschachtelt werden. Dieser Kommentar wird nicht in die HTML generierte Seite eingebaut. Möchte man in die HTML generierte Seite einen Kommentar einbauen, so kann man dies als Template Text machen. <!-- Dies ist ein Html Kommentar --> Direktive Die JSP Maschine übersetzt eine JSP Seite in ein Servlet. Mit den Direktiven kann man der JSP Maschine Anweisungen geben. Es gibt 3 Arten von Direktiven: * page - Definiert Eigenschaften der aktuellen JSP $S() <%@ page language="java" %> $S\ Dies sagt der JSP Maschine, dass Java als Skriping Elemente eingebunden wird. * include - Es wird der Inhalt einer anderen Seite in die aktuelle JSP eingebunden. $S() <%@ include file="copyright.html" %> $S\ An dieser Stelle wird die Datei copyright.html eingebunden. * taglib - Assoziiert ein Prefix mit einer TagLib Bibliothek $S() <%@ taglib prefix="test" uri="taglib.tld" %> $S\ Zusammenfassend lässt sich sagen: * Eine Direktive beginnt immer mit <%@ und endet mit %> * Eine Direktive hat folgende Syntax $S() <%@ page attribut-liste %> oder <%@ include attribut-liste %> oder <%@ taglib attribut-liste %> $S\ Deklarationen Deklarationen ermöglichen es Java Variablen oder Methoden zu definieren, und zu initialisieren Deklarationen beginnen mit <%! und endet mit %>. Es kann jede mögliche Java Code Definition beinhalten. $S() <%! String color[] = {"red", "green", "blue"}; %> <%! String getColor(int i) { return color(i%3); } %> $S\ Beachte dass in Java jedes Statement mit einem Semikolon abgeschlossen wird. Ansonssten weir ein Fehler eingebunden. Skriplets Skriplets sind Java Code Fragmente die in JSP Seiten eingebunden werden. $S() <% variable++; %> $S\ Das Skriplet wird jeweils ausgeführt, sobald eine Anfrage an das Servlet erfolgt. Ein Skriplet beginnt mit <% und endet mit %>. Dazwischen stehen ein oder mehrere Java-Statements. Beachte dass die Anweisungen mit einem Semikolon abgeschlossen werden müssen. Expressions Expressions sind Java Ausdrücke, deren Auswertung in die Ausgabe eingebunden werden. Beispiele: $S() <%= userInfo.getUserName() %> <%= 1 + 1 %> <%= new java.util.Date() %> $S\ Es ist zu beachten das im Gegensatz zu den Skriplets, Ausdrücke nicht mit einem Semikolon abgeschlossen werden. Ausdrücke beginnen mit <%= und enden mit %>. Hier einige Beispiele die keine Ausdrücke sind: $T(simple,ll) <%= aBool; %> | Ein Ausdruck wird nicht mit einem Semikolon beendet || <%= int i=20 %> | Man kann in einem Ausdruck keine Variable oder Methode deklarieren || <%= sBuff.setLength(12) %> | Die Methode gibt keinen Wert zurück || $T\ Die Auswerung eines Ausdrucks muss kein String sein, aber in einen String konvertiert werden können. Erkennt die JSP Maschine dies nicht schon zur Übersetzungszeit, so wird bei der Auswertung der Anfrage ein ClassCastException ausgelöst. $KKK(Standard und Custom Actions) Aktionen sind Anweisungen an die JSP Maschine, die zur Laufzeit ausgeführt werden. Es gibt zwei Arten von Aktionen. Zum einen dijenigen mit dem Prefix jsp, z.B: <jsp:include page="neAndereJsp.jsp" />; Dies sind die sogenannten Standard Actions. Custom Actions haben einen anderen Prefix als jsp. Im Unterschied zu den anderen JSP-Elementen wie Direktiven und Skriptelemente wird für Aktionen nur noch die XML-Syntax genommen. $S() Rumpf der Aktion $S\ Innerhalb des Rumpfes können beispielweise Kindelemente, die Paramter an die Aktion übergeben, enthalten sein, oder auch Template-Daten, auf deren Ausgabe die Aktion in irgendeiner Form Einfluss nimmt. Beispiel mit Paramterübergabe: $S() $S\ Kommt die Aktion ohne Rumpf aus so kann die Syntax auf $S() $S\ verkürzt werden. Standard Custom Actions müsssen nicht extra deklariert werden. Eine Custom Standard Action benötigt eine taglib Direktive. Die Taglib Direktive ordnet dem Prefix eine TagLibDescription Datei zu. Innerhalb einer TLD-Datei wird dem Aktionsname eine Klasse zugeordnet. Diese Klasse ist für die Ausführung der Aktion notwendig. $B(Bilder,taglibDefinition.gif, Bedeutung der taglib Direktive) $KKK(Expression Language Elemente) Die Expression Language wurde mit der neuen JSP 2.0 Definition eingeführt. Mit der EL ist es einfacher die dynamische Teile in die JSP einzubauen. Mit Hilfe von EL Ausdrücken können insbesondere Daten einfacher abgefragt werden, die in JavaBeans gespeichert sind. Gibt es in einer JavaBean beispielsweise ein Objekt teilnehmer mit einer Eigenschaft nachname, kann ein Wert einfach mit ${teilnehmer.nachname} verwendet werden. Man kann auch sehr einfach auf Elemente innerhalb einer Collection zugreifen z.B ${kurs.teilnehmer[0].nachname} Außerdem sin diese Ausdrücke für die Bestimmung von Attributwerten in Aktionen einsetzbar, wenn diese erst zur Laufzeit ermittelt werden sollen. $KKK(Zusammenfassung JSP Elemente) $T(caption,lll) JSP Tag Type | Kurze Beschreibung | Tag Syntax || Directive | Spezifiziert zur Übersetzugszeit Anweisungen an die JSP Maschine | <%@ Directives %> || Deklaration | Deklariert und Definiiert Methoden und Variablen | <%! Java Deklerations %> || Scriplet | Ermöglicht es Java Code in JSP einzufügen | <% Some Java Code %> || Expression | Wird ausgeführt und die Auswertung in die Ausgabe eingefügt | <%= Code %> || Standard Actions | Enthält Laufzeit Anweisungen an JSP Maschine | || Custom Actions | Laufzeit Anweisungen an JSP Maschine aus einzubindender Bibliothek | || Expression Language Elemente | Spezielle Sprache. Auswertung wird in Ausgabe eingefügt | ${ ein EL-Ausdruck } || Comment | Wird nicht ausgewertet | <%-- Any Text --%> || $T\