Chapitre 2&3 [Servlets et JSP] PDF
Document Details
Uploaded by Deleted User
Dr. Abdessamad Belangour
Tags
Summary
This document provides lecture notes on Java Servlets and JSP. It covers concepts like introductions and deployments, structures, protocols and more.
Full Transcript
Chapitre 2 : Les Servlets Introduction Une Application Web est composée de plusieurs liens ou chemins (URL) Chaque lien mène à une page HTML différente En JEE chaque page renvoyée est écrite dynamiquement par une classe Java appelée « servlet » L’ensemble des fichiers co...
Chapitre 2 : Les Servlets Introduction Une Application Web est composée de plusieurs liens ou chemins (URL) Chaque lien mène à une page HTML différente En JEE chaque page renvoyée est écrite dynamiquement par une classe Java appelée « servlet » L’ensemble des fichiers composant une application Web en JEE est appelée contexte de l’application cours JEE - Dr. Abdessamad Belangour 32 1 Structure d’une application Web sous Tomcat Une application Web doit être déployée dans le dossier webapps et avoir la structure suivante: Fichier d’accueil & de présentation Descripteur de déploiement (Optionnel en cas d'annotations !) Fichiers *.class des Servlets Fichiers bibliothèques 31/10/2022 cours JEE - Dr. Abdessamad Belangour 33 33 Description du déploiement La définition des différents liens et des servlets qui en sont responsables nomServlet peut être : NomClasseServlet Soit rassemblée dans un fichier Web.xml contenant les chemins de nomServlet toutes les servlets du projet (en plus à /cheminServlet d’autres configurations) Soit définies individuellement au niveau des classes de chaque servlet @WebServlet("/cheminServlet ") en utilisation l’annotations @WebServlet cours JEE - Dr. Abdessamad Belangour 34 2 Description du déploiement index.html Exemple : Gestion des Etudiants Cas du fichier web.xml ajouter modifier supprimer rechercher AS AjouterServlet AS /ajouter MS ModifierServlet MS /modifier SS SupprimerServlet SS /supprimer RS RechercherServlet /rechercher cours JEE - Dr. Abdessamad Belangour 35 Description du déploiement Cas des annotations index.html ajouter modifier supprimer rechercher @WebServlet("/ajouter") @WebServlet("/supprimer") public class AjouterServlet extends HttpServlet { public class SupprimerServlet extends HttpServlet { … … } } @WebServlet("/modifier") @WebServlet("/rechercher") public class ModifierServlet extends HttpServlet { public class RechercherServlet extends HttpServlet { … … } } cours JEE - Dr. Abdessamad Belangour 36 3 Servlets Une Servlet: Est une classe Java fonctionnant du côté serveur Reçoit des requêtes HTTP d’un client Web Effectue traitement Ecrit une réponse HTTP dynamique renvoyée au client Web Une Servlet tourne sur un Moteur de Servlet ou conteneur de servlets (Tomcat pour notre cas) dont le rôle consiste au : chargement de la servlet gestion de son cycle de vie passage des requêtes et des réponses cours JEE - Dr. Abdessamad Belangour 37 Le protocole HTTP HTTP (HyperText Tranfert Protocol ) agit comme un protocole de Transport qui : Transporte la requête du client vers la servlet Transporte la réponse de la servlet vers le client Protocole qui permet au client de : Récupérer des documents statiques (PDF, Image,..) ou dynamiques (JSP, ASP…) Soumissionner les formulaires Une requête HTTP peut être envoyée en utilisant les méthodes suivantes: GET : Pour récupérer le contenu d’un document depuis le serveur POST : Pour soumettre des formulaires au serveur SOA - Pr. Abdessamad Belangour 38 4 Le protocole HTTP : Forme d’une requête/réponse HTTP Entête : valeur Entête : valeur Entête Entête : valeur Entête : valeur … Ligne vide *** saut de ligne *** …. …..... Corps de la requête …. …. SOA - Pr. Abdessamad Belangour 39 Le protocole HTTP : Exemple Requête Réponse HTTP/1.0 200 OK GET Nom_Script?login=val1&pass=val2&…. HTTP/1.0 Date : Wed, 15 Sep 2017 15:02:01 GMT Accept : text/html Server : Apache/1.3.24 Accept-Language : fr Last-Modified : Wed 02 Oct 2016 22:05:01 GMT User-Agent : Mozilla/4.0 Content-Type : Text/html Content-legnth : 4205 *** saut de ligne *** *** saut de ligne *** …. …. Remarque : Dans le cas d’envoi avec la méthode POST le contenu de la requête est envoyé dans son corps SOA - Pr. Abdessamad Belangour 40 5 Le protocole HTTP : Types MIME Les types des documents transportés par HTTP sont précisés grâce au MIME MIME veut dire Multipurpose Internet Mail Extensions Un type MIME est constitué comme suit : Content-type: TYPE/SOUS-TYPE Exemples : Content-type: image/gif (Images gif ) Content-type: image/jpeg (Images Jpeg ) Content-type: text/html (Fichiers HTML ) Content-type: text/plain (Fichiers texte sans mise en forme) cours JEE - Dr. Abdessamad Belangour 41 Une première Servlet Une Servlet est Classe Java, qui utilise des bibliothèques JEE pour écrire du HTML Qui a besoin d’une certaine configuration pour tourner sur le Web côté serveur comme : Le chemin virtuel qui mène à la servlet (URL pattern) Les paramètres d’initialisations Etc… Un application Web JEE est composée d’une ou plusieurs servlets Un fichier index.html (ou index.jsp) permet d’accéder aux différentes servlets cours JEE - Dr. Abdessamad Belangour 42 6 Une première Servlet : avec annotation package com.exemple; import jakarta.servlet.*; Chemin virtuel de la servlet (URL-Pattern) http://localhost:8080/projet/salut import jakarta.servlet.http.*; import java.io.*; @WebServlet("/salut") public class HelloWorldServlet extends HttpServlet { // la méthode doGet traite les requêtes envoyées avec GET @Override public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); // précision du type MIME de contenu à renvoyer au client PrintWriter out = response.getWriter(); // objet responsable d’envoyer du texte au client // rédaction du code HTML à renvoyer au client out.println(" "); out.println(" Titre "); out.println(" Hello World "); out.close(); //fermeture de l’objet Printwriter } cours JEE - Dr. Abdessamad Belangour 43 } Une première Servlet Remarques : La méthode doGet (resp. doPost) traite les requêtes envoyées avec GET (resp. POST) Elle prend deux paramètres : Un paramètre de type HttpServletRequest représentant la requête client Un paramètre de type HttpServletResponse représentant la réponse à renvoyer au client Les servlets font partie de la bibliothèque « servlet-api.jar » qui se trouve dans le dossier « lib » de Tomcat Elle se compose des packages : « jakarta.servlet » et « jakarta.servlet.http » cours JEE - Dr. Abdessamad Belangour 44 7 Une première Servlet : fichier index.html Le fichier d’accueil par défaut des projets JEE est « index.html » ou « index.jsp » index Cliquez ici pour lancer la Servlet Si le dossier contenant notre Servlet se nomme projet , le chemin d’accès à notre projet sera : http://localhost:8080/projet Equivalent à : http://localhost:8080/projet/index.html Le chemin d’accès à la servlet est : http://localhost:8080/projet/salut cours JEE - Dr. Abdessamad Belangour 45 Une première Servlet : avec fichier web.xml Le fichier « web.xml » est une alternative plus ancienne aux annotations C’est le fichier de configuration de l’application Web qu’on est en cours de construire. Il permet de donner des informations de l’application à Tomcat comme : Les noms des classes des Servlets Le nom d’affichage de l’application Le chemin virtuel pour accéder aux différents servlets Les fichiers d’accueils Etc.. 31/10/2022 cours JEE cours - Dr.JEE Abdessamad - Dr. Abdessamad Belangour Belangour 46 46 8 Une première Servlet : avec fichier web.xml Ma première application Web Hello com.exemple.HelloWorldServlet Hello /hello cours JEE - Dr. Abdessamad Belangour 47 Une première Servlet : avec fichier web.xml Remarque : Les annotations remplacent tout le paramétrage fait avec le fichier web.xml sauf les fichiers de bienvenue et les pages d’erreurs. accueil.html sommaire.html 404 /erreur404.html 500 /erreur500.html cours JEE - Dr. Abdessamad Belangour 48 9 Paramètres d’initialisation d’une servlet Une servlet peut admettre un ou plusieurs paramètres d’initialisation Un paramètre d’initialisation d’une servlet est : une variable qui a un nom et une valeur et une description Elle peut être stockée dans le fichier web.xml ou avec des annotations Récupérable au démarrage de la Servlet grâce à la méthode getInitParameter() @WebServlet(value = "/salutation" , initParams = { @WebInitParam(name = “nom", value = “Ali")}) Hello HelloServlet nom Ali nom responsable cours JEE - Dr. Abdessamad Belangour 49 Paramètres d’initialisation d’une servlet Exemple : public class SalutationServlet extends HttpServlet { private String nom; @Override public void init() throws ServletException { nom = this.getInitParameter("nom"); } @Override protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println(" "); out.println(" Titre "); out.println(" Bonjour"+ nom +""); out.close(); } } cours JEE - Dr. Abdessamad Belangour 50 10 L’annotation @WebServlet Sert à déclarer une servlet avec les attributs suivants: String name : Nom de la servlet String[] value (ou String[] urlPatterns ) : tableau des URL patterns Int loadOnStartup : valeur entière de l'indicateur de démarrage WebInitParam[] initParams : Tableau de paramètres d'initialisation pour la Servlet Boolean asyncSupported : Opération asynchrone prise en charge par la Servlet String smallIcon : Petite icône pour cette servlet, si présente String largeIcon : Grande icône pour cette servlet, si présente String description : Description de cette servlet, si présente String displayName : Nom d'affichage de cette servlet, s'il est présent cours JEE - Dr. Abdessamad Belangour 51 L’annotation @WebInitParam Sert à définir un paramètre d’initialisation pour une servlet ou un filtre. Attributs : String name : nom du paramètre d’initialisation String value : valeur du paramètre d’initialisation String description : description du paramètre d’initialisation cours JEE - Dr. Abdessamad Belangour 52 11 L'API Servlet l'API Servlet fournit un ensemble de classes et d’interfaces pour la manipulation des servlets Cet API est fourni sous forme d’un kit appelé JSDK (Java Servlet Development Kit) L'API servlet regroupe un ensemble de classes dans deux packages : jakarta.servlet : contient les classes pour développer des servlets génériques indépendantes d'un protocole jakarta.servlet.http : contient les classes pour développer des Servlets qui reposent sur le protocole http utilisé par les serveurs web. cours JEE - Dr. Abdessamad Belangour 53 Le package jakarta.servlet Le package jakarta.servlet définit plusieurs interfaces, méthodes et exceptions : Les interfaces : ServletConfig : Définit d'un objet utilisé par le conteneur de la servlet pour passer de l’information à une servlet pendant son initialisation. ServletContext : Définit un ensemble de méthodes qu’une servlet utilise pour communiquer avec le conteneur de servlets. un objet ServletContext est contenu dans un objet ServletConfig. Servlet : interface de base d'une servlet RequestDispatcher : définit un objet qui reçoit les requêtes du client et les envoie à n'importe quelle ressource (par exemple servlet, fichiers HTML ou JSP) sur le serveur. ServletRequest : Définit un objet contenant la requête du client. cours JEE - Dr. Abdessamad Belangour 54 12 Le package jakarta.servlet ServletResponse : Définit un objet qui contient la réponse renvoyée par la servlet SingleThreadModel : Permet de définir une servlet qui ne répondra qu'à une seule requête à la fois Les classes : GenericServlet : Classe définissant une servlet indépendante de tout protocoles ServletInputStream : permet la lecture des données de la requête cliente ServletOutPutStream : permet l'envoie de la réponse de la servlet Les exceptions : ServletException : Exception générale en cas de problème durant l'exécution de la servlet UnavailableException : Exception levée si la servlet n'est pas disponible cours JEE - Dr. Abdessamad Belangour 55 Le package jakarta.servlet.http Le package jakarta.servlet.http définit plusieurs interfaces et méthodes : Les interfaces : HttpServletRequest : Hérite de ServletRequest : définit un objet contenant une requête selon le protocole http HttpServletResponse : Hérite de ServletResponse : définit un objet contenant la reponse de la servlet selon le protocole http HttpSession : Définit un objet qui représente une session cours JEE - Dr. Abdessamad Belangour 56 13 Le package jakarta.servlet.http Les classes : Cookie : Classe représentant un cookie (ensemble de données sauvegardées par le browser sur le poste client) HttpServlet : Hérite de GenericServlet : classe définissant une servlet utilisant le protocole http cours JEE - Dr. Abdessamad Belangour 57 Notion de Contexte Une application Web peut être composée de plusieurs types de fichiers (Servlets, JSP, pages html, images, sons, etc.), L’ensemble des constituants d’une application est appelé Contexte de l’application. Les servlets et les JSP d’une application partagent le même contexte. Un contexte offre à chaque Servlet (ou JSP) d'une même application une vue sur le fonctionnement de cette application. cours JEE - Dr. Abdessamad Belangour 58 14 Notion de Contexte La description du contexte peut être faite avec : Pour l’ensemble de l’application avec le fichier « web.xml » ou Directement sur chacune des servlets avec les annotations. Le contexte d’une application est représenté par un objet appelé ServletContext Grâce à cet objet, il est possible d'accéder à chacune des ressources de l'application Web correspondant au contexte. cours JEE - Dr. Abdessamad Belangour 59 Notion de Contexte Quelques méthodes de l’objet ServletContext : String getInitParameter(String name) : récupère le paramètre d’initialisation de la servlet, passé en paramètre. String getServerInfo() : retourne le nom et la version du conteneur de servlet sur lequel la servlet tourne int getSessionTimeout() : retourne le temps d’expiration de la session en secondes. void log(String msg) : permet d’écrire dans le fichier journal du conteneur de servlet cours JEE - Dr. Abdessamad Belangour 60 15 L’interface d'une servlet Toute Servlet doit implémenter l’interface Servlet du package jakarta.servlet Le cycle de vie d’une servlet est géré à travers cette interface HttpServlet qui implemente l’interface Servlet Nos servlets implémentent indirectement l’interface Servlet puisqu’elles héritent de HttpServlet cours JEE - Dr. Abdessamad Belangour 61 L’interface d'une servlet L’interface d’une servlet se compose des méthodes suivantes : la méthode init() la méthode service() « interface » la méthode getServletConfig() Servlet la méthode getServletInfo() + init() + service() la méthode destroy() + getServletConfig() Nous pouvons redéfinir l’une de ces méthodes + getServletInfo() + destroy() au besoin 31/10/2022 cours JEE - Dr. Abdessamad Belangour 62 16 La méthode init() Signature : public void init(ServletConfig config) throws ServletException Fonctionnement : Est appelée par le conteneur à chaque instanciation de la servlet Lors de l'instanciation, le conteneur de servlet passe en argument à la méthode init() un objet implementant ServletConfig permettant de charger des paramètres de configuration propres à la servlet. En cas d'anomalie lors de l'appel de la méthode init(), celle-ci renvoie une exception de type ServletException et la servlet n'est pas initialisée. cours JEE - Dr. Abdessamad Belangour 63 La méthode init() Exemple : Écrire une Servlet qui compte le nombre d’utilisation d’une Servlet depuis son chargement. Solution : import jakarta.servlet.*; import jakarta.servlet.http.*; import java.io.*; public class ServletCompteur extends HttpServlet { private int compteur; @Override public void init() throws ServletException { compteur = 0; } cours JEE - Dr. Abdessamad Belangour 64 17 La méthode init() @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/plain"); PrintWriter out = response.getWriter(); compteur++; out.println("Depuis son chargement, on a accédé à cette Servlet " +compteur+" fois."); } } cours JEE - Dr. Abdessamad Belangour 65 La méthode service() Signature : public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException Fonctionnement : Cette méthode est exécutée par le conteneur lorsque la Servlet est sollicitée. Elle détermine le type de requête dont il s'agit, puis transmet la requête et la réponse à la méthode adéquate (doGet() ou doPost). Chaque requête du client déclenche une seule exécution de cette méthode. cours JEE - Dr. Abdessamad Belangour 66 18 La méthode getServletConfig() Signature : public ServletConfig getservletConfig() Fonctionnement : Renvoie un objet ServletConfig qui constitue un intermédiaire permettant d’accéder au contexte d’une application. On peut aussi utiliser ServletConfig pour récupérer un paramètre du fichier web.xml : Exemple : String param; public void init(ServletConfig config) { param = config.getInitParameter("param"); } cours JEE - Dr. Abdessamad Belangour 67 La méthode getServletInfo() Signature: public String getServletInfo() Fonctionnement : Lorsqu'elle est surchargée permet de retourner des informations sur la servlet comme l’auteur, la version, et le copyright. Ces informations peuvent être exploitées pour affichage par des outils dans les conteneurs Web. Exemple : public String getServletInfo() { return " servlet écrite par x ([email protected])" ; } cours JEE - Dr. Abdessamad Belangour 68 19 La méthode destroy() Signature : void destroy() Fonctionnement : La méthode destroy() est appelée par le conteneur lors de l'arrêt du serveur Web. Elle permet de libérer proprement certaines ressources (fichiers, bases de données...). C'est le serveur qui appelle cette méthode. cours JEE - Dr. Abdessamad Belangour 69 Le cycle de vie d'une servlet Le cycle de vie d'une Servlet est assuré par le conteneur de servlet (grâce à l’interface Servlet). Cette interface permet à la servlet de suivre le cycle de vie suivant : 1. le serveur crée un pool de threads auxquels il va pouvoir affecter chaque requête 2. La Servlet est chargée au démarrage du serveur ou lors de la première requête 3. La Servlet est instanciée par le serveur 4. La méthode init() est invoquée par le conteneur 5. Lors de la première requête, le conteneur crée les objets Request et Response spécifiques à la requête cours JEE - Dr. Abdessamad Belangour 70 20 Le cycle de vie d'une servlet 6. La méthode service() est appelée à chaque requête dans une nouvelle thread. Les objets Request et Response lui sont passés en paramètre 7. Grâce à l'objet Request, la méthode service() va pouvoir analyser les informations en provenance du client 8. Grâce à l'objet Response, la méthode service() va fournir une réponse au client 9. La méthode destroy() est appelée lors du déchargement de la Servlet, c'est-à-dire lorsqu'elle n'est plus requise par le serveur. La Servlet est alors signalée au garbage collector cours JEE - Dr. Abdessamad Belangour 71 Développer une servlet http Les étapes de développement d’une servlet sont les suivantes: 1. Lecture de la requête (représentée par l’objet HttpServletRequest ) 2. Traitement 3. Création de la réponse (représentée par l’objet HttpServletResponse) cours JEE - Dr. Abdessamad Belangour 72 21 Développer une servlet http Lecture d’une requête L’objet HttpServletRequest fournit un ensemble de méthodes pour avoir toutes les informations concernant une requête. Ces méthodes sont comme suit : String getMethod() : Récupère la méthode HTTP utilisée par le client String getHeader(String name): Récupère la valeur de l’en-tête demandée String getRemoteHost() : Récupère le nom de domaine du client String getRemoteAddr() : Récupère l'adresse IP du client cours JEE - Dr. Abdessamad Belangour 73 Développer une servlet http String getParameter(String name) : Récupère la valeur du paramètre name d'un formulaire. Lorsque plusieurs valeurs sont présentes, la première est retournée String[] getParameterValues(String name) : Récupère les valeurs correspondant au paramètre name d'un formulaire, c'est-à-dire dans le cas d'une sélection multiple (cases à cocher, listes à choix multiples) les valeurs de toutes les entités sélectionnées Enumeration getParameterNames() : Retourne un objet Enumeration contenant la liste des noms des paramètres passés à la requête String getServerName() : Récupère le nom du serveur String getServerPort() : Récupère le numéro de port du serveur cours JEE - Dr. Abdessamad Belangour 74 22 Atelier 2 Écrire une Servlet qui extrait les informations suivantes de la requête: la méthode d’envoi de la requête HTTP utilisée par le client l'adresse IP du client Le nom du serveur le numéro de port du serveur cours JEE - Dr. Abdessamad Belangour 75 Solution (1/2) import jakarta.servlet.*; import jakarta.servlet.http.*; import java.io.*; public class TestServlet extends HttpServlet { @Override public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{ response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println(" entêtes HTTP "); out.println("Method d’envoi du client :"+request.getMethod()); out.println("Adresse IP du client : "+request.getRemoteAddr()); out.println("Nom du serveur : " + request.getServerName()); out.println("Port du serveur : "+ request.getServerPort()); out.println(" "); } } cours JEE - Dr. Abdessamad Belangour 76 23 Atelier 3 Construire un formulaire HTML comprenant les informations suivantes : Nom (zone de texte) Prénom (zone de texte) Sexe (boutons radio M ou F) Fonction (options) Enseignant Étudiant (choix initial) Ingénieur Retraité Autre Loisirs (cases à cocher) Lecture Sport Voyage Commentaire (textarea) cours JEE - Dr. Abdessamad Belangour 77 Atelier 3 (suite) On demande d’écrire une servlet qui: récupère ces valeurs lorsque l’utilisateur clique sur envoyer. Affiche le nom de chaque champ et la valeur saisie par l’utilisateur cours JEE - Dr. Abdessamad Belangour 78 24 Solution (1/2) formulaires et servlets Enregistrement d'un utilisateur : Nom : Prénom : Sexe : Homme Femme Fonction : Enseignant Etudiant Ingénieur Retraité Autre Loisirs : Lecture Sport Voyage Commentaire :Votre Commentaire cours JEE - Dr. Abdessamad Belangour 79 Solution (2/2) Essentiel de la servlet … out.println("Récupération des paramètres utilisateur ") ; out.println("nom:"+request.getParameter("nom")); out.println("prénom:"+request.getParameter("prenom")); out.println("sexe:"+request.getParameter("sexe")); out.println("fonction:"+request.getParameter("fonction")); out.println("commentaire:"+request.getParameter("commentaire")); out.println("loisirs:"); String[] valeursDeLoisirs=request.getParameterValues("loisirs"); for (int i=0 ; i < valeursDeLoisirs.length ; i++) { out.println(valeursDeLoisirs[i]+" "); } … cours JEE - Dr. Abdessamad Belangour 80 25 Développer une servlet http Création de la réponse Après lecture et traitement d’une requête, la réponse à fournir à l'utilisateur est représentée sous forme d'objet HttpServletResponse. Les méthodes de l’objet HttpServletResponse sont comme suit : void setHeader(String Nom, String Valeur) : Définit une paire clé/valeur dans les en-têtes void setContentType(String type) : Définit le type MIME de la réponse HTTP, c'est-à-dire le type de données envoyées au navigateur void setContentLength(int len) : Définit la taille de la réponse void sendredirect(String location) : Permet de rediriger le client vers l'URL location cours JEE - Dr. Abdessamad Belangour 81 Développer une servlet http PrintWriter getWriter() : Retourne un objet PrintWriter permettant d'envoyer du texte au navigateur client. String setStatus(int StatusCode) : Définit le code de retour de la réponse Rappelons quelques codes de retour: Code 202 (SC_ACCEPTED) : Requête acceptée. Code 204 (SC_NO_CONTENT) : pas d’information à retourner. Code 301 (SC_MOVED_PERMANENTLY) : la ressource demandée a été déplacée. Code 400 (SC_BAD_REQUEST) : La requête est syntaxiquement incorrecte. Code 403 (SC_FORBIDDEN) : le serveur comprend la requête mais refuse de la servir. Code 404 (SC_NOT_FOUND) : la ressource demandée n’est pas disponible. etc... cours JEE - Dr. Abdessamad Belangour 82 26 Développer une servlet http Exemple : Écrire une Servlet qui effectue une redirection vers un site web donné. import jakarta.servlet.*; import jakarta.servlet.http.*; import java.io.*; public class PremiereServlet extends HttpServlet { @Override public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.sendRedirect("http://www.google.co.ma"); } } cours JEE - Dr. Abdessamad Belangour 83 Développer une servlet http Remarque : Pour éviter que la page soit rechargée à partir du cache : response.setHeader("Cache-Control","no-cache"); //HTTP 1.1 response.setHeader("Pragma","no-cache"); //HTTP 1.0 response.setDateHeader ("Expires", 0); cours JEE - Dr. Abdessamad Belangour 84 27 Suivi de session Le protocole HTTP est un protocole sans état Impossibilité alors de garder des informations d’une requête à l’autre (identifier un client d’un autre) Obligation d’utiliser différentes solutions pour remédier au problème d’état dont : L’utilisation de cookies L’utilisation de sessions cours JEE - Dr. Abdessamad Belangour 85 Suivi de session : cookies Les cookies représentent un moyen simple de stocker temporairement des informations chez un client, afin de les récupérer ultérieurement. Les cookies ont été introduits par la première fois dans Netscape Navigator Les cookies font partie des spécifications du protocole HTTP. L'en-tête HTTP réservé à l'utilisation des cookies s'appelle Set-Cookie, il s'agit d'une simple ligne de texte de la forme: Set-Cookie : nom=VALEUR; domain=NOM_DE_DOMAINE; expires=DATE La valeur d’un cookie pouvant identifier de façon unique un client, ils sont souvent utilisés pour le suivi de session cours JEE - Dr. Abdessamad Belangour 86 28 Suivi de session : cookies L’API Servlet fournit la classe jakarta.servlet.http.Cookie pour travailler avec les Cookies Cookie(String name, String value) : construit un cookie String getName() : retourne le nom du cookie String getValue() : retourne la valeur du cookie setValue(String new_value) : donne une nouvelle valeur au cookie setMaxAge(int expiry) : spécifie l’âge maximum du cookie en secondes Pour la création d’un nouveau cookie, il faut l’ajouter à la réponse (HttpServletResponse) addCookie(Cookie mon_cook) : ajoute à la réponse un cookie La Servlet récupère les cookies du client en exploitant la requête (HttpServletRequest) Cookie[] getCookies() : récupère l’ensemble des cookies du site cours JEE - Dr. Abdessamad Belangour 87 Suivi de session : cookies Code pour créer un cookie et l’ajouter au client : Cookie c = new Cookie("Id", "123"); response.addCookie(c); Code pour récupérer les cookies Cookie[] cs= request.getCookies(); String name,value; if (cs != null) { for (int i = 0; i < cs.length; i++) { name = cs[i].getName(); value = cs[i].getValue(); Remarque : … Il n’existe pas dans l’API Servlet de } } méthode permettant de récupérer la valeur d’un cookie par son nom cours JEE - Dr. Abdessamad Belangour 88 29 Atelier 6 Écrire une Servlet permettant d’identifier un client par l’intermédiaire des cookies. Pour cela nous allons stocker et chercher un cookie que nous allons appeler monID et dont la valeur est générée grâce à la méthode java.rmi.server.UID().toString() qui permet d’ obtenir un identifiant unique sur le temps par rapport à l’hôte sur lequel il a été généré. cours JEE - Dr. Abdessamad Belangour 89 Solution (1/2) import jakarta.servlet.http.*; import jakarta.servlet.*; import java.io.*; public class CookiesServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); String contenu; Cookie[] tabCookies = request.getCookies(); booelan existe=false; if (tabCookies != null) for (int i = 0; i < tabCookies.length; i++) { if (tabCookies [i].getName().equals("monId")) existe=true; } cours JEE - Dr. Abdessamad Belangour 90 30 Solution (2/2) if (tabCookies == null || existe == false) { out.println("Bonjour le nouveau…mais plus maintenant"); contenu = new java.rmi.server.UID().toString(); Cookie monCookie= new Cookie("monId", contenu); monCookie.setMaxAge(60*60*24*365); response.addCookie(monCookie); } else { out.println("Encore vous"); } out.close(); } } cours JEE - Dr. Abdessamad Belangour 91 Suivi de session : HttpSession Le plus gros problème des cookies est que les navigateurs ne les acceptent pas toujours L’utilisateur peut configurer son navigateur pour qu’il refuse ou pas les cookies Les navigateurs n’acceptent que 20 cookies par site, 300 par utilisateur et la taille d’un cookie peut être limitée à 4096 octets (4 ko) cours JEE - Dr. Abdessamad Belangour 92 31 Suivi de session : HttpSession Solutions : utilisation de l’API de suivi de session jakarta.servlet.http.HttpSession Méthodes de création liées à la requête (HttpServletRequest) HttpSession getSession() : retourne la session associée à l’utilisateur si elle existe sinon lui crée une nouvelle HttpSession getSession(boolean p) : création selon la valeur de p Gestion d’association (HttpSession) setAttribute(String an, Object av) : associe l’objet av à la chaîne an Object getAttribute(String name) : retourne l’attribut name Enumeration getAttributeNames() : retourne les noms de tous les attributs removeAttribute(String na) : supprime l’attribut associé à na Destruction (HttpSession) invalidate() : expire la session cours JEE - Dr. Abdessamad Belangour 93 Suivi de session : HttpSession Exemple : Servlet qui permet d’utiliser le suivi de session pour un compteur public class HttpSessionServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/plain"); PrintWriter out = response.getWriter(); HttpSession s = request.getSession(); Integer compt= (Integer)s.getAttribute("compteur"); if (compt== null) compt = 1; else { compt = compt+ 1);} s.setAttribute("compteur", compt); out.println("Vous avez visité cette page " + compt + " fois."); } } cours JEE - Dr. Abdessamad Belangour 94 32 Collaboration de Servlets Les Servlets s’exécutant dans le même serveur peuvent dialoguer entre elles Deux principaux styles de collaboration : Partage d’information : un état ou une ressource. Exemple : un magasin en ligne pourrait partager les informations sur le stock des produits ou une connexion à une base de données Partage du contrôle : une requête. Réception d’une requête par une Servlet et laisser l’autre Servlet une partie ou toute la responsabilité du traitement cours JEE - Dr. Abdessamad Belangour 95 Collaboration de Servlets : partage d’information La collaboration est obtenue par l’interface ServletContext L’utilisation de ServletContext permet aux applications web de disposer de son propre conteneur d’informations unique Une Servlet retrouve le ServletContext de son application Web par un appel à getServletContext() Exemples de méthodes : void setAttribute(String nom, Object o) : lie un objet sous le nom indiqué Object getAttribute(String nom) : retrouve l’objet sous le nom indiqué Enumeration getAttributeNames() : retourne l’ensemble des noms de tous les attributs liés void removeAttribute(String nom) : supprime l’objet lié sous le nom indiqué cours JEE - Dr. Abdessamad Belangour 96 33 Partage d’information Exemple : Servlets qui vendent des pizzas et partagent une spécialité du jour public class PizzasAdmin extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/plain"); Création d’un attribut PrintWriter out = response.getWriter(); ServletContext context = this.getServletContext(); context.setAttribute("Specialite", "Quatre saisons"); out.println("La pizza du jour a été définie."); } } public class PizzasClient extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/plain"); PrintWriter out = response.getWriter(); Lecture de l’attribut ServletContext context = this.getServletContext(); String pizza_spec = (String) context.getAttribute("Specialite"); out.println("Aujourd'hui, notre spécialité est : " + pizza_spec); } } cours JEE - Dr. Abdessamad Belangour 97 Collaboration de Servlets : partage du contrôle Pour une collaboration dynamique entre servlets, deux possibilités existent: Déléguer entièrement la requête à une autre servlet : méthode forward() Inclure la réponse d’une autre servlet dans la servlet en cours : méthode include() Ces deux méthodes appartiennent à l’interface RequestDispatcher du package jakarta.servlet RequestDispatcher getRequestDispatcher(String path) : retourne une instance de type RequestDispatcher par rapport à un composant Un composant peut-être de tout type : Servlet, JSP, fichier statique, … path est un chemin relatif ou absolu ne pouvant pas sortir du contexte cours JEE - Dr. Abdessamad Belangour 98 34 Partage du contrôle (forward) Soit l’exemple suivant : Une servlet (Servlet1) reçoit une requête Elle y place un attribut X qu’elle y met la chaîne "salut" Elle renvoie ensuite cette requête à une autre Servlet (Servlet2). Servlet2 récupère cet attribut et se charge de créer la réponse qu’elle renvoie à l’utilisateur. Attention: Servlet1 ne doit pas toucher à la réponse car c’est Servlet2 qui s’en charge. Après le renvoi de la requête à Servlet2, Servlet1 ne doit plus toucher à la requête. cours JEE - Dr. Abdessamad Belangour 99 Partage du contrôle (forward) Code pour servlet1 Code pour servlet2 import jakarta.servlet.*; import jakarta.servlet.*; import jakarta.servlet.http.*; import jakarta.servlet.http.*; import java.io.*; import java.io.*; @WebServlet("/servlet1") @WebServlet("/servlet2") public class Servlet2 extends HttpServlet { public class Servlet1 extends HttpServlet { @Override @Override protected void doGet(HttpServletRequest request, protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, HttpServletResponse response) IOException { throws ServletException, IOException { response.setContentType("text/plain"); request.setAttribute("X", "salut"); PrintWriter out = response.getWriter(); RequestDispatcher dispat = String attr=(String) request.getAttribute("X"); request.getRequestDispatcher(("/servlet2 "); out.println("l'attribut que j'ai récupéré de servlet 1 est: "+ attr); dispat.forward(request, response); out.close(); }} }} cours JEE - Dr. Abdessamad Belangour 100 35 Partage du contrôle (include) Soit l’exemple suivant : Une servlet (Principale) reçoit une requête Elle y place un attribut x qu’elle y met la chaîne "3" Elle inclut une autre Servlet dans le traitement (Secondaire) Secondaire récupère cet attribut et affiche son carré Principale reprend le contrôle et termine le fichier HTML Remarque: Secondaire ne doit pas fermer la réponse par car c’est Principale qui s’en charge. C’est Principale qui se charge de préciser le type MiMe de la réponse. cours JEE - Dr. Abdessamad Belangour 101 Partage du contrôle (include) Code pour Principale Code pour Secondaire @WebServlet("/principale") @WebServlet("/secondaire") public class Principale extends HttpServlet { @Override public class Secondaire extends HttpServlet { protected void doGet(HttpServletRequest request, @Override HttpServletResponse response) throws ServletException, protected void doGet(HttpServletRequest request, IOException { HttpServletResponse response) throws ServletException, response.setContentType("text/html"); IOException { PrintWriter out = response.getWriter(); PrintWriter out = response.getWriter(); out.println(""); request.setAttribute("x", "3"); String ch=(String) request.getAttribute("x"); RequestDispatcher dispat = int x=Integer.parseInt(ch); request.getRequestDispatcher("/secondaire"); out.println(" "+ x +" au carré = "+x*x+ ""); dispat.include(request, response); } out.println(""); } } } cours JEE - Dr. Abdessamad Belangour 102 36 Filtres de Servlets : Définition Les filtres de servlet sont des classes Java qui peuvent être utilisées pour : Intercepter les requêtes d'un client avant qu'il n'accède à une ressource en back-end. Manipuler les réponses du serveur avant qu'elles ne soient renvoyées au client. La spécification JEE propose plusieurs types de filtres comme : Filtres d'authentification. Filtres de chiffrement. Filtres qui déclenchent des événements d'accès aux ressources. Filtres de journalisation et d'audit… Plusieurs filtres peuvent être appliqués de suite : ils sont appelés chaine de filtres ou Filter Chain. cours JEE - Dr. Abdessamad Belangour 103 Filtres de Servlets : Interface Filter Les filtres de servlet doivent implémenter l'interface Filter qui se compose des trois méthodes suivantes: public void doFilter (ServletRequest, ServletResponse, FilterChain) : est appelée par le conteneur chaque fois qu'une paire requête / réponse est transmise à travers la chaine de filtrage avant qu’une requête client n’accède à une ressource située à la fin de la chaîne. public void init (FilterConfig filterConfig) : Cette méthode est appelée par le conteneur Web pour indiquer à un filtre qu'il est mis en service. public void destroy () : Cette méthode est appelée par le conteneur Web pour indiquer à un filtre qu'il est mis hors service. cours JEE - Dr. Abdessamad Belangour 104 37 Filtres de Servlets : Définition dans le web.xml Au niveau du fichier web.xml un filtre est défini comme suit : nomFiltre classeFiltre nomFiltre cheminFiltré cours JEE - Dr. Abdessamad Belangour 105 Filtres de Servlets : Exemple Exemple : Filtre de servlet permettant d'imprimer l'adresse IP du client et l'heure de la date actuelle. import java.io.*; import jakarta.servlet.*; import jakarta.servlet.http.*; import java.util.*; public class MonFiltre implements Filter { public void init(FilterConfig config) throws ServletException {} public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws java.io.IOException, ServletException { String ipAddress = request.getRemoteAddr(); System.out.println("IP "+ ipAddress + ", Time " + new Date().toString()); chain.doFilter(request,response); // Repasse la requête à la chaîne de filtrage } public void destroy( ) { } } cours JEE - Dr. Abdessamad Belangour 106 38 Filtres de Servlets : Exemple (suite) Au niveau du « web.xml » MonFiltre MonFiltre MonFiltre } } cours JEE - Dr. Abdessamad Belangour 112 41 Chapitre 3 : Java Server Pages (JSP) Introduction JSP : Java Server Pages Java Server Pages est une technologie qui combine Java et des Tags HTML dans un même document pour produire un fichier JSP. But : faciliter la génération dynamique de contenu de sites Web. Similitudes : PHP, ASP, etc.. cours JEE - Dr. Abdessamad Belangour 114 42 Exemple de fichier JSP test.jsp Exemple JSP la somme de 2 et 2 est cours JEE - Dr. Abdessamad Belangour 115 Serveur Web L'utilisation des JSP implique d'avoir un serveur HTTP (logiciel servant à diffuser les pages Web) disposant d'une extension capable de traiter les JSP. Exemple de serveurs HTTP gratuit supportant JSP: Tomcat proposé par la fondation Apache. JSWDK proposé par SUN Comme pour les servlets, nous travaillerons avec Tomcat. cours JEE - Dr. Abdessamad Belangour 116 43 Traitement des JSP L'interprétation d'une page contenant des instructions JSP se fait de la manière suivante : 1. L’ utilisateur demande, via son navigateur (client), un document possédant l'extension.jsp 2. Le serveur HTTP lance une servlet (application Java serveur) qui construit le code Java à partir du code contenu dans la page HTML. 3. Le programme résultant est compilé puis exécuté sur le serveur. 4. Le résultat est réintroduit dans la page renvoyée au client. cours JEE - Dr. Abdessamad Belangour 117 Traitement des JSP Test.jsp 1 Test.java Génération du code java correspondant out.println(2+2); Compilation du code 2 java Test.class 4 Génération de la page HTML 00100110….. 3 cours JEE - Dr. Abdessamad Belangour 118 44 Structure d’un fichier JSP Similaire à la structure d’un fichier HTML Elle se compose essentiellement de quatre types de tags: Tag de directive Tag de commentaire Tag de Scriplet Tag d’expression cours JEE - Dr. Abdessamad Belangour 119 Directives JSP Les directives contrôlent comment le serveur WEB doit générer la Servlet Elles sont placées entre les symboles Syntaxe : Les directives les plus importantes sont: include : indique au compilateur d’inclure un autre fichier page : définit les attributs spécifiques à une page cours JEE - Dr. Abdessamad Belangour 120 45 Directives JSP : include Cette inclusion se fait au moment de la conversion Tout le contenu du fichier externe est inclus comme s’il était saisi directement dans la page JSP Pas de séparation de la portée des variables Exemple : cours JEE - Dr. Abdessamad Belangour 121 Exemple pratique entete.html Page de démonstration index.jsp je suis dans l’entete de la page corps.jsp Bonjour piedpage.html Je suis dans le pied de page. cours JEE - Dr. Abdessamad Belangour 122 46 Directives JSP : page La directive page définit les attributs spécifiques à une page. La liste des attributs possibles pour la directive page est comme suit : Attribut exemple valeurs Description language java Indique le langage utilisé. Java par défaut extends Package.class Hérite de l’interface du package choisi. session false Si initialisé à false vous ne pouvez pas utiliser les sessions. True par défaut. import Java.util.*, *.class , Importe les classes dont vous avez besoin. java.* buffer 5 kb Taille en kb de la mémoire tampon qui contient le flux de données à imprimer sur la JSP. 8 kb par défaut. autoflush true Si à false il ne vide pas automatiquement le buffer une fois rempli. Si vous avez mis le buffer à none vous ne pouvez mettre autoFlush à false. Défaut à true. cours JEE - Dr. Abdessamad Belangour 123 Directives JSP : page Attribut Exemple de valeur Description isThreadSafe false Si à false le serveur d’applications ne permet qu’à un client à la fois d’accéder à la JSP. Défaut à true. info Ma première JSP Information qui apparaît dans le document jsp compilé et utilisé par le serveur. errorPage Erreurpage.html Adresse de la page d’erreur sur laquelle est Erreur.jsp renvoyé le visiteur en cas d’erreur (Exception) de la JSP. contentType text/html Le type MIME et le jeu de caractères à utiliser dans cette JSP. Par défaut text/html; charset=ISO-8859-1 isErrorPage true Si true la JSP peut afficher l’erreur renvoyée par l’exception. True par défaut. pageEnconding ISO-8859-1 ISO-8859-1 par défaut. cours JEE - Dr. Abdessamad Belangour 124 47 Directives JSP : page Remarque : Vous n’avez pas besoin d’importer les classes suivantes, qui le sont déjà implicitement: java.lang.* jakarta.servlet.* jakarta.servlet.http.* jakarta.servlet.jsp.* Exemple de directives : cours JEE - Dr. Abdessamad Belangour 125 Éléments de scripts JSP : commentaire Cet élément de script est utilisé pour faire un commentaire dans le code JSP Le texte dans un commentaire JSP ne sera pas envoyé au client ni compilé dans la Servlet Les commentaires sont placés entre les symboles Example.jsp: cours JEE - Dr. Abdessamad Belangour 126 48 Éléments de scripts JSP : déclaration Une déclaration permet d’insérer du code dans la classe de la Servlet Les déclarations sont placés entre les symboles Exemple: Elle peut être utilisée pour : Déclarer un attribut de classe Spécifier et implémenter des méthodes Les attributs et les méthodes déclarées dans la page JSP sont utilisables dans toute la page JSP cours JEE - Dr. Abdessamad Belangour 127 Éléments de scripts JSP : scriplet C’est un bloc de code Java qui est placé dans _jspService(…) de la Servlet générée (équivalent à service(...)) Les scriplets sont placées entre les symboles Tout code java a accès : aux attributs et méthodes définis par le tag déclaration aux objets implicites que nous verrons plus loin.... Code JSP : scriplet Code HTML HelloWorld... cours JEE - Dr. Abdessamad Belangour 128 49 Éléments de scripts JSP : expression Sert à évaluer une expression et à renvoyer sa valeur Les expressions sont placées entre les symboles Retourne une valeur String de l’expression Correspond à une scriplet de la forme Se transforme en out.println("…"); dans la méthode _jspService(…) après génération scriplet... Le ème nom est... expression cours JEE - Dr. Abdessamad Belangour 129 Éléments de scripts JSP : scriplet et objets implicites Les objets implicites sont les objets présents dans la méthode service(…) qui ont été employés dans la partie Servlet Ils sont identifiés par des noms de variables uniques : request : requête courante response : réponse courante session : session courante out : flot de sortie permet l’écriture sur la réponse application : contient des méthodes log() permettant d'écrire des messages dans le journal du contenu (ServletContext) pageContext : utilisé pour partager directement des variables entre des pages JSP et supportant les beans et les balises cours JEE - Dr.dans exception : disponible uniquement Abdessamad Belangour les pages erreurs donnant information sur les erreurs 130 50 Éléments de scripts JSP : scriplet et objets implicites Exemple : JSP qui récupère des informations du client Informations client Protocol : Scheme : ServerName : ServerPort : RemoteAddr : RemoteHost : Method : cours JEE - Dr. Abdessamad Belangour 131 Cycle de vie d’une JSP Le cycle de vie d'une Java Server Page est identique à une Servlet : La méthode jspInit() est appelée après le chargement de la page La méthode _jspService() est appelée à chaque requête La méthode jspDestroy() est appelé lors du déchargement (fermeture d'une base de données) Possibilité de redéfinir dans le code JSP les méthodes jspInit() et jspDestroy() en utilisant un élément de scripts déclaration Exemple : Bonjour tout La valeur du compteur est cours JEE - Dr. Abdessamad Belangour 132 51 Cycle de vie d’une JSP Exemple : un compteur avec une initialisation et une destruction Page avec un compteur Cette page a été visitée : fois depuis le. cours JEE - Dr. Abdessamad Belangour 133 JSP et Actions Les actions permettent de faire des traitements au moment où la page est demandée par le client utiliser des Java Beans inclure dynamiquement un fichier rediriger vers une autre page Les actions sont ajoutées à la page JSP à l'aide d'une syntaxe d'éléments XML (définis par des balises personnalisées). Exemple :... cours JEE - Dr. Abdessamad Belangour 134 52 Java Beans Permet de coder la logique métier de l'application WEB L'état d'un Bean est décrit par des attributs appelés propriétés La spécification des Java Beans définit les Beans comme des classes qui supportent Introspection : permet l'analyse d'un Bean (nombre de propriétés) Événements : métaphore de communication Persistance : pour sauvegarder l'état d'un Bean... cours JEE - Dr. Abdessamad Belangour 135 Java Beans Les Java Beans sont des classes Java normales respectant un ensemble de directives A un constructeur public sans argument Les propriétés d'un Bean sont accessibles au travers de méthodes getXXX (lecture) et setXXX (écriture) portant le nom de la propriété Lecture et écriture des propriétés type getNomDeLaPropriété() : pas de paramètre et son type est celui de la propriété void setNomDeLaPropriété(type) : un seul argument du type de la propriété et son type de retour est void En option, un Java Beans implémente l'interface java.io.Serializable permettant la sauvegarde de l'état du Bean cours JEE - Dr. Abdessamad Belangour 136 53 Exemple : classe Client public class Client { // attributs private String nom; private String adresse; //méthodes d’accès et de modification public String getNom () { return nom; } public void setNom (String nm) { nom=nm; } public String getAdresse () { return adresse; } public void setAdresse (String adr) { adresse=adr; } } cours JEE - Dr. Abdessamad Belangour 137 Java Beans et JSP Pour déclarer et allouer un Java Beans dans une page JSP il faut employer l'action Exemple : id : nom de l'instance pour identification class : Nom de la classe du bean cours JEE - Dr. Abdessamad Belangour 138 54 Java Beans et JSP scope : portée de la validité de l'objet Bean : page : Bean valide pour la requête sans transmission request : Bean valide pour la requête et peut être transmise (forward) session : Bean ayant la durée de vie de la session application : Bean créée pour l'application WEB courante cours JEE - Dr. Abdessamad Belangour 139 Java Beans et JSP : lecture propriétés Pour lire une propriété du Bean deux éléments sont utilisés La référence du Bean définie par l'attribut id Le nom de la propriété Deux manières existent pour interroger la valeur d'une propriété et la convertir en String En utilisant un tag action Syntaxe: En utilisant l'élément de scripts JSP : expression cours JEE - Dr. Abdessamad Belangour 140 55 Java Beans et JSP : écriture propriétés Modification de la valeur d'une propriété en utilisant Syntaxe: cours JEE - Dr. Abdessamad Belangour 141 Java Beans et JSP : lecture et écriture propriétés Exemple : Soit le java bean suivant : package toto; public class Client { private String nom; private String adresse; public String getNom () { return nom; } public void setNom (String nm) { nom=nm; } public String getAdresse () { return adresse; } public void setAdresse (String adr) { adresse=adr; } } Attention : les classes des beans doivent ! être mise dans le répertoire WEB-INF/classes cours JEE - Dr. Abdessamad Belangour 142 56 Java Beans et JSP : lecture et écriture propriétés Exemple d’utilisation du bean précédent: Page pour lecture d'information Nom du Client : Adresse du Client : cours JEE - Dr. Abdessamad Belangour 143 Java Beans et JSP : lecture et écriture propriétés Modification de l'ensemble des propriétés : Exemple : Condition : Les noms des paramètres de requête doivent être identiques aux noms des propriétés cours JEE - Dr. Abdessamad Belangour 144 57 Java Beans et JSP : lecture et écriture propriétés Exemple : Soit le fichier « index.html » suivant cours JEE - Dr. Abdessamad Belangour 145 Java Beans et JSP : lecture et écriture propriétés Bean Etudiant cours JEE - Dr. Abdessamad Belangour 146 58 Java Beans et JSP : lecture et écriture propriétés Fichier « afficher.jsp » cours JEE - Dr. Abdessamad Belangour 147 Java Beans et JSP : scope Toute variable dans une page JSP a une portée Il y a 4 types de portées : Portée Page : la variable n’est reconnue qu’au sein de la page Portée Request : la variable est reconnue là ou la requête est partagée Portée Session : la variable est reconnue tant que la session de l’utilisateur est reconnue Portée Application : la variable est reconnue dans toute l’application quelque soit la page, quelque soit la requête, quelque soit l’utilisateur. cours JEE - Dr. Abdessamad Belangour 148 59 Java Beans et JSP : scope Exemple : affectation et récupération des valeurs d'un Java Bean Soit le java bean suivant : Package toto; public class TestBean{ private String contenu; public String getContenu () { return contenu; } public void setContenu (String c) { contenu=c; } } cours JEE - Dr. Abdessamad Belangour 149 Java Beans et JSP : scope Utilisation du bean avec différentes portées dans une première JSP. Utilisation du bean Avant b1 = b2 = b3 = cours JEE - Dr. Abdessamad Belangour 150 60 Java Beans et JSP : scope Récupération du bean avec différentes portées dans une deuxième JSP. Récupération du bean Après b1 = b2 = b3 = cours JEE - Dr. Abdessamad Belangour 151 Java Beans et JSP : scope Les résultats de ces deux jsp est comme suit : Avant b1 = page b2 = session b3 = application Après b1 =null b2 = session b3 = application cours JEE - Dr. Abdessamad Belangour 152 61 Collaboration de JSP Rappel sur la collaboration (voir partie Servlet) partage d’information : un état ou une ressource partage du contrôle : une requête Processus identique à la collaboration de Servlet pour le partage d’information et de contrôle Partage d’information : Utilisation du contexte pour transmettre des attributs Méthode getContext(…), setAttribute(…) et getAttribute(…) Partage du contrôle : Utilisation des tags action JSP include et forward cours JEE - Dr. Abdessamad Belangour 153 Partage d’information Le partage se fait grâce à l’objet implicite application qui est de type ServletContext Exemple : transmettre un simple attribut à tout un contexte Page1.jsp : Enregistrement dans le contexte d'un attribut Page2.jsp : cours JEE - Dr. Abdessamad Belangour 154 62 Partage du contrôle forward: Exemple1 : renvoi sans passage de paramètres Exemple2 : renvoi avec passage de paramètres Remarque : ne pas modifier l’objet response Ne pas modifier l’objet request après le renvoi Include : Exemple1 : inclusion sans passage de paramètres Exemple2 : inclusion avec passage de paramètres cours JEE - Dr. Abdessamad Belangour 155 Partage du contrôle Remarques : Le partage du contrôle et plus précisément l’inclusion et le renvoi par des balises actions ne permettent que le transfert d’attributs de types chaînes de caractères. Nécessité d’utiliser RequestDispatcher et les objets implicites request et response pour transférer des attributs objets Exemple pour une inclusion (même chose pour un renvoi) cours JEE - Dr. Abdessamad Belangour 156 63