Développement serveur avec Java
Exercices
Exercice 1 |
Controleur
de login - Utilisation de JUnit |
Exercice 2 |
Controleur
de
login avec JDBC |
Exercice 3 |
Première servlet |
Exercice 4 |
Servlet traitant les paramètres d'une requête |
Exercice 5 |
Page JSP traitant un formulaire |
Exercice 6 |
Page JSP définissant une méthode Java |
Exercice 7 |
Page JSP utilisant un JavaBean |
Exercice 8 |
Coopération entre servlet et JSP |
Exercice 8 bis |
Tests
web -
Utilisation de HttpUnit |
Exercice 9 |
Servlet
et page
JSP avec controleur de login JDBC |
Liens utiles |
Controleur
de login -
Utilisation de Junit
|
On se propose de mémoriser sur le serveur l'ensemble des
login/password utilisés.
On va donc développer (avec une approche "développement
dirigé par les tests" ou Test Driven Development) une classe LoginController qui
va se charger
de ce travail (en utilisant par exemple une
Hashtable).
Créer un nouveau projet Java (attention : pas un Projet
Tomcat) appelé ex1 puis un package
cnam.cours.util.
Y créer l'interface ILoginController
déclarant les méthodes suivantes :
Créer également la classe LoginController qui implémente cette interface (dans Eclipse utiliser File->New->Class..., en précisant l'interface ILoginController pour obtenir une implémentation par défaut).
Sélectionner la classe LoginController
nouvellement créée puis créer un nouveau
"Test unitaire JUnit" (File->New->JUnit Test Case).
L'assistant propose alors la création de la nouvelle classe LoginControllerTest;
cliquer sur le
bouton "Next", cocher les boîtes à cocher devant les
méthodes isValidLoginPassword et modifyPassword de LoginController et
valider. La
classe LoginControllerTest
est
alors créée avec 2 méthodes de test vides.
Définir une fixture et une méthode setup pour initialiser l'objet testé comme dans cet exemple.
Pour la majorité des méthodes publiques de la classe LoginController à développer :
Pour chacune de ces méthodes de test :
Controleur
de
login avec JDBC
|
On dispose dans une base SQL sur le serveur de l'ensemble des login/password utilisés. Cette base est décrite par ce schéma et contient ces données de tests. (Créer cette base de données appelée tps_jdbc avec phpMyAdmin).
Créer un nouveau projet appelé ex2 puis un package
cnam.cours.util.
Y créer l'interface ILoginController.
Créer également la classe DBLoginController qui implémente cette interface (dans Eclipse utiliser File->New->Class..., pour obtenir une implémentation par défaut).
Sélectionner la classe DBLoginController
nouvellement créée puis créer un nouveau
"Test unitaire JUnit" (File->New->JUnit Test Case).
L'assistant crée alors la nouvelle classe DBLoginControllerTest;
remplacer le
code généré par celui de ce test
unitaire
DBLoginControllerTest.java.
Dans la
classe DBLoginController,
définir
:
Première
servlet
|
Prise en main d'Eclipse et du plugin Tomcat.: création d' une servlet BonjourServlet qui affiche la chaine de caractère : "Bonjour".
Pour tester l'application, cliquer sur l'URL suivante : http://localhost:8080/ex3/bonjour
Servlet traitant les paramètres d'une requête |
Créer un nouveau projet Tomcat appelé ex4.
Créer la servlet LoginServlet (dans le package servlet). Cette servlet récupère 2 paramètres login et password et répond en créant dynamiquement une page HTML contenant la chaîne :
BONJOUR <login>
Pour tester l'application, cliquer sur l'URL suivante : http://localhost:8080/ex4/login?login=Jules&password=Verne
Page JSP traitant un formulaire |
Créer un nouveau projet appelé ex5 de type Tomcat
(dans un nouveau répertoire de nom ex5)
Créer (directement sous la racine du projet) la page JSP
login.jsp qui récupère 2
paramètres login et password et qui répond en affichant
la chaîne :
BONJOUR <login>
Pour tester la page, cliquer sur l'URL suivante :Noter qu'il est inutile d'arrêter le serveur Web pour que les modifications de la page JSP soient prises en compte.
Page JSP définissant une méthode Java |
On se propose de mémoriser sur le serveur l'ensemble des login/password utilisés dans une Hashtable.
Copier la page login.jsp précédente dans loginTrace.jsp. Y rajouter la définition de la méthode checkPassword(String login, String password) : cette méthode range dans la Hashtable la paire login/password si la clé login n'y existe pas encore et retourne true. Dans les autres cas, elle retourne false sauf si le password saisi correspond au premier password saisi lors du premier login.
Appeler la méthode checkPassword dans la page jsp ; si elle
retourne false, afficher de nouveau le formulaire de login
précédé d'un message d'erreur "Password invalide".
Tester.
Page JSP utilisant un JavaBean |
On va réutiliser le JavaBean LoginController de l'exercice 1 pour vérifier les couples de login/password saisis; l'incorporer dans le projet.
Ajouter dans le constructeur de la classe LoginController des appels à addLogin() pour chaque couple login/password autorisé.
Copier la page loginTrace.jsp précédente dans loginTrace2.jsp. Y remplacer :
Coopération entre servlet et JSP |
Au contraire d'une page JSP, une servlet n'est pas adaptée
pour générer du code HTML.
On va donc faire les traitements "métiers" dans la servlet et
laisser le
minimum de
code Java dans la page jsp (modèle MVC). Plus
précisément :
Définir les pages betterLogin.jsp et welcome.jsp ainsi que la
servlet LoginServlet
conformément à ce modèle et au diagramme de
séquence ci-dessous :
Plus précisément, définir :
Tests
web - Utilisation de
HttpUnit
|
Il est possible de tester les pages web en combinant JUnit
avec le
framework HttpUnit..
HttpUnit émule le comportement d'un navigateur et supporte
notamment la soumission de formulaires. Il permet de tester le contenu
d'une page web en accédant à ses différents
éléments (titre, formulaires, tables, ...).
Reprendre le projet Eclipse précédent, y créer le répertoire de source "test/src" (File->New->Source Folder) puis insérer dans ce répertoire la classe de test WebTest.java.
Ajouter dans le CLASSPATH
(Project->Properties->Java
BuildPath->Libraries->Add Externals Jars) chacune des
librairies
contenues dans l'archive xunit.zip.
Etudier la classe WebTest (notamment les méthodes testBadLogin() et testValidLogin()), l'exécuter en tant que test unitaire JUnit (Run As->Junit Test) jusqu'à l'obtention de la "Barre verte".
Servlet
et page
JSP avec controleur de
login JDBC
|
On va utiliser le loginControler JDBC à la place du loginController simple utilisé dans l'exercice 2.
Créer un nouveau projet de type Tomcat appelé ex9.
Recopier dans ce projet ex9 le fichier web.xml et l'ensemble des pages
jsp et des sources java (dont la classe de
test WebTest) de l'exercice précédent.
Supprimer la classe LoginController,
la remplacer par la classe DBLoginController (exercice 2)
Définir la méthode init() dans la servlet LoginServlet; cette méthode va se charger d'instancier un LoginController en appelant le constructeur de DBLoginController à 4 arguments (ces arguments devront être obtenus au travers de paramètres déclarés dans le fichier web.xml).
Réexécuter la classe WebTest en tant que test unitaire JUnit (Run As->Junit Test) jusqu'à l'obtention de la "Barre verte".
Liens
utiles
|