0% ont trouvé ce document utile (0 vote)
15 vues77 pages

Cours Java JSP

Le document présente une introduction à Java Server Pages (JSP) dans le cadre de Jakarta EE, détaillant la création de pages JSP, l'utilisation de balises, directives, et la gestion des paramètres de requête. Il explique également comment transmettre des données entre Servlets et JSP, ainsi que les bonnes pratiques pour structurer le code. Enfin, il aborde les concepts d'objets implicites et de gestion des exceptions dans le contexte des JSP.

Transféré par

ingkhadija1234
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
15 vues77 pages

Cours Java JSP

Le document présente une introduction à Java Server Pages (JSP) dans le cadre de Jakarta EE, détaillant la création de pages JSP, l'utilisation de balises, directives, et la gestion des paramètres de requête. Il explique également comment transmettre des données entre Servlets et JSP, ainsi que les bonnes pratiques pour structurer le code. Enfin, il aborde les concepts d'objets implicites et de gestion des exceptions dans le contexte des JSP.

Transféré par

ingkhadija1234
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
Vous êtes sur la page 1/ 77

JEE : Java Server Pages (JSP)

Achref El Mouelhi

Docteur de l’université d’Aix-Marseille


Chercheur en programmation par contrainte (IA)
Ingénieur en génie logiciel

[email protected]

H & H: Research and Training 1 / 55


Plan

1 Introduction

2 Créer une page JSP

3 Balises JSP

4 Directives

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

6 Transmission de données entre Servlet/JSP

H & H: Research and Training 2 / 55


Plan

7 Portée d’une variable

8 Création d’un objet

9 EL : Expression Language

10 Objets implicites

11 Gérer les exceptions

12 Référencement d’une ressource statique

13 Extension Eclipse pour JSP

H & H: Research and Training 3 / 55


Introduction

Jakarta EE

JSP
Java Server Pages
H I ©
U EL de créer
Une technologie de la plateforme JEE permettant
dynamiquement des pages HTML O
M(d’extension .jsp)
f L
E ée par le compilateur en Servlet
e
Une page JSP serartransform
ch
Les JSP© Aextensibles
sont : on peut créer nos propres balises JSP
(avec JSTL)

H & H: Research and Training 4 / 55


Introduction

Jakarta EE

Vue Modèle
(page JSP) (Java Bean)

H I ©
U EL
O
f E LM
ch r e
Requête

©A
HTTP
Contrôleur
(Servlet)

Réponse
HTTP
Client Serveur

H & H: Research and Training 5 / 55


Créer une page JSP

Jakarta EE

Déroulement

H I ©
Faire un clic droit sur WEB-INF de notre projet
UEL
O
LM
Aller dans New et choisir JSP File

r e f E
Remplir le champ File name: par vue.jsp (par exemple)
ch
Valider
©A

H & H: Research and Training 6 / 55


Créer une page JSP

Jakarta EE

Contenu généré

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


pageEncoding="UTF-8"%>
<!DOCTYPE html>
H I ©
<html>
UEL
<head>
O
<meta charset="UTF-8">
<title>Insert title here</title>
f E LM
</head>
ch r e
©A
<body>

</body>
</html>

H & H: Research and Training 7 / 55


Créer une page JSP

Jakarta EE

Préparons notre Hello World

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


pageEncoding="UTF-8"%>
<!DOCTYPE html>
H I ©
<html>
UEL
<head>
O
<meta charset="UTF-8">
<title>Projet JEE</title>
f E LM
</head>
ch r e
©A
<body>
<p>Hello World (depuis une JSP)</p>
</body>
</html>

H & H: Research and Training 8 / 55


Créer une page JSP

Jakarta EE

Question
Comment l’appeler ?
H I ©
UEL
O
f E LM
ch r e
©A

H & H: Research and Training 9 / 55


Créer une page JSP

Jakarta EE

Question
Comment l’appeler ?
H I ©
UEL
O
f E LM
Réponse
ch r e
©A
C’est la Servlet qui appelle la vue.

H & H: Research and Training 9 / 55


Créer une page JSP

Jakarta EE
Pour construire correctement une page HTML

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws


