Struts - FR Essential - V1.0
-
Upload
faouzi-azzi -
Category
Documents
-
view
266 -
download
0
Transcript of Struts - FR Essential - V1.0
http://www.labo-sun.com [email protected]
FrameworkStrutsModleMVC
Auteur:HlneSemereJouiCyrilVersionn0.1DfvrierYYYY Nombredepages:57
EcoleSuprieuredInformatiquedeParis 23.rueChteauLandon75010PARIS
www.supinfo.com
FrameworkStrutsModleMVC
2/57
http://www.labosun.com CedocumentestlapropritdeSupinfoetestsoumisauxrglesdedroitsdauteurs
FrameworkStrutsModleMVC
3/57
Tabledesmatires 1.INTRODUCTION ..................................................................................................................................... 6 1.1.PRSENTATIONDELAPLATEFORMEJ2EE ..................................................................................................... 6 1.2.QUELQUESRAPPELS .................................................................................................................................. 6 1.2.1.DesServletsauxJSP ..................................................................................................................... 6 1.2.2.DanslaJSP :JavaBeansetTagLib .............................................................................................. 7 1.2.3.Dfinitionetintrtsdunframeworkdeprsentation .................................................................. 7 2.DESIGNPATTERNMVC ....................................................................................................................... 9 2.1.MODLEMVC(MODELVIEWCONTROLLER) .............................................................................................. 9 2.2.MODLEMVC2 .................................................................................................................................... 10 3.QUESTCEQUESTRUTS ? ................................................................................................................ 11 3.1.PRSENTATION ........................................................................................................................................ 11 3.2.ARCHITECTURE ....................................................................................................................................... 11 3.2.1.Cycledeviedunerequtehttp ................................................................................................... 11 3.2.2.Vuedensembleduneapplicationstruts ..................................................................................... 12 3.2.3.Packagesprincipaux ................................................................................................................... 12 3.2.4.Librairiesdpendantes ................................................................................................................ 12 3.3.LESMODLES MODLISATIONMTIER : ........................................................................................................ 13 3.3.1.Classemtier ............................................................................................................................... 13 3.3.2.ExempledecomposantModle ................................................................................................... 13 3.4.LESVUES .............................................................................................................................................. 14 3.4.1.LesTaglibStruts ........................................................................................................................ 14 3.4.1.1.StrutsHtml ......................................................................................................................................... 15 ...... 3.4.1.2.StrutsLogic ............................................................................................................................................ .. 15 3.4.1.3.StrutsBean ......................................................................................................................................... 16 ...... 3.4.1.4.StrutsNested ...................................................................................................................................... 17 ......
3.5.LECONTRLEUR ..................................................................................................................................... 17 3.5.1.ServletGnrique :ClassesdactionStruts ................................................................................ 17 3.6.LINTERNATIONALISATION ......................................................................................................................... 19 3.6.1.Lesfichiers Properties ........................................................................................................... 19 3.6.2.OutilsStruts ................................................................................................................................ 19 3.7.LETRAITEMENTDESERREURS .................................................................................................................... 20 3.8.FICHIERDECONFIGURATION ...................................................................................................................... 20 3.8.1.Assemblagedel'application ........................................................................................................ 21 3.8.2.Datasources ................................................................................................................................ 21 3.8.2.1.Exemple ................................................................................................................................................... 22 . 3.8.2.2.Utilisationdanslapplication ................................................................................................................. .. 23 3.8.3.1.Exemple ................................................................................................................................................... 24 . 3.8.4.1.Exemple ................................................................................................................................................... 24 . 3.8.5.1.Exemple ................................................................................................................................................... 25 . 3.8.6.1.Exemple ................................................................................................................................................... 26 . 3.8.7.1.Exemple ................................................................................................................................................... 28 .
3.8.3.FormBeans .................................................................................................................................. 23 3.8.4.Exceptions ................................................................................................................................... 24 3.8.5.GlobalForwards ......................................................................................................................... 25 3.8.6.Actionmappings .......................................................................................................................... 25 3.8.7.Controller .................................................................................................................................... 27 3.8.8.Messageresources ...................................................................................................................... 28 http://www.labosun.com CedocumentestlapropritdeSupinfoetestsoumisauxrglesdedroitsdauteurs
FrameworkStrutsModleMVC
4/57
3.8.8.1.Exemple ................................................................................................................................................... 28 .
3.8.9.Plugin ........................................................................................................................................ 28
3.8.9.1.Exemple ................................................................................................................................................... 29 .
3.9.INTGRATIONAVECLAPPLICATIONWEB ..................................................................................................... 29 4.LESTILES ............................................................................................................................................... 31 4.1.PRSENTATION ........................................................................................................................................ 31 4.2.ARCHITECTURE ....................................................................................................................................... 31 4.3.INSTALLATION ........................................................................................................................................ 32 4.4.FICHIERDECONFIGURATION ...................................................................................................................... 32 4.4.1.Baliseracine ............................................................................................................................... 32 4.4.2.Balisedefinition .......................................................................................................................... 33 4.4.3.Baliseput .................................................................................................................................... 33 4.4.4.BaliseputList ............................................................................................................................... 34 4.4.5.Baliseitem ................................................................................................................................... 34 4.4.6.Balisebean .................................................................................................................................. 35 4.4.7.Balisesetproperty ...................................................................................................................... 35 4.5.LAYOUTS ............................................................................................................................................... 36 4.5.1.Lefichierdestructure ................................................................................................................. 36 4.6.TILES .................................................................................................................................................... 38 4.7.EXEMPLEDARCHITECTUREDEDFINITIONS .................................................................................................. 38 5.VALIDATOR&FORMULAIRES ....................................................................................................... 40 5.1.PRSENTATIONETARCHITECTURE ............................................................................................................... 40 5.2.FICHIERSDECONFIGURATION ..................................................................................................................... 40 5.2.1.Danslefichierstrutsconfig.xml ................................................................................................. 40 5.2.2.Lefichiervalidatorrules.xml : ................................................................................................... 41 5.2.3.Lefichiervalidation.xml : .......................................................................................................... 42 5.3.DYNAFORMS .......................................................................................................................................... 46 5.4.RSUMDELACONFIGURATIONDESVALIDATORS ........................................................................................ 49 6.INTGRATIONAVECXDOCLET ..................................................................................................... 50 6.1.STRUTSCONFIG.XML ................................................................................................................................ 50 6.1.1.Tags@Struts ............................................................................................................................... 50 6.1.2.Exemples ..................................................................................................................................... 52 6.1.3.IntgrationavecAnt .................................................................................................................... 53 7.CASCONCRET(ARCHITECTURE) .................................................................................................. 55 7.1.PRSENTATION ........................................................................................................................................ 55 7.2.ARCHITECTURE ....................................................................................................................................... 55 7.3.COUCHEMTIER ...................................................................................................................................... 55 7.3.1.Couchedaccsauxdonnes(DAO) ........................................................................................... 55 7.3.2.Coucheservice ............................................................................................................................ 55 7.4.COUCHEAPPLICATION .............................................................................................................................. 55 7.4.1.Action .......................................................................................................................................... 55 7.4.1.1.ActionForm .................................................................................................................................. ............ 55
7.4.2.Forwards ..................................................................................................................................... 56 7.4.3.Exceptions ................................................................................................................................... 56 7.5.COUCHEPRSENTATION ............................................................................................................................ 56 7.5.1.Tiles ............................................................................................................................................. 56 7.5.1.1.Dfinitions ........................................................................................................................................... 56 ..... 7.5.1.2.Jsp(layoutsettiles) ........................................................................................................... ...................... 56
7.5.2.Formulaires ................................................................................................................................. 56 http://www.labosun.com CedocumentestlapropritdeSupinfoetestsoumisauxrglesdedroitsdauteurs
FrameworkStrutsModleMVC
5/57
7.5.3.Messagesderreur(MessageApplication) ................................................................................... 56 8.LAVENIRDESTRUTS ........................................................................................................................ 57 8.1.INTGRATIONAVECJSTL ........................................................................................................................ 57 8.2.INTGRATIONAVECJSF ........................................................................................................................... 57 8.3.ADOPTIONGNRALISEDESTRUTS ........................................................................................................... 57
http://www.labosun.com CedocumentestlapropritdeSupinfoetestsoumisauxrglesdedroitsdauteurs
FrameworkStrutsModleMVC
6/57
1.Introduction1.1.PrsentationdelaplateformeJ2EEJ2EE(Java2EnterpriseEdition)estunensembled'APIsvisantledveloppementd'applications orientesentreprise. Parmis ces APIs, certaines existent dj dans la version "standard" de Java (Java 2 Standart Edition),tandisquedautresnesontprsentesquedanslaversionorienteentreprise.Ainsiona lesAPIsEJBs(EnterpriseJavaBeans)ouJMS(JavaMessageService)quisontspcifiquesaujdk J2EE,linversedesAPIsJDBCouRMIquiexistentaussidanslejdkJ2SE. LaplateformeJ2EEprsenteunesolutionoptimalepourdvelopperdesapplicationsrobustes, scurisesetvolutives.Eneffet,choisircettetechnologie,cestsuivreuncertainnombrede rgles.Lebutesteneffetdespareraumaximumlapplicationencouches. Ce que lon va justement dtailler dans ce cours est de quelle manire on va dcouper les diffrentescouches,quelmodleutiliser,etavecquelsoutilslefaire.
1.2.QuelquesrappelsAvantdecommencercecours,quelquesrappelssurlesJSP/Servlets,lesJavaBeansainsique lesTagLib:
1.2.1.DesServletsauxJSPLorsquelonvadvelopperunsiteWeblaidedestechnologiesJ2EE,onpeutdifficilement passerctdesServlets. Une Servlet est une classe java chargeune seule et premire fois par le moteur de Servlet (exemple:Tomcat)lorsdesonpremierappel. Parlasuite,onferatoujoursappellamme instancedecetteServlet. ChaquefoisquelonvacreruneServlet,oncrerauneclasseimplmentantlinterfaceServletet doncredfinirquelquesmthodesdontlesmthodes publicvoidinit(ServletConfigcfg)quiseraappelelorsdupremierappeldelaServlet, lorsdesoninstanciation. publicvoidservice(ServletRequestreq,ServletResponseres)quiseraappelechaque appeldelaServletinstancie. publicvoiddestroy()quiseraappelejusteavantladestructiondelaServlet.
Ainsi,cestdanslamthodeservice() quevasetrouverlecodejavadontlersultat,envoyau browser,permettralaffichagesurunepageWeb.
http://www.labosun.com CedocumentestlapropritdeSupinfoetestsoumisauxrglesdedroitsdauteurs
FrameworkStrutsModleMVC
7/57
Leproblmeestquesilonsuitceprincipe,lapartietraitementdenotrecodeestmlelapartie prsentationalorsque,commeillatprcisprcdemment,lesbasesmmeduneapplication utilisantlestechnologiesJ2EEestledcoupageencouches. Poursparerclairementlapartietraitementdelapartieprsentationdenotreapplication,onva doncutiliserlespagesJSP. UnepageJSPressembleunepageHTMLpouvantcontenirdesbalisesJSPet/ouducodeJava. Ellevadoncnouspermettredafficherlesrsultatsdestraitementseffectusenarrireplandans desclassesJava.Danscecas,lapageJSPvatreconvertieenServletpuisleprocessusvatrele mmequepouruneServletclassique.
1.2.2.DanslaJSP:JavaBeansetTagLibDansnotrepageJSP,onvapouvoirutiliserdiffrentscomposantspourafficherlesdiffrents rsultatsdestraitementseffectusdanslescouchesinfrieures. LesJavaBeanssontdescomposantsquivontpermettredinstancieretmanipulerdiffrentsobjets Java(portedelapage,derequte,desessionoudelapplication)laidedebalisesJSP. Lavantageestquelorsquilvarencontrerunebalise,leserveurvaautomatiquementdtectersi linstancedelobjetexistedjounon.Sicestlecas,ilreprendlinstanceexistantesinonilen creunenouvelle.Celavapermettredutiliserunmmeobjetsurplusieurspages,voiretoutle longdelapplication. LesTagLibs,toutcommelesJavaBeanssontdescomposantsquivontpermettredinstancieret manipulerdiffrentsobjetsJavalaidedebalisesJSP.Cependant,ilsnepourrontavoirquune portelimitelapagecourante.Onnepourradoncpasrutiliserunemmeinstancedunobjet surplusieurspages.Pourchaquepagedelapplication,onaurauneinstancediffrente. LesTagLibs,balisespersonnalises,vontpermettre,entreautresdecrersespropresbalisesdela plussimplelapluscomplexeetainsidafficherlesrsultatsdesdiffrentstraitementsen quelqueslignes. Pourplusdinformationssurcescomposants,nhsitezpasconsulterlecourssurles Servlets/JSP.
1.2.3.DfinitionetintrtsdunframeworkdeprsentationOnadoncpuvoirquelesJSPoffrentunesolutionidalepourafficherlesrsultatsdes traitementseffectusenamont.Ilsreprsententlapartieprsentationdenotreapplication.Ona aussivuquelonpouvaitutiliserlesJavaBeansoulesTagLibspourviterdavoirducodeJava dansnospagesJSP. Cependant,lobjectifpremierdundveloppeurestdviterderefairechaquefoislamme chose. Pourcela,onvautiliserunframeworkquiimposeunemthodededveloppementsimpleet efficace.http://www.labosun.com CedocumentestlapropritdeSupinfoetestsoumisauxrglesdedroitsdauteurs
FrameworkStrutsModleMVC
8/57
Onvaalorsobteniruneapplicationrespectantlesobjectifsderutilisabilitquevisela programmationorienteobjet. Concrtement,unframeworkestlesqueletteduneapplication.Celavapermettrelacration rapidedactions/vnementsclassiques,parexemple,unformulaire(tenantcomptedelascurit, delavalidit,etc). Quelsquesoientlesoutilsutilissdanslescouchesinfrieures,leframeworkdeprsentation choisiestcompltementindpendant.Ilnouspermetdoncdatteindrelobjectifattendu;des couchescompltementindpendanteslesunesdesautres.Onpeutalorschangerlunedesdelles sansmodifierlesautres.
http://www.labosun.com CedocumentestlapropritdeSupinfoetestsoumisauxrglesdedroitsdauteurs
FrameworkStrutsModleMVC
9/57
2.DesignpatternMVC2.1.ModleMVC(ModelViewController)
LepatternModleVueContrleurestlundesmodleslesplusconnusetleplusclbredetous. IlattoutdabordlaborparXeroxlorsdeleurpremiersystmefentretplusparticulirement pourgrerlesinteractionsaveclutilisateur. LeproblmequersoutlemodleMVCestceluidelasimplificationdetroisgrandesfonctions communesdenombreusesapplications: Lamaintenancedesdonnesdansunstockagedebackendousurunsystmedistant. Laconstructiondelacoucheprsentationdestinelutilisateurfinal. La gestion de la logique conditionnelle qui dcide des crans qui sont prsents lutilisateur,decequisepasselorsquuneerreursurvientetdelafaonetdumoment exactsolessystmesdistantssontmisjour.
Ilestdoncpossibledecombinerlensembledecesmodulesetdavoiraufinalunsystmequi fonctionne.Cependantlesproblmesseposentlorsquevoussouhaitezmaintenirlecode.Eneffet danslecasdesJSP,lesconcepteursHTMLchargsdulookendfeeletceuxquimaintiennentle codedetraitementsontdiffrents. MVCtraiteceproblmeensparantlecodeentroispartiesdistinctes: LescomposantsModle,quimaintiennentlesdonnesdanslestockage. LescomposantsVue,quiconstituentlacoucheprsentationdestinelutilisateurfinal.
http://www.labosun.com CedocumentestlapropritdeSupinfoetestsoumisauxrglesdedroitsdauteurs
FrameworkStrutsModleMVC
10/57
LescomposantsContrleur,quigrentlalogiqueconditionnelle.Cestellequidcidedes cransquisontprsentslutilisateur,quigreleserreursetlamisejourdessystmes distants.
MVCsimplifiedonclamaintenancedelapplicationetempchentlestroistypesdelogiquesdese mlanger.Ilpermetgalementdemasquerlesdtailsdimplmentationdechaquedomaineaux deuxautresetrduitainsilesdpendancesdecodageentreeux.Decefait,MVCpermetdedfinir une frontire naturelle entre lesconcepteurs web qui maintiennent le code html et la couche prsentation. Undesavantagesconsidrabledansledveloppementdapplicationweb(jsp,servlet)estquele modleMVCfacilitegrandementlagestiondesexceptions(carellessonttoutesgresviale contrleur). Dautresavantagessappliquenttouteslesformesdetraitementconditionnel.Voiciquelques exemples: SidiffrentesVuessontncessairesenfonctiondesdonnesquisontextraitesdunebase dedonnesoudunsystmedistant,leContrleurpeutdciderdelapageprsenter. Sivotreapplicationchangeenfonctiondelheureet/ouladatedelajourne,leContrleur peutgrercelafacilement. Si un processus de saisie de donnes ncessite plusieurs pages, dont certaines sont facultatives.
CependantlepatternMVCestclairementdfinit,pourquoiparletonparfoisdeMVC1,MVC2?
2.2.ModleMVC2LemodleMVC2nariendeplusquelemodleMVC.LoriginedecenomvientdufaitqueSun, lorsdelasortiedesspcificationsJSP,indiquaitdansunesectionPageAccessModel(ou modledaccsJSP)unmodle1etunmodle2. Lemodle1dcrivaitletraitementJSPdelafaondontiltaitcourammentutilislpoque. C'estdirelarequteHTTPestdirectementenvoyeversunfichierjsp.Toutletraitementse faisaitalorsdanslapageJSP,etlarponsevenaitdecemmefichier. Lemodle2taitbiendiffrent.Ilindiquaitquectaitlaservletquidevaitrecevoirlarequte HTTP. Celleci pouvait alors effectuer les tches ncessaires au traitement de cette requte (mmoriserdesinformationsdanslebeantransmis)ettransmettrelesinformationsunepagejsp afinquecellecignrelarponseHTTP. AucunnomdetypeMVCnintervientdanscesmodles,cependantlemodle2seninspire troitement.
http://www.labosun.com CedocumentestlapropritdeSupinfoetestsoumisauxrglesdedroitsdauteurs
FrameworkStrutsModleMVC
11/57
3.QuestcequeStruts?3.1.PrsentationStrutsestunframeworkpourlesapplicationsweb. Un framework est une structure permettant de soutenir ou de contenir quelque chose, en particulierunsquelettepouvantservirdebaseuneconstruction(cf.dictionnaireanglais). Struts est en une collection de programmes Java conue pour vous aider construire des applicationsrobustesengagnantdutemps.Ilfournitlacharpenteetlegrosuvredebase.Ilvous restealorsplusquvousconsacrerlagencementetladcorationdespices! Outre que Struts vous permet de vous faire gagner du temps, il vous permet de voir des applicationscomplexescommeunesuitedecomposantsdebase:Vues,Actions,Modles. Ilvousfournitunensembledebonnespratiquesetunebasesolidementrflchie.Deplusrienne sertderinventerlaroue,Strutsvouspermetdepartirdunebasesolide,idalpourlesdbutants! Cependant Struts est principalement vou tre utilis pour les applications web mais est compltement conforme la spcification Servlet (actuellement 2.3) qui fait partie de la spcificationpluslargedeJ2EE. LundesautresavantagesetqueStrutsestunesolutionOpenSourcedontungrandnombrede dveloppeurscontribuentactivement.
3.2.Architecture3.2.1.CycledeviedunerequtehttpNavigateur del utilisateur 1 Composant Contr leur 4 5 Composant Vue 2 Composant Mod le
3
Stockage Persistant ousyst me distant
1. Leclientenvoieunerequtelapplication 2. LecomposantContrleurreoitlarequte.Ilcommencealorsprendredesdcisionssur lafaondecontinuer,enfonctiondesrglesdegestiondelapplication. 3. LescomposantsModleagissentaveclesstockagesdedonnespersistant.
http://www.labosun.com CedocumentestlapropritdeSupinfoetestsoumisauxrglesdedroitsdauteurs
FrameworkStrutsModleMVC
12/57
4. SuivantlesdonnesretournesparleModle,lecontrleurdterminelaVueutiliser pourlaffichagedesdonnesetluitransfertlesdonnes. 5. LecomposantVuechoisignrelarponselademandeduclient.
3.2.2.VuedensembleduneapplicationstrutsTroispartiesprincipalesconstituentuneapplicationutilisantStruts: LalibrairieStrutsetsesdpendances LesclassesJava:actions,formulaires,exceptions Lefichierdeconfigurationstrutsconfig.xml:assemblagedelapplication(liaisonsurl, classes,formulaires,sourcesdedonnes)
3.2.3.PackagesprincipauxVoiciunedescriptiongnraledesprincipauxpackagesdelapplication: org.apache.struts:packageroot org.apache.struts.action:packagenoyaudesclassesdebasniveaupourlesContrleur org.apache.struts.config: packagereprsentantleslmentsde configuration (quelon retrouvegalementdansstrutsconfig.xml) org.apache.struts.taglib:packagerootdelensembledestaglibStruts org.apache.struts.taglib.bean:packagequiregroupelesclassesdetagdelalibrairieBean org.apache.struts.taglib.html:packagequiregroupelesclassesdetagdelalibrairieHtml org.apache.struts.taglib.logic:packagequiregroupelesclassesdetagdelalibrairieLogic org.apache.struts.taglib.nested: package qui regroupe les classes de tag de la librairie Nested org.apache.struts.tiles:packageduplugintiles org.apache.struts.upload:packagedesclassessimplifiantluploadavecStruts org.apache.struts.util:packagedesclassesutilitairesdeStruts org.apache.struts.validator:packagedupluginvalidator
3.2.4.LibrairiesdpendantesVoicilensembledeslibrairiesquilfautintgrervotreapplicationwebafindepouvoirutiliser Struts:
http://www.labosun.com CedocumentestlapropritdeSupinfoetestsoumisauxrglesdedroitsdauteurs
FrameworkStrutsModleMVC
13/57
struts.jar:jarcontenantleframeworkStruts(Actions,forms) commonsbeanutils.jar;outilspourlutilisationdesBeans commonsdigester.jar:mappingxml>objetjava commonsvalidator.jar:utilispourlagestiondelavalidation(Validatorplugin) commonslogging.jar:permetdefairedeslogsdansvosapplications commonsfileupload.jar:utilispourfacilitluploaddefichier struts(bean/logic/nested/html).tld:fichierdedescriptiondeslibrairiesdetaglib Struts
3.3.Lesmodles:modlisationmtierUn composant modle reprsente gnralement un objet mtier ou un systme de backend physique.Parexemple,unsystmequipermetdesutilisateursdeseconnecteretdegrerdes informationspersonnellespeutcomprendreuncomposantModlequireprsenteunUtilisateur.
3.3.1.ClassemtierLaclassemtierfournitdesmthodesquipermettentdaccderauxinformationslilobjet(par exemplepourlutilisateur:nom,prnom,motdepasse).Cependantlesconceptsdebasesont lessuivants: Lesclassesmodlesserventaccderauxinformationsmmorisesdansdesbasesde donnesousurdessystmesdistantspourlesprsenterauxutilisateurs. Ellesdoiventtreconuesdemanirecacherlesdtailsdimplmentationdelaccs linformation(utilisationdinterface).
3.3.2.ExempledecomposantModleDans le cas dune application construite sur un conteneur de servlet (Tomcat), le composant ModlepeutselimiterunsimplebeanJavafournissantunevuemtierunelogiqueJDBCqui maintientlesinformationsdanslabasededonnes.Lerestedelapplicationinteragitavecle ModlepourlireetcrirelesinformationsetseulleModleinteragitaveclabasededonnes. DansuneapplicationconstruiteavecunsystmefrontalutilisantJSPetunsystmedorsalauquel onaccdeviadesWebServices,lescomposantsModlesserventfournirunereprsentation mtier du systme dorsal. Le reste de lapplication continue accder aux informations par lintermdiaireduModle,maisseulceluiciaccdeauxWebServices. CelaestdemmeavecunsystmeutilisantlesEJB(cf.EntrepriseJavaBean).LeModleassure laccsauxEJB.
http://www.labosun.com CedocumentestlapropritdeSupinfoetestsoumisauxrglesdedroitsdauteurs
FrameworkStrutsModleMVC
14/57
Celapermetdoncunegrandeflexibilitpourlvolutiondelapplicationmaisgalementune extrmepuissanceetsouplessepourlesdveloppeurs.
3.4.LesvuesDanslepatternMVC,lecomposantVueseconcernesuruneseulechose:lacrationdelacouche prsentationquevoitlutilisateur.Cecomposantnedoitcontenirquunstrictminimumdelogique mtieretdanalysecomplexe. LescomposantsVuessontleplussouventceuxassocislarponsedelarequteHTTP.Dansle casdeStrutscesontlesJSPquireprsenteleplussouventcettevue.Eneffet,cesfichiersgnrent leHTMLquiseraenvoyauclient. UndesavantagesdesJSPestquelonpeuttoutaussibienintgrerduHTML,desbalisesJSPou encoredes scriptlets Javadansunmmefichier.Cependantlinconvnientestquelatchedes concepteurs web en est alors complexifie pour le maintient du look and feel! De plus un dveloppeurJavaesttropfacilementattirparlatendanceabuserdes scriplets etinclurela logiquemtier(ouinstructionsconditionnelles)directementdanslaJSP! AveclepatternMVC,ceproblmeestrsolutcarilisolelemodle,lestraitementsetla/lesvues. De plus Struts fournit un ensemble de balises JSP personnalises servant construire les composantsdelaVue.Onretrouvedesbalisestelsque:,quidonnent auxdveloppeursJavaetauxconcepteursweblapossibilitdeconstruiredesfonctionnalitssans utiliserdescripletJava.
3.4.1.LesTaglibStrutsLesbalisespersonnalisesduframeworkStrutsconstituentunepartimportante.Eneffet,elle simplifiegrandementledveloppementdepageJSP(composantVue)etlesrelientauxautres composants. Ces balises vous permettront de dbugger plus rapidement vos applications car leur nom et descriptionsontunavantageconsidrablecontrairementauxscriplets. LesbalisesStrutssontregroupesenquatregroupes: Html:grelensembledesbaliseshtml(champstexte,file) Logic:grelalogiquedevosVue(itration,condition) Bean:grelaccsaux bean (etleurproprits)devotreapplication(page,request, session) Nested:regroupehtml,logic,beanenajoutantunearborescencepourlaccsaubean
Touslesdescripteursdecesbibliothquessontinclusdansleframeworksouslenomde:struts .tld.Parexemple:strutshtml.tldreprsenteledescripteurdelabibliothquehtml.
http://www.labosun.com CedocumentestlapropritdeSupinfoetestsoumisauxrglesdedroitsdauteurs
FrameworkStrutsModleMVC
15/57
3.4.1.1.StrutsHtml Cette bibliothque est principalement utilise pour la gestion des formulaires dans Struts. CependantellecouvrelamajoritdesbalisesdebaseduHTML. Voiciletableaurcapitulatifdestagsdisponibles: AffichelabaliseHTML Afficheunbouton Afficheunboutondecancel Afficheunecheckbox Affichelensembledeserrorsdetraitementdelarequte(champsnonvalides) Afficheunchampfichier Dfinitunebalise AfficheuneframeHTML Afficheunchampcach Afficheuntaghtml Afficheunchampimage(formulaire) Afficheunebaliseimg Affichelecontenujavascriptpermettantdeffectuerunevalidationctclientdun javascript formulaire(utilisationaveclepluginValidator) link AfficheuneancreHTML messages Affichelensembledesmessagesaccumulslorsdelexcutiondelarequte multibox Afficheunecheckbox option AfficheunchampOption options AfficheunecollectiondoptionsdansuntagSelect optionsCollection AfficheunecollectiondoptionsdansuntagSelect password Afficheunchampmotdepasse radio Afficheunboutonradio reset Afficheunboutondereset rewrite Afficheuneurlliaucontextencours select AfficheunchampSelect submit Afficheunboutonenvoyer text Afficheunchamptexte textarea Afficheunchamptextarea(zonedetexte) xhtml AfficheuntagXHTML TagName base button cancel checkbox errors file form frame hidden html image img Description
3.4.1.2.StrutsLogic Cettebibliothquecontientunensembledetagsutiliss dans la gestion de condition, itration suivantdesobjets,etgestiondefluxdelapplication.
http://www.labosun.com CedocumentestlapropritdeSupinfoetestsoumisauxrglesdedroitsdauteurs
FrameworkStrutsModleMVC
16/57
Description Evaluelecontenuducorpsdelabalisesilavariableestnullouvide. Evaluesilecontenuducorpsdelabalisesilavariableestgalelavaleur equal spcifie. forward TransfertlecontrlelapagespcifiedanslentreActionForward. Evaluelecontenuducorpsdelabalisesilavariableestplusgrandeougalela greaterEqual valeurspcifie. Evaluelecontenuducorpsdelabalisesilavariableeststrictementplusgrande greaterThan quelavaleurspcifie. iterate Rptelecontenuducorpsdelabalisesuivantlacollectionspcifie. Evaluelecontenuducorpsdelabalisesilavariableestinfrieureougalela lessEqual valeurspcifie. Evaluelecontenuducorpsdelabalisesilavariableeststrictementinfrieurela lessThan valeurspcifie. Evaluelecontenuducorpsdelabalisesilavaleurspcifieestunesouschaine match appropriedelavariable. Gnrelecontenuducorpsdelabaliselemessagespcifiquenestpasprsent messagesNotPresent danslarequte. Gnrelecontenuducorpsdelabaliselemessagespcifiqueestprsentdansla messagesPresent requte. Evaluelecontenuducorpsdelabalisesilavariableestninullounivideniune notEmpty collectionvide(testeparisEmpty()delinterfaceCollection). Evaluesilecontenuducorpsdelabalisesilavariablenestpasgalelavaleur notEqual spcifie. Evaluelecontenuducorpsdelabalisesilavaleurspcifienestpasunesous notMatch chaineappropriedelavariable. Gnrelecontenuducorpsdelabaliselavaleurspcifiquenestpasprsentedans notPresent larequte. Gnrelecontenuducorpsdelabaliselavaleurspcifiqueestprsentedansla present requte. redirect EcritunheaderHTTPRedirectdanslarponse.
TagName empty
3.4.1.3.StrutsBean Cettebibliothqueestutilisepourlireetcrirelesdonnescontenuesdansdesbeans,voirmme lesbeaneuxmmes,ouencoredfinirdenouveauxbeans. TagName Description cookie Dfinitunevariabledescriptbasesurlavaleurducookiespcifi. define Dfinitunevariabledescriptbasesurlavaleurdubeanspcifi. header Dfinitunevariabledescriptbasesurlavaleurduheaderspcifi. Chargelarponsedepuisuneapplicationdynamiqueetinclutcellecidansunbean(type include String).http://www.labosun.com CedocumentestlapropritdeSupinfoetestsoumisauxrglesdedroitsdauteurs
FrameworkStrutsModleMVC
17/57
TagName Description message Affichelecontenudunmessageinternationnalis)danslarponse. page Exposeunspcifiqueobjetducontextdelapageunbean. parameter Dfinitunevariabledescriptbasesurlavaleurduparamtre(requte)spcifi. resource Chargeuneressourcedemandeetinclutcellecidansunbean(typeStringouInputStream). size DfinitunevariabledescriptbasesurlatailleduneCollectionouMapspcifi. struts Exposelobjetdeconfigurationstrutsunbean. write Affichelecontenudunepropritdunbeandanslapage(out).
3.4.1.4.StrutsNested Cette bibliothque est unpeu spcialecar elleregroupe lestroisprcdentes. Cependant elle permetdestructurervostagssuivantlarborescencedevosbeans. Voicilestroistagssupplmentaires: TagName Description nest Dfinitunnouveauniveauquelestagfilspourrontutiliser. writeNesting Dfinitunevariabledescriptbasesurleniveaucourant. root Dmarreuneracinedunehirarchie.
3.5.LecontrleurCesontlescomposantsquimnentlaction!Chaquefoisquunutilisateursoumetunformulaire, cestlecontrleurquiletraite.Silutilisateurdemandeuneautrepage,cestluiquidcidedece quiseraaffich.CestgalementluiquicollectelesinformationsauprsdescomposantsModle pourquelescomposantsVuesaientlesinformationsafficher. VoiciunrcapitulatifdesactionseffectuesparleContrleur: Validerlesdonnessaisiesparlutilisateur. Prendre des dcisions concernant les composants Modle auxquels il faut accder ou mettrejour. RcuprerlesdonnespourlecomposantVue. Prendredesdcisionsconcernantlafaondetraitertelleoutelleerreursurvenuedurantle traitementdelarponse DciderdelaVueafficher
3.5.1.ServletGnrique:ClassesdactionStrutsLecontrleurestimplmentendeuxparties:
http://www.labosun.com CedocumentestlapropritdeSupinfoetestsoumisauxrglesdedroitsdauteurs
FrameworkStrutsModleMVC
18/57
Java:classedaction Struts:configurationxml
Lactionreoitlessaisiesutilisateur,coordonnelaccsaustockagepersistantousystmesdistants metenuvrelalogiquedelapplicationetdcideducomposantVuequiseraaffichensuite lutilisateur. Uneclassedactiondoit: Etendrelaclasse:org.apache.struts.action.Actionouuneclassedrive Surchargerlamthode:publicActionForwardexecute()afindeffectuerletraitement spcifiquelaction NecomporteraucunlienavecunepageJSPdirectement(celienesteffectudansle fichierdeconfiguration)
Cetteclassedactionpeuttretrssimplecommetrscomplexe.Parexemplevouspouvezcrer un lien qui dirige vers une classe daction affichant un formulaire de cration dun nouveau compteutilisateur.Laclassedactionsapparenteracela:packagecom.labosun.lessons.struts.action; importjavax.servlet.http.HttpServletRequest; importjavax.servlet.http.HttpServletResponse; importorg.apache.struts.action.Action; importorg.apache.struts.action.ActionForm; importorg.apache.struts.action.ActionForward; importorg.apache.struts.action.ActionMapping; publicclassNewAccountActionextendsAction{ publicActionForwardexecute(ActionMappingmappings,ActionFormform, HttpServletRequestrequest,HttpServletResponseresponse) throwsException{ returnmappings.findForward("newUserForm"); } }
Aucunerfrenceaufichierjspnestfaite.Laconfigurationdecetteactionressemblera(cf.3.8) :
Cependantlamajoritdesactionsestbienpluscomplexequecelleci.Ellesfontdestraitements daccsauxdonnes,misejour VoicilensembledesmthodeslesplusutilisesdelaclasseAction:
http://www.labosun.com CedocumentestlapropritdeSupinfoetestsoumisauxrglesdedroitsdauteurs
FrameworkStrutsModleMVC
19/57
addErrors(javax.servlet.http.HttpServletRequestrequest,ActionMessageserrors):ajoute une erreur la requte. Lensemble des erreurs ajoutes pourra tre affich par lintermdiairedelabalise: addMessages(javax.servlet.http.HttpServletRequest request,ActionMessages messages): ajouteunmessagelarequte.Lensembledesmessagesajoutspourratreaffichpar lintermdiairedelabalise: execute(ActionMapping mapping, ActionForm form, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response):mthodesurchargerafindeffectuerletraitementspcifiquepourlactionen cours. Retourne unobjet de typeActionForwardindiquantlavue (ouautreaction) laquelleonsouhaitepasserlarequte. setLocale(javax.servlet.http.HttpServletRequest request,java.util.Locale locale): permet dercuprerlalocaledelutilisateur(utilepoursavoirlepays/languedeceluici).
3.6.LinternationalisationStrutsmetdispositionunensembledoutilspermettantdegrerfacilementlinternationalisation dansvosapplicationsweb. Vouspouveztoutaussibienutiliserlinternationalisationpourgrerlesmessagesderreurdevos formulairesquepourvosmessagesdunepageJSP. DansStruts,onparledebundledemessagespourindiquerungroupedemessagedynamique.Un bundleestreprsentparunfichierProperties(bienconnudanslemondeJava).
3.6.1.LesfichiersPropertiesQuestcequunfichierProperties?Enjava,ilexisteuneclasse:java.util.Propertiesquipermet delireunfichierstandardistrssimplement(unfichierproperties). Cefichierprendgnralementlextension.propertiesetregroupedesgroupesbinaires(cl=> valeur).Pourchaquevaleurdynamiqueonassocieunecluniqueindpendantedulangagecequi permetderelierplusieursvaleursunemmeclselonlelangageencours. VoiciunexempledefichierProperties:cle1=valeur1 cle2=valeur2 cle3=valeur3
3.6.2.OutilsStrutsStruts utilise un bundle par dfaut qui est li au fichier: ApplicationRessources.properties. Cependantvouspouveztoutfaitpersonnaliserlaccscefichierdanslefichierdeconfiguration
http://www.labosun.com CedocumentestlapropritdeSupinfoetestsoumisauxrglesdedroitsdauteurs
FrameworkStrutsModleMVC
20/57
deStruts.Vouspouvezgalementscindervospropritsenplusieursfichiersetdoncplusieurs bundle. LutilisationprincipaleseferadansvosJSPparlintermdiairedelabalise: Ou
Vouspouvezgalementrcuprerlavaleurdunmessagedirectementdansuneaction:getResources(request).getMessage("cle");
3.7.LetraitementdeserreursStrutsvous permetde centraliserla gestiondes exceptions liesau Contrleur.Vous pouvez dfinirdesliaisonsentreletypedexceptionetunepagejsp(pourafficherunmessage).Vous pouvez galement ajouter une classe handler qui est automatiquement appele lorsquune exceptionestjete. Voiciunschmareprsentantlefonctionnementenglobalit:ClassesAction (Contr leur) 1 2 Fichier Config. Exception
3 Classe Handler h ritantde ExceptionHandler
4
JSPpageerreur
1. Uneclassedactionjetteuneexceptiondetype:TypeException 2. Strutsdtecteuneconfigurationpourcetteexceptiondanslefichierdeconfiguration 3. Suivantcetteconfiguration,StrutsappellelaclasseHandlerpourcetteexception 4. Strutsredirigeverslapagejspderreurconfigure
3.8.FichierdeconfigurationLefichierdeconfigurationestlepointcentraldetouteapplicationStruts.Eneffet,ilregroupe lensembledesobjetsetdeleurconfiguration.Onpeutconnatrelensembledelalogiquede lapplication (navigation) avec ce fichier. Malgr la lourdeur dutilisation de xml dans une applicationwebcomplexe(suivantlenombredefonctionnalits),lesoutilsquionttmisen uvrepouraiderledveloppeurdansleparamtragedecefichiersontmaintenantstableset robustes.http://www.labosun.com CedocumentestlapropritdeSupinfoetestsoumisauxrglesdedroitsdauteurs
FrameworkStrutsModleMVC
21/57
3.8.1.Assemblagedel'applicationLefichierdeconfiguration:strutsconfig.xml(leplussouventnommainsi)estchargdindiquer Strutsquelssontlesformulaires,lesactionsdisponiblesetpermetgalementdajouteruncertain nombredemodlesenfichablesaupackageStrutsdebase. NoustudieronsicilensembledesbalisesdebasesutilisesdansuneapplicationStrutsgrcela DTD fournit par Struts ladresse suivante: http://jakarta.apache.org/struts/dtds/struts_config_1_2.dtd(DTDdelaversion1.2). Lapremirebalisequelonretrouvedanslefichierdeconfigurationest:strutsconfig.Ladtd correspondanteestcelleci:
Onlappellelabaliseroot,c'estdirelaracinedetouteslesautres.Onnepeuttrouverquune seuledecettebalisedansunmmefichier.Ilestaisdevoirquelleaccepte(danssoncorps)les balises: displayname:nomdelapplicationlieaufichierdeconfigurationencours description:descriptiondufichierdeconfiguration datasources:lensembledessourcesdedonnes(1instanceaccepte) formbeans:lensembledesformbean(1instanceaccepte) globalexceptions:lensembledeshandlerdexception(1instanceaccepte) globalforwards:lensembledespointsderetourdetypeglobal(1instanceaccepte) actionmappings:lensembledesmappingsdaction(1instanceaccepte) controller: paramtrage dun contrleur spcifique (dit RequestController) (1 instance accepte) messageresources:dfinitiondunbundledemessages(multiplesinstancesacceptes) plugin: dfinition dun package (extrieur) connect: plugin (multiples instances acceptes)
3.8.2.DatasourcesVosobjetsmodlesontpeuttrebesoindtabliruneconnexionavecunebasededonnes.Dans cecas,vouspouvezutilisezStrutspourinitialiserunpooldeconnexionpluttquedepasser directement par votre serveur dapplication. Lintrt premier est que vous naurez pas toucher la configuration de votre serveur dapplication lors du dploiement de votre application.Celasimplifiedoncgrandementledploiementdecelleci. VoicilapartiedeDTDcorrespondanteauxDataSource:
http://www.labosun.com CedocumentestlapropritdeSupinfoetestsoumisauxrglesdedroitsdauteurs
FrameworkStrutsModleMVC
22/57
Labalisedatasourcesregroupelensembledesdatasourceconfigurpourlapplication.Elle contientdoncde0nbalisesdatasource. Chaquebalisedatasourcedfinitprcismentlesparamtresdeconfigurationdesconnexions unesourcededonnes(etplusprcismentdesobjetsJDBC2.0DataSource).Voiciles diffrentesbalisesquellepeutcontenir: className:cettebaliseestoptionnelle.Elledfinitlaclasseservantconfigurerlasource dedonnesetdoitdonccontenirtouteslesdonnesncessairespourinstancierune DataSourcedutyperequis.Autrementdit,elledoitgrerlensembledesproprits spcifiesdanslesclausessetproperty(cf.plusbas)delabalise.Sicettebaliseestomise, Strutsutiliselaclassepardfaut:org.apache.struts.config.Configpourgrerles proprits. key:estuneclquipermetlapplicationdaccderlobjetdatasourcecrparStruts. Parexempledanslecasdunecl:stockdb,lapplicationpourrayaccdervia: org.apache.struts.action.DATA_SOURCE/stockdb(siaucunprfixedemodule nexiste:prfixe="") type:spcifielenomdelaclassedelaDataSourcequidoitimplmenter java.sql.DataSource.CetteclasseestutiliseparStrutspourcreruneinstancedela datasource,elleconfigurvialaclassedfinitdanslattributeclassName. setproperty:cettebalisepermetdattribuerunecletunevaleur.Ellesservent principalementconfigurerlesparamtresdeconnexionlasourcededonnes(login, password,paramtresdelabase) VoicilaDTDcorrespondante:
property:reprsentelacl(proprit) value:reprsentelavaleurlielacl
3.8.2.1.Exemple VoiciunexempleXMLdelaclausedatasources:
http://www.labosun.com CedocumentestlapropritdeSupinfoetestsoumisauxrglesdedroitsdauteurs
FrameworkStrutsModleMVC
23/57
3.8.2.2.Utilisationdanslapplication VouspouvezaccderlobjetDataSourcedepuisuneActionvialecodesuivant:DataSourceds= servlet.getServletContext().getAttribute(org.apache.struts.action.DATA_SOURCE/ stockdb);
Apartirdel,vouspourrezrcupreruneconnexionvotresourcededonneseteffectuertous lestraitementsquevousdsirer.
3.8.3.FormBeansLesbalisesformbeans et formbean indiquentStrutsquelidentifiantuniqueestassociune classeActionForm.EllesserventgalementinitialiserlesDynaForms(cf.5.3). VoicilapartiedeDTDcorrespondante:
Voiciunedescriptiondechacunedesbalises: formbeans:encapsulelalistedesbeansformulairesdfinis.Lattributtypeatdclass. formbean:dfinitunformulaireunique. o o o className:sertdfinirunbeandeconfigurationpourceformulaire(comme pourlesDataSource)cependantcelaestnestpascommun. dynamic:atdclass name: reprsente lidentifiant unique qui permet daccder au formulaire et dassociultrieurementleformulaireuneaction.Remarqueimportante:sila porte de votre formulaire est celle de la session, vous pouvez accder au formulairevialamthodegetAttribute()delobjetsession.
http://www.labosun.com CedocumentestlapropritdeSupinfoetestsoumisauxrglesdedroitsdauteurs
FrameworkStrutsModleMVC
24/57
o
type: doit indiquer une classe ActionForm valide. Cest cette classe qui sera instanciepourcrerleformulaire.
Siletypedrive(ouest):org.apache.struts.action.DynaActionForm,lesbalisesformproperty sontgalementinspectesparStruts.Chacunedellesdfinitunevaleurinitiale,unnometuntype (parexemplejava.lang.String)pourchaquepropritduformulaire(cf.5.3) 3.8.3.1.Exemple
3.8.4.ExceptionsLabaliseglobalexceptionsregroupelensembledesexceptionsquevotreapplicationgreauplus basniveaudurantletraitementdunerequte.Vouspouvezgrerautantdetypedexceptionque vouslesouhaitez.Nouspouvonsassimilercettepartiedeconfigurationau trycatch dansle langageJava.Eneffetvousdclarezunbloccatchviaunebaliseexception. Voiciunedescriptiondesattributsquadmetcettebalise: bundle:spcifielenomdubundlederessourcesquicontiendralesmessagespourcette exception. handler: spcifie la classe appele lorsque lexception se produit. Elle doit imprativementdrivedelaclasseorg.apache.struts.action.ExceptionHandleroudune classedrive. key:dsignelacldumessagederreurquiseragnretquiserarecherchdansle bundledemessages. path:dfinitlURLlaquellelecontrleesttransfrlorsquelexceptionsurvient. scope: indique Struts sil doit mmoriser les ActionError cres par la gestion de lexceptiondanslaportedelasessionoularequte. type:nommelexceptionquiseraintercepteparcegestionnaire. 3.8.4.1.Exemple
Siuneexceptionestlancedurantletraitement,lemodledatabase.errorestrecherchdansle bundlederessourcespardfaut(ApplicationResources.properties),unenouvelleActionErrorest crelaidedumodle,puiselleestplacedanslesattributsdelarequteetlecontrleest transmislapagederreurstandard.
http://www.labosun.com CedocumentestlapropritdeSupinfoetestsoumisauxrglesdedroitsdauteurs
FrameworkStrutsModleMVC
25/57
3.8.5.GlobalForwardsLes transfertsglobaux servent dfinirdes cheminsdaccs utilisablespar touteslesactions dfiniesdanslaconfiguration.Siparexempleuncertainsnombredactionsdoiventtransfrerle contrleuncrandeconnexion,vouspouvezdfinircetransferticiaulieudelefairedans chaqueaction. VoicilapartiedelaDTDcorrespondante:
Voiciladescriptiondelensembledesattributs: contextRelative:indiquesipathestrelatifaumoduleduneapplicationmodulaire(si faux)oudelapplicationweb(sivraie) name:reprsentelidentifiantuniqueduforward.Ilpermetderetrouverceforwarddans uneactionaveclamthodefindForward() redirect:sipositionntruelecontrleesttransmislapageavecuneredirectionplutt quuntransfert.Unenouvellerequteestdonccre
Nousnutilisonsgnralementpaslesbalisessetpropertypourlesforward.Cependantcellesci peuventvoustreutilessivoussouhaitezcrervospropresclassesdeforward(drivantdela classedebase).Danscecaslvousdevrezgalementindiquerlenomcompletdelaclassedans lattribut:className. 3.8.5.1.Exemple Voiciunexemplesimpledutilisationdeglobalforwards:
3.8.6.ActionmappingsCettepartieestsansdoutelapluscomplexe.Ellerelielesactions,lesformulairesetlestransferts. VoicilapartiedelaDTDcorrespondante:
http://www.labosun.com CedocumentestlapropritdeSupinfoetestsoumisauxrglesdedroitsdauteurs
FrameworkStrutsModleMVC
26/57
Voiciunedescriptiondechacunedesbalises: attribute:spcifieunIDuniquepermettantdemmoriserlActionFormdanslaportede larequteoulasessionsinonnameestutilis forward/include:permettentdetransfrerlecontrleunnouveaucheminaulieude traiterlaction input:indiquelapageouactionquiagnrleformulaireservantentrerlesdonnes parameter:permetdetransmettreunautreparamtrelaction,cependantilestalors prfrabledutiliserlabaliseplusgnrale:setproperty path:sertrelierlarequtelactioncedoittrelechemindelactionsansaucun suffixe.Siparexemplevousavezspcifi/admin/add.dodanslactiondevotre formulairealorsvousindiquerez/admin/adddanslepath prefix/suffixe:spcifientrespectivementunprfixeetunsuffixequiserontajoutsaux nomsdepropritsdubeanActionFormavantdelesassocierauxnomsdeparamtredela requte roles:permetderestreindrelaccslactionenindiquantunensemblederlespare parunevirgule. type:spcifielaclassedelAction. validate:sicetteattributestpositionnfalse,lecontrleurnexcutepaslamthode validate()delActionForm 3.8.6.1.Exemple
http://www.labosun.com CedocumentestlapropritdeSupinfoetestsoumisauxrglesdedroitsdauteurs
FrameworkStrutsModleMVC
27/57
3.8.7.ControllerCettebalisenestpassouventutilise.SeuleslespersonnessouhaitantmodifierlenoyaudeStruts senserviront!
Voiciladescriptiondechacundesattributs: bufferSize: permet de modifier la taille du tampon dentre lors du traitement de chargementdefichiers maxFileSize:dfinitlataillemaximaledufichierpouvanttrechargetpeuttresuivi dunK(kilo),dunM(mga)oudunG(giga) contenType:permetdedfinirunautretypedecontenupardfautquetext/html debug:activeledbuggagesilavaleurestsuprieure0 forwardPattern:permetdemodifierlafaondontlecheminduneapplicationestliune URLrelativeaucontextelaidedeforwardPattern.Lavaleurde$Aestexpanseen prfixedelapplication(/applicationContextparexemple)etcellede$Pdanslechemin requis.Pardfautlavaleurest$A$P inputForward:positionntrue,lesparamtresdesattributsinputdesbalisesactionsont traitscommedestransfertsetnoncommedeschemins.C'estdirequilssontcompars auxbalisesforwarddfiniesglobalementetlocalementaulieurdtretraitscommedes URI locale:mmoriseunlocaledanslasessiondelutilisateursicenestpasdjfait.(lorsque cetattributestpositionntrue) nocache:unerequtededsactivationdelamiseencachedescontenusestenvoyeau navigateurclientavecchaquerponseHTTP pagePattern:indiqueStrutscommentrelierlespageslURLsousjacente,dunefaon assezsemblableforwardPattern processorClass:remplacelaclasseprocessorderequtepardfautdeStrutsparune personnalise.
http://www.labosun.com CedocumentestlapropritdeSupinfoetestsoumisauxrglesdedroitsdauteurs
FrameworkStrutsModleMVC
28/57
3.8.7.1.Exemple Voiciunexempledebalisepouvanttreutilise:
3.8.8.MessageresourcesCettebalisevouspermetdedfinirunbundlederessourcespourvotreapplication.Vouspouvez, bienentendu,endfinirplusieurssibesoinest.
Voiciunedescriptiondechacundesattributs: factory:permetdespcifierdoproviennentlesdonnesdelaressourcedemessages. Pardfaut,ilestconfigurpourliredesfichiersproperties key:dfinituneclpouraccderaubundle. null: permet de spcifier ce quil faut faire lorsquun message nest pas trouv. Si lattributestpositionntrue,ilretournenull.Positionnfalse,ilretourneunmessage derreuraveclaclrrone. parameter:permetdetransmettreunparamtrelafabriquelorsquelebundleestcr. Pourlesfabriquesbasedefichiersdeproprits,cestlechemindufichier. 3.8.8.1.Exemple Voiciunexempledeconfigurationdunbundle:
VousdevezavoirunfichierMainMessages.propertiesdansvotrepackage:com.labosun
3.8.9.PluginCedernierlmentvouspermetdechargerdynamiquementdesfonctionnalitssupplmentaires dansleframeworkStruts.
Voiciunedescriptiondechacundesattributs:
http://www.labosun.com CedocumentestlapropritdeSupinfoetestsoumisauxrglesdedroitsdauteurs
FrameworkStrutsModleMVC
29/57
className:spcifielaclassequichargeleplugin. setproperty: permet de transfrer au plugin les arguments ncessaires son fonctionnement
3.8.9.1.Exemple Voiciunexempledeconfigurationdupluginvalidator:
3.9.IntgrationaveclapplicationWebNousavonsvu,jusquprsent,lefonctionnementdeStrutsindpendammentduneapplication webbasesurunmoteurdeservlet. SilonnepeutpasintgrerStrutsavecnotreapplicationweb,alorsceframeworkestinutilisable! Bienentenduunesolutionexiste,nousallonsredirigerunensembledurl(grceaumappingparun pattern)uneservletduframeworkStruts. Nous utiliserons : org.apache.struts.action.ActionServlet. Cette servlet va nous permettre dindiquerlefichierdeconfigurationutiliser,letypededebuggageprendreencompte Nousnavonsplus,ensuite,qumappinguntypedurlcetteservlet. Voiciunexempledecodeincluredanslefichierdedescriptiondevotreapplicationweb: web.xml:
actionstruts org.apache.struts.action.ActionServlet config /WEBINF/strutsconfig.xml debug 2 detail 2 2
http://www.labosun.com CedocumentestlapropritdeSupinfoetestsoumisauxrglesdedroitsdauteurs
FrameworkStrutsModleMVC
30/57
actionstruts *.do
http://www.labosun.com CedocumentestlapropritdeSupinfoetestsoumisauxrglesdedroitsdauteurs
FrameworkStrutsModleMVC
31/57
4.Lestiles4.1.PrsentationLorsquondveloppeuneapplicationWeb,onremarquegnralementquelensembledespages possde un lment central variable entour dlments plus ou moins statiques (barre de navigation,entte,pieddepage) LabibliothqueTiles,quiestunpluginintgrableStruts,permetdecrerdesmodlesdepage rutilisablespourlensembledevotreapplicationlaidedundocumentXMLcentral. CettelibrairiepeutsutiliseraussibienindpendammentdeStrutsoueninterne.Nousverronsici lutilisationintgreStruts(cequinouspermetdavoirtoutelapuissancedeStrutscombine aveccelledestiles).
4.2.ArchitectureVoiciunschmarcapitulatifdelarchitectureetutilisationdeTiles:Dfinitions (tilesdef.xml) mainLayout (1dfinition) Actionmapping index (extendsmainLayout) Actionmapping document (extendsmainLayout) Strutsconfiguration strutsconfig.xml
body.jsp (contenu)
header.jsp (contenu) footer.jsp (contenu)
layout1.jsp (structure)
http://www.labosun.com CedocumentestlapropritdeSupinfoetestsoumisauxrglesdedroitsdauteurs
FrameworkStrutsModleMVC
32/57
Cettearchitectureprservelasparation:structuredespagescontenusdespages.Eneffet,vous pouvezcrerautantdelayoutsquevouslesouhaitiez;pouraffecterunlayoutunepageilsuffit queladfinitiondecettepage(danslefichierdeconfiguration)hritedulayoutconcern.Nous pouvonsdoncremarquerquelacoucheapplicationnintervientpasdirectementsurlespagesjsps maispasseparlacouchedestructuration(lestiles).
4.3.InstallationAfindepouvoirutiliserlabibliothqueTiles,vousdevezladclarerauprsdelaconfiguration Struts. Tilestantunpluginstrutsvousavezjusteinsrercesquelqueslignesdansvotrefichierde configurationStruts:
Tilestantunpluginvousdevezavoirleslibrairiesdansvotreclasspath(toutcommevousavezles librariesdeStrutsdedans).Depuislaversion1.2deStruts,TilesestintgrdansStruts(struts.jar). Sivousutilisezuneversionantrieure(cequinestpasrecommand)vousdevrezajouterla librairieTilesmanuellement(voustrouverezcettelibrairieici:http://).Pardfaut,leplugin initialiselapplicationaveclefichier:tilesdef.xmldudossierWEBINF.
4.4.FichierdeconfigurationLefichierdeconfiguration,commepourStruts,estlepointcentraldegestiondeTilesdansvotre application.Cestdanscefichierquevousdevrezdfinirlensembledesdfinitionsdevotre application.Voiciunedescriptiondelensembledesbalisespouvanttrescontenusdanscefichier. Comme pour tout fichier xml bien form, il suffit de se baser sur la DTD pour connatre lensembledelastructureappliquernotrefichierxml.VoicilelienverslaDTDdufichierde configurationdesTiles:http://jakarta.apache.org/struts/dtds/tilesconfig_1_1.dtd.
4.4.1.BaliseracineLa premire balise rencontre est la balise parente. En effet, cest elle qui va contenir lensembledesbalisesenfantesdeconfigurationdesTiles.
http://www.labosun.com CedocumentestlapropritdeSupinfoetestsoumisauxrglesdedroitsdauteurs
FrameworkStrutsModleMVC
33/57
Cettebalisenepeutcontenirquedesbalisesdetype:definition.Ellenesertqu regrouperlensembledesdfinitions. 4.4.2.Balisedefinition Cestlabaliselaplusimportant.Eneffet,ellepermetdedfinirunedfinitiondetile, cestdireunestructuredepagepouvanttreinsrdansunepageoudirectement utiliseentantqueforwarddanslaconfigurationStruts.Cettebalisecontientbienplus dattributquelaprcdentecarellepermetdegrerlensembledescasdestructuredune page(layoutoucontenudepage).VoicilapartiedeDTDcorrespondante:
controllerClass:lenomcompletdelaclassespcifiqueutiliserentantque contrleur(sionnesouhaitepasutilisercellepardfaut) extends:utiliserpourfairedriverladfinitionencoursdunedfinitionmre (celapermetdesurdfinirlesvaleursdesattributsdeladfinitionmre) name:nomuniquedeladfinition path(oupage):dfinitlapageutiliserpourlastructuredecettetile(layout).La ressourceestalorscharge(ouincluseencasdepagejsp) role:dfinitunrolepourlagestiondelascurit(dfinitiondutypedaccsla dfinition) template:mmechosequepath.Utilispourlacompatibilitaveclalibrairie: Template
UnedfinitionpeutgalementcontenirdesbalisesputetputListquipermettededfinir desattributs(put)etdeslistes(putList). 4.4.3.BaliseputLabaliseputpermetdedfinirunattribut(cl=>valeur)dansunedfinition. VoicilaDTDcorrespondate:
http://www.labosun.com CedocumentestlapropritdeSupinfoetestsoumisauxrglesdedroitsdauteurs
FrameworkStrutsModleMVC
34/57
name:lidentifiantuniquepourlattribut(lacl) type:dfinitletypedelavaleur(string,page,template,definition) direct:mmechoseque:type="string"(compatibilitavecTemplate) value(oucontent):lavaleurassocilacl(dfinitaveclattributname) content:mmechosequevalue(compatiblitavecTemplate)
4.4.4.BaliseputList LabaliseputListpermetdedfinirunelistedansunedfinition. VoicilaDTDcorrespondante:
Leseulattributestlenomdelaliste(name).Cependantlalistepeutcontenirdiffrents lments: add:mmechosequunlmentput item:lmentspcifiquedelaliste(cf.cidessous) bean:lmentdetypeJavaBean(cf.cidessous) putList:autreliste 4.4.5.Baliseitem Labaliseitemestutilisepourdfinirunlmentdansuneliste.Cetlmentpeutcontenir diffrentesproprits(valeur,icne,lien,messagedinformat on). i VoicilapartieDTDcorrespondante:
http://www.labosun.com CedocumentestlapropritdeSupinfoetestsoumisauxrglesdedroitsdauteurs
FrameworkStrutsModleMVC
35/57
classtype:nomcompletdelaclasseutiliser(pardfaut: org.apache.struts.tiles.beans.MenuItem) icon:valeurdelapropriticon link:valeurdelapropritlink tooltip:valeurdelaproprittooltip value:valeurdelapropritvalue 4.4.6.Balisebean
Labalisebeanpermetdedfinirunlmentdetype:JavaBeandansuneliste.Celapermetde personnalitlensembledespropritsdisponibles.Chacunedesespropritstantinitialisevia unebalise:setproperty(descriptioncidessous). VoicilapartiedeDTDcorrespondante:
Vouspouvezremarquerquelattributprincipalest:classtypequipermetdedfinirlenom completdelaclasseutiliserpourleJavaBean.
4.4.7.BalisesetpropertyLa balise setproperty se retrouve trs souvent dans les fichiers de configuration (cf. balise DatasourcefichierdeconfigurationStruts).EllepermetdinitialiserunepropritdunBeanen indiquantlenomdecellecietlavaleurassocie. VoicilaDTDcorrespondante:
property:dsignelenomdepropritinitialiser value:dsignelavaleurassocierlaproprit
Voicilamajoritdesbalises/attributsutilissdansledveloppementaveclepluginTiles. Vouspouvezremarquerquilnyaaucunmoyendediffrenciervostemplates(oulayout)devos pagesrellementutilisables.EneffetTilesvousfournitlesimplefaitdecrerdesdfinitionsetde fairedelhritageentreelles.Cestdoncaudveloppeurdegrer(viaunenorme,convention) ladiffrenciationentrelayoutetpages.
http://www.labosun.com CedocumentestlapropritdeSupinfoetestsoumisauxrglesdedroitsdauteurs
FrameworkStrutsModleMVC
36/57
4.5.LayoutsLeslayoutdfinissent(unpeucommedanslalibrairieSWING)lastructuredunepage,cest direlesdiffrentslmentsdunmodleetlepositionnementdeceuxl. Vouspouvezcrerdesmodlespour: lespages descomposants(liste,formulaire) desvuesspciales
Enthorie,vousnutiliserezjamaisdirectementunedfinitiontypelayoutdansunepagejsp (saufcasspcifiques)maisvouslesutiliserezcommedfinitionsparentes. Voiciunexemplededfinitionquireprsenteunmodledepage:
Cettedfinitiondclareunmodledepagequicontient: untitre:title unbandeauentte:header unmenuhorizontal:hmenu unmenuvertical:vmenu uncontenuprincipale:cbody uncontenusecondaire:rbody unpieddepage:footer Unepagejspdestructureestassociecettedfinition(viapath="")afinquonpuissedfinirle positionnementdechacundeslments. Danscettedfinitionleslmentssontdclarsetinitialisspardesvaleurspardfaut. Cettedfinitionatcriteafindtreutilispardesdfinitionsdepagerelle.
4.5.1.LefichierdestructureNousvenonsdevoircommentdclarerunedfinition,cependantdanslecasdunmodle(layout) nousdevonsutiliserunepageJSPafindindiquercommentplacerleslments.
http://www.labosun.com CedocumentestlapropritdeSupinfoetestsoumisauxrglesdedroitsdauteurs
FrameworkStrutsModleMVC
37/57
DansvotrepageJSP,vouspouvezalorsutiliserlesvaleursdechacundesattributspourlesinsrer dansvotrepagemodle. Votreattributpeutpointerversdiffrentechose: Unechanedecaractre Unedfinition UnepageJSPouautre
Ilvousfaudrautiliserlalibrairietiles(taglib)dansvotrepagemodleafindinsrerlesdiffrents lments. Voiciunedescriptiondelensembledecettelibrairie: //TODO //TABLEAU Voiciunexempledepagemodeledebase:
http://www.labosun.com CedocumentestlapropritdeSupinfoetestsoumisauxrglesdedroitsdauteurs
FrameworkStrutsModleMVC
38/57
Cefichierpermetdedfinirlemplacementdescomposants.Chaquedfinitiondepagequihritera dulayoututilisantcettepageverrasescomposantsplacsdecettemanire:
Header M E N U Body Footer4.6.TilesLes Tiles sont galement des dfinitions. Cependant elles sont utilisables rellement car elle dfinissentdespagesfinales.Unetileestleplussouventunedfinitionhritantduneautre(de typelayout)etquisurdfinitlensembledesattributsspcifiquelatile. Parexemple,sivousutilisezlemodledcritprcdemmentvouspouvezjusteavoirbesoinde redfinirletitredelapageetlecontenuprincipale(voirgalementsecondaire).Danscecasl, vousgardezlebandeau,lesmenus,lefooterpardfauts. Celavitelaredondancedinformationetsivoussouhaitezchangerdebandeau,ilvoussuffirade modifierladfinitiondumodleprincipal.
4.7.ExempledarchitecturededfinitionsVoiciunschmarcapitulatifduneutilisationdelalibrairieTiles:
http://www.labosun.com CedocumentestlapropritdeSupinfoetestsoumisauxrglesdedroitsdauteurs
FrameworkStrutsModleMVC
39/57
Layouts
Page
Form
List
pub.login Dfinitionrelles pub.index pub.ress
form.user form.login
list.ress list.users
Nousavonsdonc3layouts: Page:structureglobaledunepage Form:modlepourlesformulaires List:modlepourleslistes
Ensuite les dfinitions (tiles) hritent du layout utiliser et redfinissent les lments personnaliser.
http://www.labosun.com CedocumentestlapropritdeSupinfoetestsoumisauxrglesdedroitsdauteurs
FrameworkStrutsModleMVC
40/57
5.Validator&Formulaires5.1.PrsentationetarchitectureStrutspermetdecrerfacilementdesformulaireslaidedediffrentesbalisespersonnalises.La questionmaintenantest:commentgrerlavalidationdecesformulaires? Pourcela,ilexisteleframeworkValidator(inclusdansleProjetCommonsdApache),dvelopp par David Winterfeldt. Il tait au dpart une tierce partie ajoute au framework Struts. Aujourdhui,cestunframeworkindpendantpouvanttreutilisavecousansStruts. Ceframeworkcontientdiffrentsoutilsquivontnousviterdedevoirrcrirenospropresclasses devalidation.Ainsi,pourvrifierquedeschampssontbienremplisoubiendansuncertain format,onaungaindetempsnonngligeable. Leprincipeestlesuivant: DanslalistedesfichiersdeconfigurationdeStruts,quevoustrouverezdanslerpertoire ~/WEBINF/, setrouvent lesfichiers validation.xml etvalidatorrules.xmlquivont permettre entreautreslemappingentrelesbalisesdesformulairesetlesclassesdevalidations. Danslerpertoire~/WEBINF/lib,setrouvent2fichiersjar,commonsvalidator.jaret jakartaoro.jarquicontiennentcesclassesdevalidations. Chaquefoisquelonsouhaitefaireunevrificationsurunchampdunformulaire,onvamapper cechamplamthodedelaclassecorrespondante.Celapeutparatreflouaudpart,maisnous verronsdansleschapitressuivants,lamarchesuivrequiestenfaittrssimple.
5.2.Fichiersdeconfiguration5.2.1.Danslefichierstrutsconfig.xmlCeframeworkdevalidationncessitedonclutilisationdedeuxfichiersdeconfigurationquelon vadclarer,telsdesplugins,danslefichierstrutsconfig.xml.Pourcelaonvautiliserlabalise etluiindiquerlescheminsversnosdeuxfichiersXML:
Dfinitiondelabalise: plugin lmentracinedeladfinition.Onaunebalisepluginpourchaque
http://www.labosun.com CedocumentestlapropritdeSupinfoetestsoumisauxrglesdedroitsdauteurs
FrameworkStrutsModleMVC
41/57
"plugin"ajout. className:attributdelabaliseplugin,ilpermetdedfinirlechemindela classeinstancier,interneouexterneStruts.Celasignifiequelonpeut parfaitementcrersonpropreframeworkdevalidationvoireunframework dunetouteautreutilit. o setproperty Silaclasseinstancie(className)prenddesargumentsenparamtre,ils serontdfinisdanscettebalise.Onadoncunebalisesetpropertypour chacundesarguments. property:attributdelabalisesetproperty,ilpermetdespcifierlenomde largument. values:attributdelabalisesetproperty,ilpermetdespcifierlavaleurde largumentdfinidansproperty. Nousvenonsdoncdespcifierunenouvellebaliseplugin,toutcommeonlafaitpourlesTiles prcdemment,etdeuxnouveauxfichiers. Voyonsdoncplusendtailcequesontcesfichiersetquoiilsvontnousservir.
5.2.2.Lefichiervalidatorrules.xml:Fourniavecleplugin,cefichierXMLdfinilesrglesquelonpourrautiliserpourtesterles valeursdeschamps.Ilpermetdeffectuerlelienentreletypedevalidation(champrequis,champ email)etlecheminverslamthodeetlaclassecorrespondantequipermettrontdeffectuer loprationdevrificationdesdonnes(valeurduchamps). Debase,StrutsValidatorgreleschampsvides,lesformatsdemailoudedateinvalides,les longueursdechampsminimumoumaximum,etbiendautresencore. Vous trouverez la description de toutes ces validations sur le site de la fondation Apache: http://struts.apache.org/userGuide/dev_validator.html dans la section "Standard Built In Validations". Dfinitiondesbalisesdufichiervalidatorrules.xml: formvalidation o global validator lmentracinedufichier. Tous les lments inclus dans la balise global seront accessibles par lensembledesformulaires(sortedeconstantes) Dfinitchaquetypedevalidationetlelielamthodecorrespondante. Attributsdelabalisevalidator: name:dfinitlenomlogiquedelavalidation. classname: dfinit le chemin vers la classe contenant la mthode de validationcorrespondante.http://www.labosun.com CedocumentestlapropritdeSupinfoetestsoumisauxrglesdedroitsdauteurs
FrameworkStrutsModleMVC
42/57
method:dfinitlenomdelamthodedevalidationcorrespondante. methodParams:typedesargumentspasssenparamtre. msg:dfinitlemessagederreurafficherencasdenonvalidationdu champ. depends:dfinitsilavalidationestobligatoireounon. jsFunctionName:dfinitlenomdelafonctionjavascriptcorrespondante quisexecuteractclient javascript Dfinitlecodedelafonctionjavascriptquisexcuteractclient.
Nousallonsvoiruneexplicationdelundes"validator"fournipardfautdanslefichiervalidator rulesdebase.
Ilsagiticiduvalidatorvrifiantquunchampestrequis,cestdirequilvrifiequelechamp nestpasvide.Onpeutdoncvoirquilatnomm"required",quilestrattachlamthode validateRequireddelaclasseFieldChecks. Encasdenonvalidationduchampmappce validator,lemessagederreursetrouvantunpeuplushautdanslefichiervalidatorrules.xmlsera affich:
Danslecasprsent,onauraitlemessagearg0isrequired.
5.2.3.Lefichiervalidation.xml:Unefoislesdiffrentstypesdevalidationdfinis,cestdanslefichiervalidation.xmlquivanous serviramapperleschampsdenosformulairesauxvalidationsdfiniesdansvalidatorrules.xml. Dfinitiondesbalisesdufichiervalidation.xml: formvalidation o global lmentracinedufichier. Entrecesbalisesvonttredfiniesdesinformationsqui serontaccessibles,visiblesparlensembledesformulaires denotrefichier(constantes).
http://www.labosun.com CedocumentestlapropritdeSupinfoetestsoumisauxrglesdedroitsdauteurs
FrameworkStrutsModleMVC
43/57
constant constantname constantvalue
Achaqueconstantecorrespondunebaliseconstant. Cettebalisepermetdedfinirlenomdelaconstante Cettebalisepermetdedfinirlavaleurdelaconstante.On va pouvoir par exemple dfinir lexpression rgulire dfinissantlavaleurdecetteconstante Cette balise va englober tous les mappings de nos diffrentsformulaires.
o
formset form
chaqueformulairecorrespondunebaliseform. name: attributdelabalise form, ilpermetdedfinirle nomduformulaireconcern.Cenomcorrespondcelui dfinidanslefichierstrutsconfig.xml(attributnamedela baliseformbean).
field
chaquechampduformulairencessitantunevalidation correspondunebalisefield. property:attributdelabalisefield,cesticiquelonva spcifierlenomdelaproprit(champ)quelonvalier laoulesvalidationsdfinie(s)dansvalidatorrules.xml.Ce nomdepropritestceluidfinidansleFormBean. depends:attributdelabalisefield,ilpermetdespcifier lesnomsdesvalidationsassociesauchampproperty. argn: baliseinternelabalise field, ellepermetde spcifier largument donner au message derreur correspondant. var:baliseinternedelabalisefield,ellevapermettre de prciser(si besoin est) une contrainte dintgrit pourlesvalidationsspcifiesdanslattributdepends. o varname: baliseinternedelabalise var, onva spcifier le nom de la validation dont on veut donnerlacontraintedintgrit. varvalue: baliseinternedelabalise var, onva spcifier la contrainte dintgrit (exemple: expressionrgulire,...).
o
http://www.labosun.com CedocumentestlapropritdeSupinfoetestsoumisauxrglesdedroitsdauteurs
FrameworkStrutsModleMVC
44/57
Jusqumaintenantnousavonsunfichiervalidatorrules.xmlquidfinitunelistedevalidations dontlesclasses(etdoncmthodes)setrouventdanslesfichierscommonsvalidator.jaretjakarta oro.jar. On a par ailleurs un formulaire dinscription(InscripForm) avec les champs nom(obligatoire), password(obligatoire,tailleminimumde4caractres)etemail(obligatoire,formatdemail). Nous souhaitons donc vrifier la validit de ces champs. Ceci va tre fait dans le fichier validation.xml.Cesteneffeticiquelonvalierchacundenoschampsauxtypesdevalidations dclaresdansvalidatorrules.xml. DaprslesrglesdelavalidationdfiniescidessuspourleformulaireInscripForm,onpeutvoir quelonvautiliserlesvalidatorssuivants(prsentsdanslefichiervalidatorrules.xmldebase): required,emailetminlength. Voici donc comment se prsentera notre fichier validation.xml pour la partie concernant InscripForm:
Voyonslexplicationdufichierligneparligne: o Toutesnosdfinitionssontenglobesdanslabaliseracineformvalidation. Dansunpremiertemps,nousdfinissonsuneconstante minPass.Elledfinitlalongueur minimumdumotdepasse.Onlenglobedansunebalise,cequisignifiequellesera visiblepartouteslesdfinitionsdeformulairequivontsuivre. NousavonsbesoinduchamppassworddansleformulaireInscripForm,ettantsusceptible dtrerutilisdansunautreformulaire,onachoisidedclarercetteconstanteminPassavechttp://www.labosun.com CedocumentestlapropritdeSupinfoetestsoumisauxrglesdedroitsdauteurs
FrameworkStrutsModleMVC
45/57
uneporteglobale.Sachantquelechamppassworddevraavoirunelongueursuprieure4, lavaleurdeminPassestinitialise4.
o
Labalisecontientlensembledesvalidationsdesdiffrentsformulaires.Cela signifiequelonauraunebalisepourchaquedfinitiondeformulaire.Dansnotre cas,nousnavonsqueInscripForm,nousavonsdoncuneseulebalise.
Nousouvronsdonclabaliseetindiquonsdanslattributname,lidentifiantdenotre formulaireindiqudanslefichierstrutsconfig.xml,"inscripForm". Lepremierchampdontnousdevonsvrifierlavaliditestlechamp nom,ilesteneffet obligatoire.Lobjetquenousallonscrericiestunobjetclient.Danslabaliseestdonc indiqulenomdelapropritconcerne,cestdire nom.tantunchampobligatoire,on ajoutelevalidatorrequired(cf:valitorrules.xml)pourlattributdepends. Onvientdoncdelierlechampnomduformulaireauvalidatorrequired. Encasderreurdevalidation,lemessagearg0isrequiredseraaffich(chapitresurvalidator rules.xml).Afindespcifierjustementlenomquiseraaffichpourarg0,onutiliselabalise avec0pourlavaleurden.Lavaleurdearg0estdfinidanslattributkey,ilsagitde lavaleurdeclient.form.require.nomdufichierdeproperties. Onvientmaintenantdedfinirplusprcismentlemessagederreur.
o
Nousallonsagirdelammemanirequepourlechampnomaveclechamppassword. Cechampestobligatoireetdoittredunelongueurminimumde4caractres.Lattribut dependsadoncpourvaleursrequiredetminlength.
Afindespcifierlavaleurdeminlength,onutiliselabalise.nouspermet despcifierlenomduvalidatorconcernet,lavaleur,justementquelonva affectercevalidator. Prcdemment,nousavonsspcifierquelaconstante minPass atinitialiseendbutde fichier,avecuneporteglobale.Nousrutilisonsdonccetteconstanteafindelaffecter minlength.
http://www.labosun.com CedocumentestlapropritdeSupinfoetestsoumisauxrglesdedroitsdauteurs
FrameworkStrutsModleMVC
46/57
o
Lesvalidatorspourleschampsnometpasswordviennentdoncdtredfinis.Ilnereste quelechampemaildontladmarcheestlamme.Simplementlesvalidatorsconcerns sontrequiredetemail(toujoursdufichiervalidatorrules.xml).
Nousvenonsdoncde: initialiserlepluginValidatordanslefichierstrutsconfig.xmletfaitlesliensaveclesfichiers validation.xmletvalidatorrules.xml. dfinirlesdiffrentesvalidationsdanslefichiervalidatorrules.xmlenfaisantlesliensavecles classesconcernes. dfinirlesvalidationsfairesurleschampsdenotreformulaireenfaisantlesliensentreces champsetlesvalidators(dfinisdansvalidatorrules.xml),danslefichiervalidation.xml.
Cependant,nousnavonspasparldesFormbeans;eneffet,laclasseassocienotreformulaire InscripFormdoittendrelaclasseDynaActionForm,classefilledelaclasseActionForm.
5.3.DynaFormsOnavujusquemaintenantcommentlierleschampsdenosformulaires,maisaucunmomentla dfinitiondelaclasseFormBeancorrespondante. Eneffet,silonutiliseStruts,ilfautncessairementlierchaqueformulaireunbean;cestdire uneclasseJavarespectantcertainesrgles: unattributpourchaquepropritduformulaireaveclemmenom ungetteretunsetterpourchaqueattributdubean
Parailleurscetteclassedoittendre ActionForm.Laclasse ActionForm possdeeneffetune mthodevalidate()quivajustementpermettrededfinirlecodevalidantounonleschampsdu formulaire. Silonsuitcetteindication,notreclasseInscripFormestdfiniecommesuit:
http://www.labosun.com CedocumentestlapropritdeSupinfoetestsoumisauxrglesdedroitsdauteurs
FrameworkStrutsModleMVC
47/57
CetteclassecontientdesattributscorrespondantsauxpropritsdenotreformulaireInscripForm ainsiquedesgettersetdessetterspourchacundeux. Ellesurdfinitparailleurslamthode validate() de la classe ActionForm afin de faire les validations des diffrents champs du formulaire. Rappelons que client.form.require.nom fait rfrence la cl se trouvant dans le fichier de properties(cf.3.6.1)quonauradfinienamont.Lelienaveccefichiersefaitdanslefichierde configurationstrutsconfig.xmllaidedelabalise(cf.3.8.1). AprsavoircrnotreFormBean,revoyonslefichierstrutsconfig.xml:
http://www.labosun.com CedocumentestlapropritdeSupinfoetestsoumisauxrglesdedroitsdauteurs
FrameworkStrutsModleMVC
48/57
Lefaitestque,sinousavonschoisidutiliserleframeworkValidator,cestjustementdanslebut dviter dcrire les codes de validations pour chaque formulaire puisquils risquent dtre redondants.Cestpourquoiunensembledevalidationsstandardssontregroupsdanslefichier struts.jar.Deplus,cestpourcelaquenousavonsregrouptouteslesdfinitionsdesvalidationsde champsdanslefichiervalidation.xml. Cequelonveut,cestseservirdecesdfinitionsetlesmappernotreFormBean. NousallonsdonctendrelaclasseValidatorForm,sousclassedelaclasseActionForm.Cette classeestinclusedansleframeworkValidator(onpourraletrouverdanslefichierstruts.jar,dans lepackageorg.apache.struts.validator).VoyonslanouvelleclasseInscripForm:
Sadfinitiondanslefichierstrutsconfig.xmlnechangepas:
Simplement,lesvalidationsdeschampsvontsefaireparrapportaufichiervalidation.xml.Lenom dfini dans lattribut name est lidentifiant qui permettra, de lier les champs du formulaire InscripFormauxvalidatorsrequis. Nousavonsdjgagnuntempsnonngligeable,puisquepourchaqueformulaire,ilnoussuffitde crerunFormBeancontenantdesattributsainsiqueleursaccesseurs.Maisnousallonsencore simplifierlachose.Eneffet,chaquefoisredfinirtoutescesmthodespourchaquechampest assezfastidieux.
http://www.labosun.com CedocumentestlapropritdeSupinfoetestsoumisauxrglesdedroitsdauteurs
FrameworkStrutsModleMVC
49/57
Pour cela, nous nallons plus crer de Form Bean pour chaque formulaire mais utiliser les DynaForms,cestdiredfinirnosbalisesdelamaniresuivante:
Aveccettenouvelledfinition,StrutsvasoccuperluimmedecrerleFormBean.Nousne devonsquespcifierlespropritsduformulaireainsiqueleurstypes. OnadoncdeuxpropritsvaliderpourceformulaireinscripForm,detypesStringetinitialises vide.
5.4.RsumdelaconfigurationdesValidatorsRsumonslesdiffrentestapesraliserpourgrerlavalidationdunformulaire: 1. InstancierlaclasseValidatorPluginlaidedelabaliseafindedonnerlaccs auxfonctionnalitsduframeworkValidatorStruts. 2. Configurerlesdeuxfichiersdeconfigurationvalidatorrules.xml(dontlaconfigurationpar dfautetamplementsuffisante)etvalidation.xml. 3. CrerunFormBeanquitendlaclasseActionForm. IlestdoncassezrapidedegrerlavalidationdesformulaireslaideduframeworkValidator.
http://www.labosun.com CedocumentestlapropritdeSupinfoetestsoumisauxrglesdedroitsdauteurs
FrameworkStrutsModleMVC
50/57
6.IntgrationavecXDocletxDocletestunoutiltrsintressantpourlagnrationautomatiquedecodeoudescripteursde dploiementouautresfichiersutiles. Nousallonstudier,danscettepartie,lintgrationdeXDocletpourlagnrationdesfichiersde configurationstruts(strutsconfig.xml,validation.xml). AfindebiencomprendreleprincipeXDoclet,ilfautsavoirlutiliseretconnatreAnt(cf.Essentiel Ant).
6.1.Strutsconfig.xmlLagnrationdufichierstrutsconfig.xmlestautomatisableavecXDoclet. GrceXDocletvousallezpouvoirdfinirdirectementdansvotrecodejava: Lesactionmapping Lesactionexception Lesactionforward Lesactionform Lesactiondynaform
CesdfinitionsvontsefairepartirdestagsXDoclet@Strutsquevouspouvezretrouver ladresse:http://xdoclet.sourceforge.net/xdoclet/tags/apachetags.html Nousallonsdtaillerlesplusimportantsdanscettesection.
6.1.1.Tags@StrutsVoiciunedescriptionnonexhaustivedestagslesplusutilissavecStruts: @struts.action:dfinitunmappingpouruneclassedactionetlesdiffrentsattributslis o o name:nomdelaction(doittreuniquedanslensembledelapplicationstruts) type:typedelaclasseutiliser(pardfaut,laclasseencours).Ilestpossiblede surcharger cette valeur dans certains cas (par exemple avec lutilisation de frameworkexternetelqueSpring) path:chemindelaction(url) scope: domaine dans lequel laction va exister (request, session, application; requestpardfaut) input:chemindinputpourlaction
o o o
http://www.labosun.com CedocumentestlapropritdeSupinfoetestsoumisauxrglesdedroitsdauteurs
FrameworkStrutsModleMVC
51/57
o o o
roles:rle(s)autoris(s)accdercetteaction validate:indiquesistrutsdoitvaliderlesentrsduformulaire(true|false,true pardfaut) parameter:paramtredoptiondelaction(ilfautmettreaction). key:cldelapropritutiliserpourretrouverletextedelerreur type:nomabsoludelaclassedexceptionquiseraintercept handler:nomabsoludelaclasseutilisercommeHandlerdelexception path:cheminverslaressourcequipermettradeterminerlarequte scope:domainedanslequellobjetActionErrorserautilis. name:nomduforwardquiserautilisdanslaction path:cheminverslaressourceutiliser redirect:indiquesilfauteffectueruneredirectionounon(true|false,falsepar dfaut) name:nomduformbeanquipermettradelerfrencer
struts.actionexception:dfinitunhandlersuruntypedexception(lielaction) o o o o o
struts.actionforward:dfinitunforwardlocalpourlaction o o o
strutsform:dfinitunformbeanetsesattributs o
OnretrouvegalementlestagslisaupluginValidator: struts.validator:dfinitlavalidationeffectuersurunchampduformulaire o type: dfinit le type de validation effectuer sur le champ (required par exemple) arg0value arg1value arg2value arg3value name:nomdelavariable value:valeurdelavariable
struts.validatorargs:dfinitunargumentappliquerlavalidation o o o o
struts.validatorvar:dclareunevariablepourlevalidator o o
Dautresattributspeuventtreutilissdanscertainscas.Nousnelesavonspasdtaillafinde simplifiercetteprsentation.
http://www.labosun.com CedocumentestlapropritdeSupinfoetestsoumisauxrglesdedroitsdauteurs
FrameworkStrutsModleMVC
52/57
6.1.2.ExemplesVoiciquelquesexemplesdutilisationdecestagsdanslecodejava.
ExempledeclassAction:/** * *@struts.actionpath="/admin/comment/add/display"name="commentForm" *scope="request"validate="false"parameter="action" * *@struts.actionforwardname="success"path="admin.comment.add.display" */ publicclassDisplayCommentFormActionextendsAction{ protectedActionForwarddelegateExecute(ActionMappingmappings, ActionFormform,HttpServletRequestrequest, HttpServletResponseresponse)throwsApplicationException{ .... returnmappings.findForward("success"); } }
UtilisationaveclesActionForm:/** *LoginFormclass. * *@struts.formname="loginForm" */ publicclassLoginFormextendsBaseForm{ //Membres privateStringloginTxt; privateStringpassword; /** *Defaultconstructor. * */ publicLoginForm(){ } /** *@returnReturnsthelogin.
http://www.labosun.com CedocumentestlapropritdeSupinfoetestsoumisauxrglesdedroitsdauteurs
FrameworkStrutsModleMVC
53/57
*@struts.validatortype="required" *@struts.validatorargsarg0value="key.form.login.required.login" */ publicStringgetLoginTxt(){ returnloginTxt; } /** *@paramlogin *Thelogintoset. */ publicvoidsetLoginTxt(Stringlogin){ this.loginTxt=login; } /** *@returnReturnsthepassword. *@struts.validatortype="required" *@struts.validatorargsarg0value="key.form.login.required.password" */ publicStringgetPassword(){ returnpassword; } /** *@parampassword *Thepasswordtoset. */ publicvoidsetPassword(Stringpassword){ this.password=password; } }
6.1.3.IntgrationavecAntXDocletsintgreavecAntafindepouvoirautomatisersonexcutionauseindunscript.
http://www.labosun.com CedocumentestlapropritdeSupinfoetestsoumisauxrglesdedroitsdauteurs
FrameworkStrutsModleMVC
54/57
Ilfaut: Dclarer la tche webdoclet via taskdef, en lui spcifiant la classe: xdoclet.modules.web.WebDocletTaskutiliser.Vousdevezdoncspcifierunclasspath validecontenantlaclasseprcdente(inclusedanslesjarsXDoclet). Appeler la tche webdoclet en lui spcifiant le rpertoire de destination (destdir), les fichiers parser (via un fileset), et la soustche strutsconfigxml qui permet de gnrerlefichierstrutsconfig.xml.
Vouspouvezgalementutiliserlessoustchessuivantes: strutsdynaformvalidationxml:pourlagnrationdesparamtragesdevosdynaform. strutsvalidationxml:pourlagnrationdufichiervalidation.xml
Vouspouvezavoirplusdedtailssurlutilisationdechacunedecestchesladressesuivante: http://xdoclet.sourceforge.net/xdoclet/ant/xdoclet/modules/web/WebDocletTask.html.
http://www.labosun.com CedocumentestlapropritdeSupinfoetestsoumisauxrglesdedroitsdauteurs
FrameworkStrutsModleMVC
55/57
7.Casconcret(architecture)7.1.PrsentationNousallonsprsentprendreuncasconcretdapplicationetvoirlesdiffrentestapesauniveau delamodlisationdelapplication.Nousallonsprendrelexempledunegestiondunportefeuille dactions Casdutilisation????
7.2.Architecture
7.3.Couchemtier
7.3.1.Couchedaccsauxdonnes(DAO)
7.3.2.Coucheservice
7.4.Coucheapplication
7.4.1.Action
7.4.1.1.ActionForm
http://www.labosun.com CedocumentestlapropritdeSupinfoetestsoumisauxrglesdedroitsdauteurs
FrameworkStrutsModleMVC
56/57
7.4.2.Forwards
7.4.3.Exceptions
7.5.Coucheprsentation
7.5.1.Tiles
7.5.1.1.Dfinitions
7.5.1.2.Jsp(layoutsettiles)
7.5.2.Formulaires
7.5.3.Messagesderreur(MessageApplication)
http://www.labosun.com CedocumentestlapropritdeSupinfoetestsoumisauxrglesdedroitsdauteurs
FrameworkStrutsModleMVC
57/57
8.LavenirdeStruts8.1.IntgrationavecJSTLEnadoptantJSP1.2,lesdiffrentsserveursdapplicationspeuventexploitertoutelefficacitde JSTL(JavaStandardTagLibrary).LeprincipaleffetsurStrutsseradefournirunesolutionde rechange la bibliothque de balises de Struts beaucoup plus puissante et capable dinteroprabilitaveclesplatesformesnonStruts. Enconsquence,onpeutsattendreprogressivementunedvalorisationdesbalisesStruts.
8.2.IntgrationavecJSFLauteurdeStruts:CraigMcClanahanestfortementimpliqudanslesspcificationsdesJSF (JavaServerFaces).StrutsetJSFserontdoncprobablementbientttroitementlis. UnefoisdepluslintrtpourlesbalisesStrutssestomperapourcelledeJSF(toujoursdanslebut davoirunstandard).
8.3.AdoptiongnralisedeStrutsStrutsestdevenurapidementtrspopulairedanslacommunautdedveloppementJavaJ2EE. IBM,OraclesontdebonsexemplesdeleaderayantchoisitStrutsdansleuroutildedveloppement dapplicationWeb. Findudocument
http://www.labosun.com CedocumentestlapropritdeSupinfoetestsoumisauxrglesdedroitsdauteurs