4 – modèle-vue-contrôleur (mvc) auteurs: raphaël fournier...
TRANSCRIPT
Applications orientées données (NSY135)4 – Modèle-Vue-Contrôleur (MVC)
Auteurs: Raphaël Fournier-S’niehotta et Philippe Rigaux([email protected],[email protected])
Département d’informatiqueConservatoire National des Arts & Métiers, Paris, France
MVC : un exemple pratique 1 / 12
Plan du cours
S2 MVC : un exemple pratique
MVC : un exemple pratique 2 / 12
Présentation de l’exemple
convertisseur de température, de l’unité Celsius vers l’unité Farenheit
un seul contrôleurun seul objet métierdeux vues
un formulaire permettant de saisir une valeur en Celsiusle résultat de la conversion de la valeur entrée en Fahrenheit
♣ Exemple volontairement simpliste, pour aller à l’essentiel
MVC : un exemple pratique Première vue 3 / 12
Java Server Pages
technologie un peu ancienne, qui a beaucoup évolué
idée : créer des pages HTML intégrant du code Java permettant d’avoir des partiesdynamiques
pas toujours élégant initialement, amélioré par :intégration de balises spéciales dans le codeconventions de programmation et de nommage
MVC : un exemple pratique Première vue 4 / 12
Page d’accueil
1 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>23 <html>45 <head>6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">7 <title>Convertisseur de température</title>8 </head>9
10 <body>11 Vous pouvez convertir une température exprimée en12 <b>Celsius</b> en une valeur exprimée en <b>Fahrenheit</b>.1314 <hr />1516 <form method="POST" action="${pageContext.request.contextPath}/convertisseur">1718 Valeur en Celsius: <input type="text" size="20" name="celsius" /> <br />1920 <input type="submit" value="Convertir" />21 </form>2223 <hr />24 </body>2526 </html>
MVC : un exemple pratique Première vue 5 / 12
Formulaire du convertisseur
MVC : un exemple pratique Le contrôleur: une servlet 6 / 12
Convertisseur.java
une servlet simpleà associer à l’URL “/convertisseur“deux méthodes
doGet, affichage du formulairedoPost, reçoit le paramètre du formulaire et conversion (action)
MVC : un exemple pratique Le contrôleur: une servlet 7 / 12
doGet
1 /**2 * Méthode Get: on affiche le formulaire3 */4 protected void doGet(HttpServletRequest request, HttpServletResponse response)5 throws ServletException, IOException {67 String maVue = "/convinput.jsp";89 RequestDispatcher dispatcher = getServletContext().getRequestDispatcher(maVue);
1011 dispatcher.forward(request,response);12 }
il y a délégation par le contrôleur de l’affichage à la vue (JSP)après sélection de la JSP à déclencher “convinput.jsp“ (dans “WebContent“)on lui transmet le flot d’exécution (forward)
MVC : un exemple pratique Le modèle: une classe Temperature 8 / 12
Temperature
package modeles; 12
/** 3* Une classe permettant d'obtenir une température en Celsius ou Farenheit. 4*/ 5
public class Temperature { 67
/** 8* La valeur, exprimée en degrés Celsius 9*/ 10
private double celsius; 1112
/** 13* Le constructeur, prend des Celsius en paramètres 14
*/ 15public Temperature(double valeurCelsius) 16{ 17
celsius = valeurCelsius; 18} 19
20/** 21* Pour obtenir la valeur en Celsius 22* @return Valeur de la température en Celsius 23
*/ 24public double getCelsius() { 25
return celsius; 26} 27
28/** 29* Pour obtenir la valeur en Fahrenheit 30* @return Valeur de la température en Farenheit 31
*/ 32public double getFahrenheit() { 33
return (celsius * 9/5) + 32; 34} 35} 36
MVC : un exemple pratique Le modèle: une classe Temperature 9 / 12
Explications
modèle très simple, représentation d’une températurepeut être fournie en Celsius ou Farenheit
Bonnes pratiques :aucune propriété n’est publique;des méthodes “set“ et “get“, au nommage normalisé, servent à lire/écrire lespropriétés;les commentaires sont abondants et prêts à produire la javadoc
♣ cette classe est totalement indépendante du contexte Web et peut en fait êtreutilisée dans n’importe quelle application Java
MVC : un exemple pratique Seconde action : conversion 10 / 12
Conversion
1 /**2 * Méthode Post: on affiche la conversion3 */4 protected void doPost(HttpServletRequest request, HttpServletResponse response)5 throws ServletException, IOException {6 // On devrait récuperer la valeur saisie par l'utilisateur7 String valCelsius = request.getParameter("celsius");89 if (valCelsius.isEmpty()) {
10 // Pas de valeur: il faudrait afficher un message, etc.11 valCelsius = "20";12 }1314 // Action: appliquons le convertisseur. Espérons que valCelsius représente15 // bien un nombre, sinon...16 Temperature temp = new Temperature(Double.valueOf(valCelsius));17 // Enregistrons l'objet dans la requête18 request.setAttribute("temperature", temp);1920 // Transfert à la vue21 String maVue = "/convoutput.jsp";22 RequestDispatcher dispatcher =23 getServletContext().getRequestDispatcher(maVue);24 dispatcher.forward(request,response);25 }
MVC : un exemple pratique Deuxième vue JSP 11 / 12
Autre vue JSP
1 <%@ page language="java" contentType="text/html; charset=UTF-8"2 pageEncoding="UTF-8"%>34 <html>5 <head>6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">7 <title>Résultat de la conversion</title>8 </head>9 <body>
1011 <p>Vous avez demandé la conversion en Fahrenheit de la valeur en12 Celsius ${requestScope.temperature.celsius}</p>13 <p>14 <b>Et le résultat est: ${requestScope.temperature.fahrenheit}15 degrés Fahrenheit </b>!16 </p>17 </body>18 </html>
MVC : un exemple pratique Deuxième vue JSP 12 / 12
Affichage de la seconde JSP