Tag - Bibliotheken erlauben, dass neben den vordefinierten JSP - Aktionen, benutzerdefinierte Aktionen (Custom-Tags) definiert werden können.
Beispiele für Tag-Bibliotheken:
Im Java Community Prozess wurde die JavaServer Pages Standard Tag Library JSTL erstellt, die standardiesierte Custom-Tags in verschiedenen Bibliotheken enthält. Weiterhin exestieren noch die Jakarta Taglibs von der Apache Foundation, die neben der JSTL-Referenzimplementierung noch weitere Bibliotheken enthält.
Weitere Tag-Bibliotheken sind im Internet zu finden.
Dieser Abschnitt beschreibt die Verwendung eines eigenen Tags innerhalb einer JSP. Zur Verwendung kommt Tomcat als Servlet-Container. Es wird davon ausgegangen, dass ein Browser auf dem Rechner verwendet wird, auf dem der Tomcat-Server läft.
Die Erstellung des "Hello World - Tag" umfasst folgende Schritte:
Für das "Hello World - Tag" Beispiel wird folgende Projektstruktur im Tomcat benötigt, die mit einem Dateimanager erzeugt werden kann:
<tomcat> ... +webapps ... +tagexample +WEB-INF +classes ... ...
Der Tag-Handler ist eine Java-Klasse, welche die Funktionalität
des zu erstellenden Tags definiert. Damit die Klasse als Tag-Handler
verwendet werden kann, muss diese ein geeignetes Interface aus dem Package
javax.servlet.jsp.tagext
implementieren. Die Klasse javax.servlet.jsp.tagext.TagSupport
implementiert das Interface javax.servlet.jsp.tagext.Tag
,
welches für ein erstes eigenes Tag hier verwendet werden soll.
Die Klasse TagSupport
ist im Jar-File javaee.jar,
die mit dem J2EE 5 SDK ausgeliefert wird, definiert und muss beim complilieren
im Classpath gefunden werden.
package de.timpt; import java.io.*; import javax.servlet.jsp.tagext.*; public class HelloTag extends TagSupport{ public int doStartTag() { try { pageContext.getÖut().print("Hello! I'm your Hello-Tag"); } catch(IÖException ioe) { ioe.printStackTrace(); } return SKIP_BÖDY; } }
Der kompilierte Klasse des Tag-Handlers muss nun in das
<tomcat>\tagexample\WEB-INF\classes
unter Beibehaltung der
Packetstruktur kopiert werden. Die Datei sollte demnach Pfad sufweisen:
<tomcat>/webapps/tagexample/WEB-INF/classes/de/timpt/HelloTag.class
Die Hauptaufgabe des Tag Library Descriptor (kurz: TLD) ist es zu definieren, welcher Tag Hanlder für welches Tag verwendet werden soll. Eine TLD ist eine XML-Datei, die normalerweise mit der Endung ".tld" endet.
Für das Hello world - Tag wird folgende TLD verwendet.
<?xml version="1.0" encoding="ISO-8859-1" ?> <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd"> <taglib> vtlib-version>1.0</tlib-version> <jsp-version>1.2</jsp-version> <tag> <name>hello</name> <tag-class>de.timpt.HelloTag</tag-class> </tag> </taglib>
Der Dateiname inklusive Pfad ist:
<tomcat>/webapps/tagexample/mytirsttag.tld
Die nachfolgende JSP verwendet das oben erstellte Tag. In der ersten Zeile
wird mit Hilfe der taglib
-Direktive der Tag Library Descriptor
festgelegt, welcher beim Prefix hellotag
zur Bestimmung des
Tag-Handlers herangezogen werden soll. In der Zeile 04 wird
schliesslich der neu erstellte Tag verwendet.
<%@taglib uri="myfirsttag.tld" prefix="hellotag" %> <html> <body> Hier kommt der HelloTag: <hellotag:hello/> </body> </html>
Der Dateiname inklusive Pfad ist:
<tomcat>/webapps/tagexample/index.jsp
Wird die XML-Form für die JSP verwendet gibt es keine taglib-Direktive.
Die zu verwendendes TagLibraries werden im <jsp:root>
-Element
definiert.
Nach dem Start von Tomcat und der Eingabe der Addresse
http://localhost:8080/tagexample
ist der erstellte Tag innerhalb der JSP in Aktion zu sehen.
Sun: Homepage JSTL
JavaServer Pages Standard Tag Library JSTL
Apache: Homepage Jakarta Taglibs
Jakarta Taglibs