Vous êtes sur la page 1sur 49

Programmation Avancée

Java Enterprise Edition

Dr. Khadim Dramé


Khadim.drame@univ-zig.sn
Département Informatique
Université Assane Seck de Ziguinchor
Java Server Pages

2
JSP
◼ Les JSP sont une extension des servlets pour générer
du contenu dynamique
◼ Une page JSP est un document HTML contenant des
fragments de code Java
◼ partie statique : HTML ou XML
◼ partie dynamique: éléments JSP
◼ Les JSP utilisent généralement des Java Beans et/ou
des Enterprise Java Beans (EJB)
◼ Elles utilisent également des bibliothèques de balises
standards (taglibs)

3
JSP
◼ Une page JSP est exécutée dans un conteneur de
servlets
◼ Elle est convertie en servlet par le moteur de servlets
lors de son premier appel et compilée
◼ code HTML converti en instructions Java
◼ scripts JSP traduits en code Java
◼ appel directement de la servlet ensuite
◼ Le conteneur gère le cycle de vie d’une JSP
◼ Les servlets et les JSP peuvent utiliser les ressources
du serveur: BD, EJB, services Web

4
JSP

5
JSP (API)
◼ Packages
◼ javax.servlet.jsp

◼ JspPage (interface) héritant de Servlet


◼ HttpJspPage étend l’interface JspPage
◼ javax.servlet.jsp.el
◼ javax.servlet.jsp.tagext

◼ Servlet générée est une extension de HttpJspBase, qui


étend HttpServlet et implémente HttpJspPage
◼ Cycle de vie identique à celui d’une servlet
◼ JspInit(), _jspService(), jspDestroy

6
JSP
◼ Une page JSP est concrètement constitué de
◼ Code (X)HTML classique et
◼ Scripts
◼ Bibliothèque de tags spécifiques
◼ Balises personnalisées
◼ Différentes syntaxes pour intégrer les scripts
◼ Syntaxe JSP
◼ Syntaxe XML avec plusieurs espaces de nommage
◼ jsp

◼ balises (JSTL)

◼ Expression language

7
JSP (exemple 1)

<html>
<head>
<title>Bonjour tout le monde</title>
</head>
<body>
<h1>Bonjour tout le monde</h1>
Nous sommes le <%= new java.util.Date().toString() %>.
Nous allons apprendre à écrire des pages JSP.
</body>
</html>

8
Eléments JSP
◼ Dans la spécification JSP, les éléments
suivants sont définis
◼ Directives
◼ Scripts
◼ Actions
◼ Différentes syntaxes pour ces éléments
◼ Syntaxe JSP
◼ Syntaxe XML
◼ Expression Language

9
Eléments JSP
◼ Directives
◼ Elles fournissent des informations relatives à la
page
◼ Trois types de directives
◼ page pour spécifier les informations de la page
◼ include pour inclure une autre page ou un fragment de
page dans la page jsp
◼ taglib pour utiliser des bibliothèques de balises standards

10
Eléments JSP
◼ Directive page
◼ Définir et manipuler des attributs de la page
◼ Syntaxe JSP
<%@ page attributs %>
◼ Syntaxe XML
<jsp:directive.page attributs />
◼ Exemples
<%@ page import="java.util.*" %>
<jsp:directive.page pageEncoding="UTF8" />

11
Eléments JSP
◼ Directive page : attributs
◼ import: importer des paquetages
◼ contentType: définir le type de contenu de la page
◼ pageEncoding: spécifier l’encodage de la page
◼ info: décrire le contenu de la page
◼ isErrorPage: indiquer si la page est une page de
gestion d’erreur
◼ errorPage: indiquer l’URL de la page à renvoyer en
cas d’erreur

12
Eléments JSP
◼ Directive include
◼ Insérer le contenu d’une ressource dans la page
◼ Syntaxe JSP
<%@ include attributs %>
◼ Syntaxe XML
<jsp:directive.include attributs />
◼ Exemples
<%@ include file="test.jsp" %>
<jsp:directive.include file="test.jsp" />

