Presentation Spring, Spring MVC

18 516 vues

Publié le

Publié dans : Technologie
2 commentaires
30 j’aime
Statistiques
Remarques
Aucun téléchargement
Vues
Nombre de vues
18 516
Sur SlideShare
0
Issues des intégrations
0
Intégrations
669
Actions
Partages
0
Téléchargements
79
Commentaires
2
J’aime
30
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive
  • Presentation Spring, Spring MVC

    1. 1. Présentation générale du framework Spring Auteur: RICHAND Nathaniel
    2. 2. <ul><li>Spring ? </li></ul><ul><ul><li>Présentation générale </li></ul></ul><ul><ul><li>Architecture </li></ul></ul><ul><li>Spring IOC </li></ul><ul><ul><li>IOC? </li></ul></ul><ul><ul><li>Spring IOC </li></ul></ul><ul><li>Spring MVC </li></ul><ul><ul><li>Rappel sur le pattern MVC </li></ul></ul><ul><ul><li>Spring MVC </li></ul></ul><ul><li>Divers </li></ul><ul><ul><li>Web Services : Spring Remoting </li></ul></ul><ul><ul><li>Spring DAO et ORM </li></ul></ul><ul><ul><li>Autres </li></ul></ul><ul><ul><li>Spring IDE pour Eclipse </li></ul></ul><ul><li>Bilan </li></ul>
    3. 3. <ul><li>Spring? </li></ul>
    4. 4. <ul><li>Spring est un framework de développement Java basé sur la notion de conteneur léger . </li></ul><ul><li>Spring existe depuis 2002 , la dernière version est la 2.5 . Cette version est toujours compatible avec java 1.4 . </li></ul><ul><li>Spring est un projet Open Sources de licence Apache dont le support et les évolutions sont réalisées par la société Interface21. </li></ul><ul><li>Spring est composé de très nombreuses briques , mais l’on peut utiliser uniquement les parties qui nous intéresse sans se soucier des autres. </li></ul><ul><li>Spring met en avant les concepts de </li></ul><ul><ul><li>Robustesse, </li></ul></ul><ul><ul><li>Extensibilité, </li></ul></ul><ul><ul><li>Réutilisabilité. </li></ul></ul>
    5. 5. Spring Core IOC AOP Spring DAO Spring Context Spring Remoting … Spring ORM Spring JDBC Spring Web RMI Web Services … JDO Hibernate … Spring MVC Struts JSF …
    6. 6. <ul><li>Spring IOC </li></ul>L’IOC n’est pas une lubie , mais un enjeu primordial pour un développement propre et structuré. Inversion Of Control
    7. 7. <ul><li>L’IOC est un Design-Pattern </li></ul><ul><li>Remplacement du schéma classique : </li></ul><ul><li>Schéma de l’IOC : </li></ul>Classe A Classe B Dépendance Interface I Classe A Dépendance Classe B
    8. 8. <ul><li>//Un controller qui va utiliser nos classes </li></ul><ul><li>public class FormController{ </li></ul><ul><li>FormulaireInterface form ; </li></ul><ul><li>//Standard JavaBean </li></ul><ul><li>public void setForm(FormulaireInterface f) { </li></ul><ul><li>this.form = f; </li></ul><ul><li>} </li></ul><ul><li>… . </li></ul><ul><li>afficheForm( form .getNomForm()); </li></ul><ul><li>… </li></ul><ul><li>} </li></ul>+getNomForm() : String +getNomForm() : String FormulaireImpl FormulaireInterface Ceci est plutôt du traitement «  métier » Comment se fait le lien entre les deux couches?
    9. 9. <ul><li>Le lien entre les couches métier et contrôle est fait par la définition de « beans » dans Spring : </li></ul><ul><li>< beans > </li></ul><ul><li>< bean id = &quot;controllerForm&quot; class = &quot;mypackage.FormController&quot; > </li></ul><ul><li>< property name = &quot; form &quot; ref = &quot; formulaire &quot; /> </li></ul><ul><li></ bean > </li></ul><ul><li>< bean id = &quot; formulaire &quot; class = &quot;mypackage.FormulaireImpl&quot; / > </li></ul><ul><li></ beans > </li></ul><ul><li>Spring prend en charge la création des objets et réalise les injections de donnés en se servant des « setter » (méthode conseillée). </li></ul><ul><li>Les couches sont nettement séparées , sans dépendances , plus facilement maintenable et très facilement testables unitairement. </li></ul>
    10. 10. <ul><li>Spring MVC </li></ul>
    11. 11. <ul><li>MVC est un pattern de conception visant à découper les applications en couches aux rôles distinctes. </li></ul><ul><li>En J2EE la vue est classiquement réalisée par des JSP, le controller par une Servlet et le model par un JavaBean. </li></ul><ul><li>Schéma récapitulatif : </li></ul>
    12. 12. DispatcherServlet Controller View Model Request Response
    13. 13. <ul><li><? xml version = &quot;1.0&quot; encoding = &quot;UTF-8&quot; ?> </li></ul><ul><li>< web-app xmlns = &quot;http://java.sun.com/xml/ns/j2ee&quot; </li></ul><ul><li>xmlns:xsi = &quot;http://www.w3.org/2001/XMLSchema-instance&quot; </li></ul><ul><li>xsi:schemaLocation = &quot;http://java.sun.com/xml/ns/j2ee </li></ul><ul><li>http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd&quot; version = &quot;2.4&quot; > </li></ul><ul><li>< servlet > </li></ul><ul><li>< servlet-name > kickstart </ servlet-name > </li></ul><ul><li>< servlet-class > </li></ul><ul><li>org.springframework.web.servlet.DispatcherServlet </li></ul><ul><li></ servlet-class > </li></ul><ul><li>< load-on-startup > 0 </ load-on-startup > </li></ul><ul><li></ servlet > </li></ul><ul><li>< servlet-mapping > </li></ul><ul><li>< servlet-name > kickstart </ servlet-name > </li></ul><ul><li>< url-pattern > *.htm </ url-pattern > </li></ul><ul><li></ servlet-mapping > </li></ul><ul><li></ web-app > </li></ul>
    14. 14. import org.springframework.web.servlet.mvc.SimpleFormController; public class FormController extends SimpleFormController { // Méthode appelée avant l’affichage du formulaire, retourne un bean associé au formulaire protected Object formBackingObject(HttpServletRequest request) { MyBean bean = (MyBean) request.getSession().getAttribute( &quot;myBean&quot; ); if (bean == null ) bean = new MyBean(); return bean; } // Méthode appelée lors du POST du formulaire, reçois le bean associé au formulaire protected ModelAndView onSubmit(HttpServletRequest request, HttpServletResponse response, Object springBean, BindException errors) throws Exception { MyBean bean = (MyBean) springBean; request.getSession().setAttribute( &quot;myBean&quot; , bean); return new ModelAndView(); } }
    15. 15. GET POST Retourne une instance de la « command » (JavaBean) associée. Initialisation des binders, convertisseurs des données de la requête. Permets de binder des données complémentaires. Typiquement les contenus de listes déroulantes. Le modèle est exposé et la vue est appelée.
    16. 16. <ul><li>Liste des tags : </li></ul><ul><li>• checkbox </li></ul><ul><li>• errors </li></ul><ul><li>• form </li></ul><ul><li>• hidden </li></ul><ul><li>• input </li></ul><ul><li>• label </li></ul><ul><li>• option </li></ul><ul><li>• options </li></ul><ul><li>• password </li></ul><ul><li>• radiobutton </li></ul><ul><li>• select </li></ul><ul><li>• textarea </li></ul><ul><li>La taglib de Spring MVC permet de réaliser automatiquement le binding entre le formulaire HTML et le javaBean adossé. </li></ul><ul><li>Exemple : </li></ul><ul><li><html> </li></ul><ul><li>< form:form commandName = &quot;myBean&quot; method = &quot;post&quot; > </li></ul><ul><li>< form:hidden path = &quot;id&quot; /> </li></ul><ul><li>< form:input path = &quot;firstName&quot; id = &quot;firstName&quot; /> </li></ul><ul><li>< form:errors path = &quot;firstName&quot; cssClass = &quot;fieldError&quot; /> </li></ul><ul><li><br /> </li></ul><ul><li>< form:input path = &quot;lastName&quot; id = &quot;lastName&quot; /> </li></ul><ul><li>< form:errors path = &quot;lastName&quot; cssClass = &quot;fieldError&quot; /> </li></ul><ul><li></form:form> </li></ul><ul><li></html> </li></ul>
    17. 17. <ul><li>Handler mapping (mapping requête => controller) </li></ul><ul><li>View resolution (sélection de la vue) </li></ul><ul><li>Mécanisme de validation et de gestion des erreurs avancés (géré dans le cycle de vie d’une requête) </li></ul><ul><li>Binding des données personnalisable. Evite le parsing manuel des données de formulaire. </li></ul><ul><li>Support de plusieurs modèle de vue (Velocity, FreeMarker,…) </li></ul><ul><li>… </li></ul>
    18. 18. <ul><li>Divers </li></ul>
    19. 19. <ul><li>Spring permet de simplifier la création et l’utilisation de Web Services grâce au module Spring Remoting. Il intègre les deux solutions classiques du marché : Axis et Xfire, en les simplifiant grandement. </li></ul><ul><li>Création de Web Services : </li></ul><ul><ul><li>Exposition d’un POJO en tant que Web Services </li></ul></ul><ul><ul><li>très simple en utilisant Xfire, création de la WSDL </li></ul></ul><ul><ul><li>automatique par introspection. Plus besoins de </li></ul></ul><ul><ul><li>générer les WSDL et Handler par tâche ANT! </li></ul></ul><ul><li>Utilisation de Web Services : </li></ul><ul><ul><li>Définition d’un JavaBean comme un client du Web </li></ul></ul><ul><ul><li>Services, transparent pour le reste de l’application. </li></ul></ul><ul><ul><li>Transformation des exceptions propre à chaque </li></ul></ul><ul><ul><li>fournisseur en exceptions génériques. </li></ul></ul>
    20. 20. <ul><li>Spring apporte son aide sur la couche DAO et sur les solutions de mapping objet/relationnel : </li></ul><ul><ul><li>en facilitant la création d’une couche DAO grâce à l’inversion de contrôle et à la séparation des couches. </li></ul></ul><ul><ul><li>en simplifiant et standardisant l’utilisation des transactions dans la couche d’accès aux données. </li></ul></ul><ul><ul><li>en proposant une hiérarchie d’exceptions standardisés . On retrouve ainsi les mêmes exceptions dans les couches supérieures, quelle que soit la technologie de persistance utilisée. </li></ul></ul><ul><ul><li>en proposant des classes utilitaire simplifiant considérablement le nombres de lignes de code à produire pour chacune des technologies. </li></ul></ul>
    21. 21. <ul><li>Spring facilite l’intégration de services et d’API tierces, comme : </li></ul><ul><ul><li>Tiles ( http://tiles.apache.org ), mécanismes élégant de templates de pages web (Tiles 2 est géré mais requiert Java 5) </li></ul></ul><ul><ul><li>Intégration d’ AJAX (DWR, Prototype, Scipt.aculo.us) </li></ul></ul><ul><ul><li>... </li></ul></ul><ul><li>Spring WebFlow permettant de définir les Flux et les modèles de navigations entre pages. </li></ul><ul><li>Spring AOP , permettant de faire simplement de la programmation par aspect. Intégration de AspectJ. </li></ul><ul><li>Spring Security (ACEGI) </li></ul><ul><li>Spring Batch </li></ul><ul><li>… ( http://www.springframework.org/sub-projects ) </li></ul>
    22. 22. <ul><li>Aide sur l’écriture de fichiers XML : </li></ul><ul><ul><li>AutoComplétion </li></ul></ul><ul><ul><li>Vérification structure des fichiers </li></ul></ul><ul><ul><li>Contrôle des références et des dépendances </li></ul></ul><ul><ul><li>Ajout d’un builder </li></ul></ul><ul><ul><li>Affichage sous forme graphique des beans permettant de voir les liens et les dépendances </li></ul></ul><ul><li>Un récapitulatif des fonctions est disponible ici : </li></ul><ul><li>http://springide.org/project/wiki/SpringideGuide </li></ul>Beans Graph Beans View
    23. 23. <ul><li>Bilan </li></ul>
    24. 24. <ul><li>La configuration par XML rend la configuration très verbeuse et difficile à lire sur de grosses applications. </li></ul><ul><li>Elements de solutions : </li></ul><ul><ul><ul><li>Utiliser la configuration par annotations de Spring 2.5 (nécessite Java 5) </li></ul></ul></ul><ul><ul><ul><li>Utiliser les outils d’affichage de graphe de dépendance tel Spring IDE ou BeanDoc (JavaDoc évolué avec les graphes de Spring) </li></ul></ul></ul><ul><li>Spring est très ouvert et ne limite pas les comportements : </li></ul><ul><li>Pour un même problème il existe parfois une multitude </li></ul><ul><li>de solutions différentes, ce qui peut être déroutant. </li></ul><ul><li>Même si Spring est devenu un standard « de facto », ce n’est cependant pas une norme comme JSF ou les EJB. </li></ul><ul><li>Si Spring facilite l’intégration et l’utilisation de librairies tierces, la compréhension et la connaissance de celles-ci reste nécessaire. </li></ul>
    25. 25. <ul><li>Spring a largement pénétré le monde industriel et jouit d’une communauté importante et dynamique. </li></ul><ul><li>Sa prise en main est très facile et très intuitive basée sur le principe «  Convention over Configuration  » </li></ul><ul><li>La documentation est très importante et très bien réalisé : le manuel de référence fait 568 pages et est à jour! </li></ul><ul><li>Spring encadre les développements en instaurant les best practices Java et J2EE. </li></ul><ul><li>Spring est très modulaire et surtout très peu intrusif , on peut se passer de Spring sur un composant et effectuer la configuration à la main ou avec d’autres outils. On ne se lit pas «  ad vitam eternam » à Spring. </li></ul>
    26. 26. <ul><li>Site officiel : </li></ul><ul><ul><li>http://springframework.org/ </li></ul></ul><ul><li>Articles : </li></ul><ul><ul><li>http://zekey.developpez.com/articles/spring/ </li></ul></ul><ul><ul><li>http://www.springhub.com/ </li></ul></ul><ul><ul><li>http://blog.interface21.com/main/ </li></ul></ul><ul><li>Forum : </li></ul><ul><ul><li>Anglais : http://forum.springframework.org/ </li></ul></ul><ul><ul><li>Français : Forum developpez.com </li></ul></ul><ul><li>Livres : </li></ul><ul><ul><li>Spring par la pratique (édition eyrolles) </li></ul></ul><ul><ul><li>Spring in action 2 nde édition (édition Manning) </li></ul></ul>

    ×