JSTL - JSP Standard Tag Library ETIS SS04
Gliederung Motivation Bestandteile core - Kernfunktionalität function - Funktionen fmt - Formatierung / Internationalisierung Zusammenfassung JSTL ETIS SS04
Motivation (I) ZIEL JSP: Web-Designer Arbeit mit Servlets ermöglichen ABER: eingebetteter Java-Code ist problematisch DAHER: Custom Tag Libraries mit JSP 1.1 Tag-Library-Descriptor: XML-Datei, beschreibt, welche Tags die Library bereitstellt für jedes Tag eine Tag-Handler-Klasse festgelegt Tag-Handler, Java-Klassen, legen Aktionen bei Auftreten eines Tags fest Tag-Handler Tag-Library = Tag-Library-Decriptor + JSTL ETIS SS04
Motivation (II) Standardisierte Tag Libraries fehlten lange JSTL (JSP Standard Tag Library) kapselt Kernfunktionalität, die vielen Webanwendungen gemeinsam ist (Iterationen, Internationalisierung, ...) Spezifikation unter JSR-52 „A Standard Tag Library for JavaServer Pages“ in JCP erarbeitet Referenzimplementierung vom Jakarta Taglibs-Projekt aktuell Version 1.1 – JSP 2.0 mit JSTL Einführung der Expression Language (EL) GUIs nicht durch JSTL abgedeckt Entwicklung: JSF JSTL ETIS SS04
Bestandteile Tag-Bibliothek Aufgabe core Grundlegende Tags (für Schleifen, Bedingungen, Ausnahmebehandlung) fmt Internationalisierung, Datums- und Zahlenformatierung sql Tags zur Einbindung relationaler DBs xml Umgang mit XML (Parsen, Transformieren von XML-Dokumenten) functions Funktionen v.a. zur Verarbeitung von Zeichenketten JSTL ETIS SS04
Core – Kernfunktionalität (I) Bedingte Ausführung mit Scriptlets: <% if (comic.isBestseller()) { %> <b>Bestseller!</b> <% } %> mit Tags: <%@ taglib prefix=“c“ uri=“http://java.sun.com/jsp/jstl/core“ %> <c:if test = “${comic.bestseller}“> </c:if> JSTL ETIS SS04
Core – Kernfunktionalität (II) Bedingte Ausführung (entspricht if-then-else) <%@ taglib prefix=“c“ uri=“http://java.sun.com/jsp/jstl/core“ %> <c:choose> <c:when test="${comic.bestseller}"> <c:out value="Bestseller"/> </c:when> <c:otherwise> <c:out value="Buch"/> </c:otherwise> </c:choose> JSTL ETIS SS04
Core - Kernfunktionalität (II) Schleifen <%@ taglib prefix=“c“ uri=“http://java.sun.com/jsp/jstl/core“ %> <c:forEach var=“autor“ items=“${comic.autoren}“> <c:out value=“${autor.name}“/> </c:forEach> items: als Scoped Variable gespeicherte Collection Scoped Variable: in einem Gültigkeitsbereich (page, request, session, application) einer Web-Anwendung gespeichertes Objekt var: Name einer Scoped Variable (enthält aktuellen Wert der Iteration) JSTL ETIS SS04
Core - Kernfunktionalität (III) Weitere Funktionalitäten: Ausnahmebehandlung <c:catch ...> Links + Redirects <c:url ...> <c:redirect ...> Einbinden externer Ressourcen <c:import ...> JSTL ETIS SS04
function - Funktionen Funktionen v.a. zur Verarbeitung von Zeichenketten Beispiele: contains(string, substring) join (collection, separator) toLowerCase(string) trim(string) konkretes Beispiel: <%@ taglib prefix=“c“ uri=“http://java.sun.com/jsp/jstl/core“ %> Autoren: ${fn:join(buch.autoren, “, “)} JSTL ETIS SS04
fmt – Internationalisierung/Formatierung (I) Internationalisierung (kurz: I18N) Anwendung für Benutzer verschiedener Sprachen zugänglich machen Text in Sprache des Anwenders Datumsangaben + Zahlen landesabhängig anstelle fest angegebener Zeichenketten treten Schlüssel in einer Art Zeichenkettentabelle (Resource Bundle) Ressource Bundle i.d.R. als Properties Datei gespeichert #Message_en.properties welcomePage.title = Welcome! welcomePage.button.submit = Submit Sprache im Datei-namen kodiert JSTL ETIS SS04
fmt – Internationalisierung/Formatierung (II) JSP-Seite: <%@ taglib prefix=“c“ uri=“http://java.sun.com/jsp/jstl/fmt“ %> <fmt:bundle bundle=“etis.jstl.Messages“ prefix=“welcomePage.“> <fmt:message key=“title“/> </fmt:bundle> hierbei: implizite Auswahl der Sprache/Land auf Grundlage des Accept-Language-Headers explizites Setzen möglich <fmt:setLocale value="en"/> JSTL ETIS SS04
fmt – Internationalisierung/Formatierung (III) Zahlen- und Datumsformatierung länderabhängige Darstellung Beispiel: 10.950,00 (DE) / 10,950.00 (USA) / 10 950,00 (FR) Dienstag, 15.Juni 2004 (DE) / Tuesday, June 15, 2004 (USA) Lösung: <fmt:formatNumber> <%@ taglib prefix=“c“ uri=“http://java.sun.com/jsp/jstl/fmt“ %> <fmt:formatNumber value=“35.2779“ type=“currency“ currencyCode=“EUR“/> Ausgabetype (Zahl, Prozent-wert, Währung) Währungssymbol JSTL ETIS SS04
fmt – Internationalisierung/Formatierung (IV) <fmt:formatDate> <%@ taglib prefix=“c“ uri=“http://java.sun.com/jsp/jstl/fmt“ %> <jsp:useBean id=“currentDate“ class=“java.util.Date“/> <fmt:formatDate value=“${currentDate}“ type=“date“ dateStyle=“full“/> detaillierte Darstellungsformatierung mit dateStyle bzw. timeStyle z.B. dateStyle=“full“: Dienstag, 15.Juni 2004 z.B. timeStyle=“full“: 9.30 Uhr CEST JSTL ETIS SS04
fmt – Internationalisierung/Formatierung (V) Tags Aufgabe setBundle Setzt Ressourcenbündel für den Rest der Seite (Zeichenketten-Dateien) bundle Setzt im Rumpf des Tags zu verwendende Ressourcenbündel setLocale Setzt zu verwendende Locale (Kombination Land Sprache de-DE de-AT) message Gibt lokalisierte Zeichenkette aus formatDate Formatiert Datums- und Uhrzeitangaben (abhängig von Locale) formatNumber Formatiert Zahlen (abhängig von Locale) JSTL ETIS SS04
Zusammenfassung Grundlegende Anforderungen vieler Webanwendungen mit JSTL erfüllt Internationalisierung, Iteration, XML, DB, ... GUI-Entwicklung nicht abgedeckt wenige, flexibel verwendbare Tags anstelle vieler ähnlicher Tags JSTL 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://jakarta.apache.org/taglibs/doc/standard-doc/intro.html JSTL ETIS SS04