Académique Documents
Professionnel Documents
Culture Documents
Achref El Mouelhi
elmouelhi.achref@gmail.com
JEE
JEE
Avantages
Simplification du code
H I ©
UEL
MO
Meilleure lisibilité
f
Que des balises dans le code E L
etcrh
r e
Maintenance
© A éutilisation plus facile
Se protéger des failles XSS
JEE
Solution
H I ©
Télécharger la bibliothèque à partir du lienE
U L
suivant
MO
https://course.oc-static.com/ftp-tutos/cours/java-ee/jstl-1.2.jar
L
r e f
Placer le . jar télécharg Eé (sans le décompresser) dans le
répertoire lib c
A hé dans WEB-INF
situ
©
JEE
Inclure la bibliothèque
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
H I ©
UEL
O
f E LM
ch r e
©A
JEE
Inclure la bibliothèque
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
H I ©
EL
Afficher un premier message Hello World
<c:out value="Hello World" /> O U
f E LM
ch r e
©A
JEE
Inclure la bibliothèque
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
H I ©
EL
Afficher un premier message Hello World
<c:out value="Hello World" /> O U
f E LM
ch r e
©A
prefix="c" : indique le préfixe à utiliser pour la bibliothèque
core
c:out : utilisation de ce préfixe pour afficher un message
JEE
Contenu de la page JSP
<%@ page language="java" contentType="text/html; charset=
UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix
="c" %>
H I ©
<!DOCTYPE HTML>
UEL
<html>
O
<head>
f E
<meta http-equiv="Content-Type" content="text/html; LM
charset=UTF-8">
ch r e
©A
<title>Projet JEE</title>
</head>
<body>
<c:out value="Hello World" />
</body>
</html>
JEE
Question
Faudrait-il inclure la bibliothèque JSTL dans toutes les pages JSP ?
H I ©
<%@ taglib uri="http://java.sun.com/jsp/jstl/core"
UEL
prefix="c" %>
O
f E LM
ch r e
©A
JEE
Question
Faudrait-il inclure la bibliothèque JSTL dans toutes les pages JSP ?
H I ©
<%@ taglib uri="http://java.sun.com/jsp/jstl/core"
UEL
prefix="c" %>
O
f E LM
ch r e
©A
Réponse
Non, on peut utiliser l’auto-chargement.
JEE
Démarche
Créer un fichier JSP dans WEB-INF que nous appellerons par
H I ©
exemple jstlLib.jsp
UEL
O
LM
Déplacer les directives JSP dans jstlLib.jsp
r e f E
ch
<%@ taglib uri="http://java.sun.com/jsp/jstl/
©A
core" prefix="c" %>
JEE
Ajouter l’auto-chargement dans web.xml
<jsp-config>
<jsp-property-group>
<url-pattern> *.jsp </url-pattern>
<include-prelude>/WEB-INF/jstlLib.jsp</
H I ©
EL
include-prelude>
</jsp-property-group>
O U
</jsp-config>
f E LM
ch r e
©A
JEE
Ajouter l’auto-chargement dans web.xml
<jsp-config>
<jsp-property-group>
<url-pattern> *.jsp </url-pattern>
<include-prelude>/WEB-INF/jstlLib.jsp</
H I ©
EL
include-prelude>
</jsp-property-group>
O U
</jsp-config>
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/jstlLib.jsp
</include-prelude> : le chemin du fichier à auto-charger
Cela nous évite de faire <%@ include
file="/WEB-INF/taglibs.jsp" %> dans chaque JSP
H & H: Research and Training 10 / 41
Cinq librairies JSTL
JEE
H I ©
Core : pour les principaux de l’algorithmique (déclaration et
EL
gestion de variables, les structures conditionnelles et itératives...)
U
O
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
JEE
H I ©
set : pour déclarer ou modifier la valeur d’une variable
EL conditionnel
if, choose et when : pour effectuer un traitement
U
forEach et forTokens : pour M
O
f E L avoir une structure de contrôle
itérative
r e
h construire des liens hypertextes avec et sans
c: pour
©
url et paramA
paramètre
JEE
H I ©
set : pour déclarer ou modifier la valeur d’une variable
EL conditionnel
if, choose et when : pour effectuer un traitement
U
forEach et forTokens : pour M
O
f E L avoir une structure de contrôle
itérative
r e
h construire des liens hypertextes avec et sans
c: pour
©
url et paramA
paramètre
JEE
Afficher une valeur
H I ©
UEL
O
f E LM
ch r e
©A
JEE
Afficher une valeur
H I ©
<c:out value="${ 1 lt 3 and 2 > 1 }" />
UEL
<%-- Affiche true --%>
O
f E LM
ch r e
©A
JEE
Afficher une valeur
H I ©
<c:out value="${ 1 lt 3 and 2 > 1 }" />
UEL
<%-- Affiche true --%>
O
f E LM
ch r e
Afficher le contenu d’une variable avec utilisation de valeur par défaut
©A
<c:out value="${ JEE }" default="JSTL"/>
<%-- Affiche le contenu de la variable JEE si elle existe, sinon
affiche JSTL --%>
JEE
Afficher une valeur
H I ©
<c:out value="${ 1 lt 3 and 2 > 1 }" />
UEL
<%-- Affiche true --%>
O
f E LM
ch r e
Afficher le contenu d’une variable avec utilisation de valeur par défaut
©A
<c:out value="${ JEE }" default="JSTL"/>
<%-- Affiche le contenu de la variable JEE si elle existe, sinon
affiche JSTL --%>
JEE
Pourquoi écrire autant pour afficher une variable ?
H I ©
UEL
O
f E LM
ch r e
©A
JEE
Pourquoi écrire autant pour afficher une variable ?
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
JEE
Pourquoi écrire autant pour afficher une variable ?
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)
<c:out value="<p> Bonjour ’John Wick’. </p>" escapeXml="false"
/>
<%-- affiche Bonjour ’John Wick’. --%>
JEE
JEE
JEE
JEE
JEE
H I ©
EL
Créer un objet de type Personne à partir de l’objet perso défini
U
dans la servlet et ajouté comme attribut de requête
O
L M
re f E
<c:set scope="session" var="p" value="${ perso }" />
c h
©A
JEE
Deux autres attributs sont possibles
H I ©
U EL
O
f E LM
ch r e
©A
JEE
Deux autres attributs sont possibles
H I ©
U EL
O
LM
La modification d’un attribut de l’objet
f E
<c:set target="$ {perso }" property="nom" value="Travolta" />
r e
ch
<%-- l’objet p aura comme nouveau nom Travolta --%>
©A
<c:out value="${ p.nom } ${ p.prenom }" />
<%-- affiche Travolta John --%>
JEE
Deux autres attributs sont possibles
H I ©
U EL
O
LM
La modification d’un attribut de l’objet
f E
<c:set target="$ {perso }" property="nom" value="Travolta" />
r e
ch
<%-- l’objet p aura comme nouveau nom Travolta --%>
©A
<c:out value="${ p.nom } ${ p.prenom }" />
<%-- affiche Travolta John --%>
JEE
Les structures conditionnelles sans sinon (else)
JEE
Les structures conditionnelles sans sinon (else)
JEE
JEE
<c:choose>
<c:when test="${ condition }"> resultat </c:when>
...
<c:otherwise>résultat par défaut</c:otherwise>
H I ©
</c:choose>
U EL
O
f E LM
ch r e
©A
JEE
<c:choose>
<c:when test="${ condition }"> resultat </c:when>
...
<c:otherwise>résultat par défaut</c:otherwise>
H I ©
</c:choose>
U EL
O
f E LM
ch r e
©A
Explication
JEE
Les structures itératives
JEE
Les structures itératives
JEE
JEE
JEE
Pour parcourir une collection
H I ©
U EL
O
f E LM
ch r e
©A
JEE
Pour parcourir une collection
H I ©
U EL
O
Les différentes propriétés de varStatus
f E LM
ch r e
first : contient true si c’est la première itération
©A
last : contient true si c’est la dernière itération
...
JEE
JEE
JEE
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
JEE
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 web.xml soit
dans
avec l’annotation @WebServlet
L MO
r e f E
A ch
©
JEE
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 web.xml 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>
JEE
H I ©
EL
<c:import url="header.jsp"></c:import>
O U
f E LM
ch r e
©A
JEE
H I ©
EL
<c:import url="header.jsp"></c:import>
O U
f E LM
L’équivalent en scriptlet
ch r e
©A
<%@ include file="header.jsp"%>
JEE
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
a une portée request
applicationAc
applicationScope h : pour récup
©
param : pour récupérer les paramètres de requête
...
JEE
Pour inclure cette bibliothèque dans le jstlLib.jsp
<%@ taglib uri="http://java.sun.com/jsp/jstl/
functions" prefix="fn" %>
H I ©
UEL
O
f E LM
ch r e
©A
JEE
Pour inclure cette bibliothèque dans le jstlLib.jsp
<%@ taglib uri="http://java.sun.com/jsp/jstl/
functions" prefix="fn" %>
H I ©
Pour récupérer la longueur d’une chaı̂ne de caractère (ou liste)
${ fn:length("chaine") }
UEL
<%-- Retourne 6 --%> O
f E LM
ch r e
©A
JEE
Pour inclure cette bibliothèque dans le jstlLib.jsp
<%@ taglib uri="http://java.sun.com/jsp/jstl/
functions" prefix="fn" %>
H I ©
Pour récupérer la longueur d’une chaı̂ne de caractère (ou liste)
${ fn:length("chaine") }
UEL
<%-- Retourne 6 --%> O
f E LM
Pour tester si une chaı̂ne contient une autre sous-chaı̂ne de
caractère ch r e
©A
fn:contains("Bonjour", "Bon")
<%-- Retourne true --%>
JEE
Pour inclure cette bibliothèque dans le jstlLib.jsp
<%@ taglib uri="http://java.sun.com/jsp/jstl/
functions" prefix="fn" %>
H I ©
Pour récupérer la longueur d’une chaı̂ne de caractère (ou liste)
${ fn:length("chaine") }
UEL
<%-- Retourne 6 --%> O
f E LM
Pour tester si une chaı̂ne contient une autre sous-chaı̂ne de
caractère ch r e
©A
fn:contains("Bonjour", "Bon")
<%-- Retourne true --%>
Pour extraire une sous-chaı̂ne
fn:substring("John Wick", 5, 8)
<%-- Retourne Wick --%>
H & H: Research and Training 29 / 41
Librairie Function
JEE
Autres fonctions
fn:trim(String) : élimine les espaces au début et à la fin de
la chaı̂ne
H I ©
EL
fn:toUpperCase(String) : retourne la chaı̂ne passée en
paramètre en majuscule
M OU
fn:toLowerCase(String)
f E L: retourne la chaı̂ne passée en
hr e
paramètre en minuscule
c
© A
fn:escapeXml(String) : élimine les caractères spéciaux en
les remplaçant par leur code HTML (Exemple : ${
fn:escapeXml("Les balises <p> & <b>") } retourne
"Les balises < p > & < b >"
...
JEE
Pour inclure cette bibliothèque dans le jstlLib.jsp
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt"
prefix="fmt" %>
H I ©
UEL
O
f E LM
ch r e
©A
JEE
Pour inclure cette bibliothèque dans le jstlLib.jsp
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt"
prefix="fmt" %>
JEE
Pour inclure cette bibliothèque dans le jstlLib.jsp
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt"
prefix="fmt" %>
JEE
JEE
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...
JEE
JEE
JEE
L MO
var : contient le nom de la variable reçoit le résultat
r e E
fée de cette variable
c h
scope : précise la port
... ©A
JEE
L MO
var : contient le nom de la variable reçoit le résultat
r e E
fée de cette variable
c h
scope : précise la port
... ©A
Il existe également une balise parseDate qui permet de convertir en
date et qui prend les mêmes attributs que formatDate
JEE
Pour inclure cette bibliothèque dans le jstlLib.jsp
<%@ taglib uri="http://java.sun.com/jsp/jstl/xml" prefix=
"x" %>
H I ©
UEL
O
f E LM
ch r e
©A
JEE
Pour inclure cette bibliothèque dans le jstlLib.jsp
<%@ taglib uri="http://java.sun.com/jsp/jstl/xml" prefix=
"x" %>
H I ©
EL
Considérant le fichier XML personnes.xml situé dans la racine du
projet
O U
<personnes>
<personne id="1">
f E LM
ch
<nom>wick</nom> r e
©A
<prenom>john</prenom>
</personne>
<personne id="2">
<nom>white</nom>
<prenom>alain</prenom>
</personne>
</personnes>
JEE
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
JEE
Pour importer le fichier Xml
<c:import url="file:/C:/.../eclipse-workspace/TestJstlAtos/
personnes.xml" var="personnes" />
H I
Pour parser le contenu du fichier et l’affecter à une variable ©
<x:parse xml="${ personnes }" var="list" U E/>L
O
f E LM
ch r e
©A
JEE
Pour importer le fichier Xml
<c:import url="file:/C:/.../eclipse-workspace/TestJstlAtos/
personnes.xml" var="personnes" />
H I
Pour parser le contenu du fichier et l’affecter à une variable ©
<x:parse xml="${ personnes }" var="list" U E/>L
O
f E LM
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]"
/>
JEE
Pour importer le fichier Xml
<c:import url="file:/C:/.../eclipse-workspace/TestJstlAtos/
personnes.xml" var="personnes" />
H I
Pour parser le contenu du fichier et l’affecter à une variable ©
<x:parse xml="${ personnes }" var="list" U E/>L
O
f E LM
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]"
/>
JEE
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
...
JEE
JEE
r e f E
ch
©A
JEE
r e f E
ch
©A
Et d’activer Expression Language