Académique Documents
Professionnel Documents
Culture Documents
Jee JSP
Jee JSP
ISI-KEF
Université de Jandouba
farhatmahran@yahoo.fr
Introduction
JSP
c
Java Server Pages
H I
EL
Une technologie de la plateforme JEE permettant de créer
OU
dynamiquement des pages HTML (d’extension .jsp)
M
f E
Une page JSP sera transformLée par le compilateur en Servlet
ch resera compilée par la JVM (machine virtuelle)
c A
Ensuite cette Servlet
Les JSP sont extensibles : on peut créer nos propres balises JSP
(avec JSTL)
Vue Modèle
(page JSP) (Java Bean)
I c
EL H
MOU
f E L
ch e
rHTTP
Requête
c
A 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
L MO
Aller dans New et choisir JSP File
re f E
<meta http-equiv="Content-Type" content="text/html;
A ch
charset=UTF-8">
c
<title>Insert title here</title>
</head>
<body>
</body>
</html>
I c
Comment l’appeler ?
EL H
MOU
f EL
C’est toujours le contrôleur (Servlet) qui communique avec les
re
vues
A ch
c
c A
this.getServletContext() : permet de communiquer avec
d’autres composants (via le conteneur de Servlet)
getRequestDispatcher("/WEB-INF/vue.jsp") : permet
d’indiquer l’emplacement de la vue et de la récupérer
forward(request, response) : pour envoyer la requête et la
réponse (on les utilisera plus tard)
H & H: Research and Training 9 / 45
Les balises JSP
Balises spéciales
I c
EL
<%-- ... --%> : pour ajouter un commentaire H
MOU
<%! String var; %> : pour déclarer une variable directement
f E
dans la classe de la servlet.L
ch re
c
A
<%= var %> : pour afficher le contenu de la variable var ≡ <%
out.println(var); %>
I c
EL H
Attention
MOU
f EL
Il est déconseillé de mélanger du code HTML avec du code JAVA
ch re
c
A
Les directives
Définition
Les directives sont des instructions dans des balises JSP
spéciales
I c
Elles ont la structure suivante :
EL H
OU
<%@ directive {attribut="valeur"} %>
L M
re f E
A ch
c
Les directives
Définition
Les directives sont des instructions dans des balises JSP
spéciales
I c
Elles ont la structure suivante :
EL H
OU
<%@ directive {attribut="valeur"} %>
L M
re f E
A ch
Rôle c
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
EL H
MOU
f EL
ch re
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
EL H
Utiliser l’attribut import pour importer une classe à utiliser dans la page
OU
<%@ page import="java.util.Date" %>
L M
re f E
A ch
c
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
EL H
Utiliser l’attribut import pour importer une classe à utiliser dans la page
OU
<%@ page import="java.util.Date" %>
L M
re f E
ch
Autres attributs
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
EL H
MOU
f EL
ch re
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
OU
Différence entre les deux solutions
L M
re f E
Avec la première solution, le fichier sera chargé au moment de la
compilation (donc le contenu de maPage sera recompilé avec le
A ch
code de la page appelante)
cdeuxième au moment de l’exécution
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
OU
Différence entre les deux solutions
L M
re f E
Avec la première solution, le fichier sera chargé au moment de la
compilation (donc le contenu de maPage sera recompilé avec le
A ch
code de la page appelante)
cdeuxième au moment de l’exécution
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
EL H
Inclure des bibliothèques de balises (à voir dans un prochain
chapitre)
M OU
<%@ taglib uri="maLib"E
f L
prefix="tag" %>
c h re
c A
I c
EL H
OU
Comme pour les Servlets
L M
request.getParameter("nomParameter");
re f E
A ch
c
I c
Et si la Servlet veut transmettre des données (variables, objets...)
à la vue ?
EL H
OU
On peut utiliser request.setAttribute() pour transmettre et
M
f E L
request.getAttribute() pour récupérer
h re
request.setAttribute("nomAttribut","valeur")
c
c leAnom nomAttribut qui doit correspondre: récup
request.getAttribute("nomAttribut")
ayant
ère l’objet
au nom utilisé
lors de l’envoi
M
<meta http-equiv="Content-Type" content="text/html; charset
L
=UTF-8">
<title>Projet JEE</title>
re f E
</head>
A ch
<body>
<% c
Personne p = (Personne) request.getAttribute("perso");
out.print("Hello " + p.getPrenom() + " " + p.getNom());
%>
</body>
</html>
I
c
page : la variable est accessible seulement dans cette page
H
EL entre la servlet et
U
request : la variable est accessible seulement
la vue appelée
L MO
h r
session : la variablee 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
I c
<jsp:setProperty name="perso" property="nom" value="wick"/>
EL H
<jsp:setProperty name="perso" property="prenom" value="john"/
OU
>
</jsp:useBean>
L M
re f E
A ch
c
I c
<jsp:setProperty name="perso" property="nom" value="wick"/>
EL H
<jsp:setProperty name="perso" property="prenom" value="john"/
OU
>
</jsp:useBean>
L M
re f E
ch
Ou aussi
c A
<jsp:useBean id="perso" scope="page" class="org.eclipse.model.
Personne" >
</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
EL
permet d’optimiser les pages JSP (simplifier le code)H
M
a une forme générale ${ expression }OU
f EL
ch re
c
A
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
EL
permet d’optimiser les pages JSP (simplifier le code)H
M
a une forme générale ${ expression }OU
f EL
ch re
Rôle c
A
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
c
Double
H I
EL
String : entouré par "..." ou ’...’
Boolean
MOU
f EL
re
...
A ch
c
EL : Expression Language
Les EL supportent plusieurs types du langage Java
Long
c
Double
H I
EL
String : entouré par "..." ou ’...’
Boolean
MOU
f EL
re
...
A ch
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
EL H
MOU
f EL
ch re
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
EL H
MOU
Les opérateurs arithmétiques
f EL
+ : addition
c h re
-
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
EL H
MOU
f EL
ch re
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
EL H
== ou eq : pour tester l’égalité
MOU
E
!= ou ne : pour tester l’infégalit
L
c h r e é
< ou lt : inférieur à
EL : Expression Language
EL : Expression Language
EL : Expression Language
EL : Expression Language
EL : Expression Language
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
EL H
MOU
f EL
ch re
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
EL H
OU
Avec les scriptlet, pour récupérer un objet on fait
M
E
<%@ page import = "org.eclipse.model.*" %>
f L
re
<%
ch
Personne p = (Personne) request.getAttribute("perso");
A
%> c
out.print("Hello " + p.getPrenom() + " " + p.getNom());
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
EL H
OU
Avec les scriptlet, pour récupérer un objet on fait
M
E
<%@ page import = "org.eclipse.model.*" %>
f L
re
<%
ch
Personne p = (Personne) request.getAttribute("perso");
A
%> c
out.print("Hello " + p.getPrenom() + " " + p.getNom());
Avec EL, l’écriture est plus simple
${ perso.nom } <!-- affiche Wick -->
${ perso.getPrenom() } <!-- affiche John -->
H & H: Research and Training 33 / 45
EL : Expression Language
Explication
I c
perso est le nom d’objet qui a été ajouté à la requête comme
attribut (avec request.setAttribute()
EL H
MOU
${ perso.nom } est équivalent à ${ perso.getNom() }
f EL
ch re
c
A
Explication
I c
perso est le nom d’objet qui a été ajouté à la requête comme
attribut (avec request.setAttribute()
EL H
MOU
${ perso.nom } est équivalent à ${ perso.getNom() }
f EL
ch re
c
A
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" );
EL H
request.setAttribute( "sport" , sport );
MOU
f EL
ch re
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" );
EL H
OU
request.setAttribute( "sport" , sport );
M
f E L i dans la vue
Pour récupérer l’élément d’indice
sport.get(i);
c h re
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" );
EL H
OU
request.setAttribute( "sport" , sport );
M
f E L i dans la vue
Pour récupérer l’élément d’indice
sport.get(i);
c h re
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
M OU
out : pour afficher un message
A
ces objets (et c h
certains
cqui correspond
Servlet
à notre page JSP
I c
sessionScope : une MAP qui permet de récupérer/écrire des
données relatives à l’utilisateur courant
EL H
MOU
param : une MAP qui permet de récupérer/écrire les noms et
f EL
valeurs des paramètres de la requête.
ch re
c
des cookies.
A
cookie : une MAP qui permet d’associer les noms et instances
...
10: <%
11: int x = 3 / 0;
12: %>
I c
Une deuxième solution consiste à
EL H
créer une vue d’erreur
M OU
f E L fois qu’une exception est levée
c h re
rediriger vers cette page chaque
c A
La page erreur.jsp
<%@ page language="java" contentType="text/html;
charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
I c
<html>
EL H
<head>
MOU
EL
<meta http-equiv="Content-Type" content="text/
f
html; charset=UTF-8">
ch re
</head> c
A
<title> Page d’erreur </title>
<body>
Erreur
</body>
</html>
M
<meta http-equiv="Content-Type" content="text/html; charset
L
=UTF-8">
<title>First Page</title>
re f E
</head>
A ch
<body>
<% c
int x = 3 / 0;
%>
</body>
</html>
En exécutant, la redirection a eu lieu mais le message d’erreur a disparu