Vous êtes sur la page 1sur 66

JEE : Java Server Pages (JSP)

ISI-KEF
Université de Jandouba

farhatmahran@yahoo.fr

ISI-KEF Université de Jandouba Architecture N-tiers


information
Je tiens à vous informer que le support de cous (outils, cours et
TP) sont disponible sur un dossier partagé sur google drive en
utilisant le lien suivant :
shorturl.at/duFQ8

ISI-KEF Université de Jandouba Architecture N-tiers


Plan
1 Introduction
2 Créer une page JSP
3 Les balises JSP
4 Les directives
5 Récupérer les paramètres d’une requête
6 Transmission de données entre Servlet/JSP
7 Portée d’une variable
8 Création d’un objet
9 EL : Expression Language
10 Objets implicites
11 Gérer les exceptions

H & H: Research and Training 2 / 45


Introduction

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)

H & H: Research and Training 3 / 45


Introduction

Une page JSP : appelée par le contrôleur

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

H & H: Research and Training 4 / 45


Créer une page JSP

Création d’une page JSP

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

r e E par vue.jsp (par exemple)


f name:
h
Remplir le champ File
c
Valider c A

H & H: Research and Training 5 / 45


Créer une page JSP

Création d’une page JSP


Notre vue générée
<%@ page language="java" contentType="text/html; charset=
UTF-8"
pageEncoding="UTF-8"%>
I c

H
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional
EL
OU
//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
L M
<head>

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>

H & H: Research and Training 6 / 45


Créer une page JSP

Création d’une page JSP


Préparons notre Hello World
<%@ page language="java" contentType="text/html;
charset=UTF-8"
pageEncoding="UTF-8"%>
I c

<!DOCTYPE HTML>
EL H
OU
<html>
<head>
L M
re f E
<meta http-equiv="Content-Type" content="text/
ch
html; charset=UTF-8">
A
</head>
c
<title>Projet JEE</title>

<body>
Hello World (depuis une JSP)
</body>
</html>

H & H: Research and Training 7 / 45


Créer une page JSP

Création d’une page JSP

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

H & H: Research and Training 8 / 45


Créer une page JSP

Création d’une page JSP


Pour construire correctement une page HTML
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws
ServletException, IOException{
I c

EL
this.getServletContext().getRequestDispatcher("/
H
OU
WEB-INF/vue.jsp").forward(request, response);
}
L M
re f E
ch
Explication

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

Initiation aux balises JSP

Les balises JSP


sont définies par <% ... %>
I c

EL H
Entre ces deux balises, on peut utiliser les bases algorithmiques
du langage Java :
O U
L M
f E
des structures conditionnelles
des structures itr e
c h ératives
... c A

Les balises JSP peuvent être utilisées plusieurs fois dans une
page JSP

H & H: Research and Training 10 / 45


Les balises JSP

Initiation aux 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); %>

H & H: Research and Training 11 / 45


Les balises JSP

Initiation aux balises JSP

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

H & H: Research and Training 12 / 45


Les directives

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

H & H: Research and Training 13 / 45


Les directives

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)

H & H: Research and Training 13 / 45


Les directives

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

H & H: Research and Training 14 / 45


Les directives

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

H & H: Research and Training 14 / 45


Les directives

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

session = "true | false"

isELIgnored = "true | false"

...

H & H: Research and Training 14 / 45


Les directives

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

H & H: Research and Training 15 / 45


Les directives

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

H & H: Research and Training 15 / 45


Les directives

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

H & H: Research and Training 16 / 45


Récupérer les paramètres d’une requête

Récupérer les paramètres d’une requête

I c

EL H
OU
Comme pour les Servlets

L M
request.getParameter("nomParameter");
re f E
A ch
c

H & H: Research and Training 17 / 45


Récupérer les paramètres d’une requête

Récupérer les paramètres d’une requête


<%@ page language="java" contentType="text/html; charset=
UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE HTML>
<html>
<head>
I c

<meta http-equiv="Content-Type" content="text/html;
EL H
OU
charset=UTF-8">
<title>Projet JEE</title>
L M
</head>
<body>
re f E
A ch
Hello World (depuis une JSP)
<% c

String nom = request.getParameter("nom");
String prenom = request.getParameter("prenom");
out.println("<br/>Hello " + nom + " " + prenom);
%>
</body>
</html>
H & H: Research and Training 18 / 45
Transmission de données entre Servlet/JSP

Transmission de données entre Servlet/JSP

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

H & H: Research and Training 19 / 45


Transmission de données entre Servlet/JSP

Transmission de données entre Servlet/JSP

Envoi de données par la Servlet


protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws
I c