ServletException, IOException{
request.getRequestDispatcher("/WEB-INF/vue.jsp").forward(request, response);
}

H I ©
U EL
O
f E LM
ch r e
©A

H & H: Research and Training 10 / 55


Créer une page JSP

Jakarta EE
Pour construire correctement une page HTML

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws


ServletException, IOException{
request.getRequestDispatcher("/WEB-INF/vue.jsp").forward(request, response);
}

H I ©
EL
Ou en utilisant l’objet de type HttpServletRequest

O U
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws

LM
ServletException, IOException{

E
request.getRequestDispatcher("/WEB-INF/vue.jsp").forward(request, response);
}

r e f
ch
©A

H & H: Research and Training 10 / 55


Créer une page JSP

Jakarta EE
Pour construire correctement une page HTML

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws


ServletException, IOException{
request.getRequestDispatcher("/WEB-INF/vue.jsp").forward(request, response);
}

H I ©
EL
Ou en utilisant l’objet de type HttpServletRequest

O U
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws

LM
ServletException, IOException{

E
request.getRequestDispatcher("/WEB-INF/vue.jsp").forward(request, response);
}

r e f
ch
Explication
©A
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 10 / 55


Balises JSP

Jakarta EE

Balises JSP
sont définies par <% ... %>

H I ©
Entre ces deux balises, on peut utiliser les bases algorithmiques
du langage Java :
UEL
O
f E LM
des structures conditionnelles

r e
des structures itératives
ch
...
©A
Les balises JSP peuvent être utilisées plusieurs fois dans une
page JSP.

H & H: Research and Training 11 / 55


Balises JSP

Jakarta EE

Balises spéciales

H
<%-- ... --%> : pour ajouter un commentaire I ©
UEL
O
<%! String var; %> : pour déclarer une variable directement
E
dans la classe de la servlet.
f LM
<%= var %> c r e
h afficher le contenu de la variable var ≡ <%
: pour
© A
out.println(var); %>

H & H: Research and Training 12 / 55


Balises JSP

Jakarta EE

H I ©
Attention
UEL
O
f E LM
Il est déconseillé de mélanger du code HTML avec du code Java.

ch r e
©A

H & H: Research and Training 13 / 55


Directives

Jakarta EE

Directives
Instructions dans des balises JSP spéciales
Structure :
<%@ directive {attribut="valeur"} %> H I ©
UEL
O
f E LM
ch r e
©A

H & H: Research and Training 14 / 55


Directives

Jakarta EE

Directives
Instructions dans des balises JSP spéciales
Structure :
<%@ directive {attribut="valeur"} %> H I ©
UEL
O
f E LM
Rôle
ch r e
©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)

H & H: Research and Training 14 / 55


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

H I ©
U EL
O
f E LM
ch r e
©A

H & H: Research and Training 15 / 55


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

Utiliser l’attribut import pour importer une classe à utiliser dans la page

H I ©
EL
<%@ page import="java.util.Date" %>

O U
f E LM
ch r e
©A

H & H: Research and Training 15 / 55


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

Utiliser l’attribut import pour importer une classe à utiliser dans la page

H I ©
EL
<%@ page import="java.util.Date" %>

O U
Autres attributs
f E LM
ch r e
©A
extends

import

session = "true | false"

isELIgnored = "true | false"

...

H & H: Research and Training 15 / 55


Directives

Inclure le contenu d’une autre page JSP

<%@ include file="maPage.jsp" %>


ou

<jsp:directive.include file="maPage.jsp" />

H I ©
UEL
O
f E LM
ch r e
©A

H & H: Research and Training 16 / 55


Directives

Inclure le contenu d’une autre page JSP

<%@ include file="maPage.jsp" %>


ou

<jsp:directive.include file="maPage.jsp" />

H I ©
Différence entre les deux solutions

U EL
O
LM
Avec la première solution, le fichier sera chargé au moment de la compilation (donc le
contenu de maPage sera recompilé avec le code de la page appelante)

r e f E
ch
Avec la deuxième au moment de l’exécution

©A

H & H: Research and Training 16 / 55


Directives

