Eine JSP Taglib in einem Maven Jar

Eigentlich ist es nichts besonderes, eine JSP Taglib in einem JAR auszuliefern.

Mit dieser Beschreibung möchte ich aber dennoch zeigen, wie man das ganze recht einfach als Maven-Projekt realisiert und vor allem, wie man die TLD so in das Projekt einbindet, dass man einfach bloss auf das Projekt verweisen muss und die Taglib direkt in seinem eigenen Web-Projekt verwenden kann.

Das Projekt

inhaltl. Voraussetzungen

Für das Verständnis hilfreich: grundlegenge Kenntnisse über Maven und JSP Tags.

techn. Voraussetzungen

Eine lauffähige Version von Maven - gerne auch integriert in Netbeans oder Eclipse - ist hilfreich.

Voraussetzungen

Als Beispiel: ein paar nicht ganz so sinnvolle Tags

Als Beispiel sollen ein paar Tags dienen, die man vielleicht nicht so wirklich praktisch gebrauchen kann. Da sie jedoch sehr einfach gehalten sind, kann man sich damit auch noch mal die Grundlagen der JSP Tags anschauen.

Wie funktioniert das genau?

TLD Datei als Resource

Damit die TLD-Datei als Resource auch in das JAR mit eingefügt wird, muss sie im Verzeichnis src/main/resources/META-INF/tags abgelegt werden.

Der Pfad src/main/resources sorgt dabei in Maven dafür, dass die Datei auch wirklich in das JAR mit reinkommt. Würde man sie in die Sourcen packen, würde sie nicht mit eingefügt werden.

Durch das Ablegen unterhalb von META-INF/tags wird die TLD vom Webserver automatisch gefunden.

Die eigentliche TLD-Datei ist dabei nichts besonderes, es ist eine ganz normale TLD-Datei, wie man sie auch in anderen Projekten findet. Wichtig ist bloss, dass die dort angegebene URI eindeutig ist, damit es keine Überschneidungen zu anderen Taglibs gibt.

Dependency in der pom.xml

Damit man überhaupt ein JSP Tag compilieren kann, ist eine Abhängigkeit zur JSP API notwendig. Diese bindet man am besten mit folgender Dependency ein:

<dependency>
    <groupId>javax.servlet.jsp</groupId>
    <artifactId>jsp-api</artifactId>
    <version>2.0</version>
    <scope>provided</scope>
</dependency>
                                

Wichtig ist dabei die Angabe provided für den Scope. Wenn man dort keine Angabe machen würde, bekäme man ein Problem in dem Web-Projekt, das später die JSP Taglib einbindet, denn in dem Fall würde das JAR der JSP API in die Applikation mit einbezogen (d.h. mit deployed) werden, und dies würde sich mit der JSP API des Webservers überschneiden.

Was sonst noch?

Im wesentlichen war es das schon. In einem Maven Webprojekt kann eine solche JSP Taglib einfach als Abhängigkeit eingefügt werden. In "normalen" Webprojekten einfach das entstehende JAR nach WEB-INF/lib kopieren und als JAR-Abhängigkeit einbinden.

Zur Verwendung der Tags referenziert man dann die URI aus der TLD, wobei einem die meisten IDEs über die Autovervollständigung helfen.

Projektstruktur

Der Einfachheit halber habe ich das Projekt in Netbeans angelegt. Rechts sieht man die grundlegende Projektstruktur.

Realisierung

Disclaimer

Sowohl der Quellcode als auch die Informationen in diesem Text sind sorgfältig zusammengestellt und getestet worden. Trotzdem sind Fehler nicht auszuschliessen. In diesem Fall bitte gerne einen Issue auf GitHub zum Projekt erstellen. Danke.

Zusatzinfos
Navigation