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.
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.
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.
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.
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.
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
.
installBD.sql
pour créer et peupler la table utilisée
par l’application ;ajouter.html
et listAll.jsp
,
correspondant aux vues « ajouter » et « afficher » ;Ouvrage.java
, l’unique classe du modèle, qui est
structurée comme un java-bean avec des méthodes getPropriété
;bdErreur.jsp
et controleurErreur.jsp
,
des pages d’erreur appelées par le contrôleur le cas échéant ;AbstractDataBaseDAO.java
et DAOException.java
,
les deux classes généralistes du package dao
.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 !
Controleur.java
: les méthodes doGet
et doPost
sont fournies. Vous pouvez constater qu’elles
redirigent vers d’autres méthodes en fonction du paramètre de requête
action
. Il ne vous reste plus qu’à écrire ces autres
méthodes !OuvrageDAO.java
: cette classe sert d’une part à
instancier des objets de classe Ouvrage
représentant les
résultats de requêtes sur la base de données (méthodes
getListeOuvrages()
et getOuvrage(int id)
) et
d’autre part à mettre à jour la base de données pour ajouter,
supprimer ou modifier un ouvrage. Deux des méthodes sont fournies, on
vous demande d’écrire les autres.pom.xml
). Les fichiers fournis sont décrits
ci-dessus.installBD.sql
sur votre connexion
oracle1
.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>
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
).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
. <web-app version="3.0">...</web-app>
.
OuvrageDAO
et Controleur
.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
).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).