L'API JSP définit un moyen de définir ses propres tags, et de leur associés des traitement écrits dans des classes Java. S'en est suivi le développement de bibliothèques de tags appelées taglibs , dont certaines sont standardisées dans l'API. Des frameworks entiers, tels que Struts, sont construits en partie sur ces taglibs , qui permettent des traitement très puissants.

Techniquement, une bibliothèque de tags est composée deux deux éléments :

  • un descripteur au format XML, appelé "fichier TLD", et qui porte l'extension .tld ;

  • une ou plusieurs archives Java, au format JAR. Ces fichiers doivent être rangés dans le répertoire WEB-INF/lib de l'application web.

Il est bien sûr possible de créer ses propres bibliothèques de tags, et ce processus, bien qu'un peu technique n'est pas beaucoup plus complexe que de créer une servlet. Cela dit nous ne le décrirons pas ici, nous nous bornerons à décrire quelques éléments de la JSTL, Java Standard Tags Library.

La JSTL se compose de quatre librairies :

  • Une librairie core, qui expose tous les tags de base de la JSTL. Les autres librairies s'appuient sur cette librairie.

  • Une librairie fmt, qui expose toutes les fonctionnalités d'affichage de données non triviales : les dates formatées, les nombres formatés, les messages internationalisés.

  • Une librairie x, qui permet de manipuler le XML. Cette librairie permet par exemple de lire des flux XML via HTTP, de les analyser, de les transformer par XSLT, puis de les afficher sous différentes formes.

  • Enfin une librairie sql, qui permet d'interagir directement avec les bases de données.

JSTL apporte une nouveauté aux JSP : l'utilisation de l' expression language , qui permet de s'affranchir de la syntaxe lourde des scriplets originels. Ce langage n'est pas un langage complet : il permet essentiellement de lire des variables, d'accéder à leurs propriétés, et de contruire des expressions.

En combinant l'utilisation de l' EL et celle des taglibs, on peut construire des pages complexes, avec de l'internationalisation, du contrôle de flux, de l'accès aux bases de données et des éléments XML.

L'exemple qui suit nous montre comment tester si une variable est non nulle en utilisant EL, puis afficher une valeur ou une autre en fonction du résultat de ce test.


Analysons ce premier exemple en détails.

Tout d'abord, on indique que l'on va utiliser une librairie de tags par la déclaration <%@taglib prefix="..." uri="..."%>. Cet élément comporte deux attributs :

  • prefix : précise le préfixe au sens XML utilisé pour les éléments de cette page. Le choix de ce préfixe est libre, on utilise conventionnellement c pour la librairie core.

  • uri : le nom de cette librairie. Ce nom est fixé, et déclaré dans le descripteur de librairie (fichier TLD). Pour la librairie core, l'uri est http://java.sun.com/jsp/jstl/core.

Cette déclaration ressemble à celle d'un espace de noms pour un fichier XML. Si l'on développe sa propre librairie de tags, on veillera à la nommer de façon unique.

Une librairie de tags déclare un certain nombre d'éléments XML utilisables dans un page JSP. Ces éléments sont définis dans le standard JSTL, et c'est là qu'ils sont documentés.

On peut paramétrer un tag de deux façon : en lui ajoutant des attributs, ou en lui ajoutant du contenu. Notons que les uns et les autres sont facultatifs

Dans notre exemple, l'élément choose ne prend pas d'attributs, et il possède un contenu fixé. Ce contenu est composé d'autant de sous-éléments when que l'on veut, et d'un unique élément otherwise. Il ne peut pas y avoir de contenu textuel.

De même, l'élément when ne comporte qu'un unique attribut test, obligatoire, et d'un contenu qui peut mélanger du texte et des éléments JSP (donc d'autres tags).

Enfin, l'élément otherwise ne comporte pas d'attribut, et du contenu JSP, tout comme l'élément when.

Chacun de ces éléments est associé à une sémantique très précise. L'élément choose englode une série d'élément when. Chacun de ces éléments est pris un par un par le moteur de JSP. Le premier de ces éléments pour lequel l'argument de son attribut test est true voit son contenu s'afficher. Si aucun élément when ne répond à ce critère, alors c'est le contenu de l'élément otherwise qui est affiché, s'il est présent.

