CoursJEE-PrBelangour Chapitre2
CoursJEE-PrBelangour Chapitre2
CoursJEE-PrBelangour Chapitre2
Une Servlet:
● Reçoit des requêtes HTTP d’un client Web
● Effectue traitement
1
Servlets et protocole HTTP
Les servlets s’appuient sur le protocole HTTP pour communiquer avec le client.
Requête HTTP
Réponse HTTP
Le protocole HTTP
HTTP = HyperText Tranfert Protocol
Création des
en-têtes
envoi des en-têtes formatage des
HTTP de réponse données
Client (navigateur)
SOA - Pr. Abdessamad Belangour 19
2
Le protocole HTTP : Fonctionnement
Serveur
Client
Web
HTTP
Connexion
:SocketServer
:Socket
GET / doc.html Port = 80
IPS =….
accept()
Port = 80
Réponse HTTP (OK)
Doc.html
Status=200
:Socket
Déconnexion IPC =….
Port = ….
● POST : Pour soumissionner des formulaires (Envoyer, dans la requête, des données saisies
par l’utilisateur )
● HEAD permet de récupérer les informations sur un document (Type, Capacité, Date de
dernière modification etc…)
3
Le protocole HTTP : Forme d’une requête 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
….
….
Post http://www.site.ma
HTTP/1.0
Entête
Accept : text/html
Accept-Language : fr
User-Agent : Mozilla/4.0
Ligne vide
*** saut de ligne ***
4
Le protocole HTTP : Requête de type GET
Ligne vide
*** saut de ligne ***
Corps de la requête
(VIDE)
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
<!DOCTYPE html>
<HTML>
<HEAD>…. </HEAD>
<BODY> …. </BODY>
</HTML>
5
Le protocole HTTP et Types MIME
MIME veut dire Multipurpose Internet Mail Extensions
Standard utilisé entre autres pour typer les documents transférés par le
protocole HTTP
● Exemples :
Content-type: image/gif (Images gif )
Moteur de servlets
Une Servlet ne tourne pas directement sur un serveur Web : Elle a besoin de
tourner sur un Moteur de Servlet
Est connu aussi par conteneur de servlets (en anglais Servlet Container)
Requête HTTP
6
Moteur de servlets
Un moteur de Servlets prend en charge et gère les servlets:
● chargement de la servlet
Dans le reste du cours et des TP, nous utiliserons le conteneur Tomcat pour
déployer nos servlets.
Jakarta Tomcat
Tomcat est une Implémentation de référence de la spécification JEE
7
Jakarta Tomcat
Disponible pour téléchargement à l’adresse suivante :
https://tomcat.apache.org/
Existe en
● Version zip (non installable)
8
Jakarta Tomcat : version zip
Les script de demarrage de tomcat sont logés dans le dossier « bin » de tomcat :
● « Startup.bat » pour le demarrage
Remarque :
● L’avantage de la version zip est que vous pouvez déplacer Tomcat facilement
9
Jakarta Tomcat
Page d’accueil de Tomcat : http://localhost:8080
Tomcat Manager
Les applications hébergée sur Tomcat peuvent être gérées (démarrées, arrêtées,
rechargées) grâce au Tomcat Manager.
10
Tomcat Manager
Tomcat manager requière un login et un mot de passe.
Il fournit deux modes de gestion de Tomcat :
● Une gestion à partir de son interface graphique représentée par le rôle manager-gui
● Une gestion à travers un script (réservées aux IDE comme Eclipse et Netbeans)
représentée par le rôle manager-script
Ces deux modes de gestion peuvent être éditées à travers le fichier
« tomcat-users.xml » dans le dossier «conf » de Tomcat
Exemple (pour la version 9):
<user username="adminGui" password=" adminGui" roles="manager-gui"/>
<user username="adminScript" password="adminScript" roles="manager-script"/>
Tomcat Manager
11
Hiérarchie des dossiers Tomcat
Organisation partielle des dossiers de Tomcat
Dossier de déploiement
Optionnel en cas
d'annotations
Déploiement d'une Servlet dans 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
bibliothèques
22/11/2019 cours JEE - Dr. Abdessamad Belangour 39 39
12
Une première Servlet
Une Servlet est :
● Classe Java
● Qui a besoin d’une certaine configuration pour tourner sur le Web côté serveur
Nous allons écrire une Servlet qui écrit Hello World en HTML
13
Une première Servlet
Remarques :
● La méthode doGet (resp. doPost) traite les requêtes envoyées avec GET (resp. POST)
● La méthode doGet (resp. doPost) prend deux paramètres :
Un paramètre de type HttpServletRequest représentant la requête client
● L'objet HttpServletRequest permet d’extraire toutes les informations sur le client (adresse
IP, navigateur, Domaine, paramètres d’un formulaire, etc..)
14
Une première Servlet : fichier web.xml
Le fichier « web.xml » est le fichier de configuration de l’application Web qu’on est
en cours de construire.
● Etc..
15
Une première Servlet : fichier index.html
Le fichier d’accueil par défaut des projets JEE est « index.html » ou
« index.jsp »
<!DOCTYPE html>
<html>
<head>
<title>index</title>
</head>
<body>
<a href="./salut">Cliquez ici pour lancer la Servlet</a>
</body>
</html>
Equivalent à :
● http://localhost:8080/projet/index.html
16
Une première Servlet : avec annotations
Depuis la norme Servlets 3.0 il est possible de remplacer le fichier « web.xml » par
des annotations.
Ainsi la plupart des informations contenues dans un fichier « web.xml » peut être
indiquée par des annotations et leurs attributs.
17
Une première Servlet : avec annotations
Remarque : Les annotations remplacent tout le paramétrage fait avec le fichier
web.xml sauf les fichiers de bienvenue et les pages d’erreurs.
<web-app>
<welcome-file-list>
<welcome-file>accueil.html</welcome-file>
<welcome-file>sommaire.html</welcome-file>
</welcome-file-list>
<error-page>
<error-code>404</error-code>
<location>/erreur404.html</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/erreur500.html</location>
</error-page>
</web-app>
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)
● javax.servlet.http : contient les classes pour développer des Servlets qui reposent sur le
protocole http utilisé par les serveurs web.
18
Le package javax.servlet
Le package javax.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.
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.
Le package javax.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
● Les exceptions :
ServletException : Exception générale en cas de problème durant l'exécution de la servlet
19
Le package javax.servlet.http
Le package javax.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
Le package javax.servlet.http
● Les classes :
Cookie : Classe représentant un cookie (ensemble de données sauvegardées par le browser
sur le poste client)
HttpUtils : Classe proposant des méthodes statiques utiles pour le développement de servlet
http (classe devenue obsolète)
20
Notion de Contexte
Une application Web peut être composée de plusieurs types de fichiers
(Servlets, JSP, pages html, images, sons, etc.),
Un contexte offre à chaque Servlet (ou JSP) d'une même application une
vue sur le fonctionnement de cette application.
Notion de Contexte
La description du contexte peut être faite avec :
● Pour lensemble de l’application avec le fichier « web.xml » ou
21
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.
22
L’interface d'une servlet
L’interface d’une servlet se compose des méthodes suivantes :
● la méthode init()
La méthode init()
Signature :
● public void init(ServletConfig config) throws ServletException
Fonctionnement :
● Est appelée par le conteneur à chaque instanciation de 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.
23
La méthode init()
Exemple :
● Écrire une Servlet qui compte le nombre d’utilisation d’une Servlet depuis son
chargement.
Solution :
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
La méthode init()
@Override
res.setContentType("text/plain");
compteur++;
}
cours JEE - Dr. Abdessamad Belangour 63
24
La méthode init()
Il est possible de définir des paramètres d’initialisations pour la servlet (et de
les utiliser dans la méthode init) soit avec l'annotation @WebInitParam
(comme on verra plus loin) soit au niveau du fichier web.xml.
Exemple :
<servlet>
<servlet-name>Cmp</servlet-name>
<servlet-class>Compteur2</servlet-class>
<init-param>
<param-name>compteur_initial</param-name>
<param-value>50</param-value>
<description>Valeur init du compteur</description>
</init-param>
</servlet>
La méthode init()
public class ServletCompteur2 extends HttpServlet {
private int compteur;
@Override
public void init() throws ServletException {
String initial = this.getInitParameter("compteur_initial");
try { compteur = Integer.parseInt(initial);
}
catch (NumberFormatException e) {
compteur= 0;
}
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse res) throws
ServletException, IOException {
//même traitement que l’exemple dernier…
}
}
25
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).
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.
● Exemple :
String param;
26
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])" ; }
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.
27
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).
28
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.
● Filtres de chiffrement.
Plusieurs filtres peuvent être appliqués de suite : ils sont appelés chaine de filtres
ou Filter Chain.
cours JEE - Dr. Abdessamad Belangour 72
● 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.
29
Filtres de Servlets : Définition dans le web.xml
Au niveau du fichier web.xml un filtre est défini comme suit :
<filter>
<filter-name>nomFiltre</filter-name>
<filter-class>classeFiltre</filter-class>
</filter>
<filter-mapping>
<filter-name>nomFiltre</filter-name>
<url-pattern>cheminFiltré</url-pattern>
</filter-mapping>
30
Filtres de Servlets : Exemple (suite)
<filter>
Au niveau du « web.xml »
<filter-name>MonFiltre</filter-name>
<filter-class>MonFiltre</filter-class>
<init-param>
<param-name> testParam</param-name>
<param-value>Paramètre d’initialisation</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>MonFiltre</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>AuthenFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>LogFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
31
Servlets 3.0
Depuis la norme Servlets 3.0 il est possible de remplacer le fichier « web.xml » par
des annotations.
Les annotations les plus utilisés (que nous verrons en détail plus loin) sont :
● @WebServlet : permet de déclarer une servlet
Il existe aussi des annotations pour une utilisation plus avances et sont comme suit :
● @WebListener : permet de déclarer un WebListener
● @HandlesTypes : Pour déclarer les types de classe qu'un ServletContainerInitializer peut gérer.
Servlets 3.0
● @HttpConstraint : est utilisée dans l'annotation ServletSecurity pour représenter les contraintes
de sécurité à appliquer à toutes les méthodes du protocole HTTP pour lesquelles un élément
HttpMethodConstraint correspondant ne se produit pas dans l'annotation ServletSecurity.
● @MultipartConfig : Annotation pouvant être spécifiée sur une classe Servlet, indiquant que ses
instances attendent des demandes conformes au type MIME multipart / form-data.
● @ServletSecurity : Cette annotation est utilisée dans une classe d'implémentation Servlet pour
spécifier les contraintes de sécurité à appliquer par un conteneur Servlet aux messages de
protocole HTTP.
32
L’annotation @WebServlet
Sert à déclarer une servlet avec les attributs suivants:
● String name : Nom de la servlet
L’annotation @WebServlet
Exemple :
package com.exemple;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
@WebServlet("/salut")
public class HelloWorldServlet extends HttpServlet {
@Override
public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException,
IOException {
…..
}
}
33
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
L’annotation @WebInitParam
Exemple :
….
@WebServlet(value = "/salut" , initParams = { @WebInitParam(name = "x", value = "Hello "),
@WebInitParam(name = "y", value = " World!") })
public class HelloWorldServlet extends HttpServlet {
@Override
public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException,
IOException {
res.setContentType("text/html");
PrintWriter out = res.getWriter();
out.println("<!DOCTYPE html> ");
out.println("<HTML><HEAD><TITLE> Titre </TITLE></HEAD><BODY>");
out.println(getInitParameter("x"));
out.println(getInitParameter("y"));
out.println("<BODY> Hello World </BODY></HTML>");
out.close();}
} cours JEE - Dr. Abdessamad Belangour 83
34
L’annotation @Webfilter
Sert à déclarer un filtre de servlet qui est appliqué aux URL patterns, servlets et
dispatchers.
L’annotation @Webfilter
● WebInitParam [] initParams : Tableau de paramètres d'initialisation pour ce filtre
Exemple :
● L'exemple suivant est un simple LogFilter qui affiche la valeur de Init-param test-param et
l'horodatage de l'heure actuelle sur la console.
● Cela signifie que le filtre fonctionne comme une couche entre la requête et la réponse.
● Ici, nous utilisons "/ *" pour urlPattern (filtre applicable à toutes les servlets)
35
L’annotation @Webfilter
import java.io.IOException;
import javax.servlet.annotation.*;
import javax.servlet.*;
import java.util.*;
// classe implementant l'interface Filter
@WebFilter(urlPatterns = {"/*"}, initParams = { @WebInitParam (name = "test-param", value = "paramètre
d'Initialization")})
public class LogFilter implements Filter {
public void init(FilterConfig config) throws ServletException {
String testParam = config.getInitParameter("test-param"); // récupère le paramètre init
System.out.println("Test Param: " + testParam); //affiche le paramètre init sur la console
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException,
ServletException { System.out.println("Time " + new Date().toString()); // imprime la date courante.
chain.doFilter(request,response); // repasse la requête à la chaine de filtres }
public void destroy( ) {
/* Appelée avant que l'instance de filtre ne soit supprimée du service par le conteneur Web */ }
}
cours JEE - Dr. Abdessamad Belangour 86
36
Développer une servlet http
Lecture d’une requête
37
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
Solution (1/2)
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
38
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)
Atelier 3 (suite)
On demande d’écrire une servlet qui:
● récupère ces valeurs lorsque l’utilisateur clique sur envoyer.
39
Solution (1/2)
<!DOCTYPE html>
<HTML>
<HEAD> <title> formulaires et servlets </title></HEAD>
<BODY>
<FORM method="post" action="traiterFormulaire">
Enregistrement d'un utilisateur : <br>
Nom : <INPUT type="text" name="nom"> <br>
Prénom :<INPUT type="text" name="prenom"><br>
Sexe : <br> <INPUT type="radio" name="sexe" value="M" checked>Homme<br>
<INPUT type="radio" name="sexe" value="F">Femme<br>
Fonction :<SELECT name="fonction">
<OPTION VALUE="enseignant">Enseignant</OPTION>
<OPTION VALUE="etudiant">Etudiant</OPTION>
<OPTION VALUE="ingenieur" selected>Ingénieur</OPTION>
<OPTION VALUE="retraite">Retraité</OPTION> <OPTION VALUE="autre">Autre</OPTION>
</SELECT> <br>
Loisirs : <br><INPUT type="checkbox" NAME="loisirs" value="lecture" CHECKED>Lecture <br>
<INPUT type="checkbox" NAME="loisirs" value="sport">Sport <br>
<INPUT type="checkbox" NAME="loisirs" value="voyage">Voyage<br>
Commentaire :<br><TEXTAREA rows="3" name="commentaire">Votre Commentaire</TEXTAREA><br>
<INPUT type="submit" value="Envoyer">
</FORM>
</BODY>
cours JEE - Dr. Abdessamad Belangour 94
</HTML>
Solution (2/2)
Essentiel de la servlet
…
out.println("<br><H3>Récupération des paramètres utilisateur </H3><br>") ;
out.println("<br>nom:"+request.getParameter("nom"));
out.println("<br>prénom:"+request.getParameter("prenom"));
out.println("<br>sexe:"+request.getParameter("sexe"));
out.println("<br>fonction:"+request.getParameter("fonction"));
out.println("<br>commentaire:"+request.getParameter("commentaire"));
out.println("essai de getParameterValues<br>");
out.println("<br>loisirs:<br>");
String[] valeursDeLoisirs=request.getParameterValues("loisirs");
for (int i=0 ; i < valeursDeLoisirs.length ; i++) {
out.println(valeursDeLoisirs[i]+" ");
}
… cours JEE - Dr. Abdessamad Belangour 95
40
Développer une servlet http
Création de la réponse
41
Développer une servlet http
etc...
42
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
Suivi de session
Le protocole HTTP est un protocole sans état
● L’utilisation de sessions
43
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
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
44
Suivi de session : cookies
Atelier 6
Écrire une Servlet permettant d’identifier un client par l’intermédiaire des cookies.
● Aide : vous pouvez obtenir un identifiant unique sur le temps par rapport à l’hôte sur lequel
il a été généré grâce à la méthode java.rmi.server.UID().toString().
45
Solution (1/2)
import javax.servlet.http.*;
import javax.servlet.*;
import java.io.*;
Solution (2/2)
46
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)
47
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 req, HttpServletResponse res)
throws ServletException, IOException {
res.setContentType("text/plain");
PrintWriter out = res.getWriter();
HttpSession s = req.getSession();
Integer compt= (Integer)s.getAttribute("compteur");
if (compt== null) {
compt = new Integer(1);}
else {
compt = new Integer(compt.intValue() + 1);}
s.setAttribute("compteur", compt);
out.println("Vous avez visité cette page " + compt + " fois.");
}
}
cours JEE - Dr. Abdessamad Belangour 110
Collaboration de Servlets
Les Servlets s’exécutant dans le même serveur peuvent dialoguer entre
elles
Exemple : un magasin en ligne pourrait partager les informations sur le stock des
produits ou une connexion à une base de données
Réception d’une requête par une Servlet et laisser l’autre Servlet une partie ou toute la
responsabilité du traitement
48
Collaboration de Servlets : partage d’information
La collaboration est obtenue par l’interface ServletContext
● Enumeration getAttributeNames() : retourne l’ensemble des noms de tous les attributs liés
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 req, HttpServletResponse res)
throws ServletException, IOException {
res.setContentType("text/plain"); Création d’un attribut
PrintWriter out = res.getWriter();
ServletContext context = this.getServletContext();
context.setAttribute("Specialite", "Quatre saisons");
out.println("La pizza du jour a été définie."); }
}
49
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()
Attention:
● Servlet1 ne doit pas toucher à la réponse car c’est Servlet2 qui s’en charge.
50
Partage du contrôle (forward)
Code pour servlet1
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
req.setAttribute("X", "salut");
RequestDispatcher dispat = req.getRequestDispatcher("/cheminServlet2");
dispat.forward(req,res);
}
}
res.setContentType("text/plain");
PrintWriter out = res.getWriter();
out.println("l'attribut que j'ai récupéré de servlet 1 est: "+req.getAttribute("X"));
}}
51
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, elle modifie x en "5
● Secondaire récupère encore une fois cet attribut et affiche son carré
● Principale reprend le contrôle
Remarque:
● Secondaire ne doit pas fermer la réponse par </body> car c’est Principale qui s’en
charge.
● C’est Principale qui se charge de préciser le type MiMe de la réponse.
52
Partage du contrôle (include)
Code pour Secondaire
String ch=(String)req.getAttribute("x");
int x=Integer.parseInt(ch);
53