# Apache Taglibs

Apache Taglibs (vormals Jakarta Taglibs) ist ein Projekt der Apache Software Foundation. Es besteht aus einer Sammlung von Tag Libraries (Bibliotheken von Tags) und verwandten Projekten. Wichtigster Bestandteil dieses Projektes ist die Referenzimplementierung der JSTL. Daneben existieren noch weitere Tag-Libraries, die im Folgenden beschrieben werden.
Viele der Aufgaben, die von den angebotenen Tags erledigt werden, werden in moderneren Web-Anwendungen, die nach dem Entwurfsmuster MVC Model entwickelt werden, nicht als Teil der Präsentationsschicht (JSP) realisiert, sondern als Teil der Anwendungslogik (Servlets oder Enterprise JavaBeans). So wird zum Beispiel die Kommunikation via JMS normalerweise nicht als Teil einer JSP implementiert.

## Geschichte

Das Projekt startete 2000 als Jakarta Taglibs. Mit dem Aufkommen von JSTL wurden die Kernfunktionalitäten vieler Bibliotheken jedoch standardisiert und die Nachfrage nach solchen Bibliotheken ließ nach. In der Folge wurden weite Teile der Funktionen eingestellt, und die verbleibenden Bibliotheken in den Jahren 2008 und 2009 in das Tomcat-Projekt überführt. Übriggeblieben sind von den einst rund 30 Bibliotheken lediglich drei: Eine Standard-Bibliothek, die verschiedene JSTL-Implementierungen bereithält, die Reusable Dialog Components Taglib RDC und eine Extended-Bibliothek, die einige nichtstandardisierte Funktionen bereithält, die weiter wünschenswert sind.

## Historische Jakarta-Taglibs
### Benchmark

Benchmarks sind genormte Testverfahren zur Ermittlung von Laufzeiten. Das Teilprojekt Benchmark stellt jedoch lediglich zwei einfache Tags für die Performance-Messungen in JSPs bereit.
Dieses Teilprojekt stellt die zwei Tags „duration“ und „exclude“ bereit. „duration“ misst die Zeit, die die Ausführung eines zwischen den beiden Tag-Klammern befindlichen JSP-Codes benötigt. „exclude“ ermöglicht es, Teile der Ausführung von der Messung auszuschließen.

### BSF (Bean Scripting Framework)

Dieses Teilprojekt bildet eine Schnittstelle zum Bean Scripting Framework (BSF), einem anderen Jakarta-Projekt, das es ermöglicht, Skriptsprachen von Java-Klassen ausführen zu lassen. Hiermit können also Skripte in JSP-Code eingebettet werden.

### Cache

Dieses Teilprojekt ermöglicht das einfache Caching von Teilen von JSPs, also deren Zwischenspeicherung bei mehrfachen Aufrufen identischer Code-Teile. Es bietet dazu zwei einfache Tags namens „cache“ und „invalidate“.

### DateTime

Dieses Teilprojekt entwickelt Tags, die für die Verarbeitung von Datumswerten und Uhrzeiten nützlich sind. So gibt es beispielsweise ein Tag „format“, um ein Datum für die Anzeige zu formatieren, und ein Tag „parse“, um ein Datumsobjekt aus dem Inhalt eines Eingabefelds zu erzeugen. Außerdem wird Funktionalität für den Umgang mit verschiedenen Zeitzonen und internationalen Datumsformaten angeboten.
Diese Tags ähneln zum Teil den von der JSTL angebotenen Zeit- und Datumstags (z. B. „fmt:formatDate“).

### I18N (Internationalisierung)

Dieses Teilprojekt stellt Tags für die Internationalisierung von JSP-Anwendungen bereit, also deren Übersetzung in unterschiedliche Sprachen. Sie enthält einerseits Tags für die Vertextung von Nachrichten mit Hilfe sogenannter „Ressourcenbündel“, die normalerweise in Java-Properties-Dateien abgelegt sind. Andererseits sind Tags für die Formatierung von Zahlen, Währungen und anderem vorhanden.
Diese Tags ähneln den von der JSTL definierten Formatierungstags, beispielsweise „fmt:bundle“ und „fmt:message“.

### Input

Die Input Tag Library stellt Tags für die einfache Vorbelegung von HTML-Formularfeldern bereit. Dazu werden die üblichen HTML-Eingabe-Tags durch entsprechende Tags ersetzt, die es dem JSP-Entwickler erleichtern, Inhalte von Feldern zu überprüfen und zwischen mehreren Aufrufen der gleichen Seite beizubehalten.

