TP d’applications web
Architecture modèle-vue-contrôleur

Description de l’application à réaliser

On souhaite ici réaliser une application très simple de gestion de références bibliographiques. Une référence est caractérisée uniquement par un auteur et un titre. L’application permet d’afficher la liste des références actuellement enregistrées, d’enregistrer une nouvelle référence, de modifier une référence, de supprimer une référence. Ces références sont stockées dans une base de données comprenant une table unique.

Affichage de la liste des références

L’affichage de la liste des références se fait sur la page d’accueil de l’application. Cette liste est présentée sous la forme d’un tableau à 4 colonnes : les deux premières colonnes contiennent le titre et l’auteur de la référence, les deux suivantes contiennent respectivement un lien « Modifier » et un lien « Supprimer » permettant d’accéder à des formulaires de modification et de suppression de cette référence en particulier.

Ajout d’une référence

La page d’accueil comprend également un lien vers une page comportant un formulaire d’ajout de référence. Ce formulaire comprend deux champs, « auteur » et « titre », et un bouton « Ajouter ». Lorsqu’on clique « Ajouter », la nouvelle référence est ajoutée à la base et on revient à la page d’accueil.

Modification d’une référence

Le formulaire ouvert en cas de clic sur un lien « Modifier » est similaire au formulaire d’ajout, mais les champs « auteur » et « titre » sont préremplis avec les valeurs actuelles. La page de modification comprend un lien « annuler » qui permet de revenir à l’accueil sans enregistrer les modifications.

Suppression d’une référence

La page de suppression d’une référence demande confirmation en rappelant le titre et l’auteur de la référence à supprimer. Elle comprend un bouton qui exécute la suppression et revient à l’accueil ainsi qu’un lien qui permet de revenir à l’accueil sans exécuter la suppression.

Architecture de l’application

En raison de sa simplicité, l’application comprend un seul contrôleur qui gère les différentes actions possibles. Il s’agit d’un servlet, qu’on placera dans le package controleur. Le modèle quant à lui comprend une seule classe puisque le seul objet à gérer est la référence bibliographique  ; cette classe sera dans le package modele. Pour l’accès à la base de données, on utilisera un package dao comprenant les classes AbstractDAO et DAOException qu’on vous fournit, plus une classe spécifique pour l’accès aux références bibliographiques. Enfin, les différentes vues correspondant aux pages décrites plus haut seront des pages JSP placées dans le dossier WEB-INF de façon à ne pas avoir d’URL accessible directement, sauf la vue « ajouter » qui, n’ayant aucun contenu dynamique, peut être écrite comme une simple page HTML et placée directement dans le dossier webapp.

Fichiers fournis

Fichiers prêts à l’emploi

On vous fournit les fichiers prêts à l’emploi suivants :

Vous n’avez normalement pas besoin de modifier ces fichiers (mais ça n’est pas interdit, par exemple pour ajouter une référence à une feuille de style...). Il est cependant recommandé de les lire et de comprendre ce qu’ils font !

Squelettes

On vous fournit également les squelettes suivants, à compléter :

Marche à suivre

  1. Créez un nouveau projet maven/web-application.
  2. Récupérez l’archive Manip10.zip et extrayez-la dans le répertoire racine de ce projet (celui qui contient pom.xml). Les fichiers fournis sont décrits ci-dessus.
  3. Mise en place de la base de données : exécutez le fichier installBD.sql sur votre connexion oracle1.
  4. Ajout de dépendance : le fichier listAll.jsp fourni utilise la bibliothèque JSTL pour décrire une boucle (balise <c:foreach>). (Il est tout à fait possible d’utiliser à la place une boucle for ordinaire en java, mais c’est un peu plus verbeux et moins lisible). Il faut donc ajouter dans pom.xml cette dépendance : <dependency> <groupId>jstl</groupId> <artifactId>jstl</artifactId> <version>1.2</version> <type>jar</type> </dependency>
  5. Configuration du pool : modifiez le fichier context.xml comme décrit dans la manip 8 en définissant jdbc/bibliography comme référence JNDI de la datasource (cet identifiant est utilisé dans Controleur.java).
  6. Définition de la page d’accueil : par défaut la page d’accueil de l’application est index.html. Ici on souhaite que l’accueil soit géré par le contrôleur. Cette configuration se fait dans un fichier appelé web.xml. Pour créer ce fichier sous netbeans, cliquez à droite sur le projet et choisissez new > Standard Deployment Descriptor. Il doit se trouver dans le répertoire WEB-INF. Ajoutez-lui l’élément suivant, à l’intérieur de l’élément web-app : <welcome-file-list> <welcome-file>controleur</welcome-file> </welcome-file-list> et supprimez le fichier index.html.
    Si vous n’utilisez pas netbeans, vous pouvez créer ce fichier à la main, il suffit d’encadrer ce qui précède par <web-app version="3.0">...</web-app>.
  7. Vous pouvez maintenant tester l’application. La page d’accueil n’utilise que les fonctions déjà implémentées et doit donc s’afficher normalement. Il ne reste plus qu’à implémenter les autres fonctions.
  8. Implémenter l’ajout : le formulaire est déjà fourni, il suffit d’implémenter les méthodes correspondantes dans OuvrageDAO et Controleur.
  9. Créer des pages jsp comprenant les formulaires de modification et de suppression. Pour obtenir les informations sur l’ouvrage, ces méthodes utiliseront un objet ouvrage passé en attribut de la requête (voir exemple avec l’attribut ouvrages dans listAll.jsp). Valider ces formulaires doit renvoyer vers le contrôleur en précisant l’identifiant de l’ouvrage ainsi que l’action « modifier » ou « supprimer » suivant le cas. Pour transmettre ces précisions, on peut utiliser des champs cachés (voir exemple dans ajouter.html).
  10. Implémenter la méthode actionGetOuvrage du contrôleur et la méthode correspondante dans OuvrageDAO. Le contrôleur doit placer comme attribut de la requête l’ouvrage (objet du modèle) correspondant à l’identifiant demandé puis transférer cette requête à la page jsp comprenant le formulaire de modification ou de suppression en fonction du paramètre « view » spécifié dans la requête (voir exemple de transfert dans les méthodes déjà implémentées).
  11. Implémenter les actions « modifier » et « supprimer ».