TP 1 - Pierre Jean
Transcription
TP 1 - Pierre Jean
Tp1 Ema EMACS Développement Web 1/ Description de l’application : Notre première application Web a pour objectif de gérer une liste de todo (truc à faire) : Diagramme de classe simplifié : Application instance:Application Todo * lesTodos addTodo(texte,actif) deleteTodo(texte) getLesTodos() updateTodo( texte , actif ) texte: String actif : boolean Pour la gestion d’une seule et unique application, on va utiliser le Design Pattern Singleton: public class Application { private static Application instance = null; public static Application getInstance() { if (instance == null) { instance = new Application (); } return instance; } private Application() { } } 2/ Création du projet et de la partie métier File > New > Dynamic Web Project Les codes de la partie métiers doivent être dans le dossier "Java Ressources :src" et dans un package metier. Préparez aussi des packages controleur et test. Codez les deux classes du diagramme UML ci-dessus et les méthodes nécessaires au fonctionnement. Génération des getters et setters : 3/ Tests unitaires Dans le package test, faire clic droit New > Other > JUnit Test Case, puis remplir l’interface comme la capture d’écran ci-dessous : Voici un extrait en exemple de code pour le test unitaire de la classe Todo. Essayez de coder quelques tests pertinents et exécutez les via clic droit sur le projet > Run As > Junit Test public class TodoTest { @Test public final void testTodo() { Todo todo = new Todo("du lait" , false); assertNotNull( todo ); } @Test public final void testGetTexte() { Todo todo = new Todo("du lait" , false); assertEquals ( todo.getTexte() , "du lait"); } @Test public final void testIsActif() { Todo todo = new Todo("du lait" , false); assertFalse( todo.isActif()); } } Faites de même pour la classe Application en codant les tests. A chaque fois que vous développerez une méthode importante, pensez à coder le test unitaire et à relancer la batterie de test pour vérifier la non régression de votre application. Faite une JSP de test pour l’affichage de 4 todos : Voici un exemple de code pour créer Application (noter que la construction de la liste est faite dans le constructeur) : private Application() { lesTodos = new ArrayList<Todo>(); create4TestTodos(); } private void create4TestTodos(){ addTodo( "Test1 " , false ); addTodo( "Test2 " , false ); addTodo( "Test1actif " , true ); addTodo( "Test2actif " , true ); } Importation des classes métier dans la JSP, habituellement en tête de page <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="fr.ema.lgi2p.emacs.metier.*" %> Parcours de la liste des Todos de type « foreach » : <% for(Todo todo : Application.getInstance().getLesTodos() ){ %> <p> <%=todo.getTexte() %> </p> <% } %> 4/ Partie pur Web Notre contrôleur va utiliser la technologie de Servet pour recevoir les données (Menu clic droit > New > Servlet ). La servlet devra être dans un package controleur. L’URL Mapping permet de faire la liaison entre l’URL http://127.0.0.1:8080/Controleur et la servlet appelée (Nota : je en recommande pas de mapper *.jsp en développement mais uniquement en production). Développez votre contrôleur en vous inspirant de cet exemple : protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String vue = request.getParameter("vue"); if ("liste_todos".equals(vue)) { String vueFinale = this.doAction(request); request.getRequestDispatcher(vueFinale).forward(request, response); } } private String doAction(HttpServletRequest request) { String vueAfficher = "erreur.jsp"; String action = request.getParameter("action"); if ("ajouterTodo".equals(action)) { String texte = request.getParameter("todo_texte"); Application.getInstance().addTodo(texte, false); vueAfficher = "liste_todos.jsp"; } return vueAfficher; } Développez une JSP pour présenter cette vue : Ajouter un formulaire pour mettre à jour là où les checkbox sélectionnées. 5/ Ajout de fonctionnalité Ajouter une vue pour présenter les données au format xml appelé par un hyperlien pour proposer un fil d’actualité <?xml version="1.0" encoding="utf-8"?> <todos> <todo id="1" texte="a faire" actif="false" /> <todo id="2" texte="a ne pas faire" actif="true" /> <todo id="3" texte="surtout a faire" actif="false" /> </todos> Modifiez la vue pour obtenir un flux d’actualité en RSS <rss version="2.0"> <channel> <title>Application todo</title> <description>Application todo by EMA 3 GSI </description> <link>http://localhost/todo/Controleur?action=rss</link> <item> <title>todo 1</title> <link>http://localhost/todo/Controleur?action=rss&id=1</link> <description><![CDATA[penser au lait]]></description> </item> <item> <title>todo 2</title> <link>http://localhost/todo/Controleur?action=rss&id=2</link> <description><![CDATA[penser au pain]]></description> </item> </channel> </rss> Ajouter un bouton pour cocher toutes les checkbox en javascript en vous inspirant du code cidessous : $(document).ready(function(){ $("input#checkAllButton").click(function(event){ $("input[type='checkbox']").each( function() { $(this).prop('checked', true); } ); }); } ); L’insertion de jquery peut se faire via ce code : <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script> </body> Faites un bouton qui inverse la sélection de checkbox réalisée à la fois en javascript et en Java.côté serveur. Ajouter un bouton qui coche toutes les checkbox en soumettant le formulaire côté serveur. Ajout d’un fichier de style css contenant le code Css suivant : div#central{ position:absolute; left: 50%; top: 10%; width: 800px; height: 800px; margin-top: -50px; margin-left: -400px; color: black; background-color:rgb(200,220,200); padding: 20px; } ul { list-style: none; margin: 0; padding: 4px 4px 4px 4px; } ul > li{ display: inline; } div#menu{ position:relative; left:10%; width:80%; background-color:rgb(200,240,220); } Ajouter deux div dans la partie Vue avec les id référencés dans le code Css sachant que l’un doit être inclus dans l’autre. Faite un lien entre avec le fichier Css. Créer un menu horizontal utilisant une liste d’éléments comme proposé par le site suivant : http://www.alsacreations.com/tuto/lire/574-Creer-des-menus-simples-en-CSS.html Modifier les noms des menus pour les faire correspondre aux actions javascript initialement créées. Ajouter un évènement javascript/jquery sur tous les liens du menu : $(document).ready(function(){ $("a").click(function(event){ alert("Menu 1!"); event.preventDefault(); }); }); Comment pensez vous qu’il faut faire pour différencier les différents clics sur les menus ?