JEE Spring MVC

  • Published on
    06-Aug-2015

  • View
    168

  • Download
    1

Embed Size (px)

Transcript

J2EE : Par M.Youssfi

Architecture J2EE

M.Youssfi

Architecture J2EEServeur dapplication : TOMCATClient Lger HTML CSS Java Script XML Ajax Flash HTTP Couche WEB Couche Mtier Couche DAO

1

Contrleur Servlet

2 3Modle

4Vue JSP

6

5 JavaBeansSTRUTS JSF Spring MVC

Mtier

DAODonnes Hibernate

Couche service

JDBC

SGBD

Client Lourd AWT SWING SWT

Spring

RMI/EJB/CORBA/SOAP

J2EE : Par M.Youssfi

Architecture dune applicationLa couche [dao] s'occupe de l'accs aux donnes, le plus souvent des donnes persistantes au sein d'un SGBD. Mais cela peut tre aussi des donnes qui proviennent de capteurs, du rseau, ... La couche [metier] implmente les algorithmes " mtier " de l'application. Cette couche est indpendante de toute forme d'interface avec l'utilisateur.C'est gnralement la couche la plus stable de l'architecture. Elle ne change pas si on change l'interface utilisateur ou la faon d'accder aux donnes ncessaires au fonctionnement de l'application.

La couche [Prsentation] qui est l'interface (graphique souvent) qui permet l'utilisateur de piloter l'application et d'en recevoir des informations.

Spring FrameWork

J2EE : Par M.Youssfi

Projets SpringInversion de Contrle MVC AOP

Remoting

SpringJDBC JMS/JMX

Web services

Web Flow

Rle de SpringSpring est un framework qui peut intervenir dans les diffrentes parties dune projet J2EE :Spring IOC: permet dassurer linjection des dpendances entres les diffrentes couches de votre application (Inversion du contrle), de faon avoir un faible couplage entre les diffrentes parties de votre application. Spring MVC: Implmenter le modle MVC dune application web au mme titre que STRUTS et JSF Spring AOP: permet de faire la programmation oriente Aspect. Peut tre utilis au niveau de la couche mtier pour la gestion des transactions. Spring JDBC: Peut tre exploiter au niveau de la couche daccs aux bases de donnes Spring Remoting : offre un support qui permet de faciliter laccs un objet distant RMI ou EJB. Spring Web Services : permet de faciliter la cration et laccs aux web services Etc

J2EE : Par M.Youssfi

Spring IOC

Inversion de Contrle

Rappels de quelque principes de conceptionUne application qui nvolue pas meurt. Une application doit tre ferme la modification et ouverte lextension. Une application doit sadapter aux changements Efforcez-vous coupler faiblement vos classes. Programmer une interface et non une implmentation Etc..

J2EE : Par M.Youssfi

Couplage fortQuand une classe A est li une classe B, on dit que la classe A est fortement couple la classe B. La classe A ne peut fonctionner quen prsence de la classe B. Si une nouvelle version de la classe B (soit B2), est cre, on est oblig de modifier dans la classe A. Modifier une classe implique:Il faut disposer du code source. Il faut recompiler, dployer et distribuer la nouvelle application aux clients. Ce qui engendre un cauchemar au niveau de la maintenance de laplication

Exemple de couplage fortPresentation metier:MetierImpl main(String[] a):void 1 MetierImpl dao: DaoImpl calcul() : doublegetValue() : double

1

DaoImpl

package metier; import dao.DaoImpl; public class MetierImpl { private DaoImpl dao; public MetierImpl() { dao=new DaoImpl(); } public double calcul(){ double nb=dao.getValue(); return 2*nb; } }

package dao; public class DaoImpl { public double getValue(){ return(5); } }package pres; import metier.MetierImpl; public class Presentation { private static MetierImpl metier; public static void main(String[] args) { metier=new MetierImpl(); System.out.println(metier.calcul()); } }

J2EE : Par M.Youssfi

Problmes du couplage fortDans lexemple prcdent, les classes MetierImpl et DaoImpl sont lies par un couplage fort. De mme pour les classe Presentation et MetierImpl Ce couplage fort na pas empch de rsoudre le problme au niveau fonctionnel. Mais cette conception nous ne a pas permis de crer une application ferme la modification et ouverte lextension. En effet, la cration dune nouvelle version de la mthode getValue() de la classe DaoImpl, va nous obliger dditer le code source de lapplication aussi bien au niveau de DaoImpl et aussi MetierImpl. De ce fait nous avons viol le principe une application doit tre ferme la modification et ouverte lexetension Nous allons voir que nous pourrons faire mieux en utilisant le couplage faible.

