SlideShare uma empresa Scribd logo
1 de 46
Baixar para ler offline
JSP – JAVA SERVER PAGES
2022/2023 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 98
Contenu
• Introduction
• Fonctionnement
• Syntaxe
◦ Balises simples
◦ Directives
◦ Actions standards
◦ Expression language EL
2022/2023 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 99
Introduction
2022/2023 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 100
• Éviter le code java sur les vues
• Une page JSP contient :
◦ du contenu statique
◦ du code JSP : produit dynamiquement du contenu
Principe de chargement
2022/2023 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 101
Fonctionnement
2022/2023 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 102
• Traduction : JSP  en servlet
• Fonctionnement :
◦ Étape 1 :
◦ Requête sur une JSP
◦ Étape 2 :
◦ une servlet compare les dates de la JSP et de sa servlet
◦ si la servlet de la JSP est plus ancienne que la page :
◦ traduction de la JSP en servlet
◦ compilation de la servlet
◦ Étape 3 :
◦ si la servlet de la page n'a pas encore été chargée
◦ chargement de la servlet
◦ instanciation
◦ initialise la servlet avec la méthode jspInit
◦ Étape 4 :
◦ invocation de la méthode jspService
◦ Étape 5 :
◦ Appel de jspDestroy lors du déchargement de la servlet
Fonctionnement
2022/2023 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 103
Requête client – JSP sollicitée
Serveur
Fichier chargé?
Création du code source depuis la JSP
Compilation du code Exécution de la Servlet
non
oui
Cycle de vie d’une JSP
2022/2023 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 104
jspInit()
jspDestroy()
jspService()
Servlet de la JSP
Request
Response
Éléments prédéfinis
• request – HttpServletRequest (paramètres de la requête, entête HTTP,
cookies, …), correspondant à la requête
• response – HttpServletResponse, correspondant à la réponse renvoyée
• out – PrintWriter, le flot de sortie de la réponse
• session – HttpSession, permet de gérer une session
• application - ServletContext partagée par toutes les servlettes en cours, ;
contient, entre autres, la méthode log() pour écrire dans le chier log
• config - ServletConfig
• pageContext - PageContext dans la JSP comme unique point d’accès,
permet la gestion du contexte et des attributs de la JSP
• page – variable synonyme de cet objet (this)
2022/2023 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 105
Porté des objets
2022/2023 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 106
• Il existe au total quatre portées différentes dans une application :
◦ page : les objets dans cette portée sont uniquement accessibles dans la page
JSP en question ;
◦ requête : les objets dans cette portée sont uniquement accessibles durant
l'existence de la requête en cours ;
◦ session : les objets dans cette portée sont accessibles durant l'existence de la
session en cours ;
◦ application : les objets dans cette portée sont accessibles durant toute
l'existence de l'application
2022/2023 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 107
Exercice
2022/2023 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 108
• Ajouter le code nécessaire au projet test pour garder trace dans un
fichier log des paramètres passés à la servlet depuis la JSP (seulement
dans le cas où des paramètres sont utilisés).
Initialisation et finalisation :
paramétrage
2022/2023 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 109
• Initialisation lors du chargement par le serveur d'application :
◦ public void jspInit()
• Finalisation lors du déchargement par le serveur d'application :
◦ public void jspDestroy()
• Paramétrage à placer dans une balise de déclaration
Balises simples
• Balises de commentaire
◦ <%-- et --%>
• Balise de déclaration
◦ Syntaxe :
◦ <%! Type nomVar = initialisation; %>
◦ Exemple :
◦ <%! String chaine = "azerty"; %>
◦ Exemple de bloc de déclaration :
◦ <%! String test = null;
◦ public boolean fct() { if (test==null) return true; else return false; }
◦ %>
◦ Traduction :
◦ Déclarations : placées dans la classe au moment de la traduction de la JSP en Servlet
◦ variables = attributs
2022/2023 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 110
Autres balises simples
2022/2023 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 111
• Balise de scriptlet :
◦ Mélange de script et de servlet
◦ Exemple :
◦ <%
◦ String attributChaine = (String) request.getAttribute("attribut1Chaine");
◦ out.println( attributChaine );
◦ %>
• Balise d’expression :
◦ <%= " Chaine à afficher" %>
◦ Correspond à : <% out.println(" Chaine à afficher "); %>
Directives
2022/2023 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 112
• Les directives JSP permettent :
◦ d'importer un package ;
◦ d'inclure d'autres pages JSP ;
◦ d'inclure des bibliothèques de balises ;
◦ de définir des propriétés et informations relatives à une page JSP.
• Comprises entre les balises <%@ et %>
• Emplacement des directives :
◦ La directive d'inclusion de page : peut être placée n'importe où
◦ Les autres directives : doivent être en tête de page JSP.
3 directives
2022/2023 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 113
• Directive page:
◦ <%@ page directive %>
• Directive include:
◦ <%@ include directive %>
• Directive taglib:
◦ <%@ taglib directive %>
Directive de page
2022/2023 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 114
• Principe :
◦ Paramétrage de l’exécution de la JSP
• Syntaxe :
◦ <%@ page directive %>
• Exemple :
◦ <%@ page isThreadSafe="false" %>
◦ <%@ page contentType="text/plain; charset=UTF-8" %>
◦ <%@ page import="java.io.*, java.util.*" %>
Propriétés de la directive page
2022/2023 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 115
<%@ page
language="..."
extends="..."
import="..."
session="true | false"
buffer="none | 8kb | sizekb"
autoFlush="true | false"
isThreadSafe="true | false"
isELIgnored ="true | false"
info="..."
errorPage="..."
contentType="..."
pageEncoding="..."
isErrorPage="true | false"
%>
Exemple de directive de page
2022/2023 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 116
• <%@ page errorPage="le_nom_de_la_page"%>
◦ spécifie la page vers laquelle le serveur d'application renvoie lorsqu'une
exception non gérée est lancée par la JSP.
• <%@ page isErrorPage="true|false"%>
◦ spécifie si la page à renvoyer est une page d'erreur et lui autorise ainsi la
transmission de l'exception pour un éventuel traitement.
Exercice
2022/2023 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 117
• Créer une page html ayant pour titre « Erreur !!! » qui affiche un texte
rapportant la présence d’une erreur sur la JSP,
• Ajouter à Test.jsp la directive permettant l’affichage de cette page html
si une exception se présente,
• Dans un bloc de scriptlet faire une opération de division par 0,
• Tester le projet.
Directive et action standard
d’inclusion
2022/2023 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 118
• Principe :
◦ Inclusion d'une page statique ou dynamique dans la JSP
• Syntaxe :
◦ Inclusion à la traduction en servlet (par directive)
◦ <%@ include directive %>
◦ Inclusion à l’exécution (par action standard)
◦ Sans paramètres :
◦ <jsp:include page="fichier " />
◦ Avec paramètres :
◦ <jsp:include page="fichier ">
◦ <jsp:param name="nom " value="valeur "/>
◦ ...
◦ </jsp:include>
Exercice
2022/2023 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 119
• Implémenter les fichiers suivants avec de nouvelles JSP (ne pas oublier la
configuration dans web.xml) :
◦ inclusion.jsp
◦ <html>
◦ <head><t i t l e>JSP ave c i n c l u s i o n</ t i t l e></ head>
◦ <body><%@ i n c l u d e f i l e=" t i t r e . t x t " %>
◦ <p><j s p : i n c l u d e page=" t e x t e . j s p " /></p>
◦ <p><j s p : i n c l u d e page=" par ame t r e . j s p ">
◦ <j s p : param name="nom" v a l u e="Bob" />
◦ </ j s p : i n c l u d e>
◦ </p>
◦ </ body>
◦ </ html>
◦ titre.txt
◦ <h1>Ti t r e de l a JSP , i n c l u s a p a r t i r d ' un f i c h i e r t e x t e </h1>
◦ texte.jsp
◦ <% out . p r i n t l n ( "Texte g ene r e par l a JSP t e x t e . j s p " ) ; %>
◦ parametre.jsp
◦ <%
◦ S t r i n g nom = r e q u e s t . ge tPa r ame t e r ( "nom" ) ;
◦ out . p r i n t l n ( " S a l u t " + nom) ;
◦ %>
Action standard : forward
2022/2023 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 120
• Permet d'effectuer une redirection vers une autre page
• Action effectuée côté serveur, donc pas possible de rediriger vers une
page extérieure à l'application
• Action limitée aux pages présentes dans le contexte de la servlet ou de
la JSP utilisée
• Syntaxe :
◦ <jsp:forward page="/nouvelle_page.jsp" />
Inclusion pour la délégation
2022/2023 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 121
• Principe :
◦ Délégation à un autre composant web
• Syntaxe :
◦ Sans paramètres :
◦ <jsp:forward page="fichier " />
◦ Avec paramètres :
◦ <jsp:forward page="fichier " >
◦ <jsp:param name="nom " value="valeur "/>
◦ ...
◦ </jsp:forward>
Exercice
2022/2023 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 122
• Implémenter les fichiers suivants avec de nouvelles JSP (ne pas oublier la
configuration dans web.xml) :
◦ delegation.jsp
◦ <html>
◦ <head><t i t l e>JSP ave c d e l e g a t i o n</ t i t l e></ head>
◦ <body>
◦ <j s p : f o rwa r d page=" parame t r e . j s p ">
◦ <j s p : param name="nom" v a l u e="Bob" />
◦ </ j s p : f o rwa r d>
◦ </ body>
◦ </ html>
◦ parametre.jsp
◦ <html>
◦ <head><t i t l e>Af f i c h a g e d e l e g u e</ t i t l e></ head>
◦ <body>
◦ <%
◦ S t r i n g nom = r e q u e s t . ge tPa r ame t e r ( "nom" ) ;
◦ out . p r i n t l n ( "<p>S a l u t " + nom + " !</p>" ) ;
◦ %>
◦ </ body>
◦ </ html>
Standard Tag Library
2022/2023 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 123
• Les JSP fournissent une bibliothèque de balises standards répondant à
des besoins de base.
• Quelques domaines :
◦ Core : balises permettant des fonctionalités de base
◦ XML : balises permettant de manipuler des données XML
◦ I18n : balises permettant de traiter l'internationalisation
◦ Database : balises permettant d'exectuer des requêtes SQL (travail
normalement dédié aux JavaBeans)
• Il est possible d'étendre le langage en créant d'autre balises
Directive taglib
2022/2023 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 124
• Principe :
◦ Inclusion d’une librairie personalisée
• Syntaxe :
◦ <%@ taglib directive %>
• Exemple :
◦ <%@ taglib uri="maTagLib.tld" prefix="tagExemple" %>
Action standard : useBean
2022/2023 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 125
• Syntaxe :
◦ <jsp:useBean id="nom_bean" class="nom_classe" scope="type_porte" />
• Équivalent à :
◦ <%
◦ nom_classe obj = (nom_classe) request.getAttribute( "nom_bean" );
◦ if ( obj== null ){
◦ obj= new nom_classe();
◦ type_porte.setAttribute( "nom_obj", obj);
◦ }
◦ %>
Action standard : getProperty
2022/2023 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 126
• Obtenir la valeur d’une des propriétés d’un bean utilisé dans une JSP
• Syntaxe :
◦ <jsp:getProperty name="nom_obj_bean" property="nom_propriété" />
• Équivalent à :
◦ <%= nom_obj_bean.getNom_propriété() %>
Action standard : setProperty
2022/2023 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 127
• Modifier la valeur d’une des propriétés d’un bean utilisé dans une JSP
• Syntaxe :
◦ <jsp:setProperty name="nom_obj_bean" property="nom_propriété"
value="nouvelle_valeur" />
• Équivalent à :
◦ <%= nom_obj_bean.setNom_propriété ("nouvelle_valeur") ;%>
Action standard : setProperty (2)
2022/2023 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 128
• Cette action peut prendre comme nouvelle valeur de la propriété la
valeur d’un paramètre
• Syntaxe :
◦ <jsp:setProperty name="nom_obj_bean" property="nom_propriété"
param="nom_parametre" />
• Équivalent à :
◦ <%= nom_obj_bean.setNom_propriété
(request.getParameter("nom_parametre")); %>
Action standard : setProperty (3)
2022/2023 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 129
• Cette action peut prendre comme nouvelle valeur de la propriété la
valeur d’un paramètre qui a le même identifiant que la propriété
• Syntaxe :
◦ <jsp:setProperty name="nom_obj_bean" property="nom_propriété" />
• Équivalent à :
◦ <%= nom_obj_bean.setNom_propriété
(request.getParameter("nom_propriété")); %>
Action standard : setProperty (4)
2022/2023 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 130
• Cette action peut donner de nouvelles valeurs à plusieurs propriétés
les valeurs de paramètres qui ont les mêmes identifiants que ces
propriétés
• Syntaxe :
◦ <jsp:setProperty name="nom_obj_bean" property="*" />
• Équivalent à :
◦ <%= nom_obj_bean.setNom_propriété1
(request.getParameter1("nom_propriété1")) ;%>
◦ <%= nom_obj_bean.setNom_propriété2
(request.getParameter2("nom_propriété2")) ;%>
◦ …
EL: Expression Language
JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA
• Spécification de EL sous l’autorité du groupe d’expert JSR-152 pour JSP
1.3
• Le JSR-52 et JSR-152 travail ensemble sur la spécification de
l’Expression Language
• Deux version: une pour JSTL et l’autre pour JSP 1.3
• En JSTL il est utilisé uniquement dans la valeur d’un attribut:
<prefix:tag attr1="${ expr }" />
• Il est invoqué exclusivement via la syntaxe ${ expr }
2022/2023 131
Expression Language EL
2022/2023 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 132
• Principe :
◦ Effectuer des tests basiques sur des expressions
◦ Manipuler des objets sans avoir recours au code Java
• Avantage :
◦ + simple
◦ + standard
◦ + maintenable
• Syntaxe de base :
◦ $ { expression }
• Exemple :
<jsp:setProperty name="box" property="perimeter"
value="${2*box.width+2*box.height}"/>
EL : Opérateurs
2022/2023 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 133
• Opérateurs :
◦ opérateurs arithmétiques :
◦ + - * / %
◦ opérateurs logiques :
◦ && || !
◦ opérateurs relationnels :
◦ == != < > <= >=
◦ eq ne lt gt le ge
◦ L’opérateur [ ] pour accéder au objets de type Map, Array et List
◦ param["p1"] param.get("p1")
EL : Opérateur de test
2022/2023 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 134
• Conditionnel :
◦ Syntaxe :
◦ ${ condition ? 'traitement si condition vérifiée' : 'traitement sinon' }
◦ Exemple :
◦ ${ true ? 'vrai' : 'faux' }
• Opérateur « empty » :
◦ Syntaxe :
◦ ${ empty « element à tester » }
◦ Exemple :
◦ ${ empty 'test' }
EL : Manipulation des objets
2022/2023 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 135
• Instruction avec une action standard :
◦ Prénom et nom : <jsp:getProperty property="prenom"
name="attributBean"/>
• Instruction avec EL :
◦ ${attributBean.prenom}
◦ ${attributBean.getPrenom()}
EL : Manipulation des collections
2022/2023 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 136
• Possibilité de manipuler directement les collections de
java.util, telque :
◦ List, Set, Map …
• Exemple d’utilisation d’une liste :
◦ <%/* Création d'une liste d’entiers et insertion de quatre éléments */
◦ java.util.List<Integer> li = new java.util.ArrayList<Integer>();
◦ li.add( "20" );%>
◦ <!-- Les quatre syntaxes suivantes retournent le premier élément de
la liste -->
◦ ${ li.get(0) }<br />
◦ ${ li[0] }<br />
◦ ${ li['0'] }<br />
◦ ${ li["0"] }<br />
EL : Fonctions
• Possibilité d’utiliser des fonctions définies dans des taglib
personnalisées
◦ Syntaxe :
◦ Exemple :
• Possibilité de définir une fonction :
◦ Définition des fonctions identique à celle des tags personnalisés.
2022/2023 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 137
${ns:func(param1, param2, ...)}
${fn:length("Get my length")}
EL : Exemple de fonctions
• Définition :
public class MyFunctions {
public static String toCaps( String text ) {
return text.toUpperCase();
}
}
• Utilisation :
◦ XML:
<uri>testFunctionsURI</uri>
<function>
<name>toCaps</name>
<function-class>mypkg.MyFunctions</function-class>
<function-signature>String toCaps( java.lang.String)</function-signature>
</function>
◦ JSP:
<%@ taglib prefix="myFunctionTest" uri="testFunctionsURI"%>
${myFunctionTest.toCaps("testingCaps")}
2022/2023 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 138
EL : Objets implicites
2022/2023 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 139
Noms Définition Explication
pageScope Map des attributs de porté page Collection permettant d'accéder aux
différents attributs d’une porté
requestScope Map des attributs de porté requête
sessionScope Map des attributs de porté session
applicationScope Map des attributs de porté application
param Map des paramètres (String) Collection permettant d'accéder aux
paramètres de la requête HTTP
paramValues Map des paramètres (String[])
header Map des valeurs de l’entête HTTP (String) Collection permettant d'accéder à
l’entête de la requête HTTP
headerValues Map des valeurs de l’entête HTTP (String[])
initParam Map des init-params Collection permettant d'accéder aux
init-params définis dans web.xml
cookie Map des différentes cookies Collection permettant d'accéder aux
cookies
pageContext L’objet PageContext de la page courante
EL : Exemple d’objet implicite
• Objets implicites des EL ≠ objets implicites des actions standards sauf
« pageContext »
• « pageContext » a des propriétés pour accéder aux autres objets
implicites JSP.
• Exemple : On peut accéder à l’objet request.
${pageContext.request.queryString}
2022/2023 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 140
Désactivation de l’évaluation des EL
• Désactivation de l’évaluation des EL (syntaxe non réservée avant
JSP2) dans une JSP.
<%@ page isELIgnored ="true|false" %>
◦ Si “true” : EL ignorée
◦ Si “false” : EL interprétée
◦ La valeur par défaut dépend de la version du descripteur de déploiement
de l’application web :
◦ Servlet 2.3 et précédents : “true”
◦ Servlet 2.4 et suivants : “false”
• Désactivation depuis le web.xml (pour tout le projet):
<jsp-config>
<jsp-property-group>
<url-pattern>*.jsp</url-pattern>
<el-ignored>true</el-ignored>
</jsp-property-group>
</jsp-config>
2022/2023 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 141
Exercice
• On se fixe comme objectif d’implémenter un prototype d’un site
permettant de faire une enquête sur les disponibilités d’un groupe de
personne afin de fixer le jour d’une réunion qui convient au plus grand
nombre des perticipants. Pour des raisons de simplification, l’affichage des
disponibilités échangés se fait sous forme textuelle (sans éléments
graphiques) et l’envoie de la disponibilité d’un membre vers le serveur se
fait directement depuis les paramètres de l’URL.
• Exemples d’envois des disponibilités :
• http://setv2:8080/Doodle/Disponibilité?Membre=Bob&Disponibilite=Lund
i,Mardi
• http://setv2:8080/Doodle/Disponibilité?Membre=Tom&Disponibilite=Lund
i,Jeudi
• …
• L’affichage induit par ces envois :
• Lundi Mardi Mercredi Jeudi Vendredi Samedi
• Bob : 1 1 0 0 0 0
• Tom : 1 0 0 1 0 0
2022/2023 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 142
Suite de l’exercice
• Donner le code d’un java bean représentant la disponibilité d’un
membre en sachant qu’une disponibilité est identifiée par :
◦ une chaine de caractère qui représente le membre du groupe en question
◦ un tableau statique de 6 bouleans qui représentent les disponibilités du
membre
• Donner le code de la servlet qui récupère les informations concernant
une disponibilité, crée la disponibilité en question et l’envoie à tous les
clients.
• Donner le code de la JSP qui affiche les différentes disponibilités des
membres du groupe.
2022/2023 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 143