13
Eléments JSP
◼ Scripts
◼ Insertion de code java dans la page JSP
◼ Quatre types de scripts
◼ Déclarations
◼ Scriptlets
◼ Expressions
◼ Commentaires

14
Eléments JSP
◼ Déclarations
◼ Déclarer et définir des variables et méthodes à
utiliser dans la page
◼ Syntaxe JSP
<%! code %>
◼ Syntaxe XML
<jsp:declaration> code </jsp:declaration>
◼ Exemples
<%! public int num =10; %>
<jsp:declaration> public int num =10; </jsp:declaration>

15
Eléments JSP
◼ Scriptlets
◼ Blocs d’instructions Java dans la page JSP
◼ Syntaxe JSP
<% code %>
◼ Syntaxe XML
<jsp:scriptlet> code </jsp:scriptlet>
◼ Exemples
<% for (int i=0; i<10; i++) %>
<jsp:scriptlet> for (int i=0; i<10; i++) </jsp:scriptlet>

16
Eléments JSP
◼ Expressions
◼ Valeurs d’une variable ou d’une expression Java à
insérer dans la page
◼ Syntaxe JSP
<%= code %>
◼ Syntaxe XML
<jsp:expression> code </jsp:expression>
◼ Exemples
<%= new java.util.Date() %>
<jsp:expression> new java.util.Date() </jsp:expression>

17
Eléments JSP
◼ Commentaires
◼ Commentaire spécifique à la page
<%-- commentaire --%>
◼ Commentaire transmis au client, commentaire
HTML
<!-- commentaire -->
◼ Exemples
<%-- ceci ne sera pas visible par le client--%>
<!-- Cette page est générée le 5 Nov 2020-->

18
Eléments JSP (exemple 2)
<html>
<head>
<title>Liste des universités publiques</title>
</head>
<body>
<%! String univ[] = {"ucad","ugb","uasz","uadb","ut"}; %>
<% for (int i = 0; i < univ.length; i++) { %>
<%= i+1 %> <%= univ[i] %> <br>
<% } %>
</body>
</html>

19
Eléments JSP
◼ Actions
◼ Elles permettent de modifier le comportement de la
page JSP lors de son exécution
◼ Elles sont intégrées à la page en utilisant la syntaxe
XML (balises personnalisées)
◼ Elles permettent de
◼ inclure dynamiquement un fichier (avec servlet)
◼ rediriger vers une autre page (avec servlet)
◼ utiliser les propriétés d’objets Java (Java Beans)

20
Eléments JSP
◼ Actions : inclusion
◼ Elle permet d’intégrer une autre page ou servlet lors du
traitement de la requête
◼ Elle est différente de la directive include (statique)
◼ Syntaxe
<jsp:include page="test.jsp"/>
◼ param peut être utilisé avec l’inclusion pour transmettre
de nouveaux paramètres
<jsp:include page="test.jsp">
<jsp:param name="parametre" value="valeur"/>
</jsp:include>

21
Eléments JSP
◼ Actions : redirection
◼ Elle permet de rediriger la requête vers une page
HTML, une autre page JSP ou une servlet
◼ Syntaxe
<jsp:forward page="test.jsp"/>
◼ Ne pas écrire du code après une redirection : le code
sera ignoré
◼ param peut être utilisé avec la redirection
<jsp:forward page="test.jsp">
<jsp:param name="parametre" value="valeur"/>
</jsp:forward>

22
Eléments JSP

◼ Actions : useBean (à détailler plus tard)


◼ Elle permet d’instancier un bean depuis une page JSP
◼ Elle est associée à d’autres actions: setProperty,
getProperty
◼ Syntaxe
<jsp:useBean id="name" class="package.class"
</jsp:useBean>

