Accueil > Master 1 > Applications Web > TP3 : Jsp / JSTL / EL / Servlets et architecture en couches

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" (sRhe par ex.), et le langage EL pour r>a affaire &agrE6 id="Introc3.a9menter_les_fonctionnalit.c3.a9s_manquantes_!" rel>

Etudémenter les fonctionnalités manquantes !Ici As devrez ez RempDla requ JSP foup;pourre dann p4p;poure ficnctionnalités manqutilnucisas avecémentée danss la servletUser ( il ydoes servlets/defcisas ue &as et c le r&eaionnaire d'utimmentp On nN'oubt ws, lequt'ave; cellehade lfoi servletUser apparee en rmain&quorave; la JSP d'afenuPot d'inave; la Jjous données dansave; la Jcher l'i,entranvoyun mod&ege&quoc.

p>Notep; p>Notep; p>v>
://miageprojet2.unice.fr/Mastx.php?title=Master_MIAGE_1/Applications_Web/TP3_:_Jsp_%2F%2F_JSTL_%2F%2F_EL_%2F%2F_Servlets_et_architecture_en_couches" cl

ageneriv class="pages_2" taglneriv >
cher un fier web.n ve an>
class="pageeieet" .src" id=>n class="icon">Fers XML n class="textunwt: 79_"pagee] =t">1
>
Etu"contchForme"> le cells="pagee">Etu"h="100%" cellspacing="0" cellpadding="0" claser="0" cla> >Fers XMTer avAc/deki/files/764/=TPJsp.zip" class="icons/76" oncle="TP Appzip" claan class="icon">

tdidtdss="columnT3 href="http://miageprojet2.unice.fr/">Ac/deki/files/764/=TPJsp.zip" class="icons/76" oncle="TP Appzip" claap.zip. Il n mall>ne description'; aan>
tdidtdss="columnTPpa4.32 Mov>tdidtdss="columnT5 i22:36, 1 2012tdidtdss="columnT6chref="/inde:MichelBuffa" class="link-user" rel="internal">MichelBuffa
tdidtdss="columnT7 href="#" class="disabrrow">Plions coarroclick="return falsMenu.bodyFile(, -2, '877c97b14f79e9fadbb3358f0df3a0e8']; =TP'];e">tdid > >
class="pageeieet" .src" id=>n class="icon">e; s n class="textunwt: 79_"pagee t">1
>
l\'o1 -o1 mon 1ve pan> | n class="textbled">>rm> >
id="s="pages href="http://miageprojet2.unice.fr/">Ac/deki/files/764/=Tnap2.jpg" />?size=web-oricle="TP A2.jpg" />Ac/deki/files/764/=Tnap2.jpg" />?size=th>n claspages="ic_e1c8f0c927b4b902f0c56ca31bc47d51pan class="downaete" id="pagefescriptDe lay_=T6pan class="down chiption"] = >ne description'; aan>>
Ac/deki/files/764/=Tnap2.jpg" /> le="TP A2.jpg" /><>2.jpg" />an3 p;  Plions coarroclick="return falsMenu.bodyFile(, -2, 'e1c8f0c927b4b902f0c56ca31bc47d51']; =T6'];e">];e">];'://miageprojet2.unice.fr/">Ac/deki/files/764/=Tnap2.jpg" />' >
>
class="pageeieet" .src" id=>n class="icon">Cntaire?'; s (0) >Connêtrenecté.
div>
>class="pageToweredBypan>TP APowered byhref="http://miagwwwdtouch.com/" cass="print"tiontdi
/head navMcoudti &quoFileD) { sRealTi &}); navMcsizequo41=TP;ript> head ;="pageInfo', tass="disabarrocle="widtde laye; mariv
Flux RSSan>
li>n class="icon">isateurs coman>
li>n class="icon">< class="text">Modifieèleman>li>li>< class="text">ModiPla r&eass_2an>li>< class="icon">< class="text">ModiP s topuebli>cposant ronli><

n t> ;="s="disabarroclpageMenu"> le="widtde laye; mariv

div
class="text" id=>Surver averon
li>
class="text" id=>cher un fier web.n ve an>li>
class="text" id=>cccèlatict"ei aan>li>
class="text" id=>lacer'; aan>li>
class="text" id=>Sumer le an>li>
class="text" id=>Moe vclésan>li>
class="text" id=>yer'; arequ JSPan>li>
class="text" id=>Psanriéli>
< class="text">ModiP donn&iscun HTTronli><

n t> ;="s="disabarroclpageBacklink', t le="widtde laye; mariv _m Appler MIAGE 1/Applications Web/TP3li>lications_Web"wFTP3CMiage_2010-2011_%3atroduclercdonnelBuff alications_Web.xml,Miage 2011-2011_%3ali>lications_Web.xmlMiage 2011-2012 : li><

n t> ;="s="disabarroclpageBackContent', t le="widtde laye; mariv < _m lpageBack>

div> t> ef uti momenge&quospanef="/indapss="disabutails lpageMTMge&quoDutailsL onclick="return menuMTMge&quo.ShowDutails(, -2

D/dicid="s="foldui-msg-autocd" i"lD/did> claspageMTMge&quoUnpau id="e="widtde laye in', arivCmenge&quo ue tre (eac le r> claspageMTMge&quoTi &riv >> D/did> claspageMTMge&quoPau id="e="widtde laye ; marivLeplatioreurs cola pnge&quo a éD/di;pour ;pour ;id="s="foldui-msg-" .srcispageMTMge&quoH .srciv pour ;id="s="foldui-msg-ript"epageMTMge&quoDupt"h pour ;id="s="foldui-msg-ript"epageMTMge&quoDutails le="widtde laye ; marivAhage (danDé>

a affai-vieFr aveiv >
He"> >>
ript> ipt type="text/javascript" src>_uacct = "UA-68075-16";utectnailons });ript>