Mais conteúdo relacionado

Semelhante a Java EE _ JSP.pdf

Introduction à AngularJS
Introduction à AngularJSIntroduction à AngularJS
Introduction à AngularJSAbdoulaye Dieng
 
ENIB cours CAI Web - Séance 4 - Frameworks/Spring - Cours
ENIB cours CAI Web - Séance 4 - Frameworks/Spring - CoursENIB cours CAI Web - Séance 4 - Frameworks/Spring - Cours
ENIB cours CAI Web - Séance 4 - Frameworks/Spring - CoursHoracio Gonzalez
 
Quoi de neuf dans Zend Framework 1.10 ?
Quoi de neuf dans Zend Framework 1.10 ?Quoi de neuf dans Zend Framework 1.10 ?
Quoi de neuf dans Zend Framework 1.10 ?Mickael Perraud
 
Java Database Connectivity
Java Database ConnectivityJava Database Connectivity
Java Database ConnectivityKorteby Farouk
 
Prsentation de-javaserver-faces4124
Prsentation de-javaserver-faces4124Prsentation de-javaserver-faces4124
Prsentation de-javaserver-faces4124Mejdeddine Bouzouita
 
Présentation de JavaServer Faces
Présentation de JavaServer FacesPrésentation de JavaServer Faces
Présentation de JavaServer FacesJS Bournival
 
