MVC et applications Web
Servlets/JSP et modèle MVC
Model2, Struts
PierreYves Gibello pierreyves.gibello@experlog.com
Mise à jour : 30 Septembre 2004
Ce document est couvert par la licence Creative Commons AttributionShareAlike.
This work is licensed under the Creative Commons AttributionShareAlike License.
Modèle MVC
• Model / View / Controller
– Modèle : l ’application métier, les données…
ce qui est manipulé par l ’
application.
– Vue : présentation de l ’état du modèle
(généralement à un utilisateur)
– Contrôleur : interface d ’action sur le modèle
(par exemple, pour les mises à jour)
• L ’interface utilisateur, composée de vues,
intéragit avec le contrôleur.
Le Pattern MVC
Une « boucle de rétroaction »...
Utilisateur
Voit
Utilise
Vue(s)
Contrôleur
Manipule
Rafraîchit
Modèle
Application
Servlets/JSP « Mo
del2 »
N (1) requête
(2) action sur le modèle
Servlet
Modèle
Navigateur
Contrôleur
(beans, BD…)
HTML
(3) forward
(4) rafraîchir vue
(5) réponse
JSP
Vue
Exemple : Servlet Contrôleur
public class ControllerServlet extends HttpServlet
{
public void doGet (HttpServletRequest req,
HttpServletResponse res)
throws ServletException,IOException {
String action = req.getParameter("action");
if("consulter".equals(action)) {
String nom = req.getParameter("nom");
if(nom == null) forward("error.jsp", req,
res);
else {
String tel = annuaire.chercherContact(nom);
req.setAttribute("tel", tel);
forward("contact.jsp", req, res);
}
} else if ("modifier".equals(action)) {
// ...
Struts
• Servlet Contrôleur générique
– org.apache.struts.action.ActionServlet
– servletmapping sur « *.do »
• Interaction avec le modèle
– ActionForm et Action à implémenter
• WEBINF/strutsconfig.xml
– Association URL(.do)/ActionForm/Action/Vue JSP
• Taglibs utilitaires
– strutshtml, strutslogic, strutsbean
Struts : architecture
(1)
ActionServlet
ActionForm
Appel java
Contrôleur
Accède à
(2)
Action
JSP
forward
Modèle
Vue
ActionForm
• Java Bean
• getter et setter pour chaque champ de
formulaire
• gestion d ’erreur (validate() pour validation
de formulaire)
• associé à une URL « .do », une Action et
une vue JSP dans strutsconfig.xml
Action
• Classe qui intéragit avec l ’objet métier et
l ’ActionForm
– Etend org.apache.struts.action.Action
– public ActionForward perform(
ActionMapping mapping, ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
• Lien avec l ’ActionForm, l ’URL et les
vues (forward) dans strutsconfig.xml
– ActionMapping pour accéder à l ’information,
et pour le forward(vue)
strutsconfig.xml
<formbeans>
Implém. de
<formbean name=«myForm »
l ’ActionForm
type=« mypackage.MyForm »/>
</formbeans>
<! association URL.do/ActionForm/Action/vue >
<actionmappings>
<action path=«/myform »
Signifie «/myform.do»
type=«mypackage.MyAction »
name=«myForm »
Implém. de l ’Action
input=«/saisie.jsp »
JSP si erreur saisie
scope=«request »>
<forward name="success" path="/ok.jsp"/>
<forward name="failure" path="/erreur.jsp"/>
</action>
</actionmappings>
Formulaire de saisie
<! saisie.jsp >
<%@ taglib uri=« /WEBINF/strutshtml.tld » prefix=« html »>
<! traitements erreur (attribut «input» de «actionmapping») >
<html:errors/>
<! formulaire utilisant la taglib strutshtml >
<! «myform»(.do) = attribut «path» de «actionmapping» >
<html:form action=« myform.do »>
Nom : <html:text property=« nom »/>
<html:submit />
</html:form>
ActionForm
package mypackage;
public final class MyForm extends ActionForm {
private String nom_ = null;
public void setNom(String n) { nom_ = n; }
public String getNom() { return nom_; }
}
Action
package mypackage;
public final class MyAction extends Action {
public ActionForward perform(
ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
MyForm f = (MyForm)form;
String nom = f.getNom();
// … traitements …
request.setAttribute(« leNom », nom);
return mapping.findForward(« success »);
}
}
Vue JSP
<! ok.jsp >
<%@ taglib uri=« /WEBINF/strutslogic.tld » prefix=«logic»>
<logic:present name=« leNom » scope=« request »>
Bonjour <logic:write name=« leNom » scope=« request »/>
</logic:present>
Struts : installer
• Appli d ’exemple : strutsblank.war
– Déployer dans webapps
– Modifier la configuration, et partir de
l ’
exemple
• Documentation : strutsdocumentation.war
– Déployer dans webapps