TP3 : Jsp / JSTL / EL / Servlets et architecture en couches

De $1

Introduction

Dans ce TP vous devrez travailler avec Netbeans  6.9 ou supérieur et Glassfish  3 ou supérieur car nous utilisons quelques particularités de Java EE 6.

Travail à faire

Etudier le projet existant, son architecture, etc.

  1. Récupérez ce projet netbeans : TPJsp.zip. Il s'agit d'un serveur permettant de gérer des utilisateur.
     
  2. Dézippez le, ouvrez-le avec Netbeans, regardez les sources (attention, certains répertoires contenant les données et les préférences utilisateurs n'apparaissent pas avec l'onglet projets, utilisez l'onglet "fichiers") !

On trouve une architecture en couches avec :

  • Le package utilisateurs.modeles qui contient une classe décrivant un modèle de données d'utilisateur. La classe est annotée à l'aide d'annotations de code de la librairie de sérialisation/désérialization JAXB (standard dans le JDK), JAXB (pour Java XML Binding) permet de transformer des objets Java en XML et vice-versa. Pour ce TP nous stockerons les données dans un fichier XML. Plus tard nous utiliserons une vraie base de données relationnelle.
     
  • Le package utilisateurs.gestionnaires qui contient un gestionnaire d'utilisateurs, c'est-à-dire un objet métier proposant des opérations sur les Utilisateurs comme "créer un utilisateur", "lister tous les utilisateurs", "chercher un utilisateur", etc. C'est la couche DAO (Data Access Object) qui va nous servir à gérer un type de données pour faire le CRUD dessus (Create, Read, Update, Delete). On nomme cette couche DAO, gestionnaires, handlers, etc.
     
  • un package utilisateurs contenant des fonctions utilitaires permettant de gérer les données dans des fichiers XML (pour le moment on n'utilise pas de base de données pour ne pas compliquer le TP).
     
  • Un package servlets qui contient les servlets du projet, qui font office de "controleur web",
     
  • un répertoire "web pages" qui contient les pages html et JSP du projet.

Dans le code de la servlet, figure une ligne qui déclare des paramètres d'initialisation :

@WebServlet(name = "ServletUsers",
     urlPatterns = {"/ServletUsers"},
     initParams = {
         @WebInitParam(name = "ressourceDir", value = "C:\\Users\\michel\\Documents\\NetBeansProjects\\plarpebu 1.0 release sourceforge\\TPJsp")
     }
)

Mettez comme valeur pour le "ressourceDir" le chemin où se trouve la racine de votre projet. Sinon, cela ne pourra pas fonctionner ! Remplacez la valeur que j'ai mise dans le source qui correspond à mon emplacement sur mon disque dur !

Exécutez-le projet. Une fenêtre semblable à celle-ci doit apparaitre (en cas de soucis, vous vous êtes trompés en entrant le chemin ci-dessus, ou bien vous avez un jdk < 6, ou un vieux Netbeans)

Seule la fonctionnalité permettant de lister les utilisateurs est implémentée dans sa partie "contrôleur web".

Snap2.jpg

Etude de la servlet fournie

Regardez le code de la servlet. Elle sert d'interface HTTP entre le service de gestion des utilisateurs et le client web (le navigateur), le code de gestion des utilisateurs n'a rien à voir avec une application web.

Remarquez les annotations de code dans la servlet permettant d'initialiser des paramètres, comme l'URL de la servlet, des paramètres initiaux.

Ne vous y trompez pas, le chemin où se trouve le fichier de ressources n'est pas "codé en dur", il figure dans une annotation de code, et cela est plus pratique que de le voir dans un fichier web.xml comme cela aurait du être le cas auparavant.

Si vous exécutez le projet, regardez en réalité où s'exécute l'application (ajoutez par exemple dans la servlet un code qui fait un println du répertoire courant (avec File f = new File("."); System.out.println(f.getRealPath()); ) !

Pas du tout dans le répertoire où se trouve le projet !

Notez aussi comment on gère les actions possibles et comment on "passe la main" à une JSP qui va s'occuper d'afficher l'interface utilisateur. Regardez comment on passe en paramètre la liste des utilisateurs à la JSP d'affichage (dans la requête ici, on aurait pu utiliser la session HTTP).

Etude de la page JSP fournie

Ici on a affaire à une JSP très simple qui utilise la librairie JSTL pour effectuer des actions conditionnelles (y-a-t il un paramètre "message" si oui je l'affiche par ex.), et le langage EL pour accèder aux attributs de variables situées dans un des "scopes" (ici la requête HTTP).

Implémenter les fonctionnalités manquantes !

A vous de jouer ! Dans la page JSP figurent 4 autres fonctionnalités qui ne sont pas implémentées dans la Servlet (mais dont les services sont disponibles dans le gestionnaire de compte). N'oubliez pas qu'à chaque fois la Servlet doit repasser la main à la JSP en mettant à jour les données à afficher, en envoyant un message, etc.