Cours Java JSP
Cours Java JSP
Achref El Mouelhi
1 Introduction
3 Balises JSP
4 Directives
9 EL : Expression Language
10 Objets implicites
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)
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
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
Jakarta EE
Contenu généré
</body>
</html>
Jakarta EE
Jakarta EE
Question
Comment l’appeler ?
H I ©
UEL
O
f E LM
ch r e
©A
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.
Jakarta EE
Pour construire correctement une page HTML
H I ©
U EL
O
f E LM
ch r e
©A
Jakarta EE
Pour construire correctement une page HTML
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
Jakarta EE
Pour construire correctement une page HTML
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).
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.
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); %>
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
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
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)
Utiliser la directive page pour définir des données relatives à la page (code auto-généré à
la création d’une JSP)
H I ©
U EL
O
f E LM
ch r e
©A
Utiliser la directive page pour définir des données relatives à la page (code auto-généré à
la création d’une JSP)
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
Utiliser la directive page pour définir des données relatives à la page (code auto-généré à
la création d’une JSP)
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
...
H I ©
UEL
O
f E LM
ch r e
©A
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 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).
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
Jakarta EE
H I ©
Comme dans les Servlets
UEL
O
request.getParameter("nomParameter");
f E LM
ch r e
©A
Jakarta EE
Exemple
Jakarta EE
©A
request.getAttribute("nomAttribut") : récupère l’objet
ayant le nom nomAttribut qui doit correspondre au nom utilisé
lors de l’envoi
Jakarta EE
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
Jakarta EE
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>
Jakarta EE
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
}
Jakarta EE
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
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>
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
Jakarta EE
Jakarta EE
Et si on a besoin de créer un objet dans la page JSP
H I ©
UEL
O
f E LM
ch r e
©A
Jakarta EE
Et si on a besoin de créer un objet dans la page JSP
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")
Jakarta EE
Et si on a besoin de créer un objet dans la page JSP et affecter des valeurs aux attributs
Jakarta EE
Et si on a besoin de créer un objet dans la page JSP et affecter des valeurs aux attributs
©A
</jsp:useBean>
<%
perso.setNom("wick");
perso.setPrenom("wick");
%>
Jakarta EE
EL : Expression Language
f E LM
ch r e
Permettant d’optimiser les pages JSP (simplifier le code)
©A
Forme générale : ${ expression }
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
©
Jakarta EE
Les EL supportent plusieurs types du langage Java
Long
Double
f E LM
ch r e
©A
Jakarta EE
Les EL supportent plusieurs types du langage Java
Long
Double
f E LM
ch r e
©A
Les EL permettent d’évaluer une expression arithmétique
Jakarta EE
Les EL permettent d’évaluer une expression arithmétique
H I ©
UEL
O
f E LM
ch r e
©A
Jakarta EE
Les EL permettent d’évaluer une expression arithmétique
H I ©
UEL
Les opérateurs arithmétiques
O
f E LM
+ : addition
ch r e
-
© A
: soustraction
* : multiplication
/ ou div : division
Jakarta EE
On peut réaliser des tests en utilisant les opérateurs de comparaison
H I ©
UEL
O
f E LM
ch r e
©A
Jakarta EE
On peut réaliser des tests en utilisant les opérateurs de comparaison
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 à
Jakarta EE
Jakarta EE
Jakarta EE
Jakarta EE
Jakarta EE
Jakarta EE
EL simplifie la récupération des attributs ajoutés depuis la Servlet dans l’objet request
H I ©
U EL
O
f E LM
ch r e
©A
Jakarta EE
EL simplifie la récupération des attributs ajoutés depuis la Servlet dans l’objet request
H I ©
EL
Avec les scriptlets, pour récupérer un objet
f E LM
Personne p = (Personne) request.getAttribute("perso");
ch r e
out.print("Hello " + p.getPrenom() + " " + p.getNom());
©A
%>
Jakarta EE
EL simplifie la récupération des attributs ajoutés depuis la Servlet dans l’objet request
H I ©
EL
Avec les scriptlets, pour récupérer un objet
f E LM
Personne p = (Personne) request.getAttribute("perso");
ch r e
out.print("Hello " + p.getPrenom() + " " + p.getNom());
©A
%>
Jakarta EE
Explication
f E LM
ch r e
©A
Jakarta EE
Explication
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é.
Jakarta EE
Jakarta EE
Jakarta EE
Jakarta EE
scope
H I ©
U EL
O
f E LM
ch r e
page
©A request session application
Jakarta EE
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
Jakarta EE
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
...
Jakarta EE
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.
...
Jakarta EE
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
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: %>
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
Jakarta EE
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>
Jakarta EE
Faisons référence à erreur.jsp dans vue.jsp (en ajoutant la ligne
errorPage="erreur.jsp") et supprimons le bloc try ... catch
Jakarta EE
Pour afficher le message d’erreur, il faut modifier erreur.jsp et déclarer la
page comme page d’erreur isErrorPage="true"
Jakarta EE
Ressource statique
H I ©
Fichier de style CSS
UEL
O
LM
Fichier de script JS
Image
r e f E
ch
... ©A
Jakarta EE
Jakarta EE
Jakarta EE
©A
</head>
<body>
<p class="first">Hello ${ prenom } ${ nom }</p>
</body>
</html>
Jakarta EE
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.