Couplage Faible.Pour utiliser le couplage faible, nous devons utiliser les interfaces. Considrons une classe A qui implmente une interface IA, et une classe B qui implmente une interface IB. Si la classe A est lie linterface IB par une association, on dit que le classe A et la classe B sont lies par un couplage faible. Cela signifie que la classe B peut fonctionner avec nimporte quelle classe qui implmente linterface IA. En effet la classe B ne connait que linterface IA. De ce fait nimporte quelle classe implmentant cette interface peut tre associe la classe B, sans quil soit ncssaire de modifier quoi que se soit dans la classe B. Avec le couplage faible, nous pourrons crer des application ferme la modification et ouvertes lextension.

J2EE : Par M.Youssfi

Exemple de coupage faiblePresentation metier:IMetier main(String[] a):void MetierImplpackage metier; public interface IMetier { public double calcul(); }

1

IMetiercalcul() : double

1

IDaogetValue() : double

dao: IDao calcul() : double

DaoImplgetValue() : double

package metier; import dao.IDao; public class MetierImpl implements IMetier { private IDao dao; public double calcul() { double nb=dao.getValue(); return 2*nb; } // Getters et Setters }

package dao; public interface IDao { public double getValue(); }

package dao; public class DaoImpl implements IDao { public double getValue() { return 5; } }

Injection des dpendances avec Spring.Linjection des dpendance, ou linversion de contrle est un concept qui intervient gnralement au dbut de lexcution de lapplication. Spring IOC commence par lire un fichier XML qui dclare quelles sont diffrentes classes instancier et dassurer les dpendances entre les diffrentes instances. Quand on a besoin dintgrer une nouvelle implmentation une application, il suffirait de la dclarer dans le fichier xml de beans spring.

J2EE : Par M.Youssfi

Injection des dpendances dans une application java standard metier:MetierImpl dao: calcul() : double d:DaoImplgetValue() : double

Injection des dpendances dans une application java standardpackage pres; import metier.IMetier; import org.springframework.beans.factory.xml.XmlBeanFactory; import org.springframework.core.io.ClassPathResource; public class Presentation { public static void main(String[] args) {

XmlBeanFactory bf=new XmlBeanFactory(new ClassPathResource("spring-beans.xml")); IMetier m=(IMetier) bf.getBean("metier");System.out.println(m.calcul()); } }

Pour une application java classique, le fichier spring-beans.xml devrait tre enregistr dans la racine du classpath. Cest--dire le dossier src.

J2EE : Par M.Youssfi

Structure du projet

Injection des dpendances dans une application webDans une application web, SpringIOC est appel au dmarrage du serveur en dclarant le listener ContextLoaderListener dans le fichier web.xml contextConfigLocation /WEB-INF/spring-beans.xml org.springframework.web.context.ContextLoaderListener Dans cette dclaration, CotextLoaderListener est appel par Tomcat au moment du dmarrage de lapplication. Ce listener cherchera le fichier de beans spring spring-beans.xml stock dans le dossier WEB-INF. ce qui permet de faire linjection des dpendances entre MetierImpl et DaoImpl

J2EE : Par M.Youssfi

Spring MVC

Spring MVCArchitecture de Spring MVC

J2EE : Par M.Youssfi

Spring MVC Architecture

Spring MVC

J2EE : Par M.Youssfi

Spring MVC1- le client fait une demande au contrleur. Celui-ci voit passer toutes les demandes des clients. C'est la porte d'entre de l'application. C'est le C de MVC. Ici le contrleur est assur par une servlet gnrique : org.springframework.web.servlet.DispatcherServlet 2- le contrleur principal [DispatcherServlet] fait excuter l'action demande par l'utilisateur par une classe implmentant l'interface : org.springframework.web.servlet.mvc.ControllerA cause du nom de l'interface, nous appellerons une telle classe un contrleur secondaire pour le distinguer du contrleur principal [DispatcherServlet] ou simplement contrleur lorsqu'il n'y a pas d'ambigut.

3- le contrleur [Controller] traite une demande particulire de l'utilisateur. Pour ce faire, il peut avoir besoin de l'aide de la couche mtier. Une fois la demande du client traite, celle-ci peut appeler diverses rponses. Un exemple classique est :une page d'erreurs si la demande n'a pu tre traite correctement une page de confirmation sinon

Spring MVC4- Le contrleur choisit la rponse (= vue) envoyer au client. Choisir la rponse envoyer au client ncessite plusieurs tapes :choisir l'objet qui va gnrer la rponse. C'est ce qu'on appelle la vue V, le V de MVC. Ce choix dpend en gnral du rsultat de l'excution de l'action demande par l'utilisateur. lui fournir les donnes dont il a besoin pour gnrer cette rponse. En effet, celle-ci contient le plus souvent des informations calcules par la couche mtier ou le contrleur lui-mme. Ces informations forment ce qu'on appelle le modle M de la vue, le M de MVC. Spring MVC fournit ce modle sous la forme d'un dictionnaire de type java.util.Map. Cette tape consiste donc en le choix d'une vue V et la construction du modle M ncessaire celle-ci.

5- Le contrleur DispatcherServlet demande