### IO

Die IO tag library stellt spezielle Tags bereit, die es ermöglichen, aus JSPs heraus HTTP-Aufrufe abzusetzen. „IO“ steht für englisch Input/Output, also Eingabe und Ausgabe. So gibt es beispielsweise ein Tag „<request>“, das es ermöglicht, ein Dokument über HTTP zu beschaffen und in die aufrufende Seite einzubetten. Ein Anwendungsbeispiel hierfür ist das Einfügen der originalen „GNU-Lizenz für freie Dokumentation“ (GFDL) in die eigene Seite mit dem folgenden Tag, anstatt nur einen Link einzufügen.

### JMS

Die JMS custom tag library ermöglicht es, aus JavaServer Pages heraus asynchrone Nachrichten über den Java Message Service zu versenden und zu empfangen. Sie definiert Tags zum Auf- und Abbauen von Verbindungen und zum Erzeugen, Versenden und Empfangen von Nachrichten. Empfangene Textnachrichten können in die aufrufende JSP integriert werden.

### JNDI

Die JNDI tag library erlaubt den Zugriff auf Verzeichniseinträge über das Java Naming and Directory Interface (JNDI). Dafür stellt sie Tags zum Definieren von Kontexten (Verzeichnisknoten) und zum Abfragen von Einträgen und deren Attributen bereit.

### Log

Dieses Teilprojekt definiert Tags, die zur Ausgabe von Meldungen in Logdateien über das Framework log4j. Es gibt Tags für die unterschiedlichen Prioritäten „<debug>“, „<info>“, „<warn>“, „<error>“ und „<fatal>“ sowie eines namens „<dump>“, das die momentanen Werte sämtlicher Variablen einer JSP protokolliert.

### Mailer

Dieses Teilprojekt stellt im Wesentlichen ein Tag „mail“ bereit, das eine zu versendende E-Mail repräsentiert. Darin werden weitere Tags eingefügt, um die Eigenschaften der E-Mail zu definieren, z. B. „message“ für den eigentlichen Nachrichtentext. Einige Eigenschaften können auch als Tag-Attribute festgelegt werden, wie z. B. der Empfänger der Nachricht.

### Random

Dieses Teilprojekt stellt zwei Tags bereit, mit denen sich Zufallszahlen („<number>“) oder zufällige Zeichenketten („<string>“) erzeugen lassen. Bei jedem Aufruf der JSP wird ein neuer Zufallswert erzeugt und in die Seite eingebettet. Die Wertebereiche sind frei definierbar.

### RDC – Reusable Dialog Components

Das Teilprojekt Reusable Dialog Components („wiederverwendbare Dialogkomponenten“) bietet Tags für die Dialogsteuerung von Webanwendungen über Spracherkennung und ebenso die Ausgabe per Sprachsynthese. Die Tags halten sich an Standards, die im Rahmen von VoiceXML definiert wurden.

### Regexp

Diese Tag-Bibliothek stellt im Wesentlichen drei Tags für die wichtigsten Anwendungen regulärer Ausdrücke zur Verfügung.
* „<existsMatch>“ expandiert seinen Inhalt, wenn ein regulärer Ausdruck in einer zuvor definierten Variablen erkannt wird.
* „<substitute>“ ersetzt einen regulären Ausdruck in einer Variablen durch einen gegebenen Text.
* „<split>“ zerlegt den Inhalt einer Variablen in Teilausdrücke, die dann der Reihe nach expandiert werden.

### Scrape

Dieses Teilprojekt stellt Tags bereit, die Inhalte aus anderen Webseiten extrahieren („zusammenkratzen“, englisch to scrape) und sie in die JSP einbetten. Welche Inhalte extrahiert werden, wird durch Textfragmente definiert, die am Beginn und am Ende des interessierenden Code-Fragments in der Quellseite stehen. Die Inhalte werden gepuffert.

### String

Dieses Teilprojekt stellt viele Tags zur Manipulation von Zeichenketten bereit, wie beispielsweise die Umwandlung einer Zeichenkette in Großbuchstaben (capitalize) oder das Auffüllen eines Strings mit beliebigen Zeichen bis zu einer gewünschten Länge (rightPad). Die Tags basieren auf dem Jakarta-Projekt commons lang.

### XTags

Diese Tags erlauben eine Manipulation von XML-Dokumenten und stellen somit eine in JSP implementierte Alternative zu XSLT dar.