ServletException, IOException {
EL H
MOU
String ville = "Marseille";
f EL
re
request.setAttribute("maVille",ville);
ch
c
A
// l’envoi de request se fait après cette
instruction
this.getServletContext().getRequestDispatcher("/
WEB-INF/vue.jsp").forward(request, response);
}

H & H: Research and Training 20 / 45


Transmission de données entre Servlet/JSP

Transmission de données entre Servlet/JSP


Récupération de données par la JSP
<%@ page language="java" contentType="text/html; charset=
UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE HTML>
<html>
I c

<head>
EL H
OU
<meta http-equiv="Content-Type" content="text/html;
charset=UTF-8">
L M
<title>Projet JEE</title>
re f E
ch
</head>
<body>
<% c
A
String notreVille = (String) request.getAttribute("
maVille");
out.println("Bienvenue à " + notreVille);
%>
</body>
</html>
H & H: Research and Training 21 / 45
Transmission de données entre Servlet/JSP

Transmission de données entre Servlet/JSP

Envoi d’un objet


protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws
I c

ServletException, IOException {
EL H
Personne perso = new Personne();
MOU
perso.setNom("Wick");
f EL
perso.setPrenom("John");
ch re
c
A
perso.setNum(100);
request.setAttribute("perso",perso);
this.getServletContext().getRequestDispatcher("/
WEB-INF/vue.jsp").forward(request, response);
}

H & H: Research and Training 22 / 45


Transmission de données entre Servlet/JSP

Transmission de données entre Servlet/JSP


Récupération de l’objet
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import = "org.eclipse.model.*" %>
<!DOCTYPE HTML>
I c

<html>
EL H
OU
<head>

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>

H & H: Research and Training 23 / 45


Portée d’une variable

Portée d’une variable

Quatre portée pour les variables

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

H & H: Research and Training 24 / 45


Création d’un objet

Transmission de données entre Servlet/JSP


Et si on a besoin de créer un objet dans la page JSP
<jsp:useBean id="perso" scope="page" class="org.
eclipse.model.Personne" >
</jsp:useBean>
I c

EL H
MOU
f EL
ch re
c
A

H & H: Research and Training 25 / 45


Création d’un objet

Transmission de données entre Servlet/JSP


Et si on a besoin de créer un objet dans la page JSP
<jsp:useBean id="perso" scope="page" class="org.
eclipse.model.Personne" >
</jsp:useBean>
I c

EL H
MOU
Explication
f EL
ch re
La balise précédente est équivalente en Java à Personne
c A
perso = new Personne();

Notre objet est accessible seulement dans cette page JSP
(scope="page")
Il faut que notre classe Personne soit un JavaBean :
obligatoirement un constructeur sans paramètre
H & H: Research and Training 25 / 45
Création d’un objet

Transmission de données entre Servlet/JSP


Et si on a besoin de créer un objet dans la page JSP et affecter des valeurs aux
attributs
<jsp:useBean id="perso" scope="page" class="org.eclipse.model.
Personne" >

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

H & H: Research and Training 26 / 45


Création d’un objet

Transmission de données entre Servlet/JSP


Et si on a besoin de créer un objet dans la page JSP et affecter des valeurs aux
attributs
<jsp:useBean id="perso" scope="page" class="org.eclipse.model.
Personne" >

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");
%>

H & H: Research and Training 26 / 45


EL : Expression Language

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

H & H: Research and Training 27 / 45


EL : Expression Language

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

H & H: Research and Training 28 / 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

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

H & H: Research and Training 29 / 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
Les opérateurs arithmétiques
f EL
+ : addition
c h re
- c A
: soustraction

* : multiplication
/ ou div : division
% ou mod : reste de la division

H & H: Research and Training 29 / 45


EL : Expression Language

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

H & H: Research and Training 30 / 45


EL : Expression Language

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 gtc: supA


érieur à

< ou lt : inférieur à

>= ou ge : supérieur ou égal à

<= ou le : inférieur ou égal à

H & H: Research and Training 30 / 45


EL : Expression Language

EL : Expression Language

On peut aussi enchaı̂ner les tests en utilisant les opérateurs


logiques
${ 2 == 5 || 3 == 4 } <!-- affiche false -->
I c

${ 2 < 5 && 5 >= 3 } <!-- affiche true -->
EL H
MOU
f EL
ch re
c
A

H & H: Research and Training 31 / 45


EL : Expression Language

EL : Expression Language

On peut aussi enchaı̂ner les tests en utilisant les opérateurs


logiques
${ 2 == 5 || 3 == 4 } <!-- affiche false -->
I c

${ 2 < 5 && 5 >= 3 } <!-- affiche true -->
EL H
MOU
f EL
Opérateurs logiques
ch re
&& ou
and
A
c : et
|| ou or : ou
! ou not : non

H & H: Research and Training 31 / 45


EL : Expression Language

EL : Expression Language

Pour les chaı̂nes de caractères, on peut utiliser l’opérateur empty


${ empty ’chaine’ } <!-- affiche false -->
${ !empty ’chaine’ } <!-- affiche true -->
I c

${ !empty ’chaine’ ? true : false } <!-- test
EL H
ternaire affichant true -->
MOU
f EL
ch re
c
A

H & H: Research and Training 32 / 45


EL : Expression Language

EL : Expression Language

Pour les chaı̂nes de caractères, on peut utiliser l’opérateur empty


${ empty ’chaine’ } <!-- affiche false -->
${ !empty ’chaine’ } <!-- affiche true -->
I c

${ !empty ’chaine’ ? true : false } <!-- test
EL H
ternaire affichant true -->
MOU
f EL
ch re
c
A

H & H: Research and Training 32 / 45


EL : Expression Language

EL : Expression Language

Pour les chaı̂nes de caractères, on peut utiliser l’opérateur empty


${ empty ’chaine’ } <!-- affiche false -->
${ !empty ’chaine’ } <!-- affiche true -->
I c

${ !empty ’chaine’ ? true : false } <!-- test
EL H
ternaire affichant true -->
MOU
f EL
ch re
c A
Les résultats sont affichés là où l’EL est appelée

<div> 7 < 5 : ${ 7 < 5 } </div>
<div> 7 < 5 : false </div>

H & H: Research and Training 32 / 45


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

H & H: Research and Training 33 / 45


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
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());

H & H: Research and Training 33 / 45


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
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

Transmission de données entre Servlet/JSP

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

H & H: Research and Training 34 / 45


EL : Expression Language

Transmission de données entre Servlet/JSP

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é

H & H: Research and Training 34 / 45


EL : Expression Language

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

H & H: Research and Training 35 / 45


EL : Expression Language

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"];

H & H: Research and Training 35 / 45


EL : Expression Language

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

Dans les exemples précédents


I c

EL H
on a utilisé des objets (implicites) sans les instancier.

M OU
out : pour afficher un message

f E Ldes attributs et/ou des paramètres


reautres) ont déjà été instanciés dans la
request : pour récupérer

A
ces objets (et c h
certains
cqui correspond
Servlet à notre page JSP

H & H: Research and Training 36 / 45


Objets implicites

Les objets implicites

Autres objets implicites pour la JSP

session : permet de récupérer/écrire des données relatives à


l’utilisateur courant
I c
application : permet d’obtenir/modifierE
H
L informations
U des
MOelle est exécutée.
relatives à l’application dans laquelle
L
response : permetre
E
defmodifier des données relatives à la
A c h
réponse (encodage...)
c
exception : pour récupérer des informations sur l’exception
capturée
...

H & H: Research and Training 37 / 45


Objets implicites

Les objets implicites

Les objets implicites de EL sont des MAP

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

...

H & H: Research and Training 38 / 45


Objets implicites

Les objets implicites

Le code JSP permettant de récupérer les paramètres d’une


requête
<%
I c

String nom = request.getParameter("nom");
EL H
OU
String prenom = request.getParameter("prenom");
M
f EL
out.println("<br/>Hello " + nom + " " + prenom);
%>
ch re
c
A
On peut le remplacer par
Hello ${param.prenom} ${param.nom}

H & H: Research and Training 39 / 45


Gérer les exceptions

Gérer les exceptions


Considérant le code suivant (contenant une division par zéro)
<%
int x = 3 / 0;
%>
I c

EL H
M OU
EL
À l’exécution, une exception est affichée
f
ch re
org.apache.jasper.JasperException: An exception
A
c [11]
occurred processing
JSP page [/WEB-INF/vue.jsp]
at line

10: <%
11: int x = 3 / 0;
12: %>

H & H: Research and Training 40 / 45


Gérer les exceptions

Gérer les exceptions

Il faut capturer l’exception


<%
try {
int x = 3 / 0;
I c

}
EL H
catch(Exception e){
MOU
EL
out.print("Erreur " + e.getMessage());
f
}
ch re
%>
c
A
Et le résultat est :
Erreur / by zero

H & H: Research and Training 41 / 45


Gérer les exceptions

Gérer les exceptions

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

H & H: Research and Training 42 / 45


Gérer les exceptions

Gérer les exceptions

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>

H & H: Research and Training 43 / 45


Gérer les exceptions

Gérer les exceptions


Faisons référence à erreur.jsp dans vue.jsp (en ajoutant la ligne
errorPage="erreur.jsp") et supprimons le bloc try ... catch

<%@ page language="java" contentType="text/html; charset=UTF-8"


pageEncoding="UTF-8" errorPage="erreur.jsp" %>
<!DOCTYPE html>
I c

<html>
EL H
OU
<head>

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

H & H: Research and Training 44 / 45


Gérer les exceptions

Gérer les exceptions


Pour afficher le message d’erreur, il faut modifier erreur.jsp et déclarer la
page comme page d’erreur isErrorPage="true"

<%@ page language="java" contentType="text/html; charset=UTF-8"


pageEncoding="UTF-8" isErrorPage="true" %>
I c

H
<!DOCTYPE html>
<html>
EL
<head>
MOU
L
<meta http-equiv="Content-Type" content="text/html; charset
=UTF-8">
re f E
ch
<title>Page d’erreur</title>
</head>
<body> c
A
Erreur
<%=exception.getMessage() %>
</body>
</html>

Ne pas utiliser le navigateur d’Eclipse pour tester.

H & H: Research and Training 45 / 45


ISI-KEF Université de Jandouba Architecture N-tiers

Vous aimerez peut-être aussi