Cours le pattern MVC en JEE
Java EE
-
Cours 4
Cours de 2e année ingénieur
Spécialisation « Génie Informatique »
Rappels
2
JSP
• Les servlets facilitent le traitement avec java des requêtes et réponses HTTP, mais ils ne sont pas appropriés à l’écriture de code HTML
– out.println(""+title+"…");
• Les JSP permettent d’intégrer du code java
dans une page HTML
– Time on server
• Mais au final une JSP n’est qu’un servlet!
chargé et initialisé
traduit en compilé en en tant que
Automatiquement géré par le conteneur
Correspondance JSP/Servlet
• JSP d’origine
public final class XXX_jsp extends org.apache.jasper.runtime.HttpJspBase implements org.apache.jasper.runtime.JspSourceDependent{ public void _jspService(HttpServletRequest request, HttpServletResponse response) throws .IOException, ServletException{ response.setContentType("text/html"); JspWriter out = response.getWriter(); out.write(" "); out.print( new () );out.write(" \r\n");baz();} private int accessCount = 0; } | 4 |
Time on server
• Servlet généré par Tomcat
Cycle de vie d’un servlet
1. Chargement de la classe
2. Instanciation du servlet
• constructeur par défaut
3. Appel de init()
4. Appel(s) de service()
• 1 thread par requête
5. Appel de destroy()
Types des éléments de scripts JSP
• Expressions
– Format :
Format XML: expression
– Evaluée et insérée dans la sortie du servlet Se traduit par out.print(expression)
• Scriptlets
– Format :
Format XML:code
– Inséré tel quel dans la méthode _jspService du servlet (appelée par service)
• Déclarations
– Format :
Format XML: code
– Insérée telle quelle dans le corps de la classe servlet, en dehors de toute méthode existante
Notions supplémentaires sur les JSP :
Les directives de page
Les directives de page
• Donnent des informations sur le servlet qui sera généré pour la page JSP
• Principalement utilisées pour:
– L’importation de classes et paquetages
– Le type MIME généré par la JSP
L’attribut «import»
• Format
–
–
import="paquetage.classe1,...,paquetage.classeN" %>
• But
– Générer les instructions d’importation
• Remarque
– Bien que les pages JSP peuvent être n’importe où sur le serveur, les classes utilisées par les pages JSP doivent être dans le répertoire des classes de l’application Web
(c’est-à-dire: …/WEB-INF/classes )
Les attributs «contentType» et «pageEncoding»
• Format
–
–
–
• But
– Spécifier le type MIME de la page générée par le servlet résultant de la page JSP
Intégration des servlets et des JSP:
Application du design pattern
Model-View-Controller (MVC)
Pourquoi combiner Servlets & JSP?
• Classiquement : utilisation des JSP pour faciliter le développement et la maintenance du contenu HTML
– Pour du code dynamique simple, appel du code d’un servlet à partir de scripts JSP
– Pour des applications un peu plus complexes, utilisation de classes appelées à partir de scripts JSP
• Mais ce n’est pas suffisant
– Pour des traitements complexes, démarrer avec des JSP n’est pas pratique
– Mais surtout, l’idée derrière les JSP est qu’une seule page possède une forme, une présentation de base stable
11
Possibilités pour traiter une seule requête
• Servlet seuls. Marche bien quand:
– L’ output est de type binaire. Ex : une image
– Il n’y a pas d’ output. Ex : redirections
– La forme/présentation est variable. Ex : portail
• JSP seules. Marche bien quand:
– L’ output est de type caractère. Ex : HTML – La forme/présentation est stable.
• Architecture MVC. Nécessaire quand :
– Une même requête peut donner des résultats visuels réellement différents
– On dispose d’une équipe de développement conséquente avec une partie pour le dev. Web et une autre pour la logique métier
– Ona un traitement complexe des données mais une présentation relativement fixe
12
Rappel : MVC
Rappel : MVC
• Application dans le cadre d’Internet
Ex : AREL V6 - liste des promos
MVC : étape 1
Le client récupère un formulaire () pour passer une requête avec paramètres (1, 2, puis 3)
Formulaire :
AREL V6.0
AREL: L'école virtuelle de l'EISTI
Sélectionner la promo à afficher:
ing1
ing2
MVC : étape 2
1. Le client envoie son formulaire (GET/POST avec paramètres)
2. Le conteneur transmet au servlet correspondant (le controller)
Controller :
package arel; import ...;
public class SelectPromo extends .HttpServlet implements javax.servlet.Servlet{
//...
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException{ String promoName = request.getParameter("promo");
//...
}
}
Configuration :
" id="WebApp_ID" version="2.5">
MVC
SelectPromo
SelectPromo
arel.SelectPromo
SelectPromo
/SelectPromo
MVC : étape 3
3. Le servlet controller interroge le model sur «ing2»
4. Le model retourne au controller le résultat correspondant
Model :
package arel; import ...; public classPromo{
publicList getPromo(String promo){
List promoList= new ArrayList(); if(promo.equals("ing1")){
("Donald Duck"); ("Minnie Mouse"); ("Pluto"); //...
} else if (promo.equals("ing2")){ ("Mickey Mouse"); ("Daisy Duck"); ("Goofy");//... } else{ return null;}
return promoList;
}
}
MVC : étape 4
5. Le controller utilise les données du model pour sa réponse
6. Le controller transmet sa réponse à la view (JSP)
Controller :
package arel; import ...;
public class SelectPromo extends .HttpServlet implements javax.servlet.Servlet{
//...
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException{
String promoName = request.getParameter("promo");
Promo promo = new Promo();
List result = promo.getPromo(promoName); request.setAttribute("promo", result); // On ajoute l'attribut
RequestDispatcher view = // promo à la requête request.getRequestDispatcher("");
view.forward(request, response); // On forward la requête
} // à la JSP
}
MVC : étape 5
7. La JSP (view) traite la réponse transmise par le controller
8. La page HTML résultante est reçue par le client
View :
Result
List promoList=(List)request.getAttribute("promo"); Iterator it=promoList.iterator(); while(it.hasNext()){
out.print("
"()); On récupère l'attribut
} promoajouté à la requête
%> lors de l'étape 4
Ex : AREL V6 - liste des promos
Architecture Web JEE : Model 1 (pas MVC)
Architecture Web JEE : Model 2 (MVC)