Ce TP est à rendre [[http://spiral.univ-lyon1.fr/entree.asp?id=9137&objet=echangedocs|via spiral]] pour le 3/12/2010, 23h30. Il faut rendre un .zip contenant les deux projets maven (sans les répertoires target) ainsi que les fichiers SQL (éventuellement modifiés) des TPs précédents. Ne pas oublier de mentionner les deux étudiants du binôme. ====== Forum ====== L'objectif de ce TP est de réunir le travail des TP précédents dans une application Web Java de forum simplifié. ===== Mise en place ===== Télécharger, décompresser et ouvrir dans Netbeans le projet suivant: {{:enseignement:bdav:forum.zip|forum.zip}}. Ce projet est un embryon d'application Web Java. Pour exécuter le projet, depuis la ligne de commande, lancer ''mvn tomcat:run''; depuis Netbeans, clic-droit -> Custom -> Run Tomcat. L'application peut être visualisée à l'adresse suivante: [[http://localhost:8080/Forum]]. == Remarque == Le serveur web est démarré des que l'affichage suivant apparait: INFO: Starting Coyote HTTP/1.1 on http-8080 Pour stopper le serveur, il faut arrêter l'exécution de Maven (carré rouge). == Remarque == Il peut être nécessaire: - d'ajuster la dépendance présente dans le fichier ''pom.xml''((situé dans ''Project Files'')) afin de refléter les déclarations du fichier pom.xml du projet du [[tp-orm|TP précédent]]; - de compiler le projet du [[tp-orm|TP précédent]] afin de le rendre disponible pour le projet de l'application Forum. ===== Accueil ===== Les pages statiques sont placées dans Web Pages((//i.e.// le répertoire src/main/webapp)). Modifier le fichier ''index.html'' pour remplacer le lien par un formulaire permettant de choisir l'identifiant de la salle. ===== Étude du projet ===== Si ce n'est déjà fait, étudier les différents fichiers fournis dans le projet. La classe ''SalleServlet'' contient une méthode ''processRequest'' qui est appelée lorsque le serveur Web veut afficher la page http://localhost:8080/Forum/SalleServlet. Comprendre le fonctionnement de cette méthode puis modifier celle-ci pour afficher un message de bienvenue. Modifier à nouveau le code de la méthode pour afficher une éventuelle action demandée par l'utilisateur, cette action étant passée comme la valeur du paramètre ''action'' de la page Web((on peut s'inspirer du traitement du paramètre ''id'')). Étudier également la documentation de la classe ''XQueryUtil'', ainsi que le code des tests de ''XQueryTest''. ===== Présentation XQuery ===== Créer un fichier ''simple.xq'' dans le répertoire ''src/main/resources'' et y placer la requête XQuery de la méthode processRequest. Changer le code de cette dernière pour utiliser ce fichier en utilisant executeResourceQuery au lieu de executeQuery. Modifier la requête pour y intégrer un formulaire contenant les informations nécessaires à la création d'un message. Ce formulaire possédera un input caché((de type ''hidden'')) nommé ''action'' dont la valeur sera ''creerMessage''. ===== Données XML de la salle ===== Modifier processRequest pour: * Récupérer les données((//i.e.// le titre, les messages, etc.)) de la salle demandée au format XML. On pourra utiliser la vue définie au [[tp-xml-rel|TP XML <-> Relationnel]]. * Modifier la requête ''simple.xq'' pour pouvoir transformer ces données en xhtml qui sera intégré à la page produite. On pourra pour cela s'inspirer des requêtes XQuery du premier TP. * Utiliser le XML fabriqué dans la requête SQL comme données pour la requête XQuery. On pourra pour cela s'inspirer du code de testXMLParams. ===== Ajout de message ===== Implémenter l'ajout de message((au cas où l'action est creerMessage)) dans processRequest. On utilisera pour cela la méthode de création de message du [[tp-orm|TP de mapping objet <-> relationnel]]. Une fois le message ajouté, on affichera le contenu de la salle, avec en plus un message de confirmation de la création du message. ===== Pour finir ... ===== * Implémenter (fomulaire + code métier) l'ajout de salle et de membre. * Faire les modifications nécessaires pour avoir un afichage des messages trié par date d'envoi. * Créer une variation ''thread.xq'' de la requête XQuery ''simple.xq'' qui fera un affichage arborescent par fil de discussion. Permettre de choisir((via un paramètre de la page)) le type d'affichage (par date ou par fil).