Vous êtes sur la page 1sur 3

4IIR : Outils de développement 3 - JEE Pr. C.

AZROUMAHLI

TP 4 : Synchronisation et exécution sûre lors de l’ajout d’une nouvelle donnée

Pour ce TP, nous utilisons la solution « JEE_DEMO3.rar ». Vous pouvez se guider par le fichier « JEE_DEMO4_Code_Snippets.pdf »
disponible sur Teams volet (S2-JEE).

Etape 1 : Ouvrir une application Web JEE

 Après l’extraction de « JEE_DEMO3.rar ». Dans l’IDE Eclipse, copier les fichiers dans l’emplacement du projet « JEE_DEMO »
 Modifier les parameter de projet web : proprieties >Web Project Settings.
 Redémarrer le serveur et exécuter le projet pour vérifier la configuration de l’application.
 Noter bien, la nouvelle arborescence de votre projet : le contenu de « src/main/java », de « webapp/ressources » et de
« webapp/WEB-INF/Views »

Etape 2 : Validation des données d’un formulaire

 Pour ce TP on nous allons seulement vérifier si les valeurs sont nulles. En réalité, vous pouvez ajouter toutes les conditions
dont votre application a besoin.
 Mettre un attribut errors (attribut de la requête HttpRequest) à faux :
o Ouvrir le fichier « com.emsi.Controllers/Contact.java » qui contient la classe Contact
o Dans la méthode doPost(), avant de tester la validité des données nous allons Ajouter la méthode :

request.setAttribute("errors", false);

 Utiliser la méthode setAttribute de l’objet httpRequest pour enregistrer les erreurs d’un formulaire :
o Zoomer sur les paramètres un à un en ajoutant des attributs d’erreur spécifique pour chaque erreur :

//Validation des données


if(firstName.length()==0 || lastName.length()==0 || email.length()==0 ) {
request.setAttribute("errors", true);
request.setAttribute("coordonees_error", true);
System.out.println("Veuillez saisir des coordonnées valides : Nom prénom et email");
}
if(msg.length()==0) {
request.setAttribute("errors", true);
request.setAttribute("msg_error", true);
System.out.println("Veuillez saisir un message valide");
}
 Redémarrer le serveur et exécuter le projet pour vérifier la configuration de l’application.

Etape 3 : Afficher les messages d’erreurs du formulaire

 La méthode doGet(request, response); permet de appeler la méthode doGet() de la servlet.


 Ajouter une méthode de redirection vers la page JSP dans les cas d’erreur :
o Ouvrir le fichier « com.emsi.Controllers/Contact.java » qui contient la classe Contact.
o Dans la méthode doPost(), supprimer la méthode : doGet(request, response);
o Après l’étape de validation d’erreur ajouter la condition ci-dessous :
//affichage de message d'erreur
if ((Boolean) request.getAttribute("errors")) {
RequestDispatcher view = request.getRequestDispatcher("WEB-INF/views/Contact.jsp");
view.forward(request, response);
}
Page 1 sur 3
4IIR : Outils de développement 3 - JEE Pr. C. AZROUMAHLI
Rappel : Pour insérer du code Java dans du code HTML, nous utiliserons ce que nous appelons par des scriptlets en se
servant des symboles <% code java %>pour délimiter le code java dans celui de l’HTML.

 Afficher les messages d’erreur dans la page JSP :


o Ouvrir le fichier « WEB-INF/views/Contact.jsp ».
o Ajouter du code scriptlet pour afficher les champs d’erreurs avant le formulaire de contact, dans le cas où une erreur
est soulevée :

<% if ((boolean) request.getAttribute("errors")) { %>


<div>
<h4>Errors</h4>
<ul>
<% if (request.getAttribute("coordonees_error") != null) { %>
<li class="error">Veuillez saisir des coordonnées valides </li>
<% } %>
<% if (request.getAttribute("msg_error") != null) { %>
<li class="error">Veuillez saisir un message valide</li>
<% } %>
</ul>
</div>
<% } %>

 Redémarrer le serveur et exécuter le projet pour vérifier la configuration de l’application, qu’est-ce que vous remarquez ?
 Comment pouvons-nous résoudre ce problème ? (Indication : modifier l’attribut errors dans la méthode doget()).

………………………………………………………………………………………………………………………………………………………………………………………………

………………………………………………………………………………………………………………………………………………………………………………………………

Etape 4 : Manipulation des données valides du formulaire soumis

 Dans le cas où aucune erreur est soulevée, enregistrez les données saisies par l’utilisateur :
