Académique Documents
Professionnel Documents
Culture Documents
----------------------------------------------
Auditoire : GLSI-2
TP2
Servlet et architecture client-serveur 3 tiers
Objectifs :
1. Commencez par configurer l’environnement d’exécution Wildfly sous eclipse comme suit :
Window > Prefrences
2. Dans l’interface qui s’ouvre cliquez sur : Server > Runtime Environment > Add
3. Dans la liste qui s’affiche, sélectionnez JBoss AS, WildFly & EAP Server Tools sous la
catégorie Red Hat JBoss Middleware puis cliquez sur Next. Dans l’interface suivante acceptez
la licence et terminez l’assistant.
Remarquez l’installation des outils relatifs aux serveurs sélectionnés a démarré en arrière plan. N’arrêtez
pas Eclipse et attendez jusqu’à la fin de l’installation.
4. A la fin de l’installation, une fenêtre s’affiche demandant votre autorisation pour accepter
l’origine des outils à installer. Cliquez sur Select All puis Trust Selected. Ensuite, cliquez sur
Restart Now.
5. Une fois redémarré, configurer le serveur Wildfly version 26 comme indiqué dans les interfaces
qui suivent :
6. Dans l’interface qui s’ouvre, sélectionnez le dossier où vous avez décompressé wildfly. Cochez
l’option Alternate JRE et terminez l’assistant.
7. Dans l’interface qui s’affiche, cliquez sur Finish. Remarquez alors qu’une nouvelle configuration
du serveur Wildfly a été ajoutée à la liste des servers d’exécution configurés sous Eclipse comme
indiqué dans la figure suivante. Cliquez alors sur Apply and Close.
Remarquez aussi qu’une nouvelle instance local du serveur Wildfly a été créée au niveau de l’anglet
Servers.
Si la vue Serveurs n’est pas affichée, vous pouvez la rendre visible au niveau du workspace en accédant
comme suit:
1. Créez un nouveau projet web dynamique Dynamic Web Project nommé tp2jee. Laissez les autres
champs avec leurs valeurs par défaut et cliquez sur Finish.
2. Au niveau du projet tp2jee, ajoutez une nouvelle servlet MyFirstServlet. Remarquez que votre
servlet étend la classe javax.servlet.http.HttpServlet.
3. Testez la servlet en la déployant sur le serveur d’application configuré WildFly comme suit: Clique
droit sur la servlet --> Run As --> Run on server.
Dans l’interface qui s’ouvre, choisissez le serveur WildFly et terminez le reste des étapes de l’assistant.
Une fenêtre de navigation web sera alors affichée indiquant le message suivant:
Il s’agit de l’affichage du chemin racine «Context Path» de votre application au niveau du navigateur du
client (de l’architecture client-serveur) en utilisant l’objet PrintWriter.
Il est à noter que cette activité réutilise le code source du premier TP.
1. Ajoutez une nouvelle page html à votre projet contenant un formulaire ayant un input qui doit
indiquer l’identifiant d’un client et un bouton qui doit soumettre le formulaire vers le serveur.
Pour ce faire, vous pouvez faire un clic droit sur votre projet --> new --> HTML File (si vous n’avez pas
trouvé l’icône de HTML File, vous pouvez la trouver dans other --> web )
Et voilà le fichier HTML s’ouvre. Vous pouvez remarquer l’emplacement de ce fichier (dans
l’explorateur des projets), sous le dossier webapp de votre projet :
<form action="MyFirstServlet">
</form>
Notez que :
Notez qu’il faut faire les changements suivants au niveau de la classe GestionFacturation :
- modifier la portée de la méthode getClientByID à public et modifier son type de retour afin qu’elle
retourne un message au lieu de l’afficher dans la console : public String getClientByID(int
idClient)
- modifier l’url de connection à la base afin de désactiver la vérification du certificat SSL comme suit:
"jdbc:mysql://localhost:3306/mabase?allowPublicKeyRetrieval=true&useSSL=false";
import java.sql.Statement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
String url =
"jdbc:mysql://localhost:3306/mabase?allowPublicKeyRetrieval=true&useSSL=false";
{
System.out.print(e);
}
return con;
}
if (results.next())
{
registred = "Client trouvé: " +
results.getString("NomCli")+" Ville : "+ results.getString("Ville");
}
else
{
registred = "Client non trouvé";
}
stmt.close();
// Fermeture de la connexion
con.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return registred ;
}
}
4. Ajoutez le connecteur JDBC de MySQL (fourni avec les ressources du TP1) au dossier lib de votre
projet web tp2jee (il suffit de faire un copier-coller de mysql-connector-java-8.0.23.jar).
Et voilà, le connecteur JDBC de MySQL est bien copié sous le dossier lib de votre projet web tp2jee :
Modifier la servlet afin de rechercher le client dans la base et afficher ses détails.
N’oubliez pas de re-publier les modifications faites au niveau de votre application sur le serveur Wildfly :
Clic droit sur l’application niveau serveur --> Full Publish
Vous pouvez maintenant faire l’exécution en cliquant droit sur le formulaire, puis Run As --> Run on
Server :
En cliquant sur le bouton Rechercher Client, le résultat d’affichage sera comme suit :
Pour récupérer les détails d’un client ayant l’identifiant saisi dans la base il faut :
initParams={@WebInitParam(name="nbVisitors", value="0")}
import javax.servlet.annotation.WebInitParam;
//Vérifier s'il existe déjà un attribut dans le contexte de la servlet indiquant le nbr
de visiteurs
//Dans ce cas on a choisi de nommé l'attribut nbVisit
//ctx.getAttribute("nbVisit")==null indique que l'attribut n'existe pas
if(ctx.getAttribute("nbVisit")==null)
{
//Dans ce cas (un premier visiteur qui accède à la servlet)
//on va initialiser pour la première fois l'attribut nbVisit
//avec la valeur initiale du paramètre dinitialisation nbVisitors (indiquez dans
l'annotation)
nb = Integer.parseInt(getInitParameter("nbVisitors")) +1;
ctx.setAttribute("nbVisit", nb);
}
else
{
//Dans ce cas (un ou plusieurs visiteurs ont déjà accède à la servlet)
//on va récupérer l'ancien nombre de visiteur sauvegardé dans l'attribut nbVisit
//avec la valeur initiale du paramètre dinitialisation nbVisitors (indiquez dans
l'annotation)
nb = (int) ctx.getAttribute("nbVisit") +1;
ctx.setAttribute("nbVisit", nb);
}
N’oubliez pas d’ajouter l’importation du package nécessaire :
import javax.servlet.ServletContext;
1. Ajoutez une deuxième interface index.html contenant un formulaire de connexion (login et mot de
passe)
<form action="MyFirstServlet">
<label>Login : </label>
<input type="text" name="login" > </input><br/>
<label>Mot de passe : </label>
<input type="password" name="pwd"> </input><br/>
<input type="submit" name="action" value="Se Connecter">
</form>
Remarquez qu’on a gardé le même nom pour le bouton de soumission name="action". Dans ce
cas la même servlet MyFirstServlet va récupérer toujours le même paramètre "action" et elle va tester
sur sa valeur (Rechercher Client, Se connecter, ...). Il s’agit de l’implémentation du modèle MVC2 (avec
une seule servlet générique qui contrôle toutes les requêtes du client).
a) Intercepter les données d’authentification et générer une session contenant le login du client (si
la session n’existe pas)
b) Récupérer et afficher dans le fichier log du serveur WildFly les noms et les valeurs des cookies
enregistrés par le serveur au niveau du navigateur. Remarquez s’il existe un cookie associé à la
session créée (cookie ayant le nom JSESSIONID).
response.sendRedirect("client.html");
3. Modifiez la servlet afin d’afficher un message indiquant le login de la personne connectée et qui a
sollicité la recherche d’un client. Le login doit être récupéré de l’objet session.
Pour récupérer la valeur de l’attribut contenant le login de l’utilisateur, utilisez la méthode getAttribute
de l’objet session.
request.getSession().getAttribute("loginUser")
Exemple d’affichage:
4. Modifiez l’application afin qu’elle vérifie les paramètres de connexion dans une table de la base. Si les
paramètres de connexion sont valides alors l’utilisateur sera redirigé vers la page client.html sinon un
message d’erreur sera affiché et renvoyé à l’utilisateur.