• Aucun résultat trouvé

JAVA ET JSP (Java Server Pages) – Cours et formation gratuit

N/A
N/A
Protected

Academic year: 2022

Partager "JAVA ET JSP (Java Server Pages) – Cours et formation gratuit"

Copied!
143
0
0

Texte intégral

(1)

(Java Server Pages)

(2)

Sommaire

1.1 P RÉSENTATION ____________________________________________6

1.1.1 JSP (JavaServer Page)___________________________________6

1.1.2 Fonctionnement interne___________________________________6

1.1.3 Configuration du cours___________________________________7

1.1.4 Rappel sur le protocole HTTP______________________________8

1.1.4.1 Le protocole________________________________________8

1.1.4.2 Les requêtes________________________________________9

1.1.4.3 Les réponses_______________________________________10

1.1.4.4 La gestion de l'état__________________________________11

1.2 L ES ÉLÉMENTS DE BASE DE JSP______________________________12

1.2.1 L'organisation d'une page JSP____________________________12

1.2.1.1 Le modèle MVC (Model-View-Controller)_______________13

1.2.1.2 Le mélange de codes________________________________14

1.2.1.3 Le code JSP_______________________________________15

1.2.1.4 Les 2 versions de JSP________________________________16

1.2.2 La directive de page : <%@ page %>____________________17

1.2.3 Le commentaire : <%-- --%>___________________________18

1.2.4 La déclaration : <%! %>______________________________19

1.2.5 Le scriptlet : <% %>_________________________________20

1.2.6 L'expression : <%= %>_______________________________23

1.2.7 L'inclusion : <%@ include %>_________________________24

1.2.8 La directive de bibliothèque de balises (Taglib)_______________28

1.3 L ES OBJETS IMPLICITES _____________________________________29

1.3.1 L'interface request (Correspond à la requête client)____________30

1.3.1.1 Définition et méthodes_______________________________30

1.3.1.2 Récupérer des informations provenant d'une autre page_____32

1.3.1.3 Récupérer des informations sur le client et le serveur_______34

1.3.1.4 Le navigateur du client_______________________________35

1.3.1.5 Récupérer toutes les en-têtes__________________________36

1.3.1.6 Récupérer toutes les variables d'une page html____________38

1.3.1.7 Faire du jspSelf en mode GET_________________________40

1.3.1.8 Faire du jspSelf en mode POST________________________43

1.3.2 L'interface response (Correspond à la réponse envoyée au client)_44

(3)

1.3.3.2 Exemple__________________________________________46

1.3.4 L'interface session______________________________________50

1.3.4.1 Définition et méthodes_______________________________50

1.3.4.2 Exemple__________________________________________51

1.3.5 L'objet application (ServletContext)________________________53

1.3.5.1 Définition et méthodes_______________________________53

1.3.5.2 Exemple__________________________________________54

1.3.6 L'objet out____________________________________________56

1.3.7 L'objet config__________________________________________57

1.3.8 L'objet page___________________________________________58

1.3.9 L'objet pageContext_____________________________________59

1.3.10 L'objet exception_____________________________________60

1.4 L E PROBLÈME DU BLOCAGE DES COOKIES ______________________64

1.4.1 Blocage des cookies et des sessions_________________________64

1.4.2 Réécriture d'URL_______________________________________65

1.5 L ES J AVA B EANS __________________________________________66

1.5.1 Présentation___________________________________________66

1.5.2 Structure syntaxique_____________________________________68

1.5.3 Stockage______________________________________________69

1.6 L ES ÉLÉMENTS ACTION JSP_________________________________70

1.6.1 Présentation___________________________________________70

1.6.2 L'élément useBean : <jsp:useBean>________________________71

1.6.2.1 Description et syntaxe_______________________________71

1.6.2.2 Ecrans____________________________________________72

1.6.2.3 Scripts____________________________________________73

1.6.2.4 Passer toutes les valeurs en une seule fois________________75

1.6.3 Bean et scope__________________________________________76

1.6.4 L'élément setProperty : <jsp:setProperty>___________________77

1.6.4.1 Description et syntaxe_______________________________77

1.6.5 L'élément getProperty : <jsp:getProperty>__________________77

1.6.5.1 Description et syntaxe_______________________________77

1.6.6 L'élément d'inclusion : <jsp:include>_______________________78

1.6.6.1 Description et syntaxe_______________________________78

1.6.6.2 La page modèle du site_______________________________78

1.6.6.3 Inclure une page avec ou sans photo____________________80

1.6.7 L'élément de délégation : <jsp:forward>____________________84

1.6.7.1 Description et syntaxe_______________________________84

1.6.7.2 Exemple__________________________________________84

1.6.8 L'élément plugin : <jsp:plugin> (Applet)____________________86

1.6.8.1 Description et syntaxe_______________________________86

(4)

1.7.1 Cahier des charges_____________________________________91

1.7.2 Ecrans_______________________________________________91

1.8 T RAVAILLER AVEC UNE B ASE DE DONNÉES _____________________93

1.8.1 Afficher des données d'une table via un scriptlet_______________93

1.8.2 Insérer dynamiquement un enregistrement___________________95

1.9 L A COMMUNICATION S ERVLET -JSP-B EAN ______________________97

1.9.1 Objectif_______________________________________________97

1.9.2 Démarche_____________________________________________99

1.9.3 Scripts______________________________________________100

1.10 M INI APPLICATION NIVEAU 2 : JSP, B EANS ET BD______________107

1.10.1 Objectif, principes et démarche_________________________107

1.10.2 Ecrans____________________________________________107

1.11 D IVERS ________________________________________________108

1.11.1 Importer ses propres classes___________________________108

1.11.2 Internationalisation__________________________________110

1.11.2.1 Objectif________________________________________110

1.11.2.2 Le navigateur et la langue_________________________110

1.11.2.3 Premier script___________________________________111

1.11.2.4 Deuxième script_________________________________112

1.11.3 JSP et XML________________________________________113

1.12 A NNEXES ______________________________________________114

1.12.1 Utilisation d'une archive personnelle dans un projet web_____114

1.12.2 Archiver un site WEB_________________________________114

1.12.3 Le code de l'applet EurosDollars_______________________115

1.13 C ORRIGÉS DES EXERCICES _________________________________117

1.13.1 Testez Chrome______________________________________117

1.13.2 Les cookies_________________________________________117

1.13.3 Gestion de panier avec un cookie_______________________118

1.13.4 Les sessions________________________________________122

1.13.5 Corrigé Mini Application niveau 1 : le bureau de change____123

1.13.5.1 Tableau de synthèse______________________________123

1.13.5.2 Accueil________________________________________123

1.13.5.3 Saisie client____________________________________124