o Ouvrir le fichier « com.emsi.Controllers/Contact.java » qui contient la classe Contact.
o Avant le constructeur public Contact(){} ajouter l’attribut contactMsg un objet de type ContactDob :

Private ContactDob contactMsg=new ContactDob();

o Dans la méthode doPost(), dans la partie else() de la partie de validation des données, utiliser les setters de la
classe ContactDob pour sauvegarder les données saisies par l’utilisateurs :

//affichage des message d'erreur


if ((Boolean) request.getAttribute("errors")) {…}
else {
contactMsg.setFirstName(firstName);
contactMsg.setLastName(lastName);
contactMsg.setGender(Gender.valueOf(gender));
contactMsg.setMsg(msg);
contactMsg.setDateMsg(dateMsg);
contactMsg.setEmail(email);
}
 A l’aide de la fonction sendRedirect de la requête HttpResponse, rediriger la servlet Contact vers la servlet Index :
o Après avoir enregistrer les données du message envoyés, ajouter la méthode de redirection :
response.sendRedirect("Index");

 Redémarrer le serveur et exécuter le projet pour vérifier la configuration de l’application.

Page 2 sur 3
4IIR : Outils de développement 3 - JEE Pr. C. AZROUMAHLI
Etape 5 : Création d’une servletListner

 L’écouteur servletListner est un objet qui va garder les informations des objets manipuler dans le context, lors de
l'exécution de l’application. Ce contexte est actif tant que l’application est en cours d’exécution
 Créer un objet présentant le contexte de la servlet :
o Ouvrir le fichier « com.emsi.Controllers/Contact.java » qui contient la classe Contact.
o Avant la redirection vers la servlet Index, ajouter la déclaration du ServletContext :
ServletContext sc=this.getServletContext();

 Définir l’attribut contactMsg de ServletContext, après la définition du contexte.


ArrayList<ContactDob> msgList = (ArrayList<ContactDob>) sc.getAttribute("msgs");
msgList.add(contactMsg);
sc.setAttribute("msgs", msgList);

 Au lieu de créer à chaque fois une nouvelle liste (ArrayList<ContactDob> msgList = new ArrayList<ContactDob>()), nous
allons récupérer la liste existante à partir du contexte de la servlet. De cette manière si la liste existe déjà alors nous allons
ajouter à cette liste et non la remplacer.

 La première fois un formulaire est soumis, la liste est vide ! C’est-à-dire que l’attribut msgList n’est pas encore définit dans
le contexte de la servlet ! Ainsi ArrayList<ContactDob> msgList = (ArrayList<ContactDob>) sc.getAttribute("msg"); égale
à NULL.

 Création d’un ServletListner pour l’application :


o A partir du package « com.emsi.controllers », créer un nouveau fichier de type Listner (bouton droit> new>
Listner)
o Donner un nom à votre Listner « EmsiListner », choisir le type Lifecycle et finir.

 Faites attention que le servlet utilise la bibliothèque jakarta. Si non, changer la bibliothèque javax par jakarta.

 Ici, le Listner est Lifecycle Listner dans les événements de contexte de servlet (Servlet context events). Le
contexte de la servlet va être créé et ce Listner va écouter la création du contexte de servlet lorsque l’application
démarre la première fois.
 Ajouter les deux méthodes : contextInitialized(…) et contextDestroyed(…) de cette interface.
o Dans le fichier « com.emsi.controllers/EmsiListner.java», après le constructeur, ajouter les deux méthodes
public void contextInitialized(ServletContextEvent event) {…}
public void contextDestroyed(ServletContextEvent event) {…}
 La méthode contextInitialized(ServletContextEvent event) est utilisée quand le contexte de servlet vient d’être créé.
 Configurer le Listner « EmsiListner » :
o À l’appel de l’initialisation du context, demander à event le contexte de la servlet.
o Créer la liste des messages saisies par les utilisateurs de l’application : msgList
o Si la liste est vide (c’est-à-dire première fois l’application est déployée et premier formulaire a été soumis), créer
une nouvelle liste des messages vides. Et ajouter la nouvelle liste dans le contexte de l’application.
ArrayList<ContactDob> msgList = (ArrayList<ContactDob>) sc.getAttribute("msgs");
if(msgList==null) {
System.out.println("Création d'un nouvelle liste des messages");
msgList=new ArrayList<ContactDob>();
sc.setAttribute("msgs", msgList);
}
 Redémarrer le serveur et exécuter le projet pour vérifier la configuration de l’application.
Page 3 sur 3

Vous aimerez peut-être aussi