Was sind Tag-Bibliotheken?

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.

Ein "Hello World - Tag"

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:

Anlegen der Projektstruktur im Tomcat

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
  ...
...
            

Erstellen des Tag-Handlers

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;
  }
}
itmapa.de - X2H V 0.20

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

Erstellen des Tag Library Descriptors

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

Erstellen einer JSP, welche das Tag verwendet

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.

Testen der JSP mit dem "Hello World - Tag"

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.

Firefox: Hello world Tag

Sun: Homepage JSTL Flagge Großbritanien
JavaServer Pages Standard Tag Library JSTL

Apache: Homepage Jakarta Taglibs Flagge Großbritanien
Jakarta Taglibs