1.13.5.4 Calcul_________________________________________125

1.13.5.5 Déconnexion____________________________________125

1.13.6 Corrigé mini application niveau2 : BD___________________126

1.14 JSP ET MVC : LA BONNE PRATIQUE __________________________129

1.14.1.1 Insertion et suppression___________________________129

1.14.1.2 Affichage d'un enregistrement______________________131

(5)

1.15.2 JavaBean Villes_____________________________________136

(6)

1.1 P RÉSENTATION

1.1.1 JSP (JavaServer Page)

JSP est un générateur dynamique de pages html.

Il est possible de faire en JSP ce qui est fait avec des servlets.

L'écriture de code JSP est plus simple que l'écriture de servlets.

Une page JSP est un squelette de page html, donc avec du code html, qui contient du code JSP et éventuellement du code Java (Scriptlet).

Les JSP prendront en charge la partie présentation dans une application WEB à plusieurs niveaux.

La partie accès aux bases de données sera prise en compte des beans et des EJB (Entreprise Java Beans).

Les servlets prendront en charge la partie contrôle de l'application.

1.1.2 Fonctionnement interne

La JSP, qui est stockée sur le serveur WEB – qui doit être aussi un serveur de servlets (Jakarta-Tomcat est un serveur http de servlets) - est compilée et une servlet est créée et chargée en mémoire. C'est elle qui exécute les traitements.

Ces deux phases (compilation et traitement de la requête client) sont réalisées au sein du conteneur web qui lui-même contient un conteneur de servlets et un conteneur de JSP.

Tant que la JSP ne change pas, la servlet générée demeure chargée au sein du conteneur jusqu'à l'arrêt du serveur, exactement comme pour une servlet.

Elle se base sur les packages javax.servlet.jsp et javax.jsp.tagext.

(7)

1.1.3 Configuration du cours

Serveur Apache Tomcat 5.5

Dans une configuration standard les codes sont stockés dans l'arborescence suivante : C:\Program Files\Apache Software Foundation\Tomcat 5.5\webapps\NomDeLApplication\…

Mais selon l'IDE que vous utilisez ceci peut changer.

Avec NetBeans par exemple : Stockage des sources : Stockage des JSP, HTML, ... : C:\…\NomDeLApplication\web\jsp C:\…\NomDeLApplication\web\html

Stockage des .java (servlets, classes, beans, applets) : C:\…\NomDeLApplication\src\java

Stockage des exécutables : Stockage des JSP :

C:\…\NomDeLApplication\build\web\jsp

Stockage des .class (servlets, classes, beans, applets) : C:\…\NomDeLApplication\build\web\WEB-INF\classes

Copie d'écran de l'arborescence

(8)

1.1.4 Rappel sur le protocole HTTP

1.1.4.1 Le protocole

Le protocole http fonctionne de la façon suivante : un client – un navigateur WEB principalement – envoie une requête à un serveur pour obtenir une ressource et le serveur renvoie une réponse, la ressource ou un message d'erreur.

Une ressource peut être un simple fichier html ou un programme qui accède à une base de données et génère une réponse dynamique.

Requête

Réponse

Demande d'une page JSP

Envoi d'une page "html"

COMPILATION EN

.

CLASS

GÉNÉRATION DU CODE JAVA

Génération dynamique de la page HTML

(9)

1.1.4.2 Les requêtes

La requête est envoyée par le navigateur à un serveur pour obtenir une ressource. Ces informations sont contenues dans l'URI (Uniform Resource Identifier) souvent dénommée URL (Uniform Resource Locator).

L'URL contient le nom du protocole, le nom du serveur, éventuellement le port si celui-ci n'est pas le port TCP/IP standard ie le port 80, le chemin d'accè, le nom de la ressource et éventuellement des paires attribut=valeur précédées d'un ?.

Exemple : http://127.0.0.1:8085/java/menu.html.

Le navigateur envoie un message de requête qui est composé de 3 parties :

La ligne de requête

Elle fournit la méthode, la ressource, éventuellement des paires attribut=valeur et la version du protocole.

Par exemple GET /java/menuJsp.html http/1.0.

Les en-têtes de requête

Les en-têtes fournissent des informations du type nom du Host, User-agent (Informations sur le navigateur), Accept (Types de format de fichiers acceptés par le navigateur),…. Cf plus loin.

Le corps de requête

Le corps de requête existe dans le cas de requêtes POST (Des données sont transmises par

ce biais).

(10)

1.1.4.3 Les réponses

Le message de réponse possède lui aussi une structure ternaire; il contient une ligne d'état, des en-têtes de réponse et éventuellement un corps de réponse.

La ligne de réponse

Elle fournit la version du protocole, un code résultat et une description de ce code résultat.

Par exemple http/1.0 200 OK.

Les en-têtes de réponse

Les en-têtes fournissent des informations du type date de dernière modification, statut, type de contenu (Content-type : text/html ou image/gif…), … Cf plus loin.

Le corps de réponse

Le corps de réponse est par exemple une page html.

(11)

1.1.4.4 La gestion de l'état HTTP est un protocole sans état.

Quand le serveur envoie une réponse à une requête il oublie tout de la transaction ie quand le client émet une deuxième requête, le serveur ne sait pas si elle a un lien avec la première.

Le serveur renvoie dans sa réponse un id de session que le client renverra à son tour avec l'url de la requête suivante. Ainsi il est possible de faire le lien entre les différentes requêtes d'un même client.

On utilise aussi les cookies, les champs cachés de formulaires, les réécritures d'URL, les variables de session pour conserver et/ou créer un état et ainsi lier les pages d'une application.

Mais le client peut désactiver dans son navigateur les cookies et rend ainsi la gestion de

cookies et de session impossible ou plus délicate à gérer.

(12)

1.2 L ES ÉLÉMENTS DE BASE DE JSP

1.2.1 L'organisation d'une page JSP

Une page JSP peut être vue selon trois points de vue.

o Le modèle MVC (Model-View-Controller), o Le code JSP et le code non-JSP,

o Les éléments JSP.

(13)

1.2.1.1 Le modèle MVC (Model-View-Controller)

Ce modèle décrit une architecture de composants à trois niveaux :

View : c'est la partie présentation . Ce sont les codes html et JSP.

Controller : c'est le niveau chargé du traitement des requêtes . Ce sont les servlets.

Model : c'est la logique métier avec la manipulation des données de l'application. Ce sont les JavaBeans, les EJB et aussi des servlets.

View BD

Control

Model

(14)

1.2.1.2 Le mélange de codes

Une page JSP est un fichier texte d'extension .jsp.

Une page JSP est composée de texte template et de code JSP.

