XML mit Java OpenSource (c) Mark Egloff 2003 TagLibs << Was sind „TagLibs“ ? >> 1 XML mit Java OpenSource (c) Mark Egloff 2003 TagLibs Was sind TagLibs ? Um grössere Java Scriptlets in JSP‘s zu vermeiden, musste eine Möglichkeit her diese auszulagern und einfach abrufbar zu gestalten. Es wurde daher ein Framework zur Handhabung von eigenen Tags (Custom Tags) eingeführt <myTag> <p> text text text <b> bold </b></p> </myTag> class MyTagHandler { public void doStartTag(){...}; public void doEndTag(){...}; } Das TagLib Framework bietet die Möglichkeit für Tags seine eigenen Handler festzulegen 2 XML mit Java OpenSource (c) Mark Egloff 2003 TagLibs Beispiel einer einfachen Taglib: DateFormat <%@ taglib uri="http://jakarta.apache.org/taglibs/datetime-1.0" prefix="dt" %> <html> <body> <h2> The current time is: <dt:format pattern="MM/dd/yyyy hh:mm"> <dt:currentTime/> </dt:format> </h2> </body> <html> 3 XML mit Java OpenSource (c) Mark Egloff 2003 TagLibs Beispiel einer einfachen Taglib: DateFormat 4 XML mit Java OpenSource (c) Mark Egloff 2003 TagLibs Beschaffung und Installation einer Taglib: Für die Taglibs gibt es unzählige Portale und Hersteller: • Apache: jakarta.apache.org/taglibs • JspTags: jsptags.com/tags/index.jsp • ServletSuite: www.servletsuite.com/jsp.htm Um die TagLib verwenden zu können, muss das „.jar“ File in die Webapplikation aufgenommen werden „WEB-INF/lib“ und registriert werden. Die Registrierung kann auf zwei Arten erfolgen: 5 • mittels META-INF im Jar File Î erfolgt durch Hersteller selber, Normalfall • manuelle Eintragung im „web.xml“ XML mit Java OpenSource (c) Mark Egloff 2003 TagLibs Anwendung Taglib: Um die TagLib nun anzuwenden muss diese innerhalb der JSP bekannt gemacht werden. Dies geschieht durch die Direktive „<%@ taglib url=xxx“ … %>“ Die Angaben innerhalb der „taglib“ Direktive ist vom Hersteller vorgegeben. Üblicherweise eine URL sowie ein Prefix. z.B.: <%@ taglib uri="http://jakarta.apache.org/taglibs/mailer-1.1" prefix="mt" %> 6 XML mit Java OpenSource (c) Mark Egloff 2003 TagLibs Beispiel einer einfachen Taglib: mail <%@ taglib uri="http://jakarta.apache.org/taglibs/mailer1.1" prefix="mt" %> <html> <body> <h2> Send Email… <mt:mail server="localhost" to="[email protected]" from="[email protected]" subject="mail taglib"> <mt:message>text of email...<mt:message> <mt:send/> </mt:mail>Ok </h2> </body> <html> 7 XML mit Java OpenSource (c) Mark Egloff 2003 TagLibs - Jakarta Beschaffung und Installation: Die meist verbreiteten Taglibs sind die von Apache jakarta.apache.org/taglibs (Supported TagLibs) Um diese Taglibs verwenden zu können benötigt es einen Container der den Standard JSP v1.1 sowie Servlet v2.0 unterstützt. Zurzeit lassen sich solche Container (z.B. Tomcat 4.x) und Taglibs noch unter Java 1.3.x betreiben Das Package von Jakarta kommt mit diversen fertigen „war“ Beispielen und lässt sich so problemlos in dem Container deployen 8 XML mit Java OpenSource (c) Mark Egloff 2003 TagLibs - Jakarta Übersicht Jakarta Taglibs (1/2): • Application • Benchmark • BSF • Cache • DateTime • I18N • Input • IO • JMS • JNDI • Log • Mailer • Page • Random 9 Zugriff auf Implizites JSP Obj „application“ Für Performancemessungen Scripting Languages einbinden z.B. Tcl, JS temporärer Zwischenspeicher Datum Ausgabe & Formatierungen Ausgabe & Formatierungen nach Lokalität HTML Formulare mit Java Beans verknüpfen TCP/IP Requests auslösen, z.B. SOAP Java Message Service Anbindung Java Naming Directory Anbindung Jakarta Logging Framework Anbindung Email versenden Zugriff auf Implizites JSP Obj „page“ Um Zufallswerte zu generieren XML mit Java OpenSource (c) Mark Egloff 2003 TagLibs - Jakarta Übersicht Jakarta Taglibs (2/2): • RegExp • Request • Response • Scrape • Session • String • XTags Verwendung von Regulären Expressions Zugriff auf Implizites JSP Obj „request“ Zugriff auf Implizites JSP Obj „response“ Webinhalte anderer Seiten einbinden Zugriff auf Implizites JSP Obj „session“ String Operationen durchführen XML Aktionen, parsing & transformation • Image* • Iterators* • DataGrid* • Unstandard* • RDC* Bildbearbeitung, Thumbnailerzeugung Iteration über Collections Dynamische Erstellung von Tabellen Java Operations (equals, instanceOf, size) Reusable Dialog Component *) Beta Stadium 10 XML mit Java OpenSource (c) Mark Egloff 2003 TagLibs – Jakarta IO Tag Installation Jakarta Taglibs - IO Die IO-Taglibrary benötigt nur ein „*.jar“ Faile welches sich im „WEB-INF/lib“ Verzeichnis der Webapp befinden muss. 11 XML mit Java OpenSource (c) Mark Egloff 2003 TagLibs – Jakarta IO Tag Übersicht Jakarta Taglibs - IO Mittels den IO Tags lassen sich TCP/IP Requests verschiedenster Protokolle auf andere Server tätigen Es werden zurzeit die folgenden Protokolle unterstützt: HTTP, HTTPS, FTP, XML-RPC und SOAP z.B. HTTP Get Request mit Parametern ausführen „http://jakarta.apache.org?foo=123&bar=123“ 12 <%@ taglib uri="http://jakarta.apache.org/taglibs/io-1.0" prefix="io" %> <io:http url="http://jakarta.apache.org" action="GET"/> <io:param name="foo" value="123"/> <io:param name="bar">123</io:param> </io:http> XML mit Java OpenSource (c) Mark Egloff 2003 TagLibs – Jakarta IO Tag Jakarta Taglibs - IO: Prinzip Mittels dem IO Tag können also Ressourcen von anderen Servern geholt und in meine Seite eingebunden werden Request Request JSP IO Tag Web server Client Response Response Web WebApp AppContainer Container Response Request Ext. Web server 13 jakarta.apache.org XML mit Java OpenSource (c) Mark Egloff 2003 TagLibs – Jakarta IO Tag Beispiel SOAP Webservice Request mit IO Taglib 14 <%@ taglib uri="http://jakarta.apache.org/taglibs/io-1.0" prefix="io" %> <io:soap url="http://services.xmethods.net:80/perl/soaplite.cgi" SOAPAction="urn:xmethodsBabelFish#BabelFish"> <io:body> <SOAP:Envelope xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/" SOAP:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/ "> <SOAP:Body> <m:BabelFish xmlns:m="urn:xmethodsBabelFish"> <translationmode>en_fr</translationmode> <sourcedata>SOAP is quite easy with JSP.</sourcedata> </m:BabelFish> </SOAP:Body> </SOAP:Envelope> </io:body> </io:soap> XML mit Java OpenSource (c) Mark Egloff 2003 TagLibs – Jakarta IO Tag Beispiel SOAP Webservice Request mit IO Taglib 15 XML mit Java OpenSource (c) Mark Egloff 2003 TagLibs – Jakarta XTags Übersicht Jakarta Taglibs - XTags In der Jakarta Taglibs existieren zur Handhabung von XML die XTags. Mittels den XTags lässen sich DOM aus XML erzeugen, XPath Auswertungen , sowie XSL Transformationen durchzuführen. Übersicht XTags: • • • • • 16 style , param XSL Transformation parse DOM Erzeugung add, remove, replace DOM Inhalte hinzufügen / entfernen valueOf, forEach XSL Anweisungen choose, when, otherwise, if, break, variable, stylesheet, template, applyTemplates, element, attribute, output, copy, copyOf, context, XML mit Java OpenSource (c) Mark Egloff 2003 TagLibs – Jakarta XTags Installation Jakarta Taglibs - XTags Die XTags benötigen noch zusätzliche „*.jar“ Libraries. Bei Java 1.4.x ist noch das „dom4j“ Framework zusätzlich nötig: www.dom4j.org 17 XML mit Java OpenSource (c) Mark Egloff 2003 TagLibs – Jakarta XTags <xtags:parse>: XML parsen, DOM erzeugen Mittels „<xtags:parse>“ lassen sich XML Daten parsen und daraus ein DOM erzeugen Es können externe XML Daten sowie als inline verwendet werden. z.B. XML parsen und DOM erzeugen <%@ taglib uri="http://jakarta.apache.org/taglibs/xtags1.0" prefix="xtags" %> <xtags:parse id="ExtDoc" uri="/foo/cdcatalog.xml"/> <xtags:parse> <root>inline</root> </xtags:parse> 18 XML mit Java OpenSource (c) Mark Egloff 2003 TagLibs – Jakarta XTags <xtags:add>, <xtags:remove>, <xtags:replace>: DOM Operationen durchführen Mittels diesen Tags lassen sich DOM Strukturen verändern z.B. <%@ taglib uri="http://jakarta.apache.org/taglibs/xtags1.0" prefix="xtags" %> <xtags:parse uri="/foo/cdcatalog.xml"/> <xtags:forEach select="//cd"> <xtags:add><category>pop</category></xtags:add> </xtags:forEach> <xtags:remove select="//cd[@id = 123]"/> 19 XML mit Java OpenSource (c) Mark Egloff 2003 TagLibs – Jakarta XTags <xtags:valueOf> : Mittels XPath Werte auslesen „<xtags:valueOf>“ lässt sich wie „<xsl:value-of>“ verwenden. Es lässt sich somit mittels XPath ein Wert aus einem zuvor erzeugten DOM auslesen z.B. DOM erzeugen und mittels XPath Wert auslesen <%@ taglib uri="http://jakarta.apache.org/taglibs/xtags1.0" prefix="xtags" %> <xtags:parse id="doc" uri="/foo/cdcatalog.xml"/> <xtags:parse uri="/foo/dvdcatalog.xml"/> <xtags:valueOf select="//cd/title" context="<%=doc%>"/> <xtags:valueOf select="//dvd/title" /> 20 XML mit Java OpenSource (c) Mark Egloff 2003 TagLibs – Jakarta XTags <xtags:forEach> : über ein selekt. NodeSet iterieren „<xtags:forEach>“ lässt sich wie „<xsl:forEach>“ verwenden. Es kann so über ein selektiertes NodeSet iteriert werden. z.B. <%@ taglib uri="http://jakarta.apache.org/taglibs/xtags1.0" prefix="xtags" %> <xtags:parse id="doc" uri="/foo/cdcatalog.xml"/> <xtags:parse uri="/foo/dvdcatalog.xml"/> <xtags:forEach select="//cd" context="<%=doc%>"> <xtags:valueOf select="@country"/> </xtags:forEach> 21 <xtags:forEach select="//dvd/title" id="title"> <%= title %> </xtags:forEach> XML mit Java OpenSource (c) Mark Egloff 2003 TagLibs – Jakarta XTags <xtags:if>, <xtags:choose> : Bedingte Anweisungen z.B. „<xtags:if>“ u. „<xtags:choose>“ lassen sich wie seine Verwandten bei XSL verwenden. Es lassen sich so Anweisungen mittels XPath Bedingung ausführen oder nicht. <%@ taglib uri="http://jakarta.apache.org/taglibs/xtags1.0" prefix="xtags" %> <xtags:parse id="doc" uri="/foo/cdcatalog.xml"/> <xtags:if test="//cd[price > 15.0]" context="<%=doc%>"> The cd’s here are too expensive </xtags:if> 22 XML mit Java OpenSource (c) Mark Egloff 2003 TagLibs – Jakarta XTags <xtags:style> : XSL Transformation durchführen Mittels „<xtags:style>“ wird eine XSL Transformation durchgeführt. z.B. <%@ taglib uri="http://jakarta.apache.org/taglibs/xtags1.0" prefix="xtags" %> <xtags:parse id="doc" uri="/foo/dvdcatalog.xml"/> <xtags:style document="<%=doc%>" xsl="dvd2html.xsl"/> <xtags:style xml="cdcatalog.xml" xsl="catalog2html.xsl"/> 23 XML mit Java OpenSource (c) Mark Egloff 2003 TagLibs – Jakarta XTags <xtags:output> : DOM Serialisierung vornehmen Mittels„<xtags:output>“ lässt sich wieder ein zuvor erzeugtes DOM wieder in einen String überführen. z.B. <%@ taglib uri="http://jakarta.apache.org/taglibs/xtags1.0" prefix="xtags" %> <xtags:parse uri="/foo/dvdcatalog.xml"/> <xtags:output method="xml" indent=" " omitXmlDeclaration="false"> <xtags:copyOf select="/dvdcatalog"/> <xtags:output> 24 XML mit Java OpenSource (c) Mark Egloff 2003 TagLibs - JSTL JSP Standard Tag Library (JSTL) TagLibs werden heute sehr verbreitet eingesetzt. Es gibt eine Unmenge von Herstellern die unterschiedliche Bibliotheken anbieten. Der Java Community Process führte daher die JSTL ein. Eine Taglibrary, die die grundlegendsten Java Funktionen in Form von Tags zur Verfügung stellen. Die JSTL ist in 4 Bereiche unterteilt: • Core Tags Variabels, Flow Control, Iterator, URL • SQL Actions Queries, Inserts, Updates, Transactions • XML Processing XPath, Parser, Transformation • I18N 25 Formatierungen n. Lokalität & Sprache XML mit Java OpenSource (c) Mark Egloff 2003 TagLibs - JSTL Beispiel einer Anwendung mit JSTL: <c:forEach> Parameter als XML ausgeben mit normalen Scriplets <%@ page import="java.util.*"%> ohne <%@ page contentType="text/xml" %> JSTL <?xml version="1.0" encoding="ISO-8859-1"?> <request> <% Enumeration enum = request.getParameterNames(); while(enum.hasMoreElements()) { String param = enum.nextElement().toString(); %> <param name="<%=param%>"> <%=request.getParameter(param)%> </param> <% } %> </request> 26 XML mit Java OpenSource (c) Mark Egloff 2003 TagLibs - JSTL Beispiel einer Anwendung mit JSTL: <c:forEach> Parameter als XML ausgeben mittels JSTL <%@ taglib prefix="c" mit uri="http://java.sun.com/jsp/jstl/core" %> JSTL <%@ page contentType="text/xml" %> <?xml version="1.0" encoding="ISO-8859-1"?> <request> <c:forEach var="item" items="${param}"> <param name="${item.key}">${item.value}</param> </c:forEach> </request> 27 XML mit Java OpenSource (c) Mark Egloff 2003 TagLibs - JSTL Beispiel Request Daten als XML mittels JSP 28 XML mit Java OpenSource (c) Mark Egloff 2003 TagLibs - JSTL Beschaffung und Installation der JSTL: Für die JSTL gibt es zwei Hersteller: • SUN: • Apache: java.sun.com/products/jsp/jstl/ jakarta.apache.org/taglibs/doc/standarddoc/intro.html Die JSTL v1.1 basiert auf der JSP 2.0 und Servlet 2.4 Spezifikation. Der jeweilige Webapp Container muss dies unterstützen! Solche Container (z.B. Tomcat 5.x) lassen sich nur noch mit Java 1.4.x betreiben 29 Um die JSTL verwenden zu können, muss das „.jar“ File in die Webapplikation aufgenommen werden („WEB-INF/lib“). XML mit Java OpenSource (c) Mark Egloff 2003 TagLibs - JSTL Installation der JSTL Die JSTL besteht nur aus „*.jar“ Files . Einmal aus der Interface Definition und einmal aus deren Implementation. 30 XML mit Java OpenSource (c) Mark Egloff 2003 TagLibs - JSTL Anwenden der JSTL: Die JSTL muss in der jeweiligen JSP Page zuerst bekannt gemacht werden. Hierzu muss die entsprechende TagLib Direktive angegeben werden. z.B.: 31 Library Prefix URI Core c http://java.sun.com/jstl/core SQL Actions sql http://java.sun.com/jstl/sql XML Processing x http://java.sun.com/jstl/xml I18N http://java.sun.com/jstl/fmt fmt <%@ taglib uri="http://java.sun.com/jstl/xml" prefix="x" %> XML mit Java OpenSource (c) Mark Egloff 2003 TagLibs – JSTL XML Tags Übersicht XML Processing Tags der JSTL: Die JSTL stellt für die XML Verarbeitung einige Tags zu Verfügung: • <x:parse> • <x:out> • <x:set> • <x:if> • <x:choose> • <x:forEach> • <x:transform> • <x:param> 32 DOM Erzeugung von XML Daten XPath Evaluieren und ausgeben XPath Evaluieren und in Variable schreiben XPath Evaluieren und Bedingung ausführen XPath Evaluieren und Bedingungen ausführen XPath Evaluieren und über Selektion iterieren XSL Transformation ausführen Parameter an XSL Transformation übergeben XML mit Java OpenSource (c) Mark Egloff 2003 TagLibs – JSTL XML Tags <x:parse>, <x:out>: XML Daten parsen und ausgeben Mittels „<x:parse>“ können XML Daten geparst und in eine Variable als DOM geschrieben werden. „<x:out>“ erlaubt es uns diese DOM Daten mittels XPath zu selektieren und auszugeben z.B. XML Daten von Datei parsen und 1. Title ausgeben : 33 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml"%> <c:import var="cdcatalog" url="cdcatalog.xml"/> <x:parse doc="${cdcatalog}" var="doci"/> <html> 1st Title is "<x:out select="$doci//cd/title"/>" </html> XML mit Java OpenSource (c) Mark Egloff 2003 TagLibs – JSTL XML Tags <x:parse>, <x:out>: XML Daten parsen und ausgeben z.B. XML Daten inline parsen und 2.Title ausgeben : <%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %> <html> <x:parse var="doci"> <catalog > <cd country="UK"><title>Hide your heart</title></cd> <cd country="USA"><title>Still got the blues</title></cd> <catalog > </x:parse> <body> 2nd Title is "<x:out select="$doci//cd[2]/title"/>" </body> </html> 34 XML mit Java OpenSource (c) Mark Egloff 2003 TagLibs – JSTL XML Tags <x:set>: XML Daten auswerten und in Variable schreiben „<x:set>“ ist fast wie „<x:out>“ nur, dass anstelle das XPath Resultat ausgegeben es in eine Variable geschrieben wird. z.B. XML Daten von Datei parsen und 1.Title ausgeben : <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %> <c:import var="cdcatalog" url="cdcatalog.xml"/> <x:parse doc="${cdcatalog}" var="doci"/> <x:set select="$doci//cd/title/text()" var="result"/> <html> 1st Title is "${result[0].nodeValue}" </html> 35 XML mit Java OpenSource (c) Mark Egloff 2003 TagLibs – JSTL XML Tags <x:if>, <x:choose>: XML Daten bedingt verarbeiten „<x:if>“ und „<x:choose>“ sind mit den bekannten XSL Anweisungen „<xsl:if>“ und „<xsl:choose>“ gleichzusetzen. Treffen die XPath Bedingungen zu so wird die Anweisung ausgeführt z.B. XML Daten von Datei parsen und Preis überprüfen : 36 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %> <c:import var="cdcatalog" url="cdcatalog.xml"/> <x:parse doc="${cdcatalog}" var="doci"/> <html> <x:if select="$doci//cd/price > 10.0"> 1st cd is too expensive! </x:if> </html> XML mit Java OpenSource (c) Mark Egloff 2003 TagLibs – JSTL XML Tags <x:forEach>: über XML Daten iterieren „<x:forEach>“ ist mit den bekannten XSL Anweisung „<xsl:forEach>“ gleichzusetzen. Es kann so über ein XPath Resultat iteriert werden. z.B. XML Daten von Datei parsen und alle Titel ausgeben : 37 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %> <c:import var="cdcatalog" url="cdcatalog.xml"/> <x:parse doc="${cdcatalog}" var="doci"/> <html> <x:forEach select="$doci//title"> <x:out select="."/><br> </x:forEach> </html> XML mit Java OpenSource (c) Mark Egloff 2003 TagLibs – JSTL XML Tags <x:transform>,<x:param>: XSL Transformation Mittels „<x:transform>“ kann eine XSL Transformation durchgeführt werden Mittels „<x:param>“ können zusätzliche Parameter an die Transformation übergeben werden. Î <xsl:param> z.B. XML Cd Katalog in HTML transformieren : 38 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %> <c:import var="xml" url="cdcatalog.xml"/> <c:import var="xsl" url="cdcatalog.xsl"/> <x:transform doc="${xml}" xslt="${xsl}"> <x:param name="par1" value="123"/> </x:transform> XML mit Java OpenSource (c) Mark Egloff 2003 TagLibs – JSTL XML Tags <x:transform>,<x:param>: XSL Transformation z.B. Inline XSL Transformation: 39 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %> <c:import var="xsl" url="cdcatalog.xsl"/> <x:transform xslt="${xsl}"> <?xml version="1.0" encoding="ISO-8859-1"?> <catalog> <cd> <title>Empire Burlesque</title> <artist>Bob Dylan</artist> <country>USA</country> <price>10.90</price> </cd> </catalog> </x:transform> XML mit Java OpenSource (c) Mark Egloff 2003 TagLibs – JSTL XML Tags <x:transform>,<x:param>: XSL Transformation z.B. Inline XSL Transformation mit Inline Stylesheet: 40 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %> <c:set var="xsl"> <?xml version="1.0" encoding="ISO-8859-1"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> ... </xsl:stylesheet> </c:set> <x:transform xslt="${xsl}"> <?xml version="1.0" encoding="ISO-8859-1"?> <catalog> ... </catalog> </x:transform> XML mit Java OpenSource (c) Mark Egloff 2003 TagLibs – Nachteile JSTL XML Tags Nachteile der XML Actions der JSTL Serialisierung von DOM Daten zu String nicht direkt möglich Î Manueller Einsatz des Apache Xerces Serializers Î Einsatz anderer Taglibs z.B. <xtags:output> Î Einsatz einer 1:1 XSL Transformation Keine SAX Unterstützung, grössere XML könnten zu Performance Problemen führen Kein Zugriff auf das JAXP API, Konfigurationen können so nicht durchgeführt werden 41 XML mit Java OpenSource (c) Mark Egloff 2003 TagLibs – JSTL XML Tags Lösung mittels XSLT DOM serialisieren 42 <%@ taglib prefix="c" uri="..." %> <%@ taglib prefix="x" uri="..." %> <%@ page contentType="text/xml" %> <c:import var="articles" url="tagesanzeiger.xml"/> <x:parse doc="${articles}" var="dom"/> <?xml version="1.0" encoding="iso-8859-1" ?> <c:set var="xsl"> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" indent="yes" omit-xmldeclaration="yes"/> <xsl:template match="node()"> <xsl:copy-of select="."/> </xsl:template> </xsl:stylesheet> </c:set> <root> <x:transform xslt="${xsl}" doc="${dom}"/> </root> XML mit Java OpenSource (c) Mark Egloff 2003 TagLibs Nachteile Taglibs (1/2) Bei den eingesetzten Taglibs muss die Version des jeweiligen Standards (JSP, Servlet sowie auch der Java Version) berücksichtigt werden Die jeweiligen Taglibs benötigen oft noch weitere Libraries (*.jar) , dies bemerkt man erst zur Laufzeit . Weitere Versionskonflikte möglich Debugging ist sehr schwierig, hier hilft nur regelmässiges Logging und Testen Syntax ist jeweils von der jeweiligen Taglibrary und Hersteller abhängig. Kompatibilität zwischen den Taglibs of nicht gewährleistet z.B. <xtags:parse>, <x:parse > 43 XML mit Java OpenSource (c) Mark Egloff 2003 TagLibs Nachteile Taglibs (2/2) Taglibs bieten viele Möglichkeiten, jedoch kann es das Architekturprinzip MVC auch zerstören da keine Trennung mehr zwischen Businesslogik und Präsentationslogik erfolgt Taglibs sind nicht immer die beste Wahl wenn es um Performance geht, hier spielt alleine die Implementation eine Rolle. Eventuell einfache Java Beans mit Logik einsetzen Zuviel Logik (egal ob Scriptlets ode Taglibs) machen JSP Seiten schlecht wartbar. Darum diese immer so einfach und schlank wie möglich halten 44 XML mit Java OpenSource (c) Mark Egloff 2003 XML & TagLibs - Links • Sun JSP TagLibs http://java.sun.com/products/jsp/taglibraries/index.jsp • Sun JSP JSTL http://java.sun.com/products/jsp/jstl/ • Apache TagLibs http://jakarta.apache.org/taglibs/ • Apache JSTL http://jakarta.apache.org/taglibs/doc/standard- doc/intro.html • O‘Reilly On Java - Jakarta Taglibs http://www.onlamp.com/pub/a/onjava/2001/05/29/jsp_servlets.ht ml • SUN JSP JSTL Tutorial http://java.sun.com/webservices/docs/1.0/tutorial/doc/JSTL3.html 45