Institut Supérieur des Etudes Technologiques de Bizerte
Département Technologies de l’informatique
Parcours :
Unité d’Enseignement :
Matière
Développement des Système d’Informations
Environnement de Développement
Atelier Initiation J2EE
Atelier N°3 : Transmission de données entre JSP et Servlet
Objectifs
Savoir circuler des données entre la JSP et la Servlet.
Savoir différencier entre attribut et paramètre d’une requête.
Contenu
I. Données issues du serveur : les attributs
II. Données issues du client : les paramètres
I. Données issues du serveur : les attributs
Transmettre des variables de la servlet à la JSP
SERVLET
attributs
JSP
La requête HTTP passe au travers de la servlet avant d'être transmise à la vue.
Travail à faire :
1. Créez une chaîne de caractères depuis votre servlet, et transmettez-la à la vue pour
affichage.
public void doGet( HttpServletRequest request, HttpServletResponse response )
throws ServletException, IOException{
String message = "Transmission de variables : OK !";
request.setAttribute( "test", message );
this.getServletContext().getRequestDispatcher( "/WEB-INF/test.jsp" ).forward(
request, response );
}
Atelier Environnement de Développement
Page 1
Il suffit d'appeler la méthode setAttribute() de l'objet requête pour y enregistrer un
attribut : Cette méthode prend en paramètre le nom que l'on souhaite donner à l'attribut
suivi de l'objet lui-même.
Ici, l'attribut créé est une simple chaîne de caractères - un objet de type String – qui prend
Publicité
le nom test lors de son enregistrement dans la requête.
Ne confondez pas le nom que vous donnez à votre objet au sein du code
et le nom que vous donnez à l'attribut au sein de la requête.
Ici notre objet se nomme message mais par la suite son nom sera test ; l'attribut qui
contient cet objet dans la requête. Côté vue, c'est par ce nom d'attribut que vous pourrez
accéder à votre objet.
Travail à faire :
2. Faites une analogie avec la servlet pour récupérer les attributs depuis votre JSP.
**il suffit d'appeler setAttribute()pour créer un attribut dans une requête depuis une
servlet.
** il suffit d'appeler la méthode getAttribute() pour récupérer l’attribut depuis une JSP.
Solution :
<%@ page pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Test</title>
</head>
<body>
<p>Ceci est une page générée depuis une JSP.</p>
<p>
<%
String attribut = (String) request.getAttribute("test");
out.println( attribut );
%>
</p>
</body>
</html>
Atelier Environnement de Développement
Page 2
**Dans une JSP on peut inclure du code Java dans une page en entourant ce code des
balises <% et %>.
II. Données issues du client : les paramètres
Transmettre des variables de la JSP à la Servlet
JSP
paramètre
Publicité
Servlet
Qu'est-ce qu'un paramètre de requête ?
La méthode GET du protocole HTTP permet au client de transmettre des données au
serveur en les incluant directement dans l'URL, dans ce qui s'appelle les paramètres
(ou query strings). C’est cela que nous allons apprendre à manipuler ici :
Travail à faire :
3. Rendre votre projet interactif, en autorisant le client à transmettre des informations
au serveur.
La forme de l'URL
Les paramètres sont transmis au serveur directement via l'URL. Voici des exemples des
différentes formes qu'une URL peut prendre :
<!-- URL sans paramètres -->
/page.jsp
<!-- URL avec un paramètre nommé 'cat' et ayant pour valeur 'java' -->
/page.jsp?cat=java
<!-- URL avec deux paramètres nommés 'lang' et 'admin', et ayant pour valeur
respectivement 'fr' et 'true' -->
/page.jsp?lang=fr&admin=true
À retenir :
Atelier Environnement de Développement
Page 3
le premier paramètre est séparé du reste de l'URL par le caractère « ? ».
les paramètres sont séparés entre eux par le caractère « & ».
une valeur est attribuée à chaque paramètre via l'opérateur « = ».
Remarque : Pour la méthode GET : la taille d'une URL est limitée d’où la taille des
données à envoyer est limitée également.
Lorsqu’ on a beaucoup de contenu à transmettre ou qu’on ne connaisse pas
à l'avance la taille des données qui vont être envoyées par le client, on utilise la
méthode POST.
Lorsque on envoie des données au serveur et qu'elles vont avoir un impact sur la
ressource demandée (MAJ), on passe par la méthode POST.
-Récupération des paramètres par le serveur-
4. Modifiez votre exemple afin d'y inclure la gestion d'un paramètre nommé auteur :
public void doGet( HttpServletRequest request, HttpServletResponse response )
throws ServletException, IOException{
Publicité
String paramAuteur = request.getParameter( "auteur" );
String message = "Transmission de variables : OK ! " + paramAuteur;
request.setAttribute( "test", message );
this.getServletContext().getRequestDispatcher( "/WEB-INF/test.jsp"
).forward( request, response );
}
Il suffit de faire appel à la méthode getParameter() de l'objet requête, en lui passant
comme argument le nom du paramètre que l'on souhaite récupérer. La méthode retournant
directement le contenu du paramètre (paramAuteur).
Atelier Environnement de Développement
Page 4
<%@ page language="java" contentType="text/html; charset=ISO-8859-
1"
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=ISO-
8859-1">
<title>Insert Test here</title>
</head>
<body>
<p>Ceci est une JSP.</p>
<%
String attribut = (String)request.getAttribute("test");
out.println(attribut);
%>
</body>
</html>
Pour montrer que la servlet récupère bien les données envoyées par le client, ajoutez le
contenu de cette String au message que vous transmettez ensuite à la JSP pour affichage.
Si vous appelez à nouveau votre servlet depuis votre navigateur, rien ne va changer. Mais si
cette fois vous l'appelez en ajoutant un paramètre nommé auteur à l'URL, par exemple :
http://localhost:8080/test/toto?auteur=MyName
Alors vous observerez que le message affiché dans le navigateur contient bien la valeur du
paramètre précisé dans l'URL :
Publicité
Ajoutez le code suivant :
<%
String attribut = (String) request.getAttribute("test");
out.println( attribut );
String parametre = request.getParameter( "auteur" );
out.println( parametre );
%>
Atelier Environnement de Développement
Page 5
En procédant ainsi, lorsque nous appelons l'URL en y précisant un paramètre
nommé auteur, nous obtenons bien le résultat escompté : notre JSP affiche une seconde
fois "MyName", cette fois en récupérant directement la valeur du paramètre depuis la
requête HTTP.
Si vous ne précisez pas de paramètre auteur dans l'URL, alors la
méthode getParameter() retourne null en lieu et place du contenu attendu.
Question :
Quelle est la différence entre les paramètres et les attributs ?
Il ne faut pas faire de confusion :
les paramètres de requête sont un concept appartenant au protocole HTTP. Ils
sont envoyés par le client au serveur directement au sein de l'URL, et donc sous
forme de chaînes de caractères. Il n'est pas possible de forger des paramètres dans
l'objet HttpServletRequest, il est uniquement possible d'y accéder en lecture.
les attributs de requête sont un concept appartenant au conteneur Java, et sont
donc créés côté serveur : c'est au sein du code de l'application que l'on procède à leur
initialisation, et qu'on les insère dans la requête, à savoir l'objet HttpServletRequest.
Contrairement aux paramètres, ils ne sont pas présents directement dans la requête
HTTP mais uniquement dans l'objet Java qui l'enveloppe, et peuvent contenir
n'importe quel type de données. Ils sont utilisés pour permettre à une servlet de
communiquer avec d'autres servlets ou pages JSP.
En résumé, les paramètres de requête sont propres au protocole HTTP et font
partie intégrante de l'URL d'une requête, alors que les attributs sont des objets
purement Java créés et gérés par le biais du conteneur.
Atelier Environnement de Développement
Page 6