Le texte template est du code HTML, XML, CSS, JavaScript et n'est pas du code JSP. Il n'est pas interprété et est envoyé tel quel au navigateur.

<html>

<head>

<title>GestionErreurs.jsp</title>

</head>

<body>

<%@page language="java" import="java.io.IOException" errorPage =

"../html/erreur.html" %>

<!-- Déclaration des variables -->

<%!

int liDividende = 10;

int liDiviseur = 0;

int liResultat = 0;

%>

<!-- Scriptlet JSP : du code java -->

<%

liResultat = liDividende / liDiviseur;

out.print("<br />Résultat de la division : " + liResultat);

%>

</body>

</html>

Suite à une division par zéro par exemple.

Notes :

La page jsp est stockée dans le dossier /monApp/jsp La page html est stockée dans le dossier /monApp/html

(15)

1.2.1.3 Le code JSP

Le code JSP est composé de trois types d'éléments :

o Les directives (qui déterminent des caractéristiques au moment de la compilation), o Les éléments de script (qui permettent d'ajouter des éléments de code),

o Les éléments action (qui déterminent des comportements d'exécution).

Une page JSP contient du code JSP et/ou du code Java et/ou du code HTML ….

Il existe huit éléments de base plus des éléments d'action :

Elément Fonction Syntaxe

Directives

La directive de page Pour les attributs de la page <%@page … %>

<jsp:directive.page paires attributs=valeurs />

La directive d'inclusion Pour l'inclusion de fichiers <%@ include … %>

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

La directive de librairie de

balises (Taglib) Pour les bibliothèques de balises

personnalisées. <%@ taglib … %>

Pas de balise <jsp>

Eléments de script

La déclaration Pour la déclaration de variables de page <%! … %>

<jsp:declaration>

Le scriptlet Pour le code <% … %>

<jsp:scriptlet>

L'expression Pour renvoyer les valeurs d'une expression <%= … %>

<jsp:scriptlet>

Le commentaire Pour les commentaires <%-- … --%>

Pas de balise <jsp>

Eléments d'action

Bean Permet l'utilisation d'un JavaBean <jsp:useBean>

Propriété en lecture Permet la récupération d'une valeur d'une

propriété en lecture d'un javaBean <jsp:getProperty>

Propriété en écriture Permet l'affectation d'une valeur d'une

propriété d'un javaBean <jsp:setProperty>

Inclusion dynamique Permet l'inclusion dynamique de code <jsp:include>

Redirection Redirige vers une page <jsp:forward>

Paramètre Déclare un paramètre <jsp:param>

Applet Génère le code html d'un Objet <jsp:plugin>

Pour la plupart des éléments il existe deux syntaxes :

La syntaxe JSP standard (JSP 1.x); les balises d'ouverture et de fermeture sont les suivantes : <% … %>; Les pages sont d'extension .jsp.

La syntaxe XML (JSP 2.x); les balises auto-fermantes ont cette syntaxe :<jsp: … />; les

éléments pleins utilisent les balises à la syntaxe suivante : <jsp:…> </jsp:…> ; les pages

(16)

1.2.1.4 Les 2 versions de JSP

Modèle de page version 1.x généré par NetBeans Test.jsp

<%--

Document : nom du document

Created on : date et heure de creation Author : nom de l'auteur

--%>

<%@page contentType="text/html" pageEncoding="UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"

"http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>JSP Page</title>

</head>

<body>

<h1>Hello World!</h1>

</body>

</html>

Modèle de page version 2.0 généré par NetBeans Test.jspx

<?xml version="1.0" encoding="UTF-8"?>

<!--

Document : nom du document

Created on : date et heure de creation Author : nom de l'auteur

-->

<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.0">

<jsp:directive.page contentType="text/html" pageEncoding="UTF-8"/>

<jsp:element name="text">

<jsp:attribute name="lang">EN</jsp:attribute>

<jsp:body>Hello World!</jsp:body>

</jsp:element>

</jsp:root>

Nous allons examiner ces différents éléments.

(17)

1.2.2 La directive de page : <%@ page %>

L'élément directive de page permet de définir les attributs de la page JSP : le langage utilisé (java), les importations de classes et/ou de packages (java.io.*, java.sql.*, …), la page invoquée en cas d'erreur, le type de contenu (text/html, text/plain, …), l'encodage (UTF-8, ISO-8859-1, …), ...

La directive de page est placée en début de la page JSP.

Syntaxe standard

<%@page

[language="java"]

[import="package1, package2, …"]

[errorPage="URLRelative"]

[extends="package.class"]

[contentType="typeMime"]

[pageEncoding="encodage"]

%>

Syntaxe XML

<jsp:directive.page

[contentType="typeMime"]

[pageEncoding="encodage"]

[language="java"]

[errorPage="URLRelative"]

[import="package1, package2, …"]

/>

Pour une page .jspx il faut en premier lieu ajouter le prologue XML :

<?xml version="1.0" encoding="UTF-8" ?>

et ensuite ajouter l'élément racine qui sera fermé à la fin de la page.

<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.0">

</jsp:root>

La directive de page est intercalée entre ces deux dernières balises.

(18)

1.2.3 Le commentaire : <%-- --%>

L'élément commentaire permet d'insérer un commentaire dans une page JSP.

L'avantage du commentaire JSP, par rapport au commentaire html, c'est qu'il n'est pas visible lorsque le client affiche la source du code dans le navigateur.

Syntaxe standard

<%-- Texte de commentaire --%>

Syntaxe XML

<!-- Texte de commentaire -->

Exemple

<!-- Scriptlet JSP : Le code -->

<%-- Commentaire de type JSP alors que le précédent est de type html --%>

(19)

1.2.4 La déclaration : <%! %>

L'élément declaration permet de définir un bloc pour la déclaration de variables de page et de fonctions (méthodes de page).

Syntaxe standard

<%!

déclaration1; déclaration2;

%>

Syntaxe XML

<jsp:declaration>

déclaration1; déclaration2;

</jsp:declaration>

Exemples

<!-- Déclaration de variables et d'une fonction -->

<%!

int liDividende = 10;

int liDiviseur = 2;

int liResultat = 0;

private int addition(int a, int b) {

int liTotal = a + b;

return liTotal;

}

%>

<!-- Déclaration des variables -->

<jsp:declaration>

int liDividende = 10;

int liDiviseur = 2;

int liResultat = 0;

private int addition(int a, int b) {

int liTotal = a + b;

return liTotal;

}

</jsp:declaration>

(20)

1.2.5 Le scriptlet : <% %>

L'élément scriptlet permet d'ajouter dans une page JSP un bloc d'instructions. La déclaration de variables locales au scriptlet est possible.

Une page JSP peut être composée de plusieurs scriptlets.

Syntaxe standard

<%

code1;

code2;

%>

Syntaxe XML

<jsp:scriptlet>

code1;

code2;

</jsp:scriptlet>

Exemples

<%

liResultat = liDividende / liDiviseur;

out.print("a/b : " + liResultat);

out.println("<br/>a + b : " + addition(liDividende, liDiviseur));

%>

<jsp:scriptlet>

liResultat = liDividende / liDiviseur;

out.print("a/b : " + liResultat);

</jsp:scriptlet>

Note : la syntaxe XML n'autorise pas d'éléments XML dans un scriptlet. Donc pas d'éléments

XHTML (Des <br/> par exemple …).

(21)

Exemple de code

Cette première page JSP a pour objectif de montrer la structure d'une page JSP avec les trois premiers éléments ( Directive de page, déclaration, scriptlet ).

Elle affiche du texte et le contenu d'une variable.

<%@page contentType="text/html" pageEncoding="UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"

"http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>declarationsJSP</title>

</head>

<body>

<!-- Déclaration de variables et de fonctions -->

<%!

int liDividende = 10;

int liDiviseur = 2;

int liResultat = 0;

private int addition(int a, int b) {

int liTotal = a + b;

return liTotal;

} %>

<!-- Scriptlets -->

<%

liResultat = liDividende / liDiviseur;

out.println("a/b : " + liResultat);

out.println("<br/>a + b : " + addition(liDividende, liDiviseur));

%>

</body>

</html>

(22)

<?xml version="1.0" encoding="UTF-8"?>

<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.0">

<jsp:directive.page contentType="text/html" pageEncoding="UTF-8"/>

<html>

<head>

<title>declarationsJSPX</title>

</head>

<body>

<!-- Déclaration de variables et de fonctions -->

<jsp:declaration>

int liDividende = 10;

int liDiviseur = 2;

int liResultat = 0;

private int addition(int a, int b) {

int liTotal = a + b;

return liTotal;

}

</jsp:declaration>

<!-- Scriptlets -->

<jsp:scriptlet>

liResultat = liDividende / liDiviseur;

out.println("a/b : " + liResultat);

</jsp:scriptlet>

<br/>

<jsp:scriptlet>

out.println("a + b : " + addition(liDividende, liDiviseur));

</jsp:scriptlet>

</body>

</html>

</jsp:root>

Notes :

Comme un scriptlet n'admet pas d'éléments XML, il y a une possibilité en fermant la balise <jsp:scriptlet>, écrire un

<br/> et ouvrir une autre balise <jsp:scriptlet>.

Ou bien utiliser des entités XML. Quelques-unes sont reconnues en standard. La plupart doivent être déclarées.

Dans le cas de <br/> les entités standards suffisent.

Alternative avec les entités standards (< : &lt; et > : &gt;).

<!-- Scriptlets -->

<jsp:scriptlet>

liResultat = liDividende / liDiviseur;

out.println("a/b : " + liResultat);

out.println("&lt;br/&gt;");

out.println("a + b : " + addition(liDividende, liDiviseur));

</jsp:scriptlet>

(23)

1.2.6 L'expression : <%= %>

L'élément expression permet d'inclure dans une réponse http envoyée au navigateur la valeur d'une expression Java convertie en une chaîne de caractères.

C'est lors de la compilation que l'expression est convertie en une String. De plus une expression pourra être incluse dans une balise comportant des éléments d'action, ce que nous verrons plus loin.

Syntaxe standard

<%= expression %>

Syntaxe XML

<jsp:expression>

expression

</jsp:expression>

Exemples

Affichage "direct" du contenu d'une variable.

<%!

int liCtr = 4;

%>

<%= "liCtr : " + liCtr %>

<jsp:declaration>

int liCtr = 4;

String libelle = "liCtr : ";

</jsp:declaration>

<jsp:expression>

libelle.concat(String.valueOf(liCtr))

</jsp:expression>

Notes :

Il n'y a pas de ; à la fin de l'expression.

Dans la syntaxe XML la concaténation avec + est impossible. Il faut passer par la fonction concat().

(24)

1.2.7 L'inclusion : <%@ include %>

La directive d'inclusion permet d'inclure du contenu html, texte, XML ou JSP d'un fichier.

Ceci permet d'avoir une écriture modulaire.

C'est une inclusion statique qui a lieu au moment de la compilation de la page JSP.

Syntaxe standard

<%@ include file="URLRelative" %>

Syntaxe XML

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

Exemple

L'écran

(25)

Le script maître en JSP : _modele.jsp

<%@page contentType="text/html" pageEncoding="UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"

"http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Modèle JSP</title>

<link href="../css/cours.css" rel="stylesheet" type="text/css">

</head>

<body>

<div id="enTete">

<%@include file="../html/_enTete.html" %>

</div>

<div id="sommaire">

<%@include file="../html/_sommaire.html" %>

</div>

<div id="centre">

<p>CENTRE</p>

</div>

<div id="pied">

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

</div>

</body>

</html>

_enTete.html

<h3>Site du cin&eacute;ma</h3>

_sommaire.html

<table>

<tr>

<td><a href="departements.jsp">D&eacute;partements</a></td>

<td><a href="villes.jsp">Villes</a></td>

<td><a href="arrondissements.jsp">Arrondissements</a></td>

</tr>

</table>

_pied.jsp

<%@page contentType="text/html" pageEncoding="UTF-8"

import="java.util.Date,java.text.SimpleDateFormat"%>

<%

SimpleDateFormat df = new SimpleDateFormat("dd MMM yyyy hh:mm");

out.println("<br/>Date et heure à Paris : " + df.format(new Date()));

%>

(26)

<?xml version="1.0" encoding="UTF-8"?>

<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.0">

<jsp:directive.page contentType="text/html" pageEncoding="UTF-8"/>

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

<title>Modèle JSPX</title>

<link href="../css/cours.css" rel="stylesheet" type="text/css" />

</head>

<body>

<div id="enTete">

<jsp:directive.include file="_enTete.jspx" />

</div>

<div id="sommaire">

<jsp:directive.include file="_sommaire.jspx" />

</div>

<div id="centre">

<p>CENTRE</p>

</div>

<div id="pied">

<jsp:directive.include file="_pied.jspx" />

</div>

</body>

</html>

</jsp:root>

Note :

Ou <jsp:directive.include file="../html/_enTete.html" />

(27)

_enTete.jspx

<?xml version="1.0" encoding="UTF-8"?>

<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.0">

<jsp:directive.page contentType="text/html" pageEncoding="UTF-8"/>

<jsp:element name="text">

<jsp:body><h3>Site du cinéma</h3></jsp:body>

</jsp:element>

</jsp:root>

_sommaire.jspx

<?xml version="1.0" encoding="UTF-8"?>

<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.0">

<jsp:directive.page contentType="text/html" pageEncoding="UTF-8"/>

<table>

<tr>

<td><a href="departements.jsp">Départements</a></td>

<td><a href="villes.jsp">Villes</a></td>

<td><a href="arrondissements.jsp">Arrondissements</a></td>

</tr>

</table>

</jsp:root>

_pied.jspx

<?xml version="1.0" encoding="UTF-8"?>

<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.0">

<jsp:directive.page contentType="text/html" pageEncoding="UTF-8"

language="java" import="java.util.Date,java.text.SimpleDateFormat"/>

<jsp:declaration>

Date d = new Date();

SimpleDateFormat df = new SimpleDateFormat("dd MMM yyyy hh:mm");

String lsDate = df.format(d);

String libelle = "Date et heure à Paris : ";

</jsp:declaration>

<jsp:expression>

libelle.concat(lsDate) </jsp:expression>

</jsp:root>

(28)

1.2.8 La directive de bibliothèque de balises (Taglib)

La directive de bibliothèque de balises permet de préciser l'utilisation de fichiers de balises étendues ou personnalisées. Cf jstl_java.doc pour plus de détails.

Syntaxe standard

<%@taglib prefix="préfixeTag" uri="URLDansWebXML" %>

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

Pas de Syntaxe XML

Mais l'élément XML <jsp:root> permet de préciser l'utilisation de bibliothèques de balises personnalisées.

<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.0"

xmlns:c="http://java.sun.com/jsp/jstl/core">

<?xml version="1.0" encoding="UTF-8"?>

<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.0"

xmlns:c="http://java.sun.com/jsp/jstl/core">

<jsp:directive.page contentType="text/html" pageEncoding="UTF-8"/>

Une expression simple, une constante via $ : ${12}<br />

Une expression simple, une constante via out : <c:out value="12" /><br />

Une expression simple, une addition via $ : ${1+2}<br />

</jsp:root>

(29)

1.3 L ES OBJETS IMPLICITES

Les objets implicites sont au nombre de neuf.

Objet Description

request La requête du client

response La réponse du serveur

pageContext Le contexte de la page en cours

session La session

application Gestion des éléments de niveau application

out Gestion des flux de sortie

config Contexte de configuration de la page JSP page Gestion de l'instance de servlet générée exception Gestion de l'exception en cours

Par définition, pour les objets implicites il n'est pas nécessaire qu'ils soient instanciés pour que l'on puisse utiliser leurs méthodes.

Liste des bibliothèques

Objet Bibliothèque

Request Javax.servlet.http.httpservletrequest Response Javax.servlet.http. httpservletresponse

Out Javax.servlet.jsp.JspWriter

Session Javax.servlet.http.httpsession PageContext Javax.servlet.jsp.pagecontext Application Javax.servlet.http.ServletContext Config Javax.servlet.http.ServletConfig

Page Java.lang.Object

(30)

1.3.1 L'interface request (Correspond à la requête client) 1.3.1.1 Définition et méthodes

L'interface request permet de référencer les requêtes http du navigateur du client au serveur.

La requête du client effectuée par un lien, un formulaire ou la saisie d'une URL dans la barre du navigateur contient un message de requête http constitué de trois éléments : la ligne de requête, les en-têtes de requêtes et parfois un corps de requête. L'objet request permet de traiter ces éléments.

La ligne de requête contient l'adresse de la ressource et éventuellement des paires attribut=valeur, la méthode employée (get, post,…) et le protocole utilisé (http/1.0).

Les en-têtes contiennent d'autres informations (Le host, les types MIME acceptés, les cookies, …)

Le corps de la requête est inclus dans le cas d'utilisation de la méthode POST.

Les éléments de la requête sont manipulables grâce à une instance de

javax.servlet.http.HttpServletRequest.

(31)

Voici quelques-unes des méthodes qu'il est possible d'invoquer :

Méthodes Fonctions

setAttribute() Permet d'affecter une valeur à une variable de session ou d'application

getAttribute("attribut") Permet de récupérer la valeur d'une variable de session ou d'application

getParameter("attribut") Permet de récupérer la valeur d'un attribut d'une requête

getParameterNames() Liste des noms des attributs d'une requête (Une Enumeration) getParameterValues("attribut") Liste des valeurs des attributs d'une requête lorsque plusieurs

éléments HTML ont le même nom, par exemple des boutons radio non exclusifs (un tableau de String[])

getCookies() Cf le paragraphe sur les cookies

getRemoteAddr() Ip du client

getRemoteHost() Host du client

getRemoteUser() User connecté

getServerName() Nom du serveur

getServerPort() Port d'écoute du serveur

getHeaderNames() Enumération des noms d'en-tête

getHeader("variable") Permet de récupérer des valeurs des en-têtes http ("User-Agent",

"host", "accept-language", …).

getHeader("referer")

L'url de la page qui a requêté la page actuelle (La page précédente)

getRequestURL()

L'url de la JSP requêtée (La page actuelle)

getQueryString()

Les attributs et valeurs de l'URL sous forme de chaîne a=v&a=v…

getContextPath()

La racine du site (Chemin relatif) … un peu plus haut !!!

application.getRealPath("/") renvoie aussi la racine du site (chemin absolu).

Pour les méthodes getAttribute(), setAttribute(), cf les paragraphes sur les objets Session et Application.

Exemples de chemins :

request.getContextPath() : /WebAppLibrairie

config.getServletContext().getRealPath('/') : C:\___pascal\supports\java_supports\projetsJava\WebAppLibrairie\build\web\

application.getRealPath('/') : C:\___pascal\supports\java_supports\projetsJava\WebAppLibrairie\build\web\

(32)

1.3.1.2 Récupérer des informations provenant d'une autre page Une page html contient deux textes et un bouton de soumission.

La méthode POST est employée.

L'utilisateur saisit son login et son mot de passe, clique sur le bouton poussoir et la page JSP affiche les nom et mot de passe saisis pour confirmation …

Nous utiliserons la méthode getParameter ("nomDeParamètre") de l'objet request .

La page html

La page JSP

Le code de la page html : requestUn.html

<form action="../jsp/RequestUn.jsp" method="post">

<label>Nom </label>

<input type="text" name="ut" value="Pascal" />

<label>Mot de passe </label>

<input type="text" name="mdp" value="secret" />

<input type="submit" />

</form>

(33)

Le code de la page JSP : requestUn.jsp

<strong><%= request.getParameter("ut") %></strong>

votre mot de passe est <strong><%= request.getParameter("mdp") %></strong>

Le code de la page JSPX : requestUn.jspx

<?xml version="1.0" encoding="UTF-8"?>

<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.0">

<jsp:directive.page contentType="text/html" pageEncoding="UTF-8"/>

<jsp:expression>

request.getParameter("ut") </jsp:expression>

<br/>

<jsp:expression>

request.getParameter("mdp") </jsp:expression>

</jsp:root>

(34)

1.3.1.3 Récupérer des informations sur le client et le serveur

L'écran

Le script jsp

<!-- infosClientServeur.jsp -->

<hr />Le client<hr />

IP client : <%= request.getRemoteAddr() %>

<br />RemoteHost : <%= request.getRemoteHost() %>

<br />RemoteUser : <%= request.getRemoteUser() %>

<hr />Le serveur<hr />

ServerName : <%= request.getServerName() %>

<br />ServerPort : <%= request.getServerPort() %>

Le script jspx

<?xml version="1.0" encoding="UTF-8"?>

<!-- infosClientServeur.jspx -->

<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.0">

<jsp:directive.page contentType="text/html" pageEncoding="UTF-8"/>

<hr />Le client<hr />

IP client : <jsp:expression>request.getRemoteAddr() </jsp:expression>

<br />RemoteHost : <jsp:expression>request.getRemoteHost() </jsp:expression>

<br />RemoteUser : <jsp:expression>request.getRemoteUser() </jsp:expression>

<hr />Le serveur<hr />

ServerName : <jsp:expression>request.getServerName() </jsp:expression>

<br />ServerPort : <jsp:expression>request.getServerPort() </jsp:expression>

</jsp:root>

(35)

1.3.1.4 Le navigateur du client

Objectif

Syntaxe

request.getHeader("User-agent")

Script jsp

<%

// --- navigateur.jsp

if(request.getHeader("User-agent").indexOf("Firefox") != -1) out.println("Navigateur Firefox");

if(request.getHeader("User-agent").indexOf("MSIE") != -1) out.println("Navigateur IE");

%>

Script jspx

<?xml version="1.0" encoding="UTF-8"?>

<!-- navigateur.jspx -->

<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.0">

<jsp:directive.page contentType="text/html" pageEncoding="UTF-8"/>

<jsp:scriptlet>

if(request.getHeader("User-agent").indexOf("Firefox") != -1) out.println("Navigateur Firefox");

if(request.getHeader("User-agent").indexOf("MSIE") != -1) out.println("Navigateur IE");

</jsp:scriptlet>

</jsp:root>

Exercice

Testez Chrome.

(36)

1.3.1.5 Récupérer toutes les en-têtes

L'écran

Script jsp

<%

// --- enTetes.jsp

// --- Les attributs de l'objet REQUEST

Enumeration enumHeaders = request.getHeaderNames();

while(enumHeaders.hasMoreElements()) {

Object oEnTete = enumHeaders.nextElement();

String lsNomEnTete = oEnTete.toString();

String lsValEnTete = request.getHeader(lsNomEnTete);

out.print("<br />En-tête : " + lsNomEnTete + " , Valeur : " + lsValEnTete);

}

%>

NB : si les cookies ne sont pas acceptés la ligne cookie n'apparaît pas.

Script jspx

<?xml version="1.0" encoding="UTF-8"?>

<!-- enTetes.jspx -->

<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.0">

<jsp:directive.page contentType="text/html" pageEncoding="UTF-8"

import="java.util.Enumeration"/>

<jsp:scriptlet>

Enumeration enumHeaders = request.getHeaderNames();

while(enumHeaders.hasMoreElements()) {

Object oEnTete = enumHeaders.nextElement();

String lsNomEnTete = oEnTete.toString();

String lsValEnTete = request.getHeader(lsNomEnTete);

out.println("&lt;br/&gt;En-tête : " + lsNomEnTete + " , Valeur : " + lsValEnTete);

}

</jsp:scriptlet>

</jsp:root>

(37)

L'instruction qui suit permettrait de revenir à la page précédente.

String lsPrecedente = request.getHeader("referer");

Exercice

Ajoutez dans une page JSP ou JSPX l'élément nécessaire pour retourner vers la page

précédente.

(38)

1.3.1.6 Récupérer toutes les variables d'une page html

La page JSP qui récupère des informations provenant d'une page HTML.

<!-- variablesHTML.jsp -->

<!-- Directive de page pour java : le langage, les imports, ... -->

<%@page language="java" import="java.io.IOException,java.util.*" %>

<!-- Scriptlet JSP : Le code -->

<%

Enumeration attributsUrl = request.getParameterNames();

while(attributsUrl.hasMoreElements()) {

String lsNomAttribut = (String)attributsUrl.nextElement();

String lsValAttribut = request.getParameter(lsNomAttribut);

out.print("Paramètre : " + lsNomAttribut + " , Valeur : " + lsValAttribut +

"<br />");

}

%>

Commentaires

Après avoir récupérée la liste des paramètres de la page avec la méthode getParameterNames (), dans une boucle sur une variable attributsUrl de type Enumeration nous récupérons les noms des paramètres de la requête client.

A partir de ces noms nous récupérons les valeurs en utilisant la méthode getParameter ().

Autre

Le cas des éléments de même nom.

<%

String[] attributsUrl = request.getParameterValues("rb_hobbie");

for(int i=0; i<attributsUrl.length; i++) {

out.println(attributsUrl[i]);

}

%>

Vous pouvez tester ainsi :

http://localhost:8085/WebAppJSP/jsp/Test.jsp?rb_hobbie=livre&rb_hobbie=musique

(39)

La version JSPX

<?xml version="1.0" encoding="UTF-8"?>

<!-- variablesHTML.jspx -->

<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.0">

<jsp:directive.page contentType="text/html" pageEncoding="UTF-8"

import="java.util.Enumeration"/>

<jsp:scriptlet>

Enumeration attributsUrl = request.getParameterNames();

while(attributsUrl.hasMoreElements()) {

String lsNomAttribut = (String)attributsUrl.nextElement();

String lsValAttribut = request.getParameter(lsNomAttribut);

out.print("Paramètre : " + lsNomAttribut + " , Valeur : " + lsValAttribut);

</jsp:scriptlet>

<br/>

<jsp:scriptlet>

}

</jsp:scriptlet>

</jsp:root>

(40)

1.3.1.7 Faire du jspSelf en mode GET

Objectif

Travailler sur la même page.

Démarche

Récupérer la présence d'attributs dans l'URL avec request.getQueryString().

Affecter à l'attribut action du formulaire request.getHeader("referer"), ie la page elle-

même.

(41)

Script

JspSelfGet.jsp

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

autoFlush="true" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"

"http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>JspSelfGet.jsp</title>

</head>

<body>

<form action="<%= lsDestination %>" method="get">

<label>Nom : </label>

<input type="text" name="nom" value="Tintin" />

<input type="submit" />

</form>

<%! String lsDestination = ""; %>

<%

if(request.getQueryString() != null) {

lsDestination = request.getHeader("referer");

out.println("Votre nom : " + request.getParameter("nom") + "<br />");

} %>

</body>

</html>

Note : plus simple. Soit avec <form action="" method="get"> ou encore <form> mais pas très W3C la dernière!

<form action="" method="get">

<label>Nom : </label>

<input type="text" name="nom" value="Tintin" />

<input type="submit" />

</form>

<%

if(request.getQueryString() != null) {

out.println("Votre nom : " + request.getParameter("nom"));

}

%>

(42)

<?xml version="1.0" encoding="UTF-8"?>

<!-- jspSelfGet.jspx -->

<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.0">

<jsp:directive.page contentType="text/html" pageEncoding="UTF-8"/>

<form action="" method="get">

<label>Nom : </label>

<input type="text" name="nom" value="Tintin" />

<input type="submit" />

</form>

<jsp:scriptlet>

if(request.getQueryString() != null) {

out.println("Votre nom : " + request.getParameter("nom"));

}

</jsp:scriptlet>

</jsp:root>

(43)

1.3.1.8 Faire du jspSelf en mode POST

En mode POST il n'y a pas d'attributs dans l'url. La démarche consiste à savoir si la requête vers la page provient de la page elle-même ou pas.

C'est avec request.getHeader("referer") que l'on teste la provenance de la requête.

On compare ce dernier résultat avec request.getRequestURI() concaténé avec http:// + request.getServerName() + ":" + request.getServerPort().

jspSelfPost.jsp

<%

if(request.getHeader("referer") != null) {

String lsSelf = "http://" + request.getServerName() + ":" + request.getServerPort() + request.getRequestURI();

if(request.getHeader("referer").equals(lsSelf)) {

out.println("<br/>Votre nom : " + request.getParameter("nom") + "<br />");

} }

%>

<form action="" method="post">

<label>Nom : </label>

<input type="text" name="nom" value="Tintin" />

<input type="submit" />

</form>

jspSelfPost.jspx

<?xml version="1.0" encoding="UTF-8"?>

<!-- jspSelfPost.jspx -->

<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.0">

<jsp:directive.page contentType="text/html" pageEncoding="UTF-8"/>

<jsp:scriptlet>

if(request.getHeader("referer") != null) {

String lsSelf = "http://" + request.getServerName() + ":" + request.getServerPort() + request.getRequestURI();

if(request.getHeader("referer").equals(lsSelf)) {

out.println("Votre nom : " + request.getParameter("nom"));

} }

</jsp:scriptlet>

<form action="" method="post">

<label>Nom : </label>

<input type="text" name="nom" value="Tintin" />

<input type="submit" />

(44)

1.3.2 L'interface response (Correspond à la réponse envoyée au client) 1.3.2.1 Définition et méthodes

L'interface response permet de référencer les réponses du serveur au navigateur du client.

Il correspond à une instance de javax.servlet.http.HttpServletResponse.

Principales méthodes :

Méthode Fonction

AddCookie(c) Cf le paragraphe suivant

sendRedirect("url absolue") Redirige vers une URL absolue (C'est son avantage et inconvénient).

Cf plus loin pageContext.forward("chemin") qui redirige vers une url relative et permet la transmission de valeurs.

NB : cf l'objet out qui est surtout employé pour envoyer la réponse au client.

Exemple de redirection :

<%

String lsDestination = "http://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath() +

"/jsp/VillesMenuViaServlet.jsp";

response.sendRedirect(lsDestination);

%>

ou

<%

String lsDestination = "VillesMenuViaServlet.jsp"; // --- Si dans le même dossier

response.sendRedirect(lsDestination);

%>

lsDestination contient : http://localhost:8085/WebAppJSP/jsp/VillesMenuViaServlet.jsp Parce que :

request.getServerName() renvoie le nom du serveur (localhost par exemple), request.getServerPort() renvoie le port du serveur (8085 par exemple),

request.getContextPath() renvoie la racine de l'application (/WebAppJSP par exemple).

(45)

1.3.3 Les cookies

1.3.3.1 Définition et méthodes

Un cookie est une petite quantité d'informations envoyée par le serveur au navigateur et stockée sur le poste du client.

Ces informations persistantes peuvent être relues au cours de la session ou lors d'une autre session si une durée de vie a été précisée.

Les cookies sont écrits via l'objet response.

Les cookies sont lus via l'objet request (Ils sont dans l'en-tête de requête).

Le client peut désactiver les cookies via son navigateur pour des motifs de sécurité ou de confidentialité.

Cette technique est donc peu fiable dans le contexte d'internet.

Cette limitation touche aussi la gestion des sessions (cf paragraphe suivant).

Les principales méthodes sont les suivantes :

Méthode Fonction

Cookie cookie = new Cookie("NomDuCookie", "valeurDuCookie") Constructeur de la classe cookie

response.addCookie(cookie) Ajoute un cookie

cookie.setMaxAge(secondes) Etablit la durée de vie d'un cookie

request.getCookies() Renvoie un tableau de cookies

cookie.getName() Renvoie le nom d'un cookie

cookie.getValue() Renvoie la valeur d'un cookie

cookie.getMaxAge() Renvoie la durée de vie d'un cookie

(46)

1.3.3.2 Exemple

Objectif Ecrire et lire un cookie.

Ecrans

(47)

Scripts

Ecriture des cookies CookieSaisie.html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

<head>

<title>CookieSaisie.html</title>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

</head>

<body>

<form method="get" action="../jsp/CookieCreer.jsp">

<label>Pr&eacute;nom : </label>

<input type="text" name="prenom" value="Julia" />

<label>Nom : </label>

<input type="text" name="nom" value="Roberts" />

<input type="submit" value="Valider" />

</form>

</body>

</html>

CookieCreer.jsp

<%@page contentType="text/html" pageEncoding="UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"

"http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>CookieCreer.jsp</title>

</head>

<body>

<%

Cookie lCookieNom, lCookiePrenom;

lCookieNom = new Cookie("nom", request.getParameter("nom"));

lCookieNom.setMaxAge(3600); // --- Une heure response.addCookie(lCookieNom);

lCookiePrenom = new Cookie("prenom", request.getParameter("prenom"));

response.addCookie(lCookiePrenom);

%>

<label>Les cookies sont cr&eacute;&eacute;s</label>

</body>

</html>

(48)

CookieAfficher.jsp

<%@page contentType="text/html" pageEncoding="UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"

"http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>CookieAfficher.jsp</title>

</head>

<body>

<%

Cookie laCookie[];

Cookie lCookie;

String lsNomCook, lsValeurCook;

laCookie = request.getCookies();

if(laCookie != null) {

for(int i=0; i<laCookie.length; i++) {

lCookie = laCookie[i];

lsNomCook = lCookie.getName();

if(lsNomCook.equals("nom") || lsNomCook.equals("prenom")) {

lsValeurCook = lCookie.getValue();

out.println(lsNomCook + ":" + lsValeurCook + "<br />");

} } } %>

</body>

</html>

(49)

Exercices

1- Détruisez les cookies précédents.

2 - Gestion de panier avec un cookie.

(50)

1.3.4 L'interface session 1.3.4.1 Définition et méthodes

Cette interface permet de créer une session entre un client et un serveur HTTP.

La session persiste pendant une période de temps déterminée, du début de la connexion du client jusqu'à sa déconnexion. Une session correspond à un utilisateur. Le serveur lors d'une session peut créer des variables de session (si les cookies sont acceptés).

L'interface session permet de référencer le contexte de la session.

Il correspond à une instance de javax.servlet.http.HttpSession.

Les principales méthodes sont les suivantes :

Méthode Fonction

setAttribute("nomDeVariable", "valeur") Crée et/ou affecte une valeur à une variable de session Var = getAttribute("nomDeVariable") Récupère une valeur d'une variable de session

removeAttribute("nomDeVariable") Supprime une variable de session

getId() Récupère l'ID de la session

isNew() Récupère True ou False selon l'état de la session

(51)

1.3.4.2 Exemple

Objectif

Créer et utiliser une variable de session et contrôler l'état de la session.

Trois variables sont créées (Les valeurs devraient provenir de saisies de l'utilisateur dans une page html ou jsp) et sont ensuite récupérées.

Ecrans

(52)

<%@page contentType="text/html" pageEncoding="UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"

"http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>session_1.jsp</title>

</head>

<body>

<%

String lsLogin = "Pascal";

String lsMdp = "secret";

int liCtr = 0;

session.setAttribute("login", lsLogin);

session.setAttribute("mdp", lsMdp);

session.setAttribute("Entier", Integer.toString(liCtr));

%>

L'id de la session est : <%= (String)session.getId() %>

<br />La session est-elle nouvelle ? <%= session.isNew() %>

<br /><a href="session_2.jsp">Afficher les variables de session</a>

</body>

</html>

<%@page contentType="text/html" pageEncoding="UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"

"http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>session_2.jsp</title>

</head>

<body>

Votre login : <%= (String)session.getAttribute("login") %>

<br />Votre mot de passe : <%= (String)session.getAttribute("mdp") %>

<br />L'id de la session est : <%= (String)session.getId() %>

<br />La session est-elle nouvelle ? <%= session.isNew() %>

</body>

</html>

Exercice

Détruisez la variable de session [mdp].

(53)

1.3.5 L'objet application (ServletContext) 1.3.5.1 Définition et méthodes

L'objet application permet de référencer le contexte de l'application.

Il correspond à une instance de javax.servlet.ServletContext.

Les principales méthodes sont les suivantes :

Méthode Fonction

setAttribute("nomDeVariable", valeur) Crée une variable de niveau application

getAttribute("nomDeVariable") Renvoie la valeur d'une variable de niveau application getInitParameter("nom d'un paramètre

d'init de web.xml") Renvoie le paramètre d'initialisation getMimeType("nomDeFichier") Renvoie le type mime d'un fichier getRealPath("chemin") Renvoie le chemin absolu du site

getServerInfo() Renvoie des informations sur le serveur de servlets

getMajorVersion() Version

getMinorVersion() Version

getResourceAsStream("/ressource") Lit un flux Exemples

<%

out.println(request.getServerName() + ":" + request.getServerPort() + request.getContextPath());

%>

renvoie : localhost:8085/WebAppJSP alors que

<%

out.println(application.getRealPath("/"));

%>

renvoie : C:\___pascal\supports\java_supports\projetsJava\WebAppJSP\build\web\

MimeType()

<%

String mimeType;

mimeType = application.getMimeType("execute.gif"); // --- renvoie image/gif //mimeType = application.getMimeType("julia3.jpg"); // --- renvoie image/jpeg //mimeType = application.getMimeType("fichier.txt"); // --- renvoie text/plain //mimeType = application.getMimeType("Redirect.html"); // --- renvoie text/html //mimeType = application.getMimeType("jsp_02_07.jsp"); // --- renvoie null out.println("<br/>" + mimeType);

// etc

%>

(54)

1.3.5.2 Exemple

Objectif

Utiliser l'objet application, en gérant un compteur global, …

Ecran

Script

<%@page contentType="text/html" pageEncoding="UTF-8"

import="java.util.Enumeration,java.io.*" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"

"http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>application_2.jsp</title>

</head>

<body>

<%!

String isCompteur = null;

int iiCompteur = 0;

%>

<%

out.println("Server information : " + application.getServerInfo());

// --- Parametres d'init Enumeration parametresInit;

parametresInit = application.getInitParameterNames();

while(parametresInit.hasMoreElements()) {

Object suivant = parametresInit.nextElement();

out.println("<br/>Init param : " + suivant.toString());

}

// --- Variable globale

isCompteur = (String)application.getAttribute("compteurGlobal");

if(application.getAttribute("compteurGlobal") == null) application.setAttribute("compteurGlobal", "0");

Références

Documents relatifs

• La persistance des données des objets peut se faire via une base de données

Pour calculer la valeur d’une fonction f d´efinie par une expression pour une valeur donn´ee de l’ensemble de d´efinition A, il faut remplacer dans l’expression la variable par

Nous donnons l’´etat de la machine apr`es ex´ecution de chacune des instructions du programme, autrement dit, l’´etat des entr´ees, l’´etat des sorties, et de la m´emoire

Dans ce cas l’exception n’est pas rattrap´ee dans le corps et comme elle n’est ni dans la cat´egorie Error ni dans la cat´egorie RuntimeException, on la d´eclare comme

liste des paramètres pour les méthodes (ou les constructeur) avec leur type et le type de retour de la méthode ;. type de chaque attribut ou

class EcouteSouris extends MouseMotionAdapter { public void mouseMoved(MouseEvent e){..

Q1 Cr´eer une classe ex2.CustomSlider qui permet de choisir un entier `a l’aide d’une classe JSlider et affiche la valeur dans un JTextField, comme illustr´e ci-dessous. Q2 On

However within static methods and different class ( when instance variables are given accessibility) the should be called using the fully qualified