23
Java Beans: c’est quoi?
◼ Les Java Beans sont des classes Java (POJO - Plain Old
Java Objects) suivant un ensemble de conventions
◼ constructeur public sans argument
◼ pas d’attributs publics
◼ méthodes accesseurs (getXxx) et modifieurs (setXxx)
publics pour manipuler les attributs
◼ isXxx pour les propriétés booléennes plutôt que getXxx
◼ Ils permettent de
◼ minimiser le code Java dans les pages JSP
◼ simplifier les traitements dans les JSP
◼ réutiliser les beans dans d’autres pages JSP
24
Java Beans (exemple 3)
package sn.uasz.m1.beans;
public class Personne {
private String prenom;
private String nom;
private int age = 0;
private boolean marie;
public Personne() {}
public String getPrenom() { return prenom;}
public void setPrenom(String prenom) { this.prenom = prenom;}
public String getNom() { return nom;}
public void setNom(String nom) { this.nom = nom;}
public int getAge () { return age;}
public void setAge(int age) { this.age = age;}
public boolean isMarie() { return marie;}
public void setMarie(boolean marie) { this.marie = marie;}
}

25
JSP & Java Beans

◼ Pour utiliser un bean dans une page JSP, on fait


appel à la balise <jsp:useBean>
◼ Syntaxe
<jsp:useBean id="nomBean" class="classBean"
scope="request"/>
◼ id: nom pour accéder au bean dans la page
◼ class: nom de la classe du bean
◼ scope: portée du bean (page, session, application)

26
JSP & Java Beans

◼ Portée du bean (scope)


◼ page
bean visible pour un page JSP
◼ request
bean visible pour une page et passe les include et
forward
◼ session
bean ayant la durée de vie de la session
◼ application
bean ayant la durée de vie de l’application

27
JSP & Java Beans

◼ Pour accéder aux propriétés du bean, on utilise


la balise <jsp:getProperty>
◼ Syntaxe
<jsp:getProperty name="nomBean"
property="nomPropriete"/>
Ou
<%= nomBean.getNomProperty() %>
◼ name: nom du bean

◼ property: nom de la propriété

28
JSP & Java Beans (exemple 4)
<jsp:useBean id="individu" scope="session" class="sn.uasz.m1.beans.Personne"/>

<p>Prénom: <jsp:getProperty name="individu" property="prenom"/> </p>


<p>Nom: <jsp:getProperty name="individu" property="nom"/> </p>
<p>Age: <jsp:getProperty name="individu" property="age"/> </p>

<jsp:useBean id="individu" scope="session" class="sn.uasz.m1.beans.Personne"/>

<p>Prénom: <%= individu.getPrenom() %></p>


<p>Nom: <%= individu.getNom() %></p>
<p>Age: <%= individu.getAge() %></p>

29
JSP & Java Beans

◼ Pour modifier les propriétés d’un bean, on utilise


la balise <jsp: setProperty>
◼ Syntaxe
<jsp:setProperty name="nomBean"
property="nomPropriete" value="valeur"/>
Ou
<%= nomBean.setNomProperty(valeur) %>
◼ name: nom du bean

◼ property: nom de la propriété

◼ value: valeur à attribuer à la propriété

30
JSP & Java Beans
◼ On peut aussi modifier les propriétés du bean à l’aide
des paramètres de la requête (courante)
◼ Syntaxe
◼ La propriété et le paramètre ont le même nom
<jsp:setProperty name="nomBean"
property="nomPropriete"/>
◼ La propriété et le paramètre ont des noms différents
<jsp:setProperty name="nomBean"
property="nomPropriete" param="parametre"/>

31
Objets implicites
◼ Un certain nombre d’objets sont définis implicitement
◼ On peut accéder à ces objets sans les déclarer ni les
initialiser au préalable
◼ request
◼ response
◼ out <%! int a ; int b; %>
◼ session <% a=Integer.parseInt(request.getParameter("a")); %>
<% b=Integer.parseInt(request.getParameter("b")); %>
◼ config <%= a+b %>
◼ exception http://localhost:8080/auth/calcul.jsp?a=5&b=15
◼ application

