Die JSP Standard Tag Library trennt Code und Darstellung
Trennkost
von Bernhard Bablok
Erschienen im Linux-Magazin
2003/05
Die saubere Trennung von Programmlogik (Servlets) und Anzeige (Java Server Pages) ist nur in sehr einfachen Server-Anwendungen streng durchzuhalten, in der Praxis aber meist unmöglich. Taglibs bieten hierfür eine elegante Lösung.
Das Beispiel aus den letzten Coffee-Shop-Folgen (siehe [1] und [2]) verwendet das MVC-Paradigma (Model, View, Controller), um die Programmlogik sauber vom HTML-Code zu trennen. Spätestens bei der Ausgabe von Suchergebnissen ist diese saubere Trennung aber nicht mehr möglich, da die Ergebnisseite eine variable Anzahl von Treffern in einer Tabelle anzeigen muss.
Die klassische Lösung des Problems mit JSP-Mitteln sieht dann ähnlich aus wie in Listing 1. Scriptlets innerhalb der JSP-Seite sind ein mächtiges Mittel, sie erlauben den Einsatz aller Java-Features. Aber selbst bei einfachen Problemen wird die JSP-Seite schnell kompliziert und sowohl die HTML-Struktur als auch der Code geraten unübersichtlich.
Tag-Libraries, meist kurz Taglibs genannt, sind schon seit der ersten JSP-Version die Lösung des Problems. Sie kapseln die Programmlogik innerhalb einer JAR-Bibliothek. Der Webautor verwendet dann nur noch die definierten Tags - und den Rest erledigt die Bibliothek im Hintergrund.
Diese Folge des Coffee-Shops stellt das Konzept von Taglibs, ihre Installation und Konfiguration vor. Insbesondere die JSP Standard Tag Library (JSTL) steht dabei im Mittelpunkt. In der nächsten Folge geht es dann um die Programmierung eigener Taglibs.
Was ist ein Tag?
Auszeichnungssprachen wie HTML oder SGML und ihre Nachkommen kennen den Begriff Tag, um Dokumente zu strukturieren. In HTML stellt zum Beispiel das »<h1>«-Tag eine Überschrift erster Ordnung dar. Jede HTML-Version definiert die verfügbaren Tags und ihre Beziehung zueinander.
HTML ist im Gegensatz zu XML sehr restriktiv: Eigene Tags sind nicht erlaubt. Der Browser-Krieg wurde aber lange Zeit mit dem unlauteren Mittel der proprietären Erweiterung geführt. Neue oder erweiterte Tags gaben den Webautoren mehr Mittel in die Hand, um ihre Seiten zu gestalten. Der Benutzer hatte das Nachsehen, er war auf den Browser des Herstellers X angewiesen, andernfalls stellte sein Browser die Seite falsch oder gar nicht dar. Dabei zahlen auch die Webautoren und ihre Auftraggeber die Zeche: Je nach Browser müssen sie unterschiedliche Seiten bauen, der Kunde ist schließlich König.
Taglibs erlauben ebenfalls die Definition eigener Tags. Sie sollen aber nicht die Kompatibilität weiter untergraben, sondern werden letztlich zu normalem HTML aufgelöst. Ein Webautor könnte also ein Firmenlogo in eine JSP-Seite entweder über
<img src="firma.gif"/>
oder über
<logo/>
einbinden. Die hinter dem »<logo/>«-Tag stehende JAR-Bibliothek erzeugt dann den klassischen HTML-Code. Eigene Tags können auch Attribute enthalten, auch Tags mit Kindelementen (» <mein Tag>Text</mein Tag>«) sind natürlich möglich.
Das Logo-Beispiel ist etwas trivial und trifft den Kern nur zum Teil, da es nicht darum geht, HTML-Code wieder in Java zurückzuverlagern, sondern vielmehr komplizierte Logik zu kapseln. Ein Beispiel in dieser Richtung könnte ein Chart eines Aktienkurses sein:
<chart wpkn="abcd"/>
Hier werden aus einer Datenbank die Daten über die Wertpapierkennung abgerufen, dann wird on the fly eine Grafik erzeugt und mit einem normalen Image-Tag dargestellt.
Die Standard Tag Library
Auch wenn aus Sicht des Browsers eigene Tags unsichtbar bleiben, so begibt sich doch der Webautor in eine neue Abhängigkeit. Ob die Taglibs vom Hersteller der Entwicklungsumgebung oder gar der Servlet-Engine stammen: Aus der Sicht des Autors sind sie eine proprietäre Erweiterung. Java wäre aber nicht Java, wenn es hier nicht zu einer Standardisierung gekommen wäre.
Der Java Community Process (JCP) diskutiert und erweitert sowohl Java als Sprache als auch die zentralen Standards rund um Java. Die Arbeitsgruppe JSR-052[3] definierte die JSP Standard Tag Library (JSTL). Zurzeit ist die Version 1.0 aktuell. Die JSTL-Referenzimplementation wird - nicht besonders überraschend - innerhalb des Jakarta-Projekts gepflegt und ist somit frei verfügbar. Auf diese Weise ist auch ein perfektes Zusammenspiel mit dem Tomcat-Server garantiert.
Das Jakarta-Taglib-Projekt[4] geht aber über die JSTL noch hinaus. Das Projekt ist in folgende Kategorien aufgeteilt:
- JCP Standardized Tag Libraries - also die JSTL-Tags
-
Supported Tag Libraries - weitere Tags, die offiziell vom
Jakarta-Taglibs-Projekt unterstützt werden
-
Tool Extensions - Erweiterungen für
Web-Entwicklungsumgebungen
-
Sandbox - das sind neue Bibliotheken, die noch nicht offiziell
unterstützt werden
Da sich Taglibs ganz hervorragend als wieder verwendbare Komponenten eignen, hat sich schon eine große Liste von verfügbaren Taglibs angesammelt. Ein Nachteil ist die wachsende Anzahl von JAR-Bibliotheken, die für eine Anwendung in der richtigen Version zusammengestellt werden müssen.
|
|
|
Name
|
Beschreibung
|
|
<c:catch>
|
Abfangen von Exceptions
|
|
<c:choose>
|
Bedingte Verarbeitung, zusammen mit <c:when> und
<c:otherwise> (Beispiel im Haupttext). Die Testbedingung wird als Attribut im <c:when>-Tag formuliert.
|
|
<c:forEach>
|
Auswertung der eingeschlossenen Tags über eine durch eine Variable übergebenen Menge (Beispiel im Haupttext)
|
|
<c:forTokens>
|
Analog zu <c:forEach> wird hier über Tokens eines Strings iteriert
|
|
<c:if>
|
Ausgabe des eingeschlossenen Textes, wenn die Bedingung wahr
ist. Ein Else-Zweig existiert nicht. Falls dieser notwendig ist, muss <c:choose> verwendet werden.
|
|
<c:import>
|
Einbinden von internen (analog <jsp:include>) oder externen Ressourcen
|
|
<c:otherwise>
|
Siehe <c:choose>
|
|
|
<c:out>
|
Ausgabe von Text
|
|
<c:param>
|
Hinzufügen von Request-Parametern zu URLs. Wird zusammen
mit <c:import>, <c:redirect> und <c:url> verwendet.
|
|
<c:redirect>
|
Senden einer Redirect-Response an den Client »redirect«
|
|
<c:remove>
|
Entfernen einer Variablen aus einem Gültigkeitsbereich (Scope: Page, Request, Session, Application)
|
|
<c:set>
|
Setzen einer Variablen oder eines Attributs eines Objekts (Map oder Bean)
|
|
<c:url>
|
Encodiert und konvertiert URLs
|
|
<c:when>
|
Siehe <c:choose>
|
|
| Whitepaper |
|
Open Source Datenintegration in der Praxis: Fallstudien und Anwendungsbeispiele (Folge 2)
Der zweite Teil des Open Source Datenintegration in der Praxis: Fallstudien und Anwendungsbeispiele White Papers beleuchtet anhand weiterer ausgewählter Case Studies die Implementierung von Open Source Datenintegration in der Praxis und benennt die daraus resultierenden Vorteile.
Download PDF (Registrierung erforderlich)
|
|
Usage Landscape Enterprise Open Source Data Integration
Die Nachfrage nach Datenintegrationslösungen für Unternehmen ist zunehmend gestiegen und vor allem das Interesse an Open Source Technologien wird immer größer. Doch wie und von wem werden Open Source Datenintegrationslösungen genutzt und welches Nutzungsverhalten lässt sich daraus ableiten? Das vorliegende White Paper präsentiert die Erfahrungswerte von über 1000 Open Source Nutzern und liefert fundierte Antworten auf diese Fragen.
Download PDF (Registrierung erforderlich)
|
Dieser Online-Artikel kann Links enthalten, die auf nicht mehr vorhandene Seiten verweisen. Wir ändern solche "broken links"
nur in wenigen Ausnahmefällen. Der Online-Artikel soll möglichst unverändert der gedrucken Fassung entsprechen.
|