Symfony2 - Un Framework PHP 5 Performant
Symfony2 - Un Framework PHP 5 PerformantSymfony2 - Un Framework PHP 5 Performant
Symfony2 - Un Framework PHP 5 PerformantHugo Hamon
 
Morning tech #2 - Démarche performance slides
Morning tech #2 - Démarche performance slidesMorning tech #2 - Démarche performance slides
Morning tech #2 - Démarche performance slidesOxalide
 
Oxalide Morning tech #2 - démarche performance
Oxalide Morning tech #2 - démarche performanceOxalide Morning tech #2 - démarche performance
Oxalide Morning tech #2 - démarche performanceLudovic Piot
 
API JSP2 avec Java EE.pdf
API JSP2 avec Java EE.pdfAPI JSP2 avec Java EE.pdf
API JSP2 avec Java EE.pdframadanmahdi
 
Introduction à Sinatra
Introduction à SinatraIntroduction à Sinatra
Introduction à SinatraRémi Prévost
 
Gwt fast overview_v1
Gwt fast overview_v1Gwt fast overview_v1
Gwt fast overview_v1David Herviou
 
Ajax GTI780 & MTI780 ETS A09
Ajax  GTI780 & MTI780  ETS  A09Ajax  GTI780 & MTI780  ETS  A09
Ajax GTI780 & MTI780 ETS A09Claude Coulombe
 

