Vous êtes sur la page 1sur 23

Département Génie Informatique

Java Entreprise Edition


Pr. Aimad QAZDAR
a.qazdar@uiz.ac.ma

24 octobre 2022
Model MVC
Introduction
● Les plateformes de développement des applications web y compris Java EE n’imposent
aucun rangement particulier du code.
● Cela rende le code mal organisé et difficile à maintenir
− par exemple retrouver un bout de code ou une fonction qu’on veut modifier.
● Pour éviter ce problème, les développeurs utilisent les bonnes pratiques de
développement qu’on appelle les Patrons de conception ou Design Pattern (en
anglais).

88
C’est quoi un design pattern ?
● Un design pattern ou un modèle de conception est une feuille de route qui permet de
décrire les grandes lignes d’une solution.
● Il est issus de l'expérience des concepteurs et développeurs d'applications
● Capitalisation des expériences, les structurées en modèles et considérées comme
standard

89
Le Model MVC
● Le modèle MVC : Model-Vue-Controlleur, en anglais Model–View–Controller.
● MVC est un modèle de conception logicielle largement répandu, fort et utile.
● Néanmoins, il faut retenir que c’est un modèle de conception, il est donc indépendant du
langage de programmation.
● MVC est fortement recommandé comme modèle pour la plate-forme JEE.
● MVC découpe littéralement l'application en couches distinctes,
− Impacte très fortement l'organisation du code

90
Architecture MVC

Requête HTTP
Controller

Réponse HTTP
View Model

Client

Serveur

91
Architecture MVC : Vue
● C’est la partie de votre code qui s’occupera de la présentation des données à
l’utilisateur,
● Elle retourne une vue des données venant du modèle,
● C’est elle qui est responsable de produire les interfaces de présentation de votre
application à partir des informations qu’elle dispose,
● Il peut s'agir d'une interface HTML/JSP,
● Mais n'importe quel composant graphique peut jouer ce rôle.

92
Architecture MVC : Contrôleur
● Se charge d'intercepter les requêtes de l'utilisateur,
● Appeler le modèle
● Puis de retourner une réponse avec l’aide de la couche Modèle et Vue.
● Il ne doit faire aucun traitement.
● Il ne fait que de l'interception et de la redirection.

93
Architecture MVC : Model
● C’est la partie de votre code qui exécute la logique métier de votre application.
● Ceci signifie qu’elle est responsable de récupérer les données, de les convertir selon les
concepts de la logique de votre application tels que le traitement, la validation,
l’association et tout autre tâche concernant la manipulation des données.
● Les données peuvent être liées à une base de données, des EJBs, des services Web,
etc.

94
MVC en pratique

Requête HTTP
C: Servlets

Réponse HTTP
V: pages JSP M: Objets Java
Client

Stockage
des données

Serveur
95
Application
Nous souhaitons de créer une application JEE qui permet de calculer l’IMC d’un utilisateur
en se basant sur le model MVC.
L’IMC est calcué sur la base de la taille en m et du poids en kg.
La formule de calculi est comme suit : imc= poids / taille²

96
Architecture de l’application

Couche Web Couche Métier


maPage.htm Req HTTP
C: ContoleurServlet

Traitement

V: page JSP M : Objet


Rep HTTP Poids
Taille
IMC

97
Structure global du projet

Metier

Contrôleur
Web Model

Vue

98
Couche Metier

package metier;

public interface IImcMetier {


public double calculerImc(int poids, double taille);
}

package metier;

public class ImcMetierImpl implements IImcMetier {

@Override
public double calculerImc(int poids, double taille) {
double imc = poids/(taille*taille);
// TODO Auto-generated method stub
return imc;
}
}

99
Couche Metier
package metier;

public class TestMetier {

public static void main(String[] args) {


// TODO Auto-generated method stub
ImcMetierImpl metier=new ImcMetierImpl();
double taille=1.2;
int poids=65;
double imc=metier.calculerImc(poids, taille);
System.out.println(imc);
}
}

100
Creation de la vue
<html>
<head>
<meta charset="ISO-8859-1">
<title>IMC</title>
</head>
<body>
<div>
<p> Ma page </p>
</div>
</body>
</html>

http://localhost:8080/IMC_MVC/VueImc.jsp

101
Creation du Controleur
public class ControleurServlet extends HttpServlet{
protected void doGet(HttpServletRequest req, HttpServletResponse rep)
throws ServletException, IOException {
req.getRequestDispatcher("VueImc.jsp").forward(req,rep);
}
}

102
Creation du descripteur de deploiement : web.xml
<display-name>IMC_MVC</display-name>
<servlet>
<servlet-name>cs</servlet-name>
<servlet-class>web.ControleurServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>cs</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>

http://localhost:8080/IMC_MVC/index.do

103
Modification de la vue : Creation du formulaire

<form action="calculeIMC.do" method="post">


Poids : <input type="text" name="poids" value =“0" en kg <br>
Taille : <input type="text" name="taille“ value =“0.0" en m<br>
<input type="submit" value="Calculer">
</form>

104
Modification du controleur : Methode doPost

protected void doPost(HttpServletRequest req, HttpServletResponse rep)


throws ServletException, IOException {

/*lire les données de la requette*/

int poids = Integer.parseInt(req.getParameter("poids"));


double taille = Double.parseDouble(req.getParameter("taille"));

105
Creation du Model (bean)
public void setPoids(int poids) {
package web;
this.poids = poids;
}
public class ImcModel {
public double getTaille() {
private int poids;
return taille;
private double taille;
}
private double imc;
public void setTaille(double taille) {
this.taille = taille;
public int getPoids() {
}
return poids;
public double getImc() {
}
return imc;
}
public void setImc(double imc) {
public ImcModel() { this.imc = imc;
super(); }
}
public ImcModel(int poids, double taille, double imc) {
super();
this.poids = poids;
this.taille = taille;
this.imc = imc;
}
106
Modification du controleur : Methode doPost
/*stocker dans le model*/
ImcModel model= new ImcModel();
model.setPoids(poids);
model.setTaille(taille);

/*faire le trait (appel metier)*/


double res=metier.calculerImc(poids, taille);

/*stocker le resutat dans le model */


model.setImc(res);

/*stocker le model dans l'objet requeste*/


req.setAttribute("ImcModel", model);

/*faire le forward vers la vue jsp*/


req.getRequestDispatcher("VueImc.jsp").forward(req, rep);

private ImcMetierImpl metier;


@Override
public void init() throws ServletException {
metier=new ImcMetierImpl();
}
107
Modification de la vue : affichage du resultat
<%
ImcModel model = (ImcModel) request.getAttribute("ImcModel");
%>

<div>
IMC :<%=model.getImc()%>
</div>

108

Vous aimerez peut-être aussi