32
Exercice
◼ Créer une page jsp permettant de récupérer les
paramètres nom et prénom à partir de la requête et
de les afficher. Par exemple en tapant
http://localhost:8080/tp/test.jsp?pnom=Modou&nom
=Faye, la page affiche Bonjour Modou Faye.

◼ Créer une page jsp qui déclare une variable liste, y


ajoute 5 noms de fruits puis affiche la liste.

33
Langages d’expressions (EL)
◼ Langages pour évaluer et intégrer les valeurs des
expressions dans des JSP
◼ Leur but est de manipuler plus simplement les données
dans des JSP
◼ limiter le code Java dans les JSP
◼ donner une meilleure lisibilité (beans et propriétés)
◼ Ils sont couramment utilisés avec des bibliothèques de
balises standards (taglibs)

34
Langages d’expressions (EL)
◼ Syntaxe
${expr} ou #{expr} avec expr une expression valide
◼ Exemple: ${personne.prenom}

◼ Une expression EL peut être composée de plusieurs


termes séparés par des opérateurs
◼ Ces termes peuvent être
◼ un type primaire (Long, Double, String, Boolean, …)
◼ un objet implicite (pageScope, requestScope, sessionScope,
applicationScope, param, …)
◼ un attribut d’un scope de l’application
${sessionScope["nom"]}
35
Langages d’expressions (EL)
◼ Directive page pour activer les EL
◼ <%@ page isELIgnored="false" %>
◼ La plupart des opérateurs Java utilisables
◼ ${5 + 2 * 3}
◼ ${empty personne}
◼ ${empty personne.nom}
◼ Des équivalences entre opérateurs
◼ ${5<8} équivalent à ${5 lt 8}
◼ ${4!=7} équivalent à ${4 ne 7}

36
Langages d’expressions (EL)
◼ Deux manières d’accéder à une propriété d’un objet
bean
◼ ${personne.nom}
◼ ${personne[nom]}
◼ Avantages
◼ simplification de la conception de pages JSP
◼ vérification des données à afficher
◼ gestion facile des exceptions
Sans EL Avec EL
<%= session.getAttribute("nom") %> ${sessionScope["nom"]}

37
JSTL (JSP Standard Tag Library)

◼ Bibliothèque standard de balises fournissant des


fonctionnalités de base des pages JSP
◼ Fonctionnalités pouvant être utilisées dans une
page JSP ou JSF
◼ Elle permet de développer des pages JSP en
utilisant des balises XML (alternative des
scriptlets)
◼ Elle est utilisée conjointement avec les EL

38
JSTL (JSP Standard Tag Library)

Bibliothéque URI Préfixe


Base http://java.sun.com/jsp/jstl/core c
Traitement XML http://java.sun.com/jsp/jstl/xml x
Internationalisation http://java.sun.com/jsp/jstl/fmt fmt
Traitement de requêtes SQL http://http://java.sun.com/jsp/jstl/sql sql
Fonctions http://java.sun.com/jsp/jstl/functions fn

39
JSTL (JSP Standard Tag Library)

◼ Pour utiliser les balises d’une bibliothèque dans une


JSP, il faut
◼ spécifier la bibliothèque en indiquant son URI
◼ donner un préfixe à la bibliothèque
◼ Syntaxe
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix ="c" %>
ou
<jsp:root xmlns:jsp=" http://java.sun.com/JSP/Page"
xmlns:c= "http://java.sun.com/jstl/core" version="1.2" >

40
JSTL (JSP Standard Tag Library)
◼ Bibliothèque de base: core
◼ Manipulation de variables
◼ Structures de contrôle avec les conditions
◼ Boucles
◼ Traitement des exceptions

41
JSTL (JSP Standard Tag Library)

◼ Bibliothèque de base: core


Balise Description
<c:out> évalue une expression et affiche sa valeur
<c:set> initialise une variable
<c:remove> supprime une variable
<c:catch> capture une exception lancée par une autre balise
<c:if> teste si une condition est vraie
<c:choose> fournit plusieurs alternatives exclusives
<c:when> est une alternative dans une balise <c:choose>
<c:otherwise> est la dernière alternative d’une balise <c:choose>
<c:forEach> répète un traitement pour chaque élément d’une collection
ou un nombre fixé de fois
42
JSTL (JSP Standard Tag Library)
◼ Attributs des balises
◼ <c:out>
◼ Object value : expression à évaluer (obligatoire)
◼ Object default : valeur à afficher si l’expression «value» est nulle
◼ boolean escapeXml (caractères spéciaux)
◼ <c:set>
◼ String var : nom de l’attribut qui contiendra l’expression
◼ Object value : expression à évaluer
◼ String scope : nom du scope qui contiendra l’attribut var (page, request,
session ou application)
◼ Object target : l’objet ayant la propriété à modifier
◼ String property : nom de la propriété à modifier

43
JSTL (JSP Standard Tag Library)
◼ Attributs des balises
◼ <c:if>
◼ boolean test : condition à vérifier (obligatoire)
◼ String var : nom d’une variable booléenne contenant le résultat du test
◼ String scope : valeur du scope pour l’attribut var
◼ <c:choose>
◼ Cette balise n’a pas d’attribut
◼ une ou plusieurs balises de type <c:when>
◼ <c:when> a un attribut test

◼ zéro ou une balise <c:otherwise>


◼ <c:otherwise> n’a pas d’attribut

44
JSTL (JSP Standard Tag Library)
◼ Attributs des balises
◼ <c:forEach>
◼ String var : variable contenant l’élément courant de l’itération
◼ Object items : collection d’éléments
◼ String varStatus : variable contenant des informations sur l’itération
◼ int begin : spécifie l’index de départ de l’itération
◼ int end : spécifie l’index de fin de l’itération
◼ int step : saut de l’itération

45
JSTL (JSP Standard Tag Library)

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>


<html>
<head><title>Parité des nombres</title> </head>
<body> <h1>Vérification de la parité des nombres</h1>
<hr/>
<c:set var= "taille" value="20"/>
<c:forEach var="i" begin= "1" end="${taille - 1}">
<c:choose>
<c:when test="${i%2 == 0}"><c:out value="${i} est pair."/><br/>
</c:when>
<c:otherwise><c:out value="${i} est impair."/><br/></c:otherwise>
</c:choose>
</c:forEach>
</body>
</html>

46
JSTL (JSP Standard Tag Library)
◼ Bibliothèque d’internationalisation et de formatage

◼ Internationalisation (langues, horaires, encodage)


◼ Formatage des messages en fonction de la langue
◼ Formatage des dates selon la langue
◼ Formatage des nombres (monnaie, pourcentage)

47
JSTL (JSP Standard Tag Library)

◼ Bibliothèque de traitement de requêtes SQL: sql

Balise Description
<sql:setDataSource> spécifie la source de données
<sql:query> exécute une requête de sélection sur une base de données
<sql:update> exécute une requête de mise à jour sur une BD
<sql:param> fixe les valeurs des marqueurs d’emplacements (?) d’une
instruction SQL
<sql:dataParam> fixe les valeurs des marqueurs d’emplacements (?) d’une
instruction SQL pour les valeurs de type java.util.Date

48
JSTL (JSP Standard Tag Library)

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


<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %>
<html>
<head><title>Liste des membres </title></head>
<body>
<h1>Liste des membres du club</h1>
<hr/> <sql:setDataSource dataSource="jdbc/bd_club"/>
<sql:query var="membres"> SELECT * FROM membre </sql:query>
<table border="1">
<tr><th>Prénom</th>
<th>Nom</th>
<th>Profession</th></tr>
<c:forEach var="row" items="${membres.rows}">
<tr><td><c:out value="${row.prenom}"/></td>
<td><c:out value="${row.nom}"/></td>
<td><c:out value="${row.profession}"/></td></tr>
</c:forEach>
</table>
</body>
</html>
49

Vous aimerez peut-être aussi