Semelhante a Java EE _ JSP.pdf (20)

Support de Cours JSF2 Première partie Intégration avec Spring
Support de Cours JSF2 Première partie Intégration avec SpringSupport de Cours JSF2 Première partie Intégration avec Spring
Support de Cours JSF2 Première partie Intégration avec Spring
 
Marzouk jsp
Marzouk jspMarzouk jsp
Marzouk jsp
 
Introduction à AngularJS
Introduction à AngularJSIntroduction à AngularJS
Introduction à AngularJS
 
ENIB cours CAI Web - Séance 4 - Frameworks/Spring - Cours
ENIB cours CAI Web - Séance 4 - Frameworks/Spring - CoursENIB cours CAI Web - Séance 4 - Frameworks/Spring - Cours
ENIB cours CAI Web - Séance 4 - Frameworks/Spring - Cours
 
Quoi de neuf dans Zend Framework 1.10 ?
Quoi de neuf dans Zend Framework 1.10 ?Quoi de neuf dans Zend Framework 1.10 ?
Quoi de neuf dans Zend Framework 1.10 ?
 
Tapestry
TapestryTapestry
Tapestry
 
Les Servlets et JSP
Les Servlets et JSPLes Servlets et JSP
Les Servlets et JSP
 
Java Database Connectivity
Java Database ConnectivityJava Database Connectivity
Java Database Connectivity
 