Inclure le contenu d’une autre page JSP

<%@ include file="maPage.jsp" %>


ou

<jsp:directive.include file="maPage.jsp" />

H I ©
Différence entre les deux solutions

U EL
O
LM
Avec la première solution, le fichier sera chargé au moment de la compilation (donc le
contenu de maPage sera recompilé avec le code de la page appelante)

r e f E
ch
Avec la deuxième au moment de l’exécution

©A
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 16 / 55


Directives

Jakarta EE

H I ©
Inclure des bibliothèques de balises (à voir dans un prochain
chapitre)
U EL
M O
f E L
<%@ taglib uri="maLib" prefix="tag" %>

c h re
©A

H & H: Research and Training 17 / 55


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

Jakarta EE

H I ©
Comme dans les Servlets
UEL
O
request.getParameter("nomParameter");
f E LM
ch r e
©A

H & H: Research and Training 18 / 55


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

Jakarta EE
Exemple

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


pageEncoding="UTF-8"%>
<!DOCTYPE HTML>
<html>
<head>
H I ©
EL
<meta http-equiv="Content-Type" content="text/html; charset
=UTF-8">
O U
LM
<title>Projet JEE</title>
</head>
<body>
r e f E
Hello World (depuis une JSP)
ch
<%
©A
String nom = request.getParameter("nom");
String prenom = request.getParameter("prenom");
out.println("<br/>Hello " + nom + " " + prenom);
%>
</body>
</html>

H & H: Research and Training 19 / 55


Transmission de données entre Servlet/JSP

Jakarta EE

Transmission de données entre Servlet/JSP


Et si la Servlet veut transmettre des données (variables, objets...)
à la vue ? H I ©
UEL
O
On peut utiliser request.setAttribute() pour transmettre et
request.getAttribute() pour récupérer
f E LM
ch r e
request.setAttribute("nomAttribut", "valeur")

©A
request.getAttribute("nomAttribut") : récupère l’objet
ayant le nom nomAttribut qui doit correspondre au nom utilisé
lors de l’envoi

H & H: Research and Training 20 / 55


Transmission de données entre Servlet/JSP

Jakarta EE

Envoi de données par la Servlet

H I ©
EL
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException {

O U
LM
String ville = "Marseille";
request.setAttribute("maVille",ville);

e E
// l'envoi de request se fait après cette instruction
f
request.getRequestDispatcher("/WEB-INF/vue.jsp").forward(request, response);
r
ch
}

©A

H & H: Research and Training 21 / 55


Transmission de données entre Servlet/JSP

Jakarta EE

Récupération de données par la JSP

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


pageEncoding="UTF-8"%>
<!DOCTYPE HTML>
<html>
H I ©
<head>
UEL
O
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

LM
<title>Projet JEE</title>
</head>
<body>
r e f E
<%
ch
%>
©A
String notreVille = (String) request.getAttribute("maVille");
out.println("Bienvenue à " + notreVille);

</body>
</html>

H & H: Research and Training 22 / 55


Transmission de données entre Servlet/JSP

Jakarta EE

Définissons une classe Personne dans org.eclipse.model


package org.eclipse.model;

H I ©
public class Personne {
UEL
private int num; O
private String nom;
f E LM
private String prenom;
ch r e
©A
// + constructeurs, getters, setters et toString
}

H & H: Research and Training 23 / 55


Transmission de données entre Servlet/JSP

Jakarta EE

Envoi d’un objet

H I ©
EL
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException {

O U
LM
Personne personne = new Personne(100, "Wick", "John");
request.setAttribute("perso", personne);

}
r e f E
request.getRequestDispatcher("/WEB-INF/vue.jsp").forward(request, response);

ch
©A

H & H: Research and Training 24 / 55


Transmission de données entre Servlet/JSP

Jakarta EE
Récupération de l’objet
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import = "org.eclipse.model.Personne" %>
<!DOCTYPE HTML>
<html>
H I ©
<head>
UEL
O
<meta http-equiv="Content-Type" content="text/html; charset
=UTF-8">
<title>Projet JEE</title>
f E LM
</head>
ch r e
©A
<body>
<%
Personne p = (Personne) request.getAttribute("perso");
out.print("Hello " + p.getPrenom() + " " + p.getNom());
%>
</body>
</html>

