Académique Documents
Professionnel Documents
Culture Documents
Achref El Mouelhi
elmouelhi.achref@gmail.com
Introduction
JSP
Java Server Pages
I c
ELH
Une technologie de la plateforme JEE permettant de créer
U
dynamiquement des pages HTML (d’extension .jsp)
L MO
E
Une page JSP sera transformée par le compilateur en Servlet
f
chre
c A
Ensuite cette Servlet sera compilée par la JVM (machine virtuelle)
Les JSP sont extensibles : on peut créer nos propres balises JSP
(avec JSTL)
Vue Modèle
(page JSP) (Java Bean)
I c
ELH
U
L MO
re f E
chRequête
c A
HTTP
Contrôleur
(Servlet)
Réponse
HTTP
Client Serveur
Déroulement
I c
EL
Faire un clic droit sur WEB-INF de notre projet H
U
MO
Aller dans New et choisir JSP File
L
r e E par vue.jsp (par exemple)
f name:
h
Remplir le champ File
c
Valider
c A
</body>
</html>
I
c
Comment l’appeler ?
EL H
U
Oqui communique avec les
M
C’est toujours le contrôleur (Servlet)
L
vues
h r e fE
A c
c
Balises spéciales
I
c
<%-- ... --%> : pour ajouter un commentaire
EL H
<%! String var; %> : pourM
U
O une variable directement
déclarer
fE
dans la classe de la servlet. L
h r e
c: pour afficher le contenu de la variable var ≡ <%
<%= var %>
c A
out.println(var); %>
I
c
EL H
Attention U
O avec du code JAVA
L MHTML
Il est déconseillé de mélanger du code
h r e fE
A c
c
Les directives
Définition
Les directives sont des instructions dans des balises JSP
spéciales
I c
Elles ont la structure suivante :
ELH
<%@ directive {attribut="valeur"} %>
U
L MO
f E
chre
c A
Les directives
Définition
Les directives sont des instructions dans des balises JSP
spéciales
I c
Elles ont la structure suivante :
ELH
<%@ directive {attribut="valeur"} %>
U
L MO
f E
chre
Rôle c A
définir des données relatives à la page (directive page)
inclure une autre page JSP (directive include)
inclure des bibliothèques de balise (directive taglib)
Les directives
Utiliser la directive page pour définir des données relatives à la page (code auto-généré à
la création d’une JSP)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
I c
ELH
U
L MO
f E
chre
c A
Les directives
Utiliser la directive page pour définir des données relatives à la page (code auto-généré à
la création d’une JSP)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
I c
H
Utiliser l’attribut import pour importer une classe à utiliser dans la page
EL
<%@ page import="java.util.Date" %>
U
L MO
f E
chre
c A
Les directives
Utiliser la directive page pour définir des données relatives à la page (code auto-généré à
la création d’une JSP)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
I c
H
Utiliser l’attribut import pour importer une classe à utiliser dans la page
EL
<%@ page import="java.util.Date" %>
U
L MO
f E
Autres attributs
chre
extends
c A
import
...
Les directives
Inclure le contenu d’une autre page JSP
<%@ include file="maPage.jsp" %>
ou
<jsp:directive.include file="maPage.jsp" />
I c
ELH
U
L MO
f E
chre
c A
Les directives
Inclure le contenu d’une autre page JSP
<%@ include file="maPage.jsp" %>
ou
<jsp:directive.include file="maPage.jsp" />
I
c
EL H
Différence entre les deux solutions
U
Avec la première solution, leL MO
fichier sera chargé au moment de la
compilation (donc le e E
f de maPage sera recompilé avec le
r contenu
c h
cdeuxiAème au moment de l’exécution
code de la page appelante)
Avec la
Les directives
Inclure le contenu d’une autre page JSP
<%@ include file="maPage.jsp" %>
ou
<jsp:directive.include file="maPage.jsp" />
I
c
EL H
Différence entre les deux solutions
U
Avec la première solution, leL MO
fichier sera chargé au moment de la
compilation (donc le e E
f de maPage sera recompilé avec le
r contenu
c h
cdeuxiAème au moment de l’exécution
code de la page appelante)
Avec la
Utilisation
Pour inclure (menu, entête...) qui sont généralement définis dans un
fichier spécifique et qui sera inclus dans les autres fichiers de
l’application (pour éviter le copier/coller et favoriser la réutilisation).
H & H: Research and Training 15 / 45
Les directives
Les directives
I c
ELH
Inclure des bibliothèques de balises (à voir dans un prochain
U
MO
chapitre)
E
<%@ taglib uri="maLib" prefix="tag" %>
f L
chre
c A
I c
EL H
Comme pour les Servlets
U
L MO
request.getParameter("nomParameter");
h r e fE
A c
c
r e fE
request.setAttribute("nomAttribut","valeur")
h
A c : récupère l’objet
c
request.getAttribute("nomAttribut")
le nom nomAttribut qui doit correspondre au nom utilisé
ayant
lors de l’envoi
h
// l’envoicde ef E se fait après cette
request.setAttribute("maVille",ville);
rrequest
c A
instruction
this.getServletContext().getRequestDispatcher("/
WEB-INF/vue.jsp").forward(request, response);
}
c
page : la variable est accessible seulement dans cette page
I
H
EL entre la servlet et
U
request : la variable est accessible seulement
la vue appelée
L MO
r
session : la variable
h e f Eaccessible dans toutes les pages de
est
l’applicationA c un utilisateur donné
pour
c
application : la variable est accessible dans toutes les pages
de l’application et est partagée par tous les utilisateurs
f E L
chre
c A
f E L
Ou aussi
chre
Personne" > c A
<jsp:useBean id="perso" scope="page" class="org.eclipse.model.
</jsp:useBean>
<%
perso.setNom("wick");
perso.setPrenom("wick");
%>
EL : Expression Language
Définition
a été proposée par JSTL (Java Standard Tag Library)
est disponible depuis la version 2.4 de l’API Servlet
I c
ELH
permet d’optimiser les pages JSP (simplifier le code)
U
MO }
a une forme générale ${ expression
L
h r e fE
A c
c
EL : Expression Language
Définition
a été proposée par JSTL (Java Standard Tag Library)
est disponible depuis la version 2.4 de l’API Servlet
I c
ELH
permet d’optimiser les pages JSP (simplifier le code)
U
MO }
a une forme générale ${ expression
L
h r e fE
A c
Rôle
c
Réaliser des tests, des opérations arithmétiques
Manipuler des objets, des collections,
...
H & H: Research and Training 27 / 45
EL : Expression Language
EL : Expression Language
Les EL supportent plusieurs types du langage Java
Long
Double
I c
String : entouré par "..." ou ’...’
ELH
U
MO
Boolean
...
f E L
c hre
c A
EL : Expression Language
Les EL supportent plusieurs types du langage Java
Long
Double
I c
String : entouré par "..." ou ’...’
ELH
U
MO
Boolean
...
f E L
A c hre
c
Les EL permettent d’évaluer une expression arithmétique
${ 5 } <!-- affiche 5 -->
${ 5.2 } <!-- affiche 5.2 -->
${ "bonjour" } <!-- affiche bonjour -->
${ ’bonjour’ } <!-- affiche bonjour -->
${ true } <!-- affiche true -->
H & H: Research and Training 28 / 45
EL : Expression Language
EL : Expression Language
Les EL permettent d’évaluer une expression arithmétique
${ 4 * 3 + 5 } <!-- affiche 17 -->
${ 8 % 2 } <!-- affiche 0 -->
I c
ELH
U
L MO
f E
c hre
c A
EL : Expression Language
Les EL permettent d’évaluer une expression arithmétique
${ 4 * 3 + 5 } <!-- affiche 17 -->
${ 8 % 2 } <!-- affiche 0 -->
I c
ELH
U
Les opérateurs arithmétiques
L MO
f E
+ : addition
c hre
c A
- : soustraction
* : multiplication
/ ou div : division
% ou mod : reste de la division
EL : Expression Language
On peut réaliser des tests en utilisant les opérateurs de comparaison
${ ’e’ < ’f’ } <!-- affiche true -->
${ 5 + 5 == 25 } <!-- affiche false -->
I c
ELH
U
L MO
f E
c hre
c A
EL : Expression Language
On peut réaliser des tests en utilisant les opérateurs de comparaison
${ ’e’ < ’f’ } <!-- affiche true -->
${ 5 + 5 == 25 } <!-- affiche false -->
I c
Opérateurs de comparaison
ELH
U
== ou eq : pour tester l’égalité
L MO
f E
hre
!= ou ne : pour tester l’inégalité
c
c A
> ou gt : supérieur à
< ou lt : inférieur à
EL : Expression Language
EL : Expression Language
EL : Expression Language
f E L
c hre
c A
EL : Expression Language
f E L
c hre
c A
EL : Expression Language
f E L
A c hre
c
Les résultats sont affichés là où l’EL est appelée
<div> 7 < 5 : ${ 7 < 5 } </div>
<div> 7 < 5 : false </div>
EL : Expression Language
Les EL simplifient la récupération des attributs ajoutés depuis la Servlet dans
l’objet request
${ nom } <!-- affiche la valeur de la variable nom définie dans
la Servlet appelante -->
I c
ELH
U
L MO
f E
c hre
c A
EL : Expression Language
Les EL simplifient la récupération des attributs ajoutés depuis la Servlet dans
l’objet request
${ nom } <!-- affiche la valeur de la variable nom définie dans
la Servlet appelante -->
I c
Avec les scriptlet, pour récupérer un objet on faitUE
LH
M O*" %>
<%@ page import = "org.eclipse.model.
E L
f request.getAttribute("perso");
<%
h r e
c" + p.getPrenom() + " " + p.getNom());
Personne p = (Personne)
%> c
out.print("Hello
A
EL : Expression Language
Les EL simplifient la récupération des attributs ajoutés depuis la Servlet dans
l’objet request
${ nom } <!-- affiche la valeur de la variable nom définie dans
la Servlet appelante -->
I c
Avec les scriptlet, pour récupérer un objet on faitUE
LH
M O*" %>
<%@ page import = "org.eclipse.model.
E L
f request.getAttribute("perso");
<%
h r e
c" + p.getPrenom() + " " + p.getNom());
Personne p = (Personne)
%> c
out.print("Hello
A
Explication
c
perso est le nom d’objet qui a été ajouté à la requête comme
I
attribut (avec request.setAttribute()
ELH
${ perso.nom } est équivalent à O
U
L M ${ perso.getNom() }
h r e fE
A c
c
Explication
c
perso est le nom d’objet qui a été ajouté à la requête comme
I
attribut (avec request.setAttribute()
EL H
${ perso.nom } est équivalent à O
U
L M ${ perso.getNom() }
h r e fE
A c
c
Même si l’objet ou un de ses attributs n’existe pas, null ne sera
jamais affiché
EL : Expression Language
Considérons la liste suivante définie dans la Servlet
ArrayList<String> sport = new ArrayList<String>();
sport.add( "football" );
sport.add( "tennis" );
sport.add( "rugby");
I c
sport.add( "basketball" );
ELH
U
MO
request.setAttribute( "sport" , sport );
f E L
c hre
c A
EL : Expression Language
Considérons la liste suivante définie dans la Servlet
ArrayList<String> sport = new ArrayList<String>();
sport.add( "football" );
sport.add( "tennis" );
sport.add( "rugby");
I c
sport.add( "basketball" );
ELH
U
MO
request.setAttribute( "sport" , sport );
E L
Pour récupérer l’élément d’indice i dans la vue
f
sport.get(i);
c hre
sport[i];
sport[’i’];
c A
sport["i"];
EL : Expression Language
Considérons la liste suivante définie dans la Servlet
ArrayList<String> sport = new ArrayList<String>();
sport.add( "football" );
sport.add( "tennis" );
sport.add( "rugby");
I c
sport.add( "basketball" );
ELH
U
MO
request.setAttribute( "sport" , sport );
E L
Pour récupérer l’élément d’indice i dans la vue
f
sport.get(i);
c hre
sport[i];
sport[’i’];
c A
sport["i"];
Exemple
J’aime le ${ sport.get(0) } et le ${ sport[3] }.
Je deteste le ${ sport[’1’] } et le ${ sport["3"] }.
H & H: Research and Training 35 / 45
Objets implicites
Objets implicites
c h
Acertains autres)
ces objets (et ont déjà été instanciés dans la
cqui correspond
Servlet
à notre page JSP
I
c
sessionScope : une MAP qui permet de récupérer/écrire des
EL
données relatives à l’utilisateur courant H
param : une MAP qui permet deM récup
U
Oérer/écrire les noms et
f
valeurs des paramètres de L
Ela requête.
r e
ch qui permet d’associer les noms et instances
c A
cookie : une
des cookies.
MAP
...
h r e fE
A c
org.apache.jasper.JasperException: An exception
c [11]
occurred processing
at line
JSP page [/WEB-INF/vue.jsp]
10: <%
11: int x = 3 / 0;
12: %>
f E L
out.print("Erreur " + e.getMessage());
hre
}
c
c A
%>
Et le résultat est :
Erreur / by zero
I c
Une deuxième solution consiste à
ELH
U
créer une vue d’erreur
L MO
f E
hre
rediriger vers cette page chaque fois qu’une exception est levée
c
c A
La page erreur.jsp
<%@ page language="java" contentType="text/html;
charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
I c
<html>
ELH
U
MO
<head>
f E L
<meta http-equiv="Content-Type" content="text/
hre
html; charset=UTF-8">
c
c A
<title> Page d’erreur </title>
</head>
<body>
Erreur
</body>
</html>
f E
hre
<title>First Page</title>
</head>
c
<body>
<% c A
int x = 3 / 0;
%>
</body>
</html>
En exécutant, la redirection a eu lieu mais le message d’erreur a disparu