Prsentation de-javaserver-faces4124
Prsentation de-javaserver-faces4124Prsentation de-javaserver-faces4124
Prsentation de-javaserver-faces4124
 
Présentation de JavaServer Faces
Présentation de JavaServer FacesPrésentation de JavaServer Faces
Présentation de JavaServer Faces
 
Symfony2 - Un Framework PHP 5 Performant
Symfony2 - Un Framework PHP 5 PerformantSymfony2 - Un Framework PHP 5 Performant
Symfony2 - Un Framework PHP 5 Performant
 
spring-api-rest.pdf
spring-api-rest.pdfspring-api-rest.pdf
spring-api-rest.pdf
 
Morning tech #2 - Démarche performance slides
Morning tech #2 - Démarche performance slidesMorning tech #2 - Démarche performance slides
Morning tech #2 - Démarche performance slides
 
Oxalide Morning tech #2 - démarche performance
Oxalide Morning tech #2 - démarche performanceOxalide Morning tech #2 - démarche performance
Oxalide Morning tech #2 - démarche performance
 
API JSP2 avec Java EE.pdf
API JSP2 avec Java EE.pdfAPI JSP2 avec Java EE.pdf
API JSP2 avec Java EE.pdf
 
Spring MVC
Spring MVCSpring MVC
Spring MVC
 
Java Server Faces 2
Java Server Faces 2Java Server Faces 2
Java Server Faces 2
 
Introduction à Sinatra
Introduction à SinatraIntroduction à Sinatra
Introduction à Sinatra
 
Gwt fast overview_v1
Gwt fast overview_v1Gwt fast overview_v1
Gwt fast overview_v1
 
Ajax GTI780 & MTI780 ETS A09
Ajax  GTI780 & MTI780  ETS  A09Ajax  GTI780 & MTI780  ETS  A09
Ajax GTI780 & MTI780 ETS A09
 

