TRANSMISSION DE DONNÉES
Données issues du serveur : les attributs
130
La forme de l'URL:
Les paramètres sont transmis au serveur directement via l'URL.
Données issues du client : les paramètres
137
La forme de l'URL:
Les paramètres sont transmis au serveur directement via l'URL.
des exemples des différentes formes qu'une URL peut prendre :
Données issues du client : les paramètres
137
La forme de l'URL:
Les paramètres sont transmis au serveur directement via l'URL.
des exemples des différentes formes qu'une URL peut prendre :
<!-- URL sans paramètres -->
/page.jsp
<!-- URL avec un paramètre nommé 'cat' et ayant pour valeur 'java' -->
/page.jsp?cat=java
<!-- URL avec deux paramètres nommés 'lang' et 'admin', et ayant pour valeur respectivement 'fr'
et 'true' -->
/page.jsp?lang=fr&admin=true
Données issues du client : les paramètres
137
La forme de l'URL:
• le premier paramètre est séparé du reste de l'URL par le caractère « ? » ;
Les paramètres sont transmis au serveur directement via l'URL.
• les paramètres sont séparés entre eux par le caractère « & » ;
des valeur
• une exemples des différentes
est attribuée formes
à chaque qu'uneviaURL
paramètre peut prendre
l'opérateur « = ». :
<!-- URL sans paramètres -->
/page.jsp
<!-- URL avec un paramètre nommé 'cat' et ayant pour valeur 'java' -->
/page.jsp?cat=java
<!-- URL avec deux paramètres nommés 'lang' et 'admin', et ayant pour valeur respectivement 'fr'
et 'true' -->
/page.jsp?lang=fr&admin=true
Données issues du client : les paramètres
138
Il n'existe pas d'autre moyen de déclarer des paramètres dans une requête
GET, ceux-ci doivent impérativement apparaître en clair dans l'URL
demandée
Données issues du client : les paramètres
138
Il n'existe pas d'autre moyen de déclarer des paramètres dans une requête
GET, ceux-ci doivent impérativement apparaître en clair dans l'URL
demandée
les navigateurs imposent d'eux-mêmes une limite:
Données issues du client : les paramètres
138
Il n'existe pas d'autre moyen de déclarer des paramètres dans une requête
GET, ceux-ci doivent impérativement apparaître en clair dans l'URL
demandée
les navigateurs imposent d'eux-mêmes une limite:
par exemple, la longueur maximale d'une URL est de 2 083 caractères dans
Internet Explorer 8.
Données issues du client : les paramètres
138
Il n'existe pas d'autre moyen de déclarer des paramètres dans une requête
GET, ceux-ci doivent impérativement apparaître en clair dans l'URL
demandée
les navigateurs imposent d'eux-mêmes une limite:
par exemple, la longueur maximale d'une URL est de 2 083 caractères dans
Internet Explorer 8.
lorsque vous avez beaucoup de contenu à transmettre ou que vous ne
connaissez pas à l'avance la taille des données qui vont être envoyées par le
client, préférez la méthode POST.
Données issues du client : les paramètres
138
Il n'existe pas d'autre moyen de déclarer des paramètres dans une requête
GET, ceux-ci doivent impérativement apparaître en clair dans l'URL
demandée
les navigateurs imposent d'eux-mêmes une limite:
par exemple, la longueur maximale d'une URL est de 2 083 caractères dans
Internet Explorer 8.
lorsque vous avez beaucoup de contenu à transmettre ou que vous ne
connaissez pas à l'avance la taille des données qui vont être envoyées par le
client, préférez la méthode POST.
lorsque vous envoyez des données au serveur et qu'elles vont avoir un impact
sur la ressource demandée, il est, là encore, préférable de passer par la
méthode POST du protocole, plutôt que par la méthode GET.
Données issues du client : les paramètres
139
http://localhost:8080/test/toto?auteur=Coyote
Données issues du client : les paramètres
143
LE JAVABEAN
Introduction
150
modifier ensuite la page JSP pour qu'elle réalise l'affichage des propriétés du
bean.
<body>
Configuration du projet sous Eclipse
<p>Ceci est une page générée depuis une JSP.</p>
<p>
164 <%
String attribut = (String) request.getAttribute("test");
modifier ensuite la page JSP pour qu'elle réalise l'affichage des propriétés du
out.println( attribut );
bean.
String parametre = request.getParameter( "auteur" );
out.println( parametre );
%> </p>
<p>
Récupération du bean :
<%
com.mcw.beans.Coyote notreBean = (com.mcw.beans.Coyote) request.getAttribute("coyote");
out.println( notreBean.getPrenom() );
out.println( notreBean.getNom() );
%>
</p>
</body>
Configuration du projet sous Eclipse
165
http://localhost:8080/test/toto.
Configuration du projet sous Eclipse
166
Un bean est un objet Java réutilisable qui représente une entité, et dont les
données sont représentées par des propriétés.
Un bean est une classe publique et doit avoir au moins un constructeur par
défaut, public et sans paramètres.
Une propriété d'un bean est un champ non public, qui doit être accessible à
travers un couple de getter/setter.
Il faut configurer le build-path d'un projet web sous Eclipse pour qu'il y dépose
automatiquement les classes compilées depuis les codes sources Java de vos
objets.
Un bean peut par exemple être transmis d'une servlet vers une page JSP (ou
une autre servlet) en tant qu'attribut de requête.
2014-2015
Université Abdelmalek Essaâdi
École Normale Supérieure
Tétouan
Département d'Informatique et de Gestion
LA TECHNOLOGIE JSP
Les balises
168
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.
Les directives
173
Les directives
173
Directive page:
D'autres options sont utilisables via la balise page, comme le
contentType ou l'activation de la session.
Les directives
176
Directive page:
D'autres options sont utilisables via la balise page, comme le
contentType ou l'activation de la session.
L'ensemble des propriétés accessibles via cette directive :
<%@ page
Les directives language="..."
176 extends="..."
import="..."
Directive page: session="true | false"
D'autres options sont utilisables viabuffer="none | 8kb | sizekb"
la balise page, comme le
autoFlush="true | false"
contentType ou l'activation de la session.
isThreadSafe="true | false"
L'ensemble des propriétés accessibles via cette
isELIgnored directive
="true | false" :
info="..."
errorPage="..."
contentType="..."
pageEncoding="..."
isErrorPage="true | false"
%>
Les directives
177
Directive include:
il est très courant de découper exactement une page web en
plusieurs fragments, qui sont ensuite rassemblés dans la page
finale à destination de l'utilisateur.
Les directives
177
Directive include:
il est très courant de découper exactement une page web en
plusieurs fragments, qui sont ensuite rassemblés dans la page
finale à destination de l'utilisateur.
permet notamment de pouvoir réutiliser certains blocs dans
plusieurs vues différentes
Les directives
177
Directive include:
il est très courant de découper exactement une page web en
plusieurs fragments, qui sont ensuite rassemblés dans la page
finale à destination de l'utilisateur.
permet notamment de pouvoir réutiliser certains blocs dans
plusieurs vues différentes
Exemple: inclure une page interne à l’application (en
l'occurrence une page JSP nommée uneAutreJSP, mais cela
pourrait très bien être une page HTML ou autre) dans la JSP
courante :
Les directives
177
Directive include:
il est très courant de découper exactement une page web en
plusieurs fragments, qui sont ensuite rassemblés dans la page
finale à destination de l'utilisateur.
permet notamment de pouvoir réutiliser certains blocs dans
plusieurs vues différentes
Exemple: inclure une page interne à l’application (en
l'occurrence une page JSP nommée uneAutreJSP, mais cela
pourrait très bien être une page HTML ou autre) dans la JSP
courante : <%@ include file="uneAutreJSP.jsp" %>
Les directives
178
Directive include:
cette directive ne doit être utilisée que pour inclure du contenu
"statique" (l'inclusion est réalisée au moment de la compilation)
dans la page
Les directives
178
Directive include:
cette directive ne doit être utilisée que pour inclure du contenu
"statique" (l'inclusion est réalisée au moment de la compilation)
dans la page
Exemple: pour un site web le header ou le footer de la page, très
souvent identiques sur l'intégralité des pages du site.
Les directives
178
Directive include:
cette directive ne doit être utilisée que pour inclure du contenu
"statique" (l'inclusion est réalisée au moment de la compilation)
dans la page
Exemple: pour un site web le header ou le footer de la page, très
souvent identiques sur l'intégralité des pages du site.
cette directive peut être vue comme un simple copier-coller d'un
fichier dans l'autre:
Les directives
178
Directive include:
cette directive ne doit être utilisée que pour inclure du contenu
"statique" (l'inclusion est réalisée au moment de la compilation)
dans la page
Exemple: pour un site web le header ou le footer de la page, très
souvent identiques sur l'intégralité des pages du site.
cette directive peut être vue comme un simple copier-coller d'un
fichier dans l'autre:
il est nécessaire de procéder à cette copie avant la compilation de la page
Les directives
178
Directive include:
cette directive ne doit être utilisée que pour inclure du contenu
"statique" (l'inclusion est réalisée au moment de la compilation)
dans la page
Exemple: pour un site web le header ou le footer de la page, très
souvent identiques sur l'intégralité des pages du site.
cette directive peut être vue comme un simple copier-coller d'un
fichier dans l'autre:
il est nécessaire de procéder à cette copie avant la compilation de la page
on ne va pas copier un morceau de page JSP dans une servlet déjà compilée…
Les directives
179
<%-- Et il est impossible d'inclure une page externe comme ci-dessous : --%>
<jsp:include page="http://www.enstetouan.com" />
Les directives
180
Action standard
cette page include
ne contient pas de directive d'import, et ne peut pas
Ce type d'inclusion
fonctionner ne prend pas en compte les imports et inclusions
directement
faits dansde
l'import la la
page réceptrice.
classe ArrayList doit obligatoirement être réalisé
auparavantCréez
Exemple: pour une
que page
nous test_inc.jsp
puissions l'utiliser
(ajouterdans le code.
un entier à une liste
vide, puis l'affiche) sous le répertoire WebContent:
<%
ArrayList<Integer> liste = new ArrayList<Integer>();
liste.add( 12 );
out.println( liste.get( 0 ) );
%>
Les directives http://localhost:8080/test/test_inc.jsp
180
Action standard
cette page include
ne contient pas de directive d'import, et ne peut pas
Ce type d'inclusion
fonctionner ne prend pas en compte les imports et inclusions
directement
faits dansde
l'import la la
page réceptrice.
classe ArrayList doit obligatoirement être réalisé
auparavantCréez
Exemple: pour une
que page
nous test_inc.jsp
puissions l'utiliser
(ajouterdans le code.
un entier à une liste
vide, puis l'affiche) sous le répertoire WebContent:
<%
ArrayList<Integer> liste = new ArrayList<Integer>();
liste.add( 12 );
out.println( liste.get( 0 ) );
%>
Les directives
181
un objet de portée page n'est accessible que sur une page JSP donnée;
Remarques
189
un objet de portée page n'est accessible que sur une page JSP donnée;
un objet de portée requête n'est accessible que durant le cheminement
d'une requête dans l'application, et n'existe plus dès lors qu'une réponse
est renvoyée au client;
Remarques
189
un objet de portée page n'est accessible que sur une page JSP donnée;
un objet de portée requête n'est accessible que durant le cheminement
d'une requête dans l'application, et n'existe plus dès lors qu'une réponse
est renvoyée au client;
un objet de portée session est accessible durant l'intégralité de la visite
d'un client donné, à condition bien sûr que le temps d'inactivité défini
par le conteneur ne soit pas dépassé durant cette visite;
Remarques
189
un objet de portée page n'est accessible que sur une page JSP donnée;
un objet de portée requête n'est accessible que durant le cheminement
d'une requête dans l'application, et n'existe plus dès lors qu'une réponse
est renvoyée au client;
un objet de portée session est accessible durant l'intégralité de la visite
d'un client donné, à condition bien sûr que le temps d'inactivité défini
par le conteneur ne soit pas dépassé durant cette visite;
un objet de portée application est accessible durant toute l'existence
de l'application et par tous les clients.
Les actions standard
190
<jsp:useBean>
<jsp:getProperty>
<jsp:setProperty>
<jsp:forward>
Les actions standard
190
<jsp:useBean>
<jsp:getProperty>
<jsp:setProperty>
<jsp:forward>
La manière de faire pour accéder à des objets depuis une page JSP
L'action standard useBean
191
permettant d'utiliser un bean, ou de le créer s'il n'existe pas, depuis une page
JSP :
L'action standard useBean
191
permettant d'utiliser un bean, ou de le créer s'il n'existe pas, depuis une page
JSP :
<%-- L'action suivante récupère un bean de type Coyote et nommé "coyote" dans
la portée requête s'il existe, ou en crée un sinon. --%>
<jsp:useBean id="coyote" class="com.mcw.beans.Coyote" scope="request" />
permettant d'utiliser un bean, ou de le créer s'il n'existe pas, depuis une page
JSP :
<%-- L'action suivante récupère un bean de type Coyote et nommé "coyote" dans
la portée requête s'il existe, ou en crée un sinon. --%>
<jsp:useBean id="coyote" class="com.mcw.beans.Coyote" scope="request" />
permettant d'utiliser un bean, ou de le créer s'il n'existe pas, depuis une page
JSP :
<%-- L'action suivante récupère un bean de type Coyote et nommé "coyote" dans
la portée requête s'il existe, ou en crée un sinon. --%>
<jsp:useBean id="coyote" class="com.mcw.beans.Coyote" scope="request" />
Il est également possible de donner un corps à cette balise, qui ne sera exécuté
que si le bean est créé :
L'action standard useBean
192
Il est également possible de donner un corps à cette balise, qui ne sera exécuté
que si le bean est créé :
Il est possible par le biais de cette action d'obtenir la valeur d'une de ses
propriétés :
L'action standard getProperty
193
Il est possible par le biais de cette action d'obtenir la valeur d'une de ses
propriétés :
<jsp:useBean id="coyote" class="com.sdzee.beans.Coyote" />
<%-- L'action suivante affiche le contenu de la propriété 'prenom' du bean 'coyote' : --%>
<jsp:getProperty name="coyote" property="prenom" />
<%-- Elle a le même effet que le code Java suivant : --%>
<%= coyote.getPrenom() %>
L'action standard getProperty
193
Il est possible par le biais de cette action d'obtenir la valeur d'une de ses
propriétés :
<jsp:useBean id="coyote" class="com.sdzee.beans.Coyote" />
<%-- L'action suivante affiche le contenu de la propriété 'prenom' du bean 'coyote' : --%>
<jsp:getProperty name="coyote" property="prenom" />
<%-- Elle a le même effet que le code Java suivant : --%>
<%= coyote.getPrenom() %>
<jsp:useBean> récupère une instance dans une variable accessible par l'id
défini
L'action standard getProperty
193
Il est possible par le biais de cette action d'obtenir la valeur d'une de ses
propriétés :
<jsp:useBean id="coyote" class="com.sdzee.beans.Coyote" />
<%-- L'action suivante affiche le contenu de la propriété 'prenom' du bean 'coyote' : --%>
<jsp:getProperty name="coyote" property="prenom" />
<%-- Elle a le même effet que le code Java suivant : --%>
<%= coyote.getPrenom() %>
<jsp:useBean> récupère une instance dans une variable accessible par l'id
défini
cette action standard ne récupère rien, mais réalise seulement l'affichage du
contenu de la propriété ciblée.
L'action standard getProperty
193
Il est possible par le biais de cette action d'obtenir la valeur d'une de ses
propriétés :
<jsp:useBean id="coyote" class="com.sdzee.beans.Coyote" />
<%-- L'action suivante affiche le contenu de la propriété 'prenom' du bean 'coyote' : --%>
<jsp:getProperty name="coyote" property="prenom" />
<%-- Elle a le même effet que le code Java suivant : --%>
Deux attributs sont
<%= coyote.getPrenom() %>utiles:
name : contient
<jsp:useBean> le nom réel
récupère une du bean, en
instance l'occurrence
dans l'idaccessible
une variable que l'on a saisi
par l'id
auparavant dans la balise de récupération du bean;
défini
property
cette : contientne
action standard le récupère
nom de larien,
propriété
mais dont on seulement
réalise souhaite afficher le du
l'affichage
contenu.
contenu de la propriété ciblée.
L'action standard setProperty
194
l'utilisateur final n'est pas au courant que sa requête a été redirigée vers une
ou plusieurs JSP différentes, puisque l'URL qui est affichée dans son
navigateur ne change pas.
lorsque vous utilisez le forwarding, le code présent après cette balise dans
la page n'est pas exécuté.
En résumé
197
Les commentaires compris entre <%-- et --%> ne sont pas visibles dans la
page finale générée.
L'insertion directe de code Java dans une JSP est possible mais très
déconseillée.
Les directives se placent en début de fichier et permettent de configurer une
JSP sous différents angles.
Il existe 4 portées d'objets différentes, représentant 4 durées de vie différentes :
page, request, session et application.
Une session suit un visiteur de son arrivée sur le site jusqu'à son départ.
Les actions standard permettent pour la plupart de manipuler des objets au sein
d'une JSP, mais sont aujourd'hui de l'histoire ancienne.
Expression Language (EL)
198
vous n'aurez plus jamais à utiliser les actions standard d'utilisation des beans
En quoi consistent les expressions EL?
199
${ expression }
La forme et la syntaxe d'une expression :
200
${ expression }
${ expression }
<!-- Sera rendue ainsi après interprétation de l'expression, 12 n'étant pas inférieur
à 8 : -->
<p>12 est inférieur à 8 : false.</p>
La manipulation d'objets
206
la<meta charset="utf-8"
technologie EL est/> basée sur les spécifications des JavaBeans
<title>Test des expressions EL</title>
il est possible via une expression EL d'accéder directement à une propriété
</head>
d'un bean
<body>
<p>
Exemple: utiliser les actions standard
<!-- Initialisation d'un bean de type Coyote avec une action standard, pour l'exemple : -->
Éditez le fichier
<jsp:useBean test_el.jsp
id="coyote" et remplacez son contenu
class="com.sdzee.beans.Coyote" /> par ce code :
<!-- Initialisation de sa propriété 'prénom' : -->
<jsp:setProperty name="coyote" property="prenom" value="Wile E."/>
<!-- Et affichage de sa valeur : -->
<jsp:getProperty name="coyote" property="prenom" />
</p>
</body>
</html>
La manipulation d'objets: Des beans
<!DOCTYPE html>
<html> créez un bean de type Coyote dans la page JSP
<head>
207
<meta
initialisez
charset="utf-8" />
sa propriété prenom avec la valeur "Wile E.".
la technologie EL est basée sur les spécifications des JavaBeans
<title>Test des expressions EL</title>
il est possible via une expression EL d'accéder directement à une propriété
</head>
d'un bean
<body>
<p>
Exemple: utiliser les actions standard
<!-- Initialisation d'un bean de type Coyote avec une action standard, pour l'exemple : -->
Éditez le fichier
<jsp:useBean test_el.jsp
id="coyote" et remplacez son contenu
class="com.sdzee.beans.Coyote" /> par ce code :
<!-- Initialisation de sa propriété 'prénom' : -->
<jsp:setProperty name="coyote" property="prenom" value="Wile E."/>
<!-- Et affichage de sa valeur : -->
<jsp:getProperty name="coyote" property="prenom" />
</p>
</body>
</html>
La manipulation d'objets: Des beans
<!DOCTYPE html>
<html> créez un bean de type Coyote dans la page JSP
<head>
207
<meta
initialisez
charset="utf-8" />
sa propriété prenom avec la valeur "Wile E.".
la technologie EL est basée sur les spécifications des JavaBeans
<title>Test des expressions EL</title>
il est possible via une expression EL d'accéder directement à une propriété
</head>
d'un bean
<body> http://localhost:8080/test/test_el.jsp
<p>
Exemple: utiliser les actions standard
<!-- Initialisation d'un bean de type Coyote avec une action standard, pour l'exemple : -->
Éditez le fichier
<jsp:useBean test_el.jsp
id="coyote" et remplacez son contenu
class="com.sdzee.beans.Coyote" /> par ce code :
<!-- Initialisation de sa propriété 'prénom' : -->
<jsp:setProperty name="coyote" property="prenom" value="Wile E."/>
<!-- Et affichage de sa valeur : -->
<jsp:getProperty name="coyote" property="prenom" />
</p>
</body>
</html>
La manipulation d'objets: Des beans
208