H & H: Research and Training 25 / 55


Transmission de données entre Servlet/JSP

Jakarta EE

H I ©
EL
Exercice

O U
Modifiez CalculServlet pour qu’elle réalise le traitement précédent
E
et affiche le résultat dans une vue calcul.jsp
f LM
ch r e
©A

H & H: Research and Training 26 / 55


Portée d’une variable

Jakarta EE

Quatre portées pour les variables


page : la variable est accessible seulement dans cette page
H I ©
EL
request : la variable est accessible seulement entre la servlet et
U
la vue appelée O
f E LM
ch r e
session : la variable est accessible dans toutes les pages de
l’application pour un utilisateur donné
©A
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 27 / 55


Création d’un objet

Jakarta EE
Et si on a besoin de créer un objet dans la page JSP

<jsp:useBean id="per" scope="page" class="org.eclipse.model.


Personne" >
</jsp:useBean>

H I ©
UEL
O
f E LM
ch r e
©A

H & H: Research and Training 28 / 55


Création d’un objet

Jakarta EE
Et si on a besoin de créer un objet dans la page JSP

<jsp:useBean id="per" scope="page" class="org.eclipse.model.


Personne" >
</jsp:useBean>

H I ©
UEL
O
Explication
f E LM
ch r e
La balise précédente est équivalente en Java à Personne perso = new

©
Personne(); A
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 28 / 55


Création d’un objet

Jakarta EE

Et si on a besoin de créer un objet dans la page JSP et affecter des valeurs aux attributs

<jsp:useBean id="per" scope="page" class="org.eclipse.model.Personne">


<jsp:setProperty name="perso" property="nom" value="wick"/>
<jsp:setProperty name="perso" property="prenom" value="john"/>
</jsp:useBean>
H I ©
U EL
O
f E LM
ch r e
©A

H & H: Research and Training 29 / 55


Création d’un objet

Jakarta EE

Et si on a besoin de créer un objet dans la page JSP et affecter des valeurs aux attributs

<jsp:useBean id="per" scope="page" class="org.eclipse.model.Personne">


<jsp:setProperty name="perso" property="nom" value="wick"/>
<jsp:setProperty name="perso" property="prenom" value="john"/>
</jsp:useBean>
H I ©
U EL
O
Ou aussi
f E LM
ch r e
<jsp:useBean id="per" scope="page" class="org.eclipse.model.Personne">

©A
</jsp:useBean>

<%
perso.setNom("wick");
perso.setPrenom("wick");
%>

H & H: Research and Training 29 / 55


EL : Expression Language

Jakarta EE

EL : Expression Language

Proposée par JSTL (Jakarta Standard Tag Library) H I ©


UEL
O
Disponible depuis la version 2.4 de l’API Servlet

f E LM
ch r e
Permettant d’optimiser les pages JSP (simplifier le code)

©A
Forme générale : ${ expression }

H & H: Research and Training 30 / 55


EL : Expression Language

Jakarta EE

Rôle
H I ©
EL
Réaliser des tests, des opérations arithmétiques
U
L MO
Manipuler des objets, des collections,
r e f E
...
A ch
©

H & H: Research and Training 31 / 55


EL : Expression Language

Jakarta EE
Les EL supportent plusieurs types du langage Java

Long

Double

String : entouré par "..." ou ’...’


H I ©
Boolean
UEL
O
...

f E LM
ch r e
©A

H & H: Research and Training 32 / 55


EL : Expression Language

Jakarta EE
Les EL supportent plusieurs types du langage Java

Long

Double

String : entouré par "..." ou ’...’


H I ©
Boolean
U EL
O
...

f E LM
ch r e
©A
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 32 / 55


EL : Expression Language

Jakarta EE
Les EL permettent d’évaluer une expression arithmétique

${ 4 * 3 + 5 } <!-- affiche 17 -->


${ 8 % 2 } <!-- affiche 0 -->

H I ©
UEL
O
f E LM
ch r e
©A