Java EE _ JSP.pdf

  • 1. JSP – JAVA SERVER PAGES 2022/2023 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 98
  • 2. Contenu • Introduction • Fonctionnement • Syntaxe ◦ Balises simples ◦ Directives ◦ Actions standards ◦ Expression language EL 2022/2023 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 99
  • 3. Introduction 2022/2023 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 100 • Éviter le code java sur les vues • Une page JSP contient : ◦ du contenu statique ◦ du code JSP : produit dynamiquement du contenu
  • 4. Principe de chargement 2022/2023 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 101
  • 5. Fonctionnement 2022/2023 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 102 • Traduction : JSP  en servlet • Fonctionnement : ◦ Étape 1 : ◦ Requête sur une JSP ◦ Étape 2 : ◦ une servlet compare les dates de la JSP et de sa servlet ◦ si la servlet de la JSP est plus ancienne que la page : ◦ traduction de la JSP en servlet ◦ compilation de la servlet ◦ Étape 3 : ◦ si la servlet de la page n'a pas encore été chargée ◦ chargement de la servlet ◦ instanciation ◦ initialise la servlet avec la méthode jspInit ◦ Étape 4 : ◦ invocation de la méthode jspService ◦ Étape 5 : ◦ Appel de jspDestroy lors du déchargement de la servlet
  • 6. Fonctionnement 2022/2023 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 103 Requête client – JSP sollicitée Serveur Fichier chargé? Création du code source depuis la JSP Compilation du code Exécution de la Servlet non oui
  • 7. Cycle de vie d’une JSP 2022/2023 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 104 jspInit() jspDestroy() jspService() Servlet de la JSP Request Response
  • 8. Éléments prédéfinis • request – HttpServletRequest (paramètres de la requête, entête HTTP, cookies, …), correspondant à la requête • response – HttpServletResponse, correspondant à la réponse renvoyée • out – PrintWriter, le flot de sortie de la réponse • session – HttpSession, permet de gérer une session • application - ServletContext partagée par toutes les servlettes en cours, ; contient, entre autres, la méthode log() pour écrire dans le chier log • config - ServletConfig • pageContext - PageContext dans la JSP comme unique point d’accès, permet la gestion du contexte et des attributs de la JSP • page – variable synonyme de cet objet (this) 2022/2023 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 105
  • 9. Porté des objets 2022/2023 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 106 • Il existe au total quatre portées différentes dans une application : ◦ page : les objets dans cette portée sont uniquement accessibles dans la page JSP en question ; ◦ requête : les objets dans cette portée sont uniquement accessibles durant l'existence de la requête en cours ; ◦ session : les objets dans cette portée sont accessibles durant l'existence de la session en cours ; ◦ application : les objets dans cette portée sont accessibles durant toute l'existence de l'application
  • 10. 2022/2023 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 107
  • 11. Exercice 2022/2023 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 108 • Ajouter le code nécessaire au projet test pour garder trace dans un fichier log des paramètres passés à la servlet depuis la JSP (seulement dans le cas où des paramètres sont utilisés).
  • 12. Initialisation et finalisation : paramétrage 2022/2023 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 109 • Initialisation lors du chargement par le serveur d'application : ◦ public void jspInit() • Finalisation lors du déchargement par le serveur d'application : ◦ public void jspDestroy() • Paramétrage à placer dans une balise de déclaration
  • 13. Balises simples • Balises de commentaire ◦ <%-- et --%> • Balise de déclaration ◦ Syntaxe : ◦ <%! Type nomVar = initialisation; %> ◦ Exemple : ◦ <%! String chaine = "azerty"; %> ◦ Exemple de bloc de déclaration : ◦ <%! String test = null; ◦ public boolean fct() { if (test==null) return true; else return false; } ◦ %> ◦ Traduction : ◦ Déclarations : placées dans la classe au moment de la traduction de la JSP en Servlet ◦ variables = attributs 2022/2023 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 110
  • 14. Autres balises simples 2022/2023 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 111 • Balise de scriptlet : ◦ Mélange de script et de servlet ◦ Exemple : ◦ <% ◦ String attributChaine = (String) request.getAttribute("attribut1Chaine"); ◦ out.println( attributChaine ); ◦ %> • Balise d’expression : ◦ <%= " Chaine à afficher" %> ◦ Correspond à : <% out.println(" Chaine à afficher "); %>
  • 15. Directives 2022/2023 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 112 • Les directives JSP permettent : ◦ d'importer un package ; ◦ d'inclure d'autres pages JSP ; ◦ d'inclure des bibliothèques de balises ; ◦ de définir des propriétés et informations relatives à une page JSP. • Comprises entre les balises <%@ et %> • Emplacement des directives : ◦ La directive d'inclusion de page : peut être placée n'importe où ◦ Les autres directives : doivent être en tête de page JSP.
  • 16. 3 directives 2022/2023 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 113 • Directive page: ◦ <%@ page directive %> • Directive include: ◦ <%@ include directive %> • Directive taglib: ◦ <%@ taglib directive %>
  • 17. Directive de page 2022/2023 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 114 • Principe : ◦ Paramétrage de l’exécution de la JSP • Syntaxe : ◦ <%@ page directive %> • Exemple : ◦ <%@ page isThreadSafe="false" %> ◦ <%@ page contentType="text/plain; charset=UTF-8" %> ◦ <%@ page import="java.io.*, java.util.*" %>
  • 18. Propriétés de la directive page 2022/2023 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 115 <%@ page language="..." extends="..." import="..." session="true | false" buffer="none | 8kb | sizekb" autoFlush="true | false" isThreadSafe="true | false" isELIgnored ="true | false" info="..." errorPage="..." contentType="..." pageEncoding="..." isErrorPage="true | false" %>
  • 19. Exemple de directive de page 2022/2023 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 116 • <%@ page errorPage="le_nom_de_la_page"%> ◦ spécifie la page vers laquelle le serveur d'application renvoie lorsqu'une exception non gérée est lancée par la JSP. • <%@ page isErrorPage="true|false"%> ◦ spécifie si la page à renvoyer est une page d'erreur et lui autorise ainsi la transmission de l'exception pour un éventuel traitement.
  • 20. Exercice 2022/2023 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 117 • Créer une page html ayant pour titre « Erreur !!! » qui affiche un texte rapportant la présence d’une erreur sur la JSP, • Ajouter à Test.jsp la directive permettant l’affichage de cette page html si une exception se présente, • Dans un bloc de scriptlet faire une opération de division par 0, • Tester le projet.
  • 21. Directive et action standard d’inclusion 2022/2023 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 118 • Principe : ◦ Inclusion d'une page statique ou dynamique dans la JSP • Syntaxe : ◦ Inclusion à la traduction en servlet (par directive) ◦ <%@ include directive %> ◦ Inclusion à l’exécution (par action standard) ◦ Sans paramètres : ◦ <jsp:include page="fichier " /> ◦ Avec paramètres : ◦ <jsp:include page="fichier "> ◦ <jsp:param name="nom " value="valeur "/> ◦ ... ◦ </jsp:include>
  • 22. Exercice 2022/2023 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 119 • Implémenter les fichiers suivants avec de nouvelles JSP (ne pas oublier la configuration dans web.xml) : ◦ inclusion.jsp ◦ <html> ◦ <head><t i t l e>JSP ave c i n c l u s i o n</ t i t l e></ head> ◦ <body><%@ i n c l u d e f i l e=" t i t r e . t x t " %> ◦ <p><j s p : i n c l u d e page=" t e x t e . j s p " /></p> ◦ <p><j s p : i n c l u d e page=" par ame t r e . j s p "> ◦ <j s p : param name="nom" v a l u e="Bob" /> ◦ </ j s p : i n c l u d e> ◦ </p> ◦ </ body> ◦ </ html> ◦ titre.txt ◦ <h1>Ti t r e de l a JSP , i n c l u s a p a r t i r d ' un f i c h i e r t e x t e </h1> ◦ texte.jsp ◦ <% out . p r i n t l n ( "Texte g ene r e par l a JSP t e x t e . j s p " ) ; %> ◦ parametre.jsp ◦ <% ◦ S t r i n g nom = r e q u e s t . ge tPa r ame t e r ( "nom" ) ; ◦ out . p r i n t l n ( " S a l u t " + nom) ; ◦ %>
  • 23. Action standard : forward 2022/2023 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 120 • Permet d'effectuer une redirection vers une autre page • Action effectuée côté serveur, donc pas possible de rediriger vers une page extérieure à l'application • Action limitée aux pages présentes dans le contexte de la servlet ou de la JSP utilisée • Syntaxe : ◦ <jsp:forward page="/nouvelle_page.jsp" />
  • 24. Inclusion pour la délégation 2022/2023 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 121 • Principe : ◦ Délégation à un autre composant web • Syntaxe : ◦ Sans paramètres : ◦ <jsp:forward page="fichier " /> ◦ Avec paramètres : ◦ <jsp:forward page="fichier " > ◦ <jsp:param name="nom " value="valeur "/> ◦ ... ◦ </jsp:forward>
  • 25. Exercice 2022/2023 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 122 • Implémenter les fichiers suivants avec de nouvelles JSP (ne pas oublier la configuration dans web.xml) : ◦ delegation.jsp ◦ <html> ◦ <head><t i t l e>JSP ave c d e l e g a t i o n</ t i t l e></ head> ◦ <body> ◦ <j s p : f o rwa r d page=" parame t r e . j s p "> ◦ <j s p : param name="nom" v a l u e="Bob" /> ◦ </ j s p : f o rwa r d> ◦ </ body> ◦ </ html> ◦ parametre.jsp ◦ <html> ◦ <head><t i t l e>Af f i c h a g e d e l e g u e</ t i t l e></ head> ◦ <body> ◦ <% ◦ S t r i n g nom = r e q u e s t . ge tPa r ame t e r ( "nom" ) ; ◦ out . p r i n t l n ( "<p>S a l u t " + nom + " !</p>" ) ; ◦ %> ◦ </ body> ◦ </ html>
  • 26. Standard Tag Library 2022/2023 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 123 • Les JSP fournissent une bibliothèque de balises standards répondant à des besoins de base. • Quelques domaines : ◦ Core : balises permettant des fonctionalités de base ◦ XML : balises permettant de manipuler des données XML ◦ I18n : balises permettant de traiter l'internationalisation ◦ Database : balises permettant d'exectuer des requêtes SQL (travail normalement dédié aux JavaBeans) • Il est possible d'étendre le langage en créant d'autre balises
  • 27. Directive taglib 2022/2023 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 124 • Principe : ◦ Inclusion d’une librairie personalisée • Syntaxe : ◦ <%@ taglib directive %> • Exemple : ◦ <%@ taglib uri="maTagLib.tld" prefix="tagExemple" %>
  • 28. Action standard : useBean 2022/2023 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 125 • Syntaxe : ◦ <jsp:useBean id="nom_bean" class="nom_classe" scope="type_porte" /> • Équivalent à : ◦ <% ◦ nom_classe obj = (nom_classe) request.getAttribute( "nom_bean" ); ◦ if ( obj== null ){ ◦ obj= new nom_classe(); ◦ type_porte.setAttribute( "nom_obj", obj); ◦ } ◦ %>
  • 29. Action standard : getProperty 2022/2023 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 126 • Obtenir la valeur d’une des propriétés d’un bean utilisé dans une JSP • Syntaxe : ◦ <jsp:getProperty name="nom_obj_bean" property="nom_propriété" /> • Équivalent à : ◦ <%= nom_obj_bean.getNom_propriété() %>
  • 30. Action standard : setProperty 2022/2023 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 127 • Modifier la valeur d’une des propriétés d’un bean utilisé dans une JSP • Syntaxe : ◦ <jsp:setProperty name="nom_obj_bean" property="nom_propriété" value="nouvelle_valeur" /> • Équivalent à : ◦ <%= nom_obj_bean.setNom_propriété ("nouvelle_valeur") ;%>
  • 31. Action standard : setProperty (2) 2022/2023 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 128 • Cette action peut prendre comme nouvelle valeur de la propriété la valeur d’un paramètre • Syntaxe : ◦ <jsp:setProperty name="nom_obj_bean" property="nom_propriété" param="nom_parametre" /> • Équivalent à : ◦ <%= nom_obj_bean.setNom_propriété (request.getParameter("nom_parametre")); %>
  • 32. Action standard : setProperty (3) 2022/2023 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 129 • Cette action peut prendre comme nouvelle valeur de la propriété la valeur d’un paramètre qui a le même identifiant que la propriété • Syntaxe : ◦ <jsp:setProperty name="nom_obj_bean" property="nom_propriété" /> • Équivalent à : ◦ <%= nom_obj_bean.setNom_propriété (request.getParameter("nom_propriété")); %>
  • 33. Action standard : setProperty (4) 2022/2023 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 130 • Cette action peut donner de nouvelles valeurs à plusieurs propriétés les valeurs de paramètres qui ont les mêmes identifiants que ces propriétés • Syntaxe : ◦ <jsp:setProperty name="nom_obj_bean" property="*" /> • Équivalent à : ◦ <%= nom_obj_bean.setNom_propriété1 (request.getParameter1("nom_propriété1")) ;%> ◦ <%= nom_obj_bean.setNom_propriété2 (request.getParameter2("nom_propriété2")) ;%> ◦ …
  • 34. EL: Expression Language JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA • Spécification de EL sous l’autorité du groupe d’expert JSR-152 pour JSP 1.3 • Le JSR-52 et JSR-152 travail ensemble sur la spécification de l’Expression Language • Deux version: une pour JSTL et l’autre pour JSP 1.3 • En JSTL il est utilisé uniquement dans la valeur d’un attribut: <prefix:tag attr1="${ expr }" /> • Il est invoqué exclusivement via la syntaxe ${ expr } 2022/2023 131
  • 35. Expression Language EL 2022/2023 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 132 • Principe : ◦ Effectuer des tests basiques sur des expressions ◦ Manipuler des objets sans avoir recours au code Java • Avantage : ◦ + simple ◦ + standard ◦ + maintenable • Syntaxe de base : ◦ $ { expression } • Exemple : <jsp:setProperty name="box" property="perimeter" value="${2*box.width+2*box.height}"/>
  • 36. EL : Opérateurs 2022/2023 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 133 • Opérateurs : ◦ opérateurs arithmétiques : ◦ + - * / % ◦ opérateurs logiques : ◦ && || ! ◦ opérateurs relationnels : ◦ == != < > <= >= ◦ eq ne lt gt le ge ◦ L’opérateur [ ] pour accéder au objets de type Map, Array et List ◦ param["p1"] param.get("p1")
  • 37. EL : Opérateur de test 2022/2023 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 134 • Conditionnel : ◦ Syntaxe : ◦ ${ condition ? 'traitement si condition vérifiée' : 'traitement sinon' } ◦ Exemple : ◦ ${ true ? 'vrai' : 'faux' } • Opérateur « empty » : ◦ Syntaxe : ◦ ${ empty « element à tester » } ◦ Exemple : ◦ ${ empty 'test' }
  • 38. EL : Manipulation des objets 2022/2023 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 135 • Instruction avec une action standard : ◦ Prénom et nom : <jsp:getProperty property="prenom" name="attributBean"/> • Instruction avec EL : ◦ ${attributBean.prenom} ◦ ${attributBean.getPrenom()}
  • 39. EL : Manipulation des collections 2022/2023 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 136 • Possibilité de manipuler directement les collections de java.util, telque : ◦ List, Set, Map … • Exemple d’utilisation d’une liste : ◦ <%/* Création d'une liste d’entiers et insertion de quatre éléments */ ◦ java.util.List<Integer> li = new java.util.ArrayList<Integer>(); ◦ li.add( "20" );%> ◦ <!-- Les quatre syntaxes suivantes retournent le premier élément de la liste --> ◦ ${ li.get(0) }<br /> ◦ ${ li[0] }<br /> ◦ ${ li['0'] }<br /> ◦ ${ li["0"] }<br />
  • 40. EL : Fonctions • Possibilité d’utiliser des fonctions définies dans des taglib personnalisées ◦ Syntaxe : ◦ Exemple : • Possibilité de définir une fonction : ◦ Définition des fonctions identique à celle des tags personnalisés. 2022/2023 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 137 ${ns:func(param1, param2, ...)} ${fn:length("Get my length")}
  • 41. EL : Exemple de fonctions • Définition : public class MyFunctions { public static String toCaps( String text ) { return text.toUpperCase(); } } • Utilisation : ◦ XML: <uri>testFunctionsURI</uri> <function> <name>toCaps</name> <function-class>mypkg.MyFunctions</function-class> <function-signature>String toCaps( java.lang.String)</function-signature> </function> ◦ JSP: <%@ taglib prefix="myFunctionTest" uri="testFunctionsURI"%> ${myFunctionTest.toCaps("testingCaps")} 2022/2023 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 138
  • 42. EL : Objets implicites 2022/2023 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 139 Noms Définition Explication pageScope Map des attributs de porté page Collection permettant d'accéder aux différents attributs d’une porté requestScope Map des attributs de porté requête sessionScope Map des attributs de porté session applicationScope Map des attributs de porté application param Map des paramètres (String) Collection permettant d'accéder aux paramètres de la requête HTTP paramValues Map des paramètres (String[]) header Map des valeurs de l’entête HTTP (String) Collection permettant d'accéder à l’entête de la requête HTTP headerValues Map des valeurs de l’entête HTTP (String[]) initParam Map des init-params Collection permettant d'accéder aux init-params définis dans web.xml cookie Map des différentes cookies Collection permettant d'accéder aux cookies pageContext L’objet PageContext de la page courante
  • 43. EL : Exemple d’objet implicite • Objets implicites des EL ≠ objets implicites des actions standards sauf « pageContext » • « pageContext » a des propriétés pour accéder aux autres objets implicites JSP. • Exemple : On peut accéder à l’objet request. ${pageContext.request.queryString} 2022/2023 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 140
  • 44. Désactivation de l’évaluation des EL • Désactivation de l’évaluation des EL (syntaxe non réservée avant JSP2) dans une JSP. <%@ page isELIgnored ="true|false" %> ◦ Si “true” : EL ignorée ◦ Si “false” : EL interprétée ◦ La valeur par défaut dépend de la version du descripteur de déploiement de l’application web : ◦ Servlet 2.3 et précédents : “true” ◦ Servlet 2.4 et suivants : “false” • Désactivation depuis le web.xml (pour tout le projet): <jsp-config> <jsp-property-group> <url-pattern>*.jsp</url-pattern> <el-ignored>true</el-ignored> </jsp-property-group> </jsp-config> 2022/2023 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 141
  • 45. Exercice • On se fixe comme objectif d’implémenter un prototype d’un site permettant de faire une enquête sur les disponibilités d’un groupe de personne afin de fixer le jour d’une réunion qui convient au plus grand nombre des perticipants. Pour des raisons de simplification, l’affichage des disponibilités échangés se fait sous forme textuelle (sans éléments graphiques) et l’envoie de la disponibilité d’un membre vers le serveur se fait directement depuis les paramètres de l’URL. • Exemples d’envois des disponibilités : • http://setv2:8080/Doodle/Disponibilité?Membre=Bob&Disponibilite=Lund i,Mardi • http://setv2:8080/Doodle/Disponibilité?Membre=Tom&Disponibilite=Lund i,Jeudi • … • L’affichage induit par ces envois : • Lundi Mardi Mercredi Jeudi Vendredi Samedi • Bob : 1 1 0 0 0 0 • Tom : 1 0 0 1 0 0 2022/2023 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 142
  • 46. Suite de l’exercice • Donner le code d’un java bean représentant la disponibilité d’un membre en sachant qu’une disponibilité est identifiée par : ◦ une chaine de caractère qui représente le membre du groupe en question ◦ un tableau statique de 6 bouleans qui représentent les disponibilités du membre • Donner le code de la servlet qui récupère les informations concernant une disponibilité, crée la disponibilité en question et l’envoie à tous les clients. • Donner le code de la JSP qui affiche les différentes disponibilités des membres du groupe. 2022/2023 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 143