Intégration de JSTL dans JEE
Intégration de JSTL dans JEE
Achref El Mouelhi
[Link]@[Link]
Jakarta EE
Jakarta EE
Avantages
Simplification du code
H I ©
Meilleure lisibilité UEL
L MO
Que des balises dans le code
r e f E
Maintenance etcrh
© A éutilisation plus facile
Se protéger des failles XSS
Jakarta EE
Solution
H I ©
EL
Télécharger les deux .jar en cliquant sur les deux liens suivants
U
O
LM
JSTL
JSTL-API
r e f E
ch
©A
Placer les .jar téléchargés dans le répertoire lib situé dans WEB-INF
Jakarta EE
Inclure la bibliothèque
<%@ taglib prefix="c" uri="[Link]"%>
H I ©
UEL
O
f E LM
ch r e
©A
Jakarta EE
Inclure la bibliothèque
<%@ taglib prefix="c" uri="[Link]"%>
Jakarta EE
Inclure la bibliothèque
<%@ taglib prefix="c" uri="[Link]"%>
Jakarta EE
Contenu de la page JSP
<%@ page language="java" contentType="text/html; charset=
UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="[Link]"%>
<!DOCTYPE HTML>
H I ©
<html>
UEL
<head>
O
<meta http-equiv="Content-Type" content="text/html;
f E LM
charset=UTF-8">
<title>Projet JEE</title>
ch r e
</head>
<body> ©A
<c:out value="Hello World" />
</body>
</html>
Jakarta EE
Question
Faudrait-il inclure la bibliothèque JSTL dans toutes les pages JSP ?
H I ©
<%@ taglib prefix="c" uri="[Link]"%>
UEL
O
f E LM
ch r e
©A
Jakarta EE
Question
Faudrait-il inclure la bibliothèque JSTL dans toutes les pages JSP ?
H I ©
<%@ taglib prefix="c" uri="[Link]"%>
UEL
O
f E LM
ch r e
Réponse ©A
Non, on peut utiliser l’auto-chargement.
Jakarta EE
Démarche
Créer un fichier JSP dans WEB-INF que nous appellerons par
H I ©
exemple [Link]
UEL
O
Déplacer les directives JSP dans [Link]
f E LM
ch r e
<%@ taglib prefix="c" uri="[Link]"%>
© A
Configurer l’auto-chargement (autoload) depuis [Link]
Jakarta EE
Ajouter l’auto-chargement dans [Link]
<jsp-config>
<jsp-property-group>
<url-pattern>*.jsp</url-pattern>
<include-prelude>/WEB-INF/[Link]</include-prelude>
</jsp-property-group>
H I ©
EL
</jsp-config>
O U
f E LM
ch r e
©A
Jakarta EE
Ajouter l’auto-chargement dans [Link]
<jsp-config>
<jsp-property-group>
<url-pattern>*.jsp</url-pattern>
<include-prelude>/WEB-INF/[Link]</include-prelude>
</jsp-property-group>
H I ©
EL
</jsp-config>
O U
f E LM
Explication
ch r e
©A
<url-pattern> *.jsp </url-pattern> : pour indiquer les fichiers ciblés par
l’auto-chargement
<include-prelude> /WEB-INF/[Link] </include-prelude> : le
chemin du fichier à auto-charger
Cela nous évite de faire <%@ include file="/WEB-INF/[Link]" %> dans
chaque JSP
Jakarta EE
H I ©
Core : pour les principaux de l’algorithmique (déclaration et
EL
gestion de variables, les structures conditionnelles et itératives...)
O U
LM
Function : pour le traitement des chaı̂nes de caractères
r e f E
Format : pour le formatage de données et l’internationalisation
ch
©A
XML : pour la manipulation des fichiers XML
SQL : pour les requêtes SQL
Jakarta EE
r e
h construire des liens hypertextes avec et sans
c: pour
A
url et param
©
paramètre
Jakarta EE
r e
h construire des liens hypertextes avec et sans
c: pour
A
url et param
©
paramètre
Jakarta EE
Afficher une valeur
H I ©
UEL
O
f E LM
ch r e
©A
Jakarta EE
Afficher une valeur
H I ©
<c:out value="${ 1 lt 3 and 2 > 1 }" />
<%-- Affiche true --%>
UEL
O
f E LM
ch r e
©A
Jakarta EE
Afficher une valeur
H I ©
<c:out value="${ 1 lt 3 and 2 > 1 }" />
<%-- Affiche true --%>
UEL
O
f E LM
r e
Afficher le contenu d’une variable avec utilisation de valeur par défaut
ch
©A
<c:out value="${ JEE }" default="JSTL"/>
<%-- Affiche le contenu de la variable JEE si elle existe, sinon
affiche JSTL --%>
Jakarta EE
Afficher une valeur
H I ©
<c:out value="${ 1 lt 3 and 2 > 1 }" />
<%-- Affiche true --%>
UEL
O
f E LM
r e
Afficher le contenu d’une variable avec utilisation de valeur par défaut
ch
©A
<c:out value="${ JEE }" default="JSTL"/>
<%-- Affiche le contenu de la variable JEE si elle existe, sinon
affiche JSTL --%>
Jakarta EE
H I ©
UEL
O
f E LM
ch r e
©A
Jakarta EE
H I ©
UEL
O
Exemple
f E LM
r e
<c:out value="<p> Bonjour 'John Wick'. </p>" />
ch
<%-- affiche <p> Bonjour 'John Wick'. </p> --%>
©A
Jakarta EE
H I ©
UEL
O
Exemple
f E LM
r e
<c:out value="<p> Bonjour 'John Wick'. </p>" />
ch
<%-- affiche <p> Bonjour 'John Wick'. </p> --%>
©A
Pour désactiver cette option (excapeXml)
Jakarta EE
Jakarta EE
Jakarta EE
Jakarta EE
Jakarta EE
c h re
©A
Jakarta EE
Deux autres attributs sont possibles
H I ©
U EL
O
f E LM
ch r e
©A
Jakarta EE
Deux autres attributs sont possibles
H I ©
U EL
La modification d’un attribut de l’objet
O
f E LM
<c:set target="$ {perso }" property="nom" value="Travolta" />
r e
<%-- l'objet p aura comme nouveau nom Travolta --%>
ch
©A
<c:out value="${ [Link] } ${ [Link] }" />
<%-- affiche Travolta John --%>
Jakarta EE
Deux autres attributs sont possibles
H I ©
U EL
La modification d’un attribut de l’objet
O
f E LM
<c:set target="$ {perso }" property="nom" value="Travolta" />
r e
<%-- l'objet p aura comme nouveau nom Travolta --%>
ch
©A
<c:out value="${ [Link] } ${ [Link] }" />
<%-- affiche Travolta John --%>
Jakarta EE
Les structures conditionnelles sans sinon (else)
Jakarta EE
Les structures conditionnelles sans sinon (else)
Jakarta EE
</c:if>
L MO
<c:out value="${ result }" />
Jakarta EE
Les structures conditionnelles avec un ou plusieurs sinon (else (if))
<c:choose>
<c:when test="${ condition }"> resultat </c:when>
...
<c:otherwise>résultat par défaut</c:otherwise>
H I ©
EL
</c:choose>
O U
f E LM
ch r e
©A
Jakarta EE
Les structures conditionnelles avec un ou plusieurs sinon (else (if))
<c:choose>
<c:when test="${ condition }"> resultat </c:when>
...
<c:otherwise>résultat par défaut</c:otherwise>
H I ©
EL
</c:choose>
O U
f E LM
Explication
ch r e
©A
c:choose : équivalent de switch
Jakarta EE
Les structures itératives
H I ©
U EL
O
f E LM
ch r e
©A
Jakarta EE
Les structures itératives
H I ©
U EL
O
Explication
f E LM
ch r e
var : n’est pas obligatoire. On l’ajoute quand on a besoin d’utiliser la valeur du
compteur
©A
begin : valeur initiale du compteur
Jakarta EE
H I ©
U EL
O
f E LM
ch r e
©A
Jakarta EE
H I ©
U EL
O
Explication
f E LM
r e
chla liste à parcourir
A
items : pour définir
©
var : pour récupérer l’élément courant de la liste
Jakarta EE
Pour parcourir une collection
H I ©
U EL
O
f E LM
ch r e
©A
Jakarta EE
Pour parcourir une collection
H I ©
U EL
O
Les différentes propriétés de varStatus
f E LM
r e
first : contient true si c’est la première itération
ch
©A
last : contient true si c’est la dernière itération
...
Jakarta EE
Jakarta EE
ch r e
©A
On parcourt une chaı̂ne de caractère par token
Jakarta EE
Pour ajouter un lien
<c:url value="/tapage" var="monLien" />
<a href="${ monLien }">lien</a>
H I ©
U EL
O
f E LM
ch r e
©A
Jakarta EE
Pour ajouter un lien
<c:url value="/tapage" var="monLien" />
<a href="${ monLien }">lien</a>
H I ©
/tapage est la route d’une Servlet définie soitE
U L [Link] soit
dans
avec l’annotation @WebServlet
L MO
r e f E
A ch
©
Jakarta EE
Pour ajouter un lien
<c:url value="/tapage" var="monLien" />
<a href="${ monLien }">lien</a>
H I ©
/tapage est la route d’une Servlet définie soitE
U L [Link] soit
dans
avec l’annotation @WebServlet
L MO
r e f E
Pour ajouter unA chavec paramètre
lien
©
<c:url value="/tapage" var="monLien">
<c:param name="nom" value="Wick"/>
<c:param name="prenom" value="John"/>
</c:url>
<a href="${ monLien }">lien</a>
Jakarta EE
Jakarta EE
Jakarta EE
Objets implicites
I
pageScope : pour récupérer une variable qui a une portée page
H ©
requestScope : pour récupérer une variable quiE
U L portée request
a une
applicationScope : r e f E
applicationAc
h pour récupérer une variable qui a une portée
©
param : pour récupérer les paramètres de requête
...
Jakarta EE
Pour inclure cette bibliothèque dans le [Link]
H I ©
UEL
O
f E LM
ch r e
©A
Jakarta EE
Pour inclure cette bibliothèque dans le [Link]
H I ©
EL
${ fn:length("chaine") }
<%-- Retourne 6 --%>
O U
f E LM
ch r e
©A
Jakarta EE
Pour inclure cette bibliothèque dans le [Link]
H I ©
EL
${ fn:length("chaine") }
<%-- Retourne 6 --%>
O U
f E LM
r e
Pour tester si une chaı̂ne contient une autre sous-chaı̂ne de caractère
ch
©A
fn:contains("Bonjour", "Bon")
<%-- Retourne true --%>
Jakarta EE
Pour inclure cette bibliothèque dans le [Link]
H I ©
EL
${ fn:length("chaine") }
<%-- Retourne 6 --%>
O U
f E LM
r e
Pour tester si une chaı̂ne contient une autre sous-chaı̂ne de caractère
ch
©A
fn:contains("Bonjour", "Bon")
<%-- Retourne true --%>
fn:substring("John Wick", 5, 8)
<%-- Retourne Wick --%>
Jakarta EE
Autres fonctions
I ©
fn:trim(String) : élimine les espaces au début et à la fin de la chaı̂ne
H
EL
fn:toUpperCase(String) : retourne la chaı̂ne passée en paramètre en majuscule
U
O
LM
fn:toLowerCase(String) : retourne la chaı̂ne passée en paramètre en minuscule
r e f E
fn:escapeXml(String) : élimine les caractères spéciaux en les remplaçant par leur
ch
code HTML (Exemple : ${ fn:escapeXml("Les balises <p> & <b>") }
©A
retourne "Les balises < p > & < b >"
...
Jakarta EE
Pour inclure cette bibliothèque dans le [Link]
H I ©
UEL
O
f E LM
ch r e
©A
Jakarta EE
Pour inclure cette bibliothèque dans le [Link]
r e f E
ch
©A
Jakarta EE
Pour inclure cette bibliothèque dans le [Link]
r e f E
ch
©A
<%-- Affiche montant = 112 233,44 C --%>
Jakarta EE
Pour inclure cette bibliothèque dans le [Link]
r e f E
ch
©A
<%-- Affiche montant = 112 233,44 C --%>
L’attribut type peut prendre d’autres valeurs telles que percent et number
Jakarta EE
<fmt:setLocale="fr_FR" />
H I ©
U EL
O
f E LM
ch r e
©A
Jakarta EE
<fmt:setLocale="fr_FR" />
H I ©
U EL
O
Quelques autres attributs
f E LM
r e
<c:set var="montant" value="112233.44" />
ch
montant = <fmt:formatNumber value="${ montant }" type="currency"
©A
currencySymbol="$" maxIntegerDigits="3"/>
<%-- Affiche montant = 233,44 $ --%>
Jakarta EE
Autres attributs
groupingUsed : prend true pour préciser si les nombres
doivent être groupés, false sinon.
H I ©
UEL
O
maxFractionDigits : indique le nombre maximum de chiffres
dans la partie décimale
f E LM
ch r e
var : contient le nom de la variable reçoit le résultat
©A
scope : précise la portée de cette variable
minIntegerDigits, minFractionDigits...
Jakarta EE
H I ©
Autres attributs
U EL
integerOnly : prend trueL M O
si false. re f E pour un résultat de type entier, float
c h
A la portée de cette variable
scope :©précise
...
Jakarta EE
Jakarta EE
©A
long : remplace l’indice du mois par son nom (janvier, février...)
Jakarta EE
H I ©
EL
type : prend une des valeurs suivantes : date, time ou both
U
O
LM
var : contient le nom de la variable reçoit le résultat
r e f E
scope : précise la portée de cette variable
ch
... ©A
Jakarta EE
H I ©
EL
type : prend une des valeurs suivantes : date, time ou both
U
O
LM
var : contient le nom de la variable reçoit le résultat
r e f E
scope : précise la portée de cette variable
ch
... ©A
Il existe également une balise parseDate qui permet de convertir en
date et qui prend les mêmes attributs que formatDate
Jakarta EE
Pour inclure cette bibliothèque dans le [Link]
<%@ taglib uri="[Link]" prefix="x" %>
H I ©
UEL
O
f E LM
ch r e
©A
Jakarta EE
Pour inclure cette bibliothèque dans le [Link]
<%@ taglib uri="[Link]" prefix="x" %>
I ©
Considérant le fichier XML [Link] situé dans la racine du
H
projet
UEL
O
LM
<personnes>
<personne id="1">
<nom>wick</nom>
r e f E
ch
©A
<prenom>john</prenom>
</personne>
<personne id="2">
<nom>white</nom>
<prenom>alain</prenom>
</personne>
</personnes>
Jakarta EE
Pour importer le fichier Xml
<c:import url="file:/C:/.../eclipse-workspace/TestJstlAtos/personnes.
xml" var="personnes" />
H I ©
UEL
O
f E LM
ch r e
©A
Jakarta EE
Pour importer le fichier Xml
<c:import url="file:/C:/.../eclipse-workspace/TestJstlAtos/personnes.
xml" var="personnes" />
f E L
ch r e
©A
Jakarta EE
Pour importer le fichier Xml
<c:import url="file:/C:/.../eclipse-workspace/TestJstlAtos/personnes.
xml" var="personnes" />
f E L
ch r e
Pour récupérer une personne de la liste des personnes
©A
<x:set var="personne" select="$list/personnes/personne[@id=1]" />
Jakarta EE
Pour importer le fichier Xml
<c:import url="file:/C:/.../eclipse-workspace/TestJstlAtos/personnes.
xml" var="personnes" />
f E L
ch r e
Pour récupérer une personne de la liste des personnes
©A
<x:set var="personne" select="$list/personnes/personne[@id=1]" />
Jakarta EE
Remarques
Comme la librairie Core, la librairie XML dispose de balises
H I ©
set pour déclarer une variable,
UEL
O
out pour afficher,
f E LM
ch
if et choose : pour testerr e
©A
forEach : pour itérer
...
Jakarta EE
<!-- [Link]
jstl/[Link]-api -->
<dependency>
H I ©
<groupId>[Link]</groupId>
UEL
O
<artifactId>[Link]-api</artifactId>
<version>3.0.0</version>
</dependency>
f E LM
ch r e
© A
<!-- [Link]
[Link] -->
<dependency>
<groupId>[Link]</groupId>
<artifactId>[Link]</artifactId>
</dependency>
Jakarta EE
r e f E
ch
©A
Jakarta EE
r e f E
ch
©A
Et d’activer Expression Language