Le choose agit donc un peu comme un switch, en n'affichant qu'un seul élément de contenu parmi une liste.

On notera également l'utilisation de l'élément out, qui affiche la valeur de son attribut value.

Cet exemple nous permet de présenter le fonctionnement général des bibliothèques de tags. La librairie core expose d'autres éléments.

Java servlet et JSP
Retour au blog Java le soir
Cours & Tutoriaux

Table des matières

Introduction
1. Position de l'API Servlet
2. Présentation
Présentation de Tomcat
1. Un peu d'histoire
2. Organisation des répertoires de Tomcat
2.1. Répertoire bin
2.2. Répertoire conf
2.3. Répertoire lib
2.4. Répertoire log
2.5. Répertoire temp
2.6. Répertoire webapp
2.7. Répertoire work
3. Lancement de Tomcat
3.1. Lancement par défaut
3.2. Accéder à l'administration de Tomcat
3.3. Plusieurs instances de Tomcat
4. Configuration de Tomcat
4.1. Introduction
4.2. Élément Server
4.3. Élément Service
4.4. Élément Connector
4.5. Élément Engine
4.6. Élément Host
4.7. Élément Context
4.8. Élément GlobalNamingResources
4.9. Élément Realm
4.10. Élément Valve
5. Définition et chargement des applications web
5.1. Introduction
5.2. Prise en compte des éléments Context
5.3. Chargement et mise à jour à chaud
6. Utilisation de Tomcat avec Apache
API Servlet
1. Introduction
2. Une première servlet
2.1. Le code
2.2. Création de l'application web
2.3. Déploiement dans Tomcat
3. Concepts, cycle de vie
3.1. Requête
3.2. Réponse
3.3. Session
3.4. Application web
3.5. Contexte d'exécution
3.6. Cycle de vie
3.7. Filtre
4. Présentation générale de l'API
4.1. Introduction
4.2. Interfaces disponibles
5. Notion de servlet
5.1. Interfaces servlet
5.2. Cycle de vie d'une servlet
5.3. Paramètres d'initialisation d'une servlet
6. Notion de requête
6.1. Accès aux paramètres d'une requête
6.2. Accès aux éléments de l'en-tête HTTP
6.3. Accès aux éléments de l'URL
6.4. Accès aux paramètres du client
6.5. Accès aux informations de sécurité
6.6. Accès à la session, au contexte et aux informations d'initialisation
7. Notion de réponse
7.1. Contrôle du buffer de sortie
7.2. Contrôle de la réponse HTTP
8. Notion de session HTTP
9. Redirection ou inclusion d'une ressource
10. Listeners
10.1. Introduction
10.2. Événements de l'API Servlet
10.3. Ajout ou retrait d'un attribut
10.4. Création et destruction d'un contexte
10.5. Notification d'un objet attaché à un contexte
10.6. Déclaration d'un listener dans une application web
11. Connexion à une base
11.1. Introduction
11.2. Connexion manuelle
11.3. Connexion par utilisation de source de données
Filtrage
1. Filtrage de servlets
2. Mise en place d'un filtre
2.1. Écriture d'un filtre
2.2. Déclaration du filtrage
3. Filtrage d'une requête
4. Filtrage d'une réponse
4.1. Fonctionnement de ce filtrage
Java Server Pages
1. Introduction
2. Un premier exemple
2.1. Une première JSP statique
2.2. Une première JSP dynamique
2.3. Fonctionnement interne des JSP
3. JSP scriplet
3.1. Les expressions
3.2. Les déclarations
3.3. Variables prédéfinies
3.4. Scriplet de directives
4. Utilisation de beans
4.1. Introduction
4.2. Déclaration d'un bean existant
4.3. Création d'un nouveau bean
4.4. Utilisation des propriétés d'un bean
5. Inclure un contenu externe dans une JSP
5.1. Introduction
5.2. Inclusion au lancement de l'application
5.3. Inclusion au traitement de la requête
6. Utilisation de bibliothèques de tags
6.1. Introduction
6.2. Bibliothèque core
7. Internationalisation
7.1. Notion de bundle
7.2. Internationalisation de pages JSP
Projet exemple
1. Présentation du projet