H & H: Research and Training 33 / 55


EL : Expression Language

Jakarta EE
Les EL permettent d’évaluer une expression arithmétique

${ 4 * 3 + 5 } <!-- affiche 17 -->


${ 8 % 2 } <!-- affiche 0 -->

H I ©
UEL
Les opérateurs arithmétiques
O
f E LM
+ : addition

ch r e
-
© A
: soustraction

* : multiplication

/ ou div : division

% ou mod : reste de la division

H & H: Research and Training 33 / 55


EL : Expression Language

Jakarta EE
On peut réaliser des tests en utilisant les opérateurs de comparaison

${ 'e' < 'f' } <!-- affiche true -->


${ 5 + 5 == 25 } <!-- affiche false -->

H I ©
UEL
O
f E LM
ch r e
©A

H & H: Research and Training 34 / 55


EL : Expression Language

Jakarta EE
On peut réaliser des tests en utilisant les opérateurs de comparaison

${ 'e' < 'f' } <!-- affiche true -->


${ 5 + 5 == 25 } <!-- affiche false -->

H I ©
EL
Opérateurs de comparaison

O U
LM
== ou eq : pour tester l’égalité

e f E
!= ou ne : pour tester l’inégalité
r
A càh
> ou gt : supérieur
©
< ou lt : inférieur à

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

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

H & H: Research and Training 34 / 55


EL : Expression Language

Jakarta EE

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


logiques
${ 2 == 5 || 3 == 4 } <!-- affiche false -->
${ 2 < 5 && 5 >= 3 } <!-- affiche true -->
H I ©
UEL
O
f E LM
ch r e
©A

H & H: Research and Training 35 / 55


EL : Expression Language

Jakarta EE

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


logiques
${ 2 == 5 || 3 == 4 } <!-- affiche false -->
${ 2 < 5 && 5 >= 3 } <!-- affiche true -->
H I ©
UEL
O
f E LM
Opérateurs logiques
ch r e
©A
&& ou and : et
|| ou or : ou
! ou not : non

H & H: Research and Training 35 / 55


EL : Expression Language

Jakarta EE

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


${ empty 'chaine' } <!-- affiche false -->
${ !empty 'chaine' } <!-- affiche true -->
H I ©
EL
${ !empty 'chaine' ? true : false } <!-- test
ternaire affichant true -->
O U
f E LM
ch r e
©A

H & H: Research and Training 36 / 55


EL : Expression Language

Jakarta EE

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


${ empty 'chaine' } <!-- affiche false -->
${ !empty 'chaine' } <!-- affiche true -->
H I ©
EL
${ !empty 'chaine' ? true : false } <!-- test
ternaire affichant true -->
O U
f E LM
ch r e
©A

H & H: Research and Training 36 / 55


EL : Expression Language

Jakarta EE

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


${ empty 'chaine' } <!-- affiche false -->
${ !empty 'chaine' } <!-- affiche true -->
H I ©
EL
${ !empty 'chaine' ? true : false } <!-- test
ternaire affichant true -->
O U
f E LM
r e
h és là où l’EL est appelée
caffich
A
Les résultats sont
©
<div> 7 < 5 : ${ 7 < 5 } </div>
<div> 7 < 5 : false </div>

H & H: Research and Training 36 / 55


EL : Expression Language

Jakarta EE
EL simplifie 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 -->

H I ©
U EL
O
f E LM
ch r e
©A

H & H: Research and Training 37 / 55


EL : Expression Language

Jakarta EE
EL simplifie 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 -->

H I ©
EL
Avec les scriptlets, pour récupérer un objet

<%@ page import = "org.eclipse.model.*" %>


O U
<%

f E LM
Personne p = (Personne) request.getAttribute("perso");

ch r e
out.print("Hello " + p.getPrenom() + " " + p.getNom());

©A
%>

H & H: Research and Training 37 / 55


EL : Expression Language

Jakarta EE
EL simplifie 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 -->

H I ©
EL
Avec les scriptlets, pour récupérer un objet

<%@ page import = "org.eclipse.model.*" %>


O U
<%

f E LM
Personne p = (Personne) request.getAttribute("perso");

