$KK(Direktiven) $R(Objective) Write JSP code that uses the directives: (a) 'page' (with attributes 'import', 'session', 'contentType', and 'isELIgnored'), (b) 'include', and (c) 'taglib'. $R\ $KKK(Page Direktive) Eine page Direktive informiert die JSP Maschine über Eingenschaften einer JSP Seite. Diese Eingenschaft betrifft nicht nur die aktuelle Seite, sondern auch die Seiten die mit der include Direktive eingebunden werden. In der JSP 2.0 Spezifikation gibt es insgesamt 13 verschiedene Attribute, es werden lediglich nach der Objektive die folgenden Attribute für die Zertifizierung benötigt: $T(caption,lll) Attributname | Beschreibung | Default Werte || import | Eine Liste von Java Klassen und Packages, die in der JSP Seite gebraucht werden | Keine Default Werte || session | Falls true sollte die Seite Teil einer Session sein. Bei false ist zu dieser Seite keine implizite session Variable verfügbar | true || contentType | Enthält den Mime Type und character encoding der Ausgabe | text/html bzw text/xml || isELIgnored | falls true wird ein ${code} als normaler Text interpretiert und nicht ausgewertet | entsprechend Datei web.xml sonst false || $T\ Beispiele: $S() <%@ page import="java.util.*,java.text.*"%> <%@ page contentType="text/plain"%> $S\ Das import Attribut ist das einzigste Attribut innerhalb einer page Direktive die in einer Translation Unit mehrfach vorkommen können. Eine Translation Unit bezieht sich auf die akuelle JSP Seite und dijenigen die mit der include Direktive eingebunden werden. $KKK(Inlcude Direktive) Mit der Include Direktive wird zur Übersetzungszeit der JSP Seite in ein Servlet eine Datei eingebunden. Die include Direktive hat genau ein Attribut, nämlich file und enthält den Pfad zu einer Datei. Die Dateien die mit Include eingebunden werden gehören zu einer Translation Unit, d.h die aktuelle und eingebundene Dateien werden in ein Servlet übersetzt. $S() Including Files at Translation Time (JSP) <%@ include file="somePage.jsp" %> $S\ $KKK(TagLib Direktive) Wird benötigt um custom Tags zu definieren $S() <%@ taglib prefix="example" uri="http://www.server.com/example-taglib" %> $S\ In der Datei web.xml kann man den Pfad zur taglib Beschreibungs datei spezifizieren. $S() http://www.server.com/example-taglib /WEB-INF/example-taglib.tld $S\ Die Taglib-URI muss ein eindeutiger Name für die Tag Lib Bibliothek sein. Man kann auch den Umweg über die web.xml Datei umgehen und direkt den Pfad zur tld.Datei in der taglib Direktive angeben. Allerdings verliert man dadurch die Flexibilität die tld-Datei zu verschieben oder umzubenennen. $S() <%@ taglib prefix="example" uri="/WEB-INF/example-taglib.tld" %> $S\ $KK(JSP als XML Dokumente) $R(Objective) Write a JSP Document (XML-based document) that uses the correct syntax. $R\ Es besteht die Möglichkeit JSP Seiten teilweise oder vollständig als XML-Dokumente anzulegen. Eine JSP Seite die vollständig als XML-Dokument angelegt ist (und damit wohlgeformt ist), nennt man JSP Dokument $KKK(Identifikation von JSP-Dokumenten) Der Servlet Container erkennt i.a. nicht automatisch ob es sich um eine normale JSP Seite oder um ein JSP-Dokument handelt. Folgende Verfahren zur Indentifikation von JSP-Dokumenten gibt es: * Anstelle der sonst üblichen Dateierweiterung .jsp wird .jspx verwendent. * Es wird zwar die Dateierweiterung .jsp verwendet, aber das oberste Element ist ein <jsp:root> Element. Ab der Spezifikation 2.0 muss das oberste Element eines JSP Dokumentes nicht root sein. * Eine jsp Seite wird durch dir Datei web.xml als JSP-Dokument gekennzeichnet $S() *.jsp true $S\ $KKK(jsp:root Element) Ein JSP-Dokument beginnt i.a. nicht mit dem typischen xml Kopf <?xml version="1.0" ?> Wird ein jsp:root Element verwendet, so muss das oberste Element xml sein. Es hat zwingend das Attribut version, dessen Werte "2.0" oder "1.2" sein musss. Ausserdem wird es benutzt um Namensräume zu deklarieren. $S() ... $S\ Die Namespaces werden verwendet um Tag-Bibliotheken der Aktionen zu deklarieren. $KKK(Kommentare) Es gibt keine spezielle Tags für Kommentare um einen Kommentar von einer JSP-Seite umzuwandeln sollte man einen normalen xml Kommentar verwenden. $S() <%-- Dies ist ein JSP Kommentar --%> $S\ $KKK(Template Text) Template Texte werden durch das Element jsp:text deklariert. Man muss aufpassen dass durch den Template Text die XML Syntax nicht verletzt wird. Beispiel eines ungültigen Template Textes $S() bestanden? $(test.punktzahl > 1000) $S\ Das > Zeichen ist innerhalb eines xml-Elements nicht erlaubt. Ersetze in diesem Fall das > Zeichen durch gt $KKK(Skriptelemente) Deklarationen Es wird das Element jsp:declaration verwendet. Dieses Element hat keine Attribute $S() <%! public String someFunc(int i) { if (i<3) return("..."); } %> public String someFunc(int i) { if (i<3) return("..."); } $S\ Skripte Es wird das Element jsp:scriptlet verwendet. Dieses Element hat keine Attribute $S() <% out.println("Gesamtbetrag: "); %> out.println("Gesamtbetrag: "); $S\ Expressions Es wird das Element jsp:expression verwendet. Dieses Element hat keine Attribute $S() 2 + 3 = <%= 2 + 3 %> 2 + 3 2 + 3 $S\ $KKK(Direktiven) Bei Page Direktiven wird das Element jsp:directive.page verwendet. Bei Include Direktiven wird das Element jsp:directive.include verwendet. Beispiel: $S() Es gibt kein xml Elmement für die taglib Direktiven. Die Spezifikation der taglib Bibliotheken, erfolgt stattdessen durch Namensräume. $S() <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> .... $S\ Eine Namensraumdeklaration kann auch mitten in einem Element stehen, und gilt dann für dieses Element und den untergeordneten Elementen. $S() .... $S\