4 – Modèle-Vue-Contrôleur (MVC) Auteurs: Raphaël Fournier...

13
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’informatique Conservatoire National des Arts & Métiers, Paris, France

Transcript of 4 – Modèle-Vue-Contrôleur (MVC) Auteurs: Raphaël Fournier...

Page 1: 4 – Modèle-Vue-Contrôleur (MVC) Auteurs: Raphaël Fournier ...orm.bdpedia.fr/files/NSY135-4-S2.pdf · MVC : un exemple pratique 2/12 Présentation de l’exemple convertisseur

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

Page 2: 4 – Modèle-Vue-Contrôleur (MVC) Auteurs: Raphaël Fournier ...orm.bdpedia.fr/files/NSY135-4-S2.pdf · MVC : un exemple pratique 2/12 Présentation de l’exemple convertisseur

MVC : un exemple pratique 1 / 12

Plan du cours

S2 MVC : un exemple pratique

Page 3: 4 – Modèle-Vue-Contrôleur (MVC) Auteurs: Raphaël Fournier ...orm.bdpedia.fr/files/NSY135-4-S2.pdf · MVC : un exemple pratique 2/12 Présentation de l’exemple convertisseur

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

Page 4: 4 – Modèle-Vue-Contrôleur (MVC) Auteurs: Raphaël Fournier ...orm.bdpedia.fr/files/NSY135-4-S2.pdf · MVC : un exemple pratique 2/12 Présentation de l’exemple convertisseur

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

Page 5: 4 – Modèle-Vue-Contrôleur (MVC) Auteurs: Raphaël Fournier ...orm.bdpedia.fr/files/NSY135-4-S2.pdf · MVC : un exemple pratique 2/12 Présentation de l’exemple convertisseur

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>

Page 6: 4 – Modèle-Vue-Contrôleur (MVC) Auteurs: Raphaël Fournier ...orm.bdpedia.fr/files/NSY135-4-S2.pdf · MVC : un exemple pratique 2/12 Présentation de l’exemple convertisseur

MVC : un exemple pratique Première vue 5 / 12

Formulaire du convertisseur

Page 7: 4 – Modèle-Vue-Contrôleur (MVC) Auteurs: Raphaël Fournier ...orm.bdpedia.fr/files/NSY135-4-S2.pdf · MVC : un exemple pratique 2/12 Présentation de l’exemple 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)

Page 8: 4 – Modèle-Vue-Contrôleur (MVC) Auteurs: Raphaël Fournier ...orm.bdpedia.fr/files/NSY135-4-S2.pdf · MVC : un exemple pratique 2/12 Présentation de l’exemple convertisseur

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)

Page 9: 4 – Modèle-Vue-Contrôleur (MVC) Auteurs: Raphaël Fournier ...orm.bdpedia.fr/files/NSY135-4-S2.pdf · MVC : un exemple pratique 2/12 Présentation de l’exemple convertisseur

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

Page 10: 4 – Modèle-Vue-Contrôleur (MVC) Auteurs: Raphaël Fournier ...orm.bdpedia.fr/files/NSY135-4-S2.pdf · MVC : un exemple pratique 2/12 Présentation de l’exemple convertisseur

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

Page 11: 4 – Modèle-Vue-Contrôleur (MVC) Auteurs: Raphaël Fournier ...orm.bdpedia.fr/files/NSY135-4-S2.pdf · MVC : un exemple pratique 2/12 Présentation de l’exemple convertisseur

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 }

Page 12: 4 – Modèle-Vue-Contrôleur (MVC) Auteurs: Raphaël Fournier ...orm.bdpedia.fr/files/NSY135-4-S2.pdf · MVC : un exemple pratique 2/12 Présentation de l’exemple convertisseur

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>

Page 13: 4 – Modèle-Vue-Contrôleur (MVC) Auteurs: Raphaël Fournier ...orm.bdpedia.fr/files/NSY135-4-S2.pdf · MVC : un exemple pratique 2/12 Présentation de l’exemple convertisseur

MVC : un exemple pratique Deuxième vue JSP 12 / 12

Affichage de la seconde JSP