ENIB cours CAI Web - Séance 4 - Frameworks/Spring - Cours
Upcoming SlideShare
Loading in...5
×
 

ENIB cours CAI Web - Séance 4 - Frameworks/Spring - Cours

on

  • 783 views

 

Statistics

Views

Total Views
783
Views on SlideShare
783
Embed Views
0

Actions

Likes
0
Downloads
28
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    ENIB cours CAI Web - Séance 4 - Frameworks/Spring - Cours ENIB cours CAI Web - Séance 4 - Frameworks/Spring - Cours Presentation Transcript

    • Framework web
    • IntroductionLe Web est fait de HTTP, HTML, CSS, REST avec des architectures sansétats.<Guillaume Bort / Play Framework>Le framework web est le socle dune application Web fonctionnant sur un éco-système (java, Ruby, PHP, Python, Groovy)
    • IntroductionHistorique - Java Jungle2000● API Servlet○ Une url = une vue, une page HTTP○ Session HTTP● Tomcat○ Conteneur "léger" (servlets et JSP, pas dEJB)● Struts○ Modèle MVC○ Configuration XML2003● Spring○ Inversion de contrôle○ Programmation orientée aspect○ Couche d’abstraction.2005○ Ajax - les pages web dynamiques naissent
    • IntroductionHistorique - Java Jungle2006● Seam le concept de conservation introduit par Seam (reference à mettre).Natif dans les framework modernes (Grails / Play)● Apparition des compilateur JS et framework "poid mouche" (GWT)2007● Nouveau paradigme : retour à lEsprit du Web : Play! Framework
    • Framework WebButDONT REINVENT THE WHEEL !!!● se concentrer sur le code métier● améliorer :○ la testabilité○ maintenabilité● ouvert○ intégration de modules "prêts à plugger"○ communautaire● Réduire le time to market
    • Framework WebServices- web template système : produire le code html / css / js- cache / asynchronisme : limiter la charge server- sécurité : garantir lauthenticité du client sur le web- intéropabilité : savoir dialoguer avec des applications tiers (back end)- URL mapping : associer le code à une URL- AJAX : réliser des applications intéractives- web services : exposer des API- architecture : structurer lapplication (MVC, IOC)
    • Framework WebA Full ecosystemReady on PAASSocialSécuritySqlNoSQLJPACachingBigData SOAPJMSAMQPWSVoldemortHighly DistributedWeb 2.0 Complient Data OrientedIOCSCALABLETESTABLERELIABLE
    • Framework Web2012 Review - Framework popularityCopyright : zeroturnaround / Developer productivity report 2012
    • Framework WebOr Lightweight FrameworkHandmade Framework based on lightweight components
    • Framework Weblheure du choix !Framework● fondations de lapplication Web● très couteux à changer● doit résister aux changements (vision du produit)● framework obsolète ou inadapté = risque
    • Framework WebLightweigth vs HeavyweightFramework Lightweight Frameworkplateform set up Rapid slow for a full web scopecustom more difficult possible handmadeEvolution all the framework possible part by partplateform depedends sometimes (Web Profiledeveloppement)only a servlet containerintegrate newcompenentsA functionality or technologynot supported by theframework can be hard tointegrateYou can make you ownpatchwork easierCommunity and updates Depends on the popularityWarning when the frameworkbecame hasbeenDepends on the popularity
    • Framework WebConclusionIl ny a pas de bon choix, uniquement un choix adapté à votre besoinAvant de choisir testez vos choix pour le confirmerConfrontez vos choix avec dautres architectes (qui développent encore...), depréférence dautres sociétés pour avoir un avis objectif sur votre systèmeNoubliez un choix, cest pour le meilleur, ou le pire de votre application
    • Spring est un framework libre pour construire et définir linfrastructure duneapplication java, dont il facilite le développement et les tests.En 2004, Rod Johnson a écrit le livre Expert One-on-One J2EE Design andDevelopment qui explique les raisons de la création de Spring, basé sur lesconcepts suivants :● Inversion de Contrôle● Data access (JBDC)● Transaction management● Model-view-controller● Remote Access framework: RPC-style and HTTP-based protocols● Authentication and authorization● Remote Management (via JMX)● Messaging (JMS)● TestingFramework WebSpring MVC
    • La pière angulaire de String est linversion de contrôle qui permet de configureret gérer des objets via reflexion.Le framework est responsable du cycle de vie des objets :○ les instancier et les initialiser○ les configurer○ injecter les dependancesSpring MVCInversion of Control container
    • La pière angulaire de String est linversion de contrôle qui permet de configurer etgérer des objets via reflexion.Le framework est responsable du cycle de vie des objets :○ les instancier et les initialiser○ les configurer○ injecter les dependancesChaque object injectable (bean) a un scopesingleton (default).prototype any number of object instances.request to an HTTP request. Only valid in the Spring ApplicationContext.session to an HTTP session. Only valid in the Spring ApplicationContext.global-session to a global HTTP session. Only valid in the SpringApplicationContext.Spring MVCInversion of Control container
    • Un bean injectable est une classe Java<bean id="beerStore" class="fr.enib. ... .business.impl.BeerStoreImpl" ></bean>Qui peut se faite injecter :● des paramètres<bean id="beerStore" class="fr.enib. ... .business.impl.BeerStoreImpl" ><property name="size" value="10" /></bean><bean id="enibBeerStore" class="fr.enib. ... .business.impl.EnibarImpl" ><property name="size" value="10" /><qualifier "enibar"></qualifier></bean>● des dependances (dautres beans)<bean id="beerStore" class="fr.enib. ... .business.impl.BeerStoreImpl" ><property name="dataSource" ref="jndi-datasource" /><property name="size" value="10" /></bean>● des listes et maps et plus encore...http://static.springsource.org/spring/docs/1.2.9/reference/beans.htmlSpring MVCInversion of Control container
    • Pour utiliser un bean il suffit de linjecter :● Avec lanotation Autowired○ Quand linterface na quune seule implémentation@Autowiredprivate BeerStore beerBusiness;○ Avec un Qualifier@Autowired@Qualifier(value="enibbar")private BeerStore beerBusiness;● Avec lanotation Resource@Resourse(name="enibBeerStore")private BeerStore beerBusiness;Spring MVCInversion of Control container
    • Le controleur est une Servlet, il en a strictement le même rôleLa configuration est réalisée avec des annotations Javahttp://mydomain.com:8080/context/helloString?name=toto@Controller@RequestMapping("/helloSpring")public class HelloSpringMVC {/*** Handler de la méthode Get pour lURL /helloSpringMVC.html.** @param name le nom que lon doit afficher dans la vue.* @param model une map de toutes les données qui seront utilisables dans la vue* @return le nom de la vue quil faudra utiliser.*/@RequestMapping(method = RequestMethod.GET)public String sayHelloWithSpringMVC( @RequestParam(value="name",required=false) String name, Model model) {model.addAttribute("name",name);return "hello";}}<!-- Resolves view names to protected .jsp resources within the /WEB-INF/jsp directory --><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/jsp/"/><property name="suffix" value=".jsp"/></bean>Spring MVCLe controleurfichier mvc-disatcher-servlet.xmlnom de la JSP pour le forwardConfiguration de la localisation :- mvc-dispatcher-servlet.xml
    • Spring MVCLe controleur - POST / Retour HTTPUtilisé par exemple lors dun submit dun formulaire@Controller@RequestMapping(value = "/signup")public class SignupControler {....@RequestMapping(method = RequestMethod.POST)publicString create( Account account, ModelMap model ) {// do Something// The Form parameter are in the Account Object...// call the business...// add ojects to the modelmodel.addAttribute("message", "I Will survive");// Forward to theJSPreturn "signup/createAccountForm";}Ce controleur reçoit des HTTP POST sur lurlhttp://mydomain:8080/context/signupUniquement pour des requetes POSTLobjet message disponible dans la JSPNom de la JSP pour le forward
    • Utilisé par exemple lors dun post HTTP / AJAX / JSONLa sérialisation / désérialisation est réalisée par le framework en fonction desdépendances ajoutée à ce dernier.@RequestMapping(value = "/private/beer/add", method = RequestMethod.POST)public @ResponseBodyAddBeerStatus create(@RequestBody Beer beer, HttpServletResponse response) {Beer newBeer = beerBusiness.addBeer(beer);return AddBeerStatus.created(newBeer );}Object de retour à sérialiser en JSOSpring MVCLe controleur - POST HTTP / AJAX - JSONLanotation RequestBody ResponseBodyindique que la requête et réponse estdans le body et non les paramètresObject issu de la desérialisation JSONmodélisant la requête
    • Modèle Object :public class Beer {private String name;private String brewery;private String country;private double alcohol;private int id;public Beer() {super();}... getters et setters publiques}Json produit{"name":"1664","brewery":"kronenbourg","country":"France","alcohol":"5,5"}Spring MVCLe controleur - Mapping Object - JSON
    • Spring MVCLe controleur - REST Web ServiceUtilisation de :○ la serialisation / deserialisation JSON○ des request body○ de la variabilisation des URLS@RequestMapping(value = "/private/beer/validate/{field}", method = RequestMethod.POST)public @ResponseBodyAddBeerStatus validateField(@PathVariable String field, @RequestBody Beer beer, HttpServletResponse response) {... do the business callreturn AddBeerStatus.notCreated(null);}Variabilisation de lURL
    • Spring MVCDatabase / Exemplepublic class MyJdbcDaoImpl implements MyJdbcDao {private final String sql = "select id, last_name from T_ACTOR where specialty = ? and age = ?";private JdbcTemplate jdbcTemplate;public void setDataSource(DataSource dataSource) {this.jdbcTemplate = new JdbcTemplate(dataSource);}public Actor findActor(String specialty, int age) {RowMapper<Actor> mapper = new RowMapper<Actor>() {public Actor mapRow(ResultSet rs, int rowNum) throws SQLException {Actor actor = new Actor();actor.setId(rs.getLong("id"));actor.setLastName(rs.getString("last_name"));return actor;}};// notice the wrapping up of the argumenta in an arrayreturn (Actor) jdbcTemplate.queryForObject(sql, new Object[] {specialty, age}, mapper);}}Injection de la datasourceRequête SQLRow Mapper pour laconstruction de lobjet deretourExecution de la requête
    • This afternoonHand in code...