ch r e
out.print("Hello " + p.getPrenom() + " " + p.getNom());

©A
%>

Avec EL, l’écriture a été simplifiée

${ perso.nom } <!-- affiche Wick -->


${ perso.getPrenom() } <!-- affiche John -->

H & H: Research and Training 37 / 55


EL : Expression Language

Jakarta EE

Explication

perso est le nom d’objet qui a été ajouté à la requête comme


attribut (avec request.setAttribute() H I ©
UEL
O
${ perso.nom } est équivalent à ${ perso.getNom() }

f E LM
ch r e
©A

H & H: Research and Training 38 / 55


EL : Expression Language

Jakarta EE

Explication

perso est le nom d’objet qui a été ajouté à la requête comme


attribut (avec request.setAttribute() H I ©
UEL
O
${ perso.nom } est équivalent à ${ perso.getNom() }

f E LM
ch r e
© A
Même si l’objet ou un de ses attributs n’existe pas, null ne sera
jamais affiché.

H & H: Research and Training 38 / 55


EL : Expression Language

Jakarta EE

Considérons la liste suivante définie dans la Servlet


ArrayList<String> sport = new ArrayList<String>();
H I ©
sport.add( "football" );
UEL
sport.add( "tennis" ); O
sport.add( "rugby");
f E LM
sport.add( "basketball" );
ch r e
©A
request.setAttribute( "sport" , sport );

H & H: Research and Training 39 / 55


EL : Expression Language

Jakarta EE

Pour récupérer l’élément d’indice i dans la vue


sport.get(i);
sport[i];
H I ©
EL
sport['i'];
sport["i"];
O U
f E LM
ch r e
©A

H & H: Research and Training 40 / 55


EL : Expression Language

Jakarta EE

Pour récupérer l’élément d’indice i dans la vue


sport.get(i);
sport[i];
H I ©
EL
sport['i'];
sport["i"];
O U
f E LM
ch r e
Exemple
© A
J'aime le ${ sport.get(0) } et le ${ sport[3] }.
Je deteste le ${ sport['1'] } et le ${ sport["3"] }.

H & H: Research and Training 40 / 55


Objets implicites

Jakarta EE

scope

H I ©
U EL
O
f E LM
ch r e
page
©A request session application

H & H: Research and Training 41 / 55


Objets implicites

Jakarta EE

Dans les exemples précédents

H I ©
on a utilisé des objets (implicites) sans les instancier.
EL
OU
out : pour afficher un message
M
request : pour récupérerL
e f E des attributs et/ou des paramètres

c hr autres) ont déjà été instanciés dans la


ces objets (et certains
A
Servlet ©
qui correspond à notre page JSP

H & H: Research and Training 42 / 55


Objets implicites

Jakarta EE

Autres objets implicites

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


l’utilisateur courant
H I ©
application : permet d’obtenir/modifierE
U Linformations
des

M O exécutée.
relatives à l’application dans laquelle elle est
response : permet defmodifierE L des données relatives à la
chr
réponse (encodage...)
e
A
© : pour récupérer des informations sur l’exception
exception
capturée
...

H & H: Research and Training 43 / 55


Objets implicites

Jakarta EE

Les objets implicites de EL sont des Map

H I ©
sessionScope : une Map qui permet de récupérer/écrire des

EL
données relatives à l’utilisateur courant

O U
param : une Map qui permet de récupérer/écrire les noms et
E LM
valeurs des paramètres de la requête.
f
r e
chqui permet d’associer les noms et instances
cookie : une Map
© A
des cookies.
...

H & H: Research and Training 44 / 55


Objets implicites

Jakarta EE

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


requête
<%
String nom = request.getParameter("nom");
H I ©
String prenom = request.getParameter("prenom");
UEL
O
LM
out.println("<br/>Hello " + nom + " " + prenom);
%>
r e f E
ch
©A
On peut le remplacer par
Hello ${param.prenom} ${param.nom}

H & H: Research and Training 45 / 55


Gérer les exceptions

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

H I ©
UEL
O
f E LM
ch r e
©A

H & H: Research and Training 46 / 55


Gérer les exceptions

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

H I ©
UEL
O
À l’exécution, une exception est affichée
f E LM
ch r e
org.apache.jasper.JasperException: An exception

©A
occurred processing JSP page [/WEB-INF/vue.jsp]
at line [11]

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

H & H: Research and Training 46 / 55


Gérer les exceptions

Jakarta EE
Il faut capturer l’exception
<%
try {
int x = 3 / 0;
H I ©
EL
}
catch(Exception e){
O U
}
out.print("Erreur " + e.getMessage());
f E LM
%>
ch r e
©A
Et le résultat est :
Erreur / by zero

H & H: Research and Training 47 / 55


Gérer les exceptions

Jakarta EE

Une deuxième solution consiste à


H I ©
EL
créer une vue d’erreur
M OU
f
rediriger vers cette page E L fois qu’une exception est levée
chaque
chr e
© A

H & H: Research and Training 48 / 55


Gérer les exceptions

Jakarta EE
La page erreur.jsp
<%@ page language="java" contentType="text/html;
charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
H I ©
EL
<html>
<head>
O U
<meta http-equiv="Content-Type" content="text/
html; charset=UTF-8"> f E LM
ch r
<title> Page d'erreur </title> e
</head>
<body>
©A
Erreur
</body>
</html>

H & H: Research and Training 49 / 55


Gérer les exceptions

Jakarta EE
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>
<html>
H I ©
<head>
UEL
O
<meta http-equiv="Content-Type" content="text/html; charset
=UTF-8">
<title>First Page</title>
f E LM
</head>
ch r e
©A
<body>
<%
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 50 / 55


Gérer les exceptions

Jakarta EE
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" %>
<!DOCTYPE html>
H I ©
EL
<html>
<head>
O U
LM
<meta http-equiv="Content-Type" content="text/html; charset
=UTF-8">
<title>Page d'erreur</title>
r e f E
</head>
ch
<body>
Erreur ©A
<%=exception.getMessage() %>
</body>
</html>

Ne pas utiliser le navigateur d’Eclipse pour tester.

H & H: Research and Training 51 / 55


Référencement d’une ressource statique

Jakarta EE

Ressource statique

H I ©
Fichier de style CSS
UEL
O
LM
Fichier de script JS
Image
r e f E
ch
... ©A

H & H: Research and Training 52 / 55


Référencement d’une ressource statique

Jakarta EE

Appliquer un style à un paragraphe

Dans src/main/webapp, créer un dossier css


Créer un fichier style.css dans le dossier css
H I ©
Référencer style.css dans une vue UEL
O
f E LM
ch r e
©A

H & H: Research and Training 53 / 55


Référencement d’une ressource statique

Jakarta EE

Appliquer un style à un paragraphe

Dans src/main/webapp, créer un dossier css


Créer un fichier style.css dans le dossier css
H I ©
Référencer style.css dans une vue UEL
O
f E LM
ch r e
Contenu de style.css
©A
.first {
color: blue;
}

H & H: Research and Training 53 / 55


Référencement d’une ressource statique

Jakarta EE

Pour tester, référençons le fichier style.css et utilisons la classe CSS first


dans n’importe quelle vue

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


pageEncoding="UTF-8"%>
<!DOCTYPE html>
H I ©
<html>
UEL
<head>
O
<meta charset="UTF-8">
<title>hello.jsp</title>
f E LM
ch r e
<link rel="stylesheet" href="css/style.css">

©A
</head>
<body>
<p class="first">Hello ${ prenom } ${ nom }</p>
</body>
</html>

H & H: Research and Training 54 / 55


Extension Eclipse pour JSP

Jakarta EE

Extension Eclipse pour JSP

H
Emmet : extension d’auto-complétion pour les langages Web I ©
UEL
O
Pour l’utiliser, allez dans Help > Eclipse Marketplace...
E
et installez l’extension Emmet (ex-Zen Coding)
f LM
ch.jsp
Pour l’activer, allez r e
dans Window > Preferences, cherchez
Emmet et© A
ajoutez à la liste des extensions supportées.

H & H: Research and Training 55 / 55

Vous aimerez peut-être aussi