Benutzerdefinierte Tags ETIS SS04
Gliederung Motivation TagLibrary-Descriptor Tag-Handler Einfache Tag-Handler JSP-Fragmente Tags mit Attributen Zusammenfassung Tags ETIS SS04
Motivation Vorteile: Beispiel test.jsp: bessere Trennung Präsentation, Logik Lesbarkeit, Wiederverwendbarkeit, Wartbarkeit Beispiel test.jsp: <%@ taglib uri="/WEB-INF/custom.tld" prefix="test" %> <test:loop> Ausgabe </test:loop> Präfix dient zur Vermeidung von Namenskonflikten Tags ETIS SS04
TagLibrary-Descriptor(I) TagLibrary-Descriptor(TLD): simple.jsp: <taglib xmlns="http://java.sun.com/xml/ns/j2ee" ...> <tlib-version>1.0</tlib-version> <short-name>SimpleTagLibrary</short-name> <tag> <name>loop</name> <tag-class>tagtest/LoopAnz</tag-class> <body-content>scriptless</body-content> </tag> </taglib> Tags ETIS SS04
TagLibrary-Descriptor (II) XML-Datei, beschreibt: welche Tags Tag-Library bereitstellt bzw. die Eigenschaften der Tags legt für jedes Tag die Tag-Handler-Klasse fest <name> <! - - Tagname - -> <tag-class> <! - - Tag-Handler zum Tag - -> <body-content> <! - - empty | scriptless | JSP | tagdependent - -> <attribute> <! - - Attribute des Tags - -> Tags ETIS SS04
Tag-Handler(I) Tag-Handler: TagTest/LoopAnz.java package tagtest; import ...; public class LoopAnz extends SimpleTagSupport{ public void doTag() throws JspException, IOException{ JspWriter out = getJspContext().getOut(); JspFragment f = getJspBody(); for (int i = 0; i < 4; i++) { f.invoke(out); }}} Tags ETIS SS04
Tag-Handler (II) Dient Ausführung der Tags in JSP-Seiten Klassen, die Tag-Handler-Interface implementieren ab JSP 2.0: einfacher Tag-Handler (JSP 1.2: drei Interfaces) vereinfachtes Protokoll möglich, durch: keine Skripte im Rumpf der Tags kein Caching von Tag-Handler-Instanzen Nutzung des vereinfachten Protokolls durch: Interfaces SimpleTag implementiert oder TagFiles Tags ETIS SS04
Einfache Tag-Handler TagHandler erbt von SimpleTag (SimpleTagSupport) i.d.R. nur doTag zu überschreiben Tagauswertung: JSP-Container instanziert TagHandler-Klasse nur 1 x Aufruf doTag danach Instanz nicht mehr verwendet Zugriff auf Tag-Rumpf mit getJspBody invoke(null): Ausführung Fragment + Ausgabe Ergebnis invoke(/*Writer*/): soll Rumpf verändert werden, Writer-Objekt zu übergeben Tags ETIS SS04
JSP-Fragmente Kapseln zusammenhängende Teile von JSP-Seiten Teile bestehen nur aus Templates + Aktionen (inkl. JSP-EL) Verwendung von Skripten nicht möglich Fragmente werden in Klassen übersetzt, die Interface JspFragment implementieren Interface definiert nur Methode invoke zum Ausführen des Fragments sind beliebig oft ausführbar haben Zugriff auf Variablen der Jsp-Seiten Tags ETIS SS04
Tags mit Attributen im Tag-Handler: in TLD: set-Methoden für Attribute bereitstellen in TLD: Attribut vereinbaren <name> <!- - Attributname - -> <required> <!- - Attribut erforderlich false | true- -> <rtexprvalue> <!- - Attributwert zur Laufzeit durch Scriptlet zu bestimmen true ansonsten false- -> <fragment> <!- - Attribut == Fragment false | true - -> Tags ETIS SS04
Zusammenfassung Präsentation + Logik besser getrennt JSP 2.0 bringt viele Vereinfachungen im Umgang mit Tags vereinfachtes Protokoll (einfache Tags) Tag Files viele weiter Möglichkeiten, z.B. verschachtelte Tags dynamische Attribute Tag-Library = Tag-Library-Decriptor + Tag-Handler Tags ETIS SS04
Literatur Turau, V., Saleck, K., Lenz, C., Web-basierte Anwendungen entwickeln mit JSP2, dpunkt.verlag, Heidelberg, 2004 Wille, S., Go To Java Server Pages, Addison-Wesley, München, 2001 http://www.kinabaloo.com/jsp2.html Tags ETIS SS04