JavaServer Pages Standard Tag Library

Un article de Wikipédia, l'encyclopédie libre.
Aller à : navigation, rechercher
JavaServer Pages Standard Tag Library
Développeur Sun_Microsystems (implémentation de référence)
Première version 11 juin 2002
Dernière version 1.2 (8 mai 2006)
Écrit en Java
Environnement Multiplate-forme
Type norme de bibliothèque logicielle
Licence limitée, spécifique
Site web (en) Site officiel

La JavaServer Pages Standard Tag Library (JSTL) est un composant de la plate-forme JEE de développement. Elle étend la spécification JSP en ajoutant une bibliothèque de balises pour les tâches courantes, comme le travail sur des fichiers XML, l'exécution conditionnelle, les boucles et l'internationalisation. JSTL a été développée par la Java Community Process (JCP). Le 8 mai 2006, la JSTL 1.2 est sortie.

En supplément à JSTL, la JCP propose des Java Specification Requests (JSR) pour développer les bibliothèques de balises standards :

  • JSR 128 : JESI – JSP Tag Library for Edge Side Includes (inactif)
  • JSR 267 : Bibliothèque JSP Tag pour les services web

Objectif[modifier | modifier le code]

La JSTL, en tant que bibliothèque de balises JSP, propose de développer une page JSP sans y utiliser de code Java directement.
Elle utilise ainsi une syntaxe proche des langages utilisés par les web designers (HTML ou XHTML) ce qui leur permet de concevoir des pages dynamiques complexes sans connaissances préalable du langage Java.

Notoriété[modifier | modifier le code]

De très nombreuses applications JEE pour le Web (à base de servlets et JSP) et frameworks Java incluent la JSTL, ou invitent à l'utiliser, par exemple Liferay[1], Jahia[2], Spring[3].

Versions[modifier | modifier le code]

Actuellement, trois versions de JSTL sont disponibles, avec les restrictions suivantes :

  • La JSTL 1.0 nécessite un conteneur JSP 1.2 (J2EE 1.3).
  • La JSTL 1.1 nécessite un conteneur JSP 2.0 (J2EE 1.4).
  • La JSTL 1.2 nécessite un conteneur JSP 2.1 (J2EE 1.5).

La JSTL se base sur l'utilisation des Expressions Languages en remplacement des scriptlets Java. Toutefois, ce mécanisme n'est disponible qu'avec un conteneur JSP 2.0.

Utilisation[modifier | modifier le code]

La JSTL, dans ses versions 1.1 et 1.2, se base sur les JSP 2.0 qui intègre un moteur d'Expression Language, elle ne définit donc qu'une seule implémentation avec les URIs suivantes :

Bibliothèque URI Prefixe
core http://java.sun.com/jsp/jstl/core c
Format http://java.sun.com/jsp/jstl/fmt fmt
XML http://java.sun.com/jsp/jstl/xml x
SQL http://java.sun.com/jsp/jstl/sql sql
Function http://java.sun.com/jsp/jstl/functions fn

Pour développer une page JSP a base de JSTL il suffit de déclarer la bibliothèque et de configurer le fichier web.xml qui contient le paramétrage des servlets d'une application JEE.

  • Exemple de configuration, optionnelle, de la bibliothèque dans le fichier web.xml :
   <?xml version="1.0" encoding="ISO-8859-1"?>
   <web-app xmlns="http://java.sun.com/xml/ns/j2ee"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
     version="2.4">
        <context-param>
           <param-name>javax.servlet.jsp.jstl.sql.dataSource</param-name>
           <param-value>jdbc/data</param-value>
        </context-param>
   </web-app>
  • Déclaration complète de la bibliothèque pour chaque page JSP implémentée :
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/xml" prefix="x" %>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>

Core : Bibliothèque de base[modifier | modifier le code]

La bibliothèque Core propose les quelques balises essentielles pour utiliser le langage des JSP comme langage de templates en évitant d'y écrire des instructions et expressions directement en Java :

Les variables[modifier | modifier le code]

  • Afficher une expression : <c:out />
   <c:out value="${expression}" escapeXml="[true/false]" default="valeur par defaut" />
Attribut Requis Description
value Oui Expression qui sera évaluée et affichée
escapeXml Non Détermine si les caractères xml doivent être remplacés par leur code HTML respectif
default Non Valeur affiché par défaut si l'expression value est null
  • Définir une variable : <c:set />
   <c:set var="variable" value="${expression}" scope="[page/request/session/application]" target="" property="" />
Attribut Requis Description
var Oui Nom de la variable à créer dans le scope
value Oui Valeur de la variable dans le scope
scope Non Portée de la variable (page, request, session ou application)
target Non Objet de type Java.util.Map ou issue d'un bean
property Non Propriété de l'objet target affectée
  • Supprimer une variable : <c:remove />
   <c:remove var="variable" scope="[page/request/session/application]" />
Attribut Requis Description
var Oui Nom de la variable à supprimer dans le scope
scope Non portée de la variable

Les actions conditionnelles[modifier | modifier le code]

  • Equivalence du "if" en JAVA : <c:if />
   <c:if test="${empty variable}">
   </c:if>
  • Equivalence du "switch" en JAVA : <c:choose />
   <c:choose>
      <c:when test="${expression1 == true}">
         Expression 1
      </c:when>
      <c:when test="${expression2 == true}">
         Expression 2
      </c:when>
      <c:otherwise>
         Autre chose
      </c:otherwise>
   </c:choose>

Les itérations[modifier | modifier le code]

  • Itérer sur une collection : <c:forEach />
   <c:forEach items="thisParam" var="${param}" varStatus="variableStatus">
      Paramètre ${thisParam.key} = ${thisParam.value}
   </c:forEach>
  • Itérer sur une chaîne de caractère : <c:forTokens />
   <c:forTokens var="thisVar" items="var1;var2;var3" delims=";">
      ${thisVar}
   </c:forTokens>

Les urls[modifier | modifier le code]

  • Afficher une URL contenant des paramètres : <c:url /> et <c:param />
   <c:url value="/page2">
      <c:param name="param1" value="18"/>
   </c:url>

Liens externes[modifier | modifier le code]

Notes et références[modifier | modifier le code]

  1. Stephen Delaney, Ajax in Liferay 5 , http://www.liferay.com/community/wiki/-/wiki/Main/Ajax+in+Liferay+5, 2008
  2. Query basics, 2012, http://www.jahia.com/community/documentation/jahiapedia-v6_6_1/query/basics.html
  3. SpringSource, Documentation : 17. View technologies, 2012, http://static.springsource.org/spring/docs/3.1.3.RELEASE/spring-framework-reference/html/view.html