170 likes | 276 Views
JSTL - JSP Standard Tag Library. ETIS SS04. Gliederung. Motivation Bestandteile core - Kernfunktionalität function - Funktionen fmt - Formatierung / Internationalisierung Zusammenfassung. Tag-Handler. Motivation (I). ZIEL JSP: Web-Designer Arbeit mit Servlets ermöglichen
E N D
JSTL - JSP Standard Tag Library ETIS SS04
Gliederung • Motivation • Bestandteile • core - Kernfunktionalität • function - Funktionen • fmt - Formatierung / Internationalisierung • Zusammenfassung JSTL
Tag-Handler 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-Library = Tag-Library-Decriptor + JSTL
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
Bestandteile JSTL
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}“> • <b>Bestseller!</b> • </c:if> JSTL
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
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
Core - Kernfunktionalität (III) • Weitere Funktionalitäten: • Ausnahmebehandlung • <c:catch ...> • Links + Redirects • <c:url ...> • <c:redirect ...> • Einbinden externer Ressourcen • <c:import ...> JSTL
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
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
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
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
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
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
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