Java EE Guide de développement d'applications web en...

507

Transcript of Java EE Guide de développement d'applications web en...

  • Ce livre sur le dveloppement dapplications web en Java sadresse tout dveloppeur qui souhaite disposer de tous les dtails des diffrentes tapes de ralisation dune application web : lanalyse, la modlisation, le codage, la mise en production, les tests et la maintenance. Le livre suit une dmarche progressive et sappuie sur une tude de cas dun dveloppement dune boutique de vente en ligne. Il est dcoup en sept chapitres progressifs qui peuvent galement tre tudis de manire autonome. Le premier chapitre prsente le langage Java, explique les rgles de nommage et les bonnes pratiques adopter lors des dveloppements de projets Java EE. Le chapitre 2 est consacr la mise en place du serveur Java EE de rfrence, Tomcat, sous Windows et Linux. Les chapitres 3 et 4 explorent en dtail les servlets et les JavaServer Page (JSP), en application avec ltude de cas et le modle MVC. Le chapitre 5 prsente les bases de donnes en Java EE et dtaille la mise en place de JDBC et des technologies associes. Le chapitre 6 concerne le dveloppement Java EE laide dun framework. En accord avec les standards actuels en entreprise, Struts a t utilis pour ce livre. Cependant les explications sont valables pour dautres frameworks Java (description des outils proposs par un framework Java tant en terme de validation de donnes que dapproche MVC II). Enfin, le dernier chapitre est consacr aux techniques avances Java EE et permet de dployer un vritable projet sur un serveur en production partir dun nom de domaine. Le code li ltude de cas traite dans le livre est en tlchargement sur cette page. Lauteur propose ses lecteurs un lieu dchanges via le site www.gdawj.com qui apporte galement un certain nombre dlments complmentaires (FAQ, outils, application dploye...).

    Ce livre numrique a t conu et est diffus dans le respect des droits dauteur. Toutes les marques cites ont t dposes par leur diteur respectif. La loi du 11 Mars 1957 nautorisant aux termes des alinas 2 et 3 de larticle 41, dune part, que les copies ou reproductions strictement rserves lusage priv du copiste et non destines une utilisation collective, et, dautre part, que les analyses et les courtes citations dans un but dexemple et dillustration, toute reprsentation ou reproduction intgrale, ou partielle, faite sans le consentement de lauteur ou de ses ayants droit ou ayant cause, est illicite (alina 1er de larticle 40). Cette reprsentation ou reproduction, par quelque procd que ce soit, constituerait donc une contrefaon sanctionne par les articles 425 et suivants du Code Pnal. Copyright Editions ENI

    JavaEEGuide de dveloppement d'applications web en Java

    JrmeLAFOSSE

    Rsum

    L'auteur

    Ingnieur en informatique et diplm du CNAM, Jrme Lafosse intervient comme consultant, concepteur et formateur sur les technologies Java. Spcialiste des technologies web, il travaille promouvoir les outils et solutions Open Source pour le dveloppement de projets Internet. Il enseigne galement la plate-forme Java Entreprise Edition et la conception de projets Web en Licence et Master. Son exprience pdagogique s'allie ses comptences techniques et offrent au lecteur un guide rellement oprationnel sur le dveloppement d'applications web en Java.

    - 1 - ENI Editions - All rigths reserved

    http://www.gdawj.com/

  • Avantpropos

    LaralisationdesitesWebpassepardiffrentestapes :lanalyse,lamodlisation,lecodage,lamiseenproduction,lestestsetlamaintenance.Toutescesphasesdeconceptionsontlongues,complexesetdoiventtrematrisesendtail pourmener bien les projets Internet. Pour ce type de projet, diffrents langages de programmation sontutilisscommePHP,Ruby,Perl, .NETou Java. Javaest reconnuactuellementcomme lundesmeilleurs langagesdeprogrammationobjetpourlaralisationdeprojetsInternetcomplexesavecsonAPIspcifique,JavaEE.

    Ce guide dtaill suit une dmarche progressive et vous aidera crer des applications Web complexes etfonctionnelles.Tous lesconceptsde lacrationdunprojetprofessionnelsontabordsdansce livre,de lapriseenmaindulangage,linstallationdelenvironnement,laconfigurationdunserveurWebJavajusqulacrationetlamiseenproductiondunprojet.CetouvragepermetdepercevoirledveloppementdapplicationsWebenJavadanssaglobalit.

    Monobjectifestde fournirunguidecompletdedveloppementdapplicationsWebenJavasur lesdeuxprincipauxenvironnements de dveloppement que sont Windows et Linux, sans faire limpasse sur une partie du cycle dedveloppement.Ilsagitdexplicationsetdeconseilsconcrets,illustrsparunetudedecasralistedeboutiquedeventeenligne.

    Les lecteurs sont dailleurs invits changer via le site www.gdawj.com, vritable complment du livre puisquilpropose un exemple de lapplication dploye, un forum de questions, des outils complmentaires pour ledveloppementdapplicationsweb,etc.

    - 1 - ENI Editions - All rigths reserved

  • Organisationduguide

    Leguideestdivisenseptchapitresspcifiquesetautonomes :

    Lechapitre1(ObjectifsetspcificationsdeJavaEE)prsente le langageJava, lesrglesdenommageainsiquelinstallationdelenvironnementdedveloppement.

    Lechapitre2(LeserveurdapplicationsApacheTomcat)estconsacr lamiseenplaceduserveurJavaderfrence,Tomcat.

    Le chapitre 3 (Les JavaServer Page) aborde la programmation de Servlets avec les classes, objets etmthodes.

    Lechapitre4(LesServlets)exploreendtailledveloppementdepagesWebautraversdespagesJSP.

    Lechapitre5(Javaetlesbasesdedonnes)prsentelesbasesdedonnesenJavaainsiquelessolutionstechniquesetlesoutilsadaptslapersistancedesdonnes.

    Le chapitre 6 (Framework Java EE) est consacr ltudedun framework de dveloppement Java nommStruts.

    Lechapitre7(Techniquesavances)estddiauxtechniquesavancesendveloppementJavaEE.

    - 1 - ENI Editions - All rigths reserved

  • quisadresseceguide?

    QuevousayezpeudeconnaissancesendveloppementWebouquevoussoyezunexpertJavaEE,ceguideapourobjectifdevousprsenterendtailetdefaonexhaustive,touteslestapesderalisationdapplicationsInternetpartirdun projet concretmais facilement portable. Au cours demes tudes et demon parcours professionnel, jaitudileslangagesduWeb,linstallationdunserveurJava,lamiseenuvredunframework,lesbasesdedonnespourInternet,lesServlets/JSPetledveloppementdeprojetsmaisaucunouvrageneregroupaittouscesaspectsdeconceptionetcertainespartiesimportantesntaientpasdtailles,commesilmanquaitquelquesclsessentiellesquine sacquirentquavec lexprience. La dmarche pdagogique de ce guide est de ne pas faire limpasse surdespointsessentielsdunprojetWebcommeledploiementsurunserveurenproductionavecunnomdedomaine, lamiseenplacedunpooldeconnexionsurunebasededonnesquelconqueouencorelaconfigurationcompltedunserveurJava.Louvrageutilisepourcelaunemiseenpageadapteafindemettreenvaleurlesconceptsessentielspartirdeschmas,graphiques,etc.

    - 1 - ENI Editions - All rigths reserved

  • Lesconventions

    1.Lesconventionsduguide,deJava,decodageetlesrglesdenommage

    Danslecycledeviedunproduitlogiciel,laphasedemaintenancereprsentelamajeurepartiedutemps(environ80%).Demme,un logicielest rarementdveloppparuneseuleetmmepersonne.Cestunequipeentirequiraliseleprojetdedveloppementavectouslesavantagesmaisaussitouteslescontraintesquecelaimplique.

    Larussitedunprojetdpendbeaucoupdelhomognitdanslecodage.Cettetapeessentiellepasseparlamiseenuvredeconventionsstrictes respectespar toute lquipe impliquedans leprojet.Laplupartdesoutilsdedveloppement(IDE)proposentdesfonctionnalitspourpermettrecettehomognitmaisilexistedesrglesqueseuls les dveloppeurs doivent appliquer. Le fait de vouloir tout prix avoir un code esthtique et de faiblecomplexitpeuttreunfreinauxperformances.linverse,lacourselaperformancepeutdcoulersuruncodepeulisible.Ilrevientdoncauxdveloppeursdetrouverlebonquilibreentrelesconventionsetlescontraintesduprojet(projetaxsurlaperformance,projetOpenSource...).

    2.Lesconventionsduguide

    Toutaulongdeceguideserontutilisesdesconventionspourlardactiondesexplications,lespartiesdecode,lesrappels et les rsums. Les explications seront rdiges sous format textuel et graphique avec unmaximum declart.Lespartiesdecodeserontbiendiffrenciespar lapolicedecaractresetserontencadres.Lesschmasviendrontappuyeruneexplicationetpermettrontdexpliquersous formegraphiqueuneconvention,unchoix,unespcificationouunexemple.

    3.Lesconventionsdecodage

    Desconventionsdecodagesontutilisestoutaulongdecedocument.Pardfaut,lesconventionsdecodagepourlaplupartdesprojetsOpenSourcesuiventcesinstructions.Parexemple,silaparenthse{estaprslaconditionif,lecodenestpascorrect.

    Touslesblocsdecodedoiventcommencerparunenouvelleligne.

    public class MaClasse { public void maMethode() { if (xxx) { } } }

    Chaqueconditionnellecontientlesparenthsesouvrantesetfermantes.

    //Correct if (expression) { //le code } //Incorrect if (expression) //le code

    Uneindentationsetrouveaprschaqueinstruction.Lesnomsdesfonctionsetdesparamtres,nedoiventpasavoirdeprfixe,commencentparuneminusculeetchaquepartiedemotestenmajuscule.

    public class MaClasse { private String maChaine; public void maMethode(String monParametre) { }

    - 1 - ENI Editions - All rigths reserved

  • }

    Laversiondelapplication(ducode)estprcisedanschaquefichierdextension.java.

    @version 2.8

    Lenomdelauteurestprcis.

    @author jeromelafosse

    Chaqueimportationdepaquetage(paquet)Javaestpleinementqualifie.

    //Correct import java.util.Date; import java.net.HttpURLConnection; //Incorrect import java.util.*; import java.net.*;

    4.LesconventionsJava

    Pour utiliser efficacement le langage de programmation Java, il existe plusieurs conventions connatre et appliquer.Les instructionsJavaseterminentparunpointvirgule.LesinstructionsJavautilisentdesaccolades{}pourindiquerledbutetlafinducorps.Uncorpspeutcontenirplusieursinstructions.

    LaprsentationaveclesaccoladesalignessurlammecolonnequelepremiercaractredelinstructionJavaserautilise.Cetteprsentationajoutedeslignesdecode,maiselleestplusfacilelire.Ilestimportantdemettreenretrait(espaceoutabulation)lesinstructionsJavaquicomportentuncorps.Ilestgalementncessairedetoujoursutiliserlammemiseenretraitducode.

    Javarecourtcommetoutlangageplusieursmotscls,cestdiredesmotsrservsexclusivementaulangage.Ilneseradoncpaspossibledutilisercesmotsclscommenomsouvaleursdevariables.

    Voiciunelistenonexhaustivedecesmotscls :abstract,boolean,break,case,catch,char,class,continue,do,double,else,extends,false,final,finally,float,for,if, import,instanceof,int,interface,new,null,package,private,protected,public,return,static,super,switch,this,true,try,void,while...

    Lecodedoittresuccinct,celafacilitelamaintenanceetlalisibilitdelensemble.Ilvautmieuxdcouperparfoisdesmthodesetajouterdescommentaires.Lesrecommandationsdoiventtreappliquessurlintgralitduprojetetnon avec parcimonie. Si les rgles sont plus ou moins appliques, si le code change dun fichier lautre, lacomprhensionseradifficile.Lapplicationuniformedesrglesestungagedemaintenabilit.

    Les noms des fichiers sources portent lextension .java et le code (bytecode) gnr porte lextension .class. Lesfichiers de proprits portent lextension .properties (langues, traductions...) et les fichiers de configurationlextension.xml.Lefichierdeconstructionduprojetportelenombuild.xml(Ant)etlefichierdedescriptionduprojetestappelREADME.

    Unprojetdedveloppementutiliseplusieursrpertoires.Ilestgnralementcomposdurpertoire/srcquicontientles sources, du rpertoire /build qui contient les classes compiles, /docs qui contient la documentation du projetet/logquicontientlestracesdexcutionsetderreursduprojet.

    Souvent,pourunprojetminime,seulslesrpertoires/src,/buildet/docssontutiliss.

    Lesclassesdoiventtreregroupesenpackages(paquetagesoupaquets).

    Ilestrecommanddenepasdpasser2000lignesdecodeparfichier.Sitelestlecas,ilestimportantdoptimiserlecode,devrifiersilnexistepasderedondanceetdedcouperlesfonctionnalitsenplusieursclasses(boteoutilsparexemple).

    Il faut configurer lditeurpourque la tabulationcrivehuitcaractresespace(configurationpardfaut).Lentredansunblocimposelajoutduneindentation.Desblocsdemmeniveaudoiventdbutersurlammecolonne,cestdireavoirlammeindentation.Leslignesblanchesdoiventtreutilisespoursparerdesportionsdecodeetlesmthodes.Lesespacespeuventtreutilissenquantitmais souscertainesconditions.Lecaractreespaceest

    Fichiers

    Sources

    Formatage

    - 2 - ENI Editions - All rigths reserved

  • proscritavantlespointsvirgules,avantlescrochetsdestableauxetentreunevariableetlesoprateursdepr/postincrment.Parcontre,lespaceestautorisaprslesvirgules,avantetaprslesaccolades,avantetaprschaqueoprateur,aprslesmotsrservsdulangageetentrelenomdunemthodeetlaparenthsedesesparamtres.

    //Correct maMethode (a, b, c, d); for (i = 0; i < 100; i++) { ++count; (MaClasse)maVariable.get(i); //Incorrect MaMethode (a,b,c,d); ++ count; (MaClasse) maVariable.get(i);

    Lesnomsutilissdoiventtreexplicites,cestdireque lenomdoitexpliquer le contenude lobjet, le rlede lamthode...Lesacronymesquiapparaissentdanslesnomsdoiventtrepasssenminuscules(sauflapremirelettredupremiermot).Ilestconseilldemettrelesidentifiantsenlangueanglaisepourdesprojetsinternationaux.

    Lesnomsdespaquetagesdoiventtreenminuscules.Cesnomsdoiventtrepleinementqualifis(commeuneURL)et reprennent le nom du projet, lURL du site... En gnral, la technique consiste retourner lURL du projet.Exemple :monprojet.comdevient :com.monprojet.monpaquet

    //Correct package com.monprojet.monpaquet; //Incorrect package Com.MonProjet.MonPaquet;

    Lesnomsdesclassesdoiventtreenminuscules,hormislesinitialesdesmotsquilescomposent.

    //Correct class MaClasseFavorite; //Incorrect class maclassefavorite; class maClassefavorite;

    Lesnomsdesmthodesdoiventtreenminusculeshormis les initialesdesmotsquicomposent lesmots(sauf lapremirelettre).

    //Correct public void maMethodeFavorite() { //Incorrect public void mamethodefavorite() {

    Lesaccesseursdirects(gettersetsetters)desattributsduneclassedoiventtreprfixsdungetpourlalecturedelattributetdunsetpourlcriture.Leprfixeisdoittreutilispourlesmthodesquiretournentunboolen.

    //Correct public int getNiveau() { public void setNiveau(int niveau) { public boolean isVisible() { //Incorrect public int recupererLeNiveau() { public void ecrireLeNiveau(int niveau) { public boolean estIlVisible() {

    Nouspouvonsgalementutiliserdautresmotspour les recherches, les suppressions, lesajouts, la fermeturedeconnexions...(find,delete,add,close...).

    Nommage

    Package/Paquetage

    Classesetinterfaces

    Mthodes

    - 3 - ENI Editions - All rigths reserved

  • Lesattributsdesclasses,lesvariablesainsiquelesparamtresdesmthodesdoiventtreenminusculeshormislesinitialesdesmotsquilescomposent(sauflepremier).Lesvariablesdeboucledoiventporteruneseulelettre :i,j,k...Lessignesdollars($)etsoulignement(_)sontproscrits.

    //Correct Voiture prochaineVoiture = voitures.get(this.id + 1); float laTaille = 145.5; //Incorrect Voiture a = voitures.get(this.id + 1); float la_Taille = 145.5;

    Lescollectionsdoiventtrenommesaupluriel.

    //Correct Vector comptes; Collection banques; Object[] mesObjets; //Incorrect Vector compte; Collection banque; Object[] monObjet;

    Lesnomsdesconstantesdoiventtrecritsentirementenmajuscules.Lesparateurdemotestlecaractredesoulignement(underscore).

    //Correct static final int LOG_CONSOLE = 1; //Incorrect static final int LOGCONSOLE = 1; static final int console_Log = 1; static final int Console_LOG = 1;

    Lescommentairessontessentielsdansuncodesource.Ilspermettentdedocumenterleprojetlintrieurmmeducode source en vue de la gnration de la documentation via loutil JavaDoc. Il existe en Java deux types decommentaires :

    lescommentairesmonolignequipermettentdedsactivertoutcequiapparatsurlammeligne//

    les commentaires multilignes qui permettent de dsactiver tout le code qui se trouve entre les deuxdlimiteurs/**/.

    IlestimportantderserverlescommentairesmultilignesauxblocsutileslaJavaDocetlinactivationdeportionsde code. Les commentaires monoligne permettent de commenter le reste, savoir, toute information dedocumentationinterneauxlignesdecode.

    /* * La classe MaClasse permet telles fonctionnalits */ public class MaClasse() { // Recuperer un objet de la collection monFichier = (Fichier)fichiers.get((int)item.getIdFichier());

    Lesvariablesdoiventtredclaresligneparligne.Linitialisationdoitsefairelorsdeladclarationlorsquecelaestpossible.Lesvariablesdoiventtredclaresauplusttdansunblocdecode.Lesnomsdesmthodessontaccolslaparenthseouvrantelistantleursparamtres.Aucunespacenedoitytreinsr.

    //Correct int niveau = 10; void maMethode() {

    Attributs,variablesetparamtres

    Constantes

    Commentaires

    Dclarations

    - 4 - ENI Editions - All rigths reserved

  • //Incorrect int niveau; niveau = 10; void maMethode () {

    Lordrededclarationdesentitsducodesourcedoittrelesuivant(quiestplusoumoinsnaturel) :

    Lesattributsdelaclasse(1>statiques,2>publiques,3>protgs,4>privs).

    Lesmthodesdelaclasse(1>statiques,2>publiques,3>protges,4>prives).

    Unelignedecodenepeutcontenirquuneseuleinstruction.

    //Correct count++; i--; println("Bonjour"); //Incorrect count++; i--; println("Bonjour");

    Ordre

    Instructions

    - 5 - ENI Editions - All rigths reserved

  • DfinitionsdeJ2EE/JavaEE

    DenombreusespossibilitsexistentpourraliserdesapplicationsInternetdepuisplusieursannes.Deslangagesonttcrs,desarchitecturesetdesenvironnementsdetravailonttconuspourrpondreauxbesoinsetfaciliterlatchedesdveloppeurs.Sun(leconcepteurdeJava)adoncmisenplaceunensembledetechnologiespourraliserdesapplicationsWeb.CestechnologiessontregroupessouslenomJ2EE(Java2EntrepriseEdition),dsormaisJavaEE.

    Depuislaversion5,lechiffre2adisparupourfaciliterlacomprhensiondelaversionetnepasmlangerlechiffre2aveclenumrodeversion.

    La plateforme Java EE sappuie entirement sur le langage Java. Java EE est donc une norme, qui permet desdveloppeurs,entreprisesetSSIIdedvelopperleurpropreapplicationquiimplmenteentotalitoupartiellementlesspcificationsdeSUN.Ensimplifiant,ilestpossibledereprsenterJavaEEcommeunensembledespcificationsdAPI,unearchitecture,unemthodedepackagingetdedploiementdapplicationsetlagestiondapplicationsdployessurunserveurcompatibleJava.

    Une API est un ensemble de librairies ou bibliothques de fonctions destines tre utilises par lesprogrammeursdansleursapplications.

    Java Entreprise Edition est destin aux gros (trs gros) systmes dentreprises. Les librairies utilises fonctionnentdifficilement sur un simple PC et requirent une puissance beaucoup plus importante (notamment au niveau de lammoire).

    JavaEntrepriseEditionestapparuelafindesannes90.CettevolutionapporteaulangageJavauneplateformelogicielle robuste et complte pour le dveloppement. La plateforme Java EE a souvent t remise en cause,malutiliseetmalcomprise.DesoutilsOpenSourcesontvenuslaconcurrencer.CesremarquesetlaconcurrenceontpermisSundamliorersonproduitetdditerdesversionsdeplusenplusabouties.JavaEEneremplaceenaucuncasJ2SE.Aucontraire,J2SEestlabasedeJavaEEquiestpluscompletetquiestaxsurleWeb.LaplateformeJ2SEoffredesoutilsdedveloppementdapplicationsclient/serveur,applicationsgraphiquesfentresetApplets.

    LaplateformeJ2SEestcomposedeslmentssuivants :

    LamachinevirtuelleJava(JVM) :permetdexcuterdesapplicationsJava.Elleconstitueunepasserelleetpermetuneportabilitentrelesarchitectures(Windows,Linux,Mac...).

    LabibliothquedeclassesJava:unensembledecomposantslogicielsprtlemploi.

    Les outils de dveloppement : le compilateur javac , un interprteur Java nomm java, le gnrateur dedocumentationjavadoc,laconsoledesupervisationJconsole...LaplateformeJavaEEestuneextensiondelaplateformeJ2SE.Ellepermetundveloppementdapplicationsquivontsexcutersurunserveurdapplications.Lesapplicationsserontutilisespardesclientslgers(commedesnavigateursWeb)oubiendesapplicationslourdes(IHM).LadernireversionstabledeJavaEEestlaversionJavaEE5.0etfonctionneavecleJDK5.0et6.0.

    1.PourquoichoisirJavaEE

    Ilexisteactuellementbeaucoupdautresplatesformesdedveloppementquisontbasessurdautreslangages(C#,PHP5,.NET...).LesprincipauxavantagesdutiliserJavaEE(etdoncJava)sontlaportabilit,lindpendance,lascuritetlamultitudedelibrairiesproposes.

    Ledveloppementdapplicationsdentreprisencessitelamiseenuvreduneinfrastructureimportante.Beaucoupdefonctionnalitssontutilisesetdveloppes,lebuttantdeproduiredesapplicationssres,robustesetfacilesmaintenir. Certains services sont dailleurs rcurrents comme : laccs aux bases de donnes, lenvoi demails, lestransactions,lagestiondefichiers,lagestiondimages,letlchargement,lechargementouupload,lasupervisiondusystme...

    CestpourcelaquelarchitectureJavaEEest intressantecartousleslmentsfondamentauxsontdjenplace.Pasbesoinde concevoir une architecture , des librairies et des outils spcialement adapts.Cela ncessiterait untempsetuninvestissementconsidrables.

    Enfin, la plateforme Java EE est base sur des spcifications, ce qui signifie que les projets sont portables surnimporte quel serveur dapplications conforme (Tomcat, JBoss, WebSphere...) ces spcifications. CetteimplmentationestgratuiteetpermetdebnficierdelatotalitdelAPIsansinvestissement.LaplateformeJavaEEest la plus riche des platesformes Java et offre un environnement standard de dveloppement et dexcutiondapplicationsdentreprisemultitiers.

    - 1 - ENI Editions - All rigths reserved

  • Le fait que Java EE soit standardis a contribu son adoption par de trs nombreux diteurs de logiciels/outilsinformatique. Ces diteurs associs Sun Microsystems font partie du JCP (Java Community Process). Le JavaCommunityProcessregroupelesentreprisessuivantes :Sun,IBM,Oracle,Borland,Nokia,Sony,lafondationApache,ObjectWeb...LobjectifduJCPestdedfinirlesspcificationsdestechnologiesbasessurJava.

    ChaquedemandedemodificationestappeleuneJSR(JavaSpecificationRequest).

    2.LAPIJavaEE(JDBC,Servlets,JSP)

    LaplateformeJavaEEestcomposedeplusieursAPI(ensembledelibrairesetservices).JavaEEfaitintervenirtroistypesdecomposantslogiciels(Servlets,JSP,EJB).

    a.LesServlets

    LAPIServletfournitleslmentsncessaireslaconceptiondecomposantsWebdynamiquesaveclelangageJava.LesServletssontdescomposantslogicielsentirementcritsenJava.LesServletseffectuentdestraitementsctserveur en rponse aux requtes des clients distants. Une Servlet est charge enmmoire lors de son premierappel.Demme,ilnexistequuneseuleinstanceduneServletenmmoire,leserveurutilisealorsunthreadglobalpourtraiterlesdemandesmisesparlesclients.

    UneServletestuneclasseJava.CetteclassedoittrechargepuisinterprteparunemachinevirtuelleJava(celleduserveurdapplications).LaServletestalorsprterecevoirdesrequtesetrenvoyerdesrponses.Lorsquelapplicationouleserveursarrte,laServletestdtruite,puissoninstanceestnettoyeparleramassemiettesdelamachinevirtuelle.

    LesServletspermettentdedvelopperdespagesdynamiques,dont lecontenuestcr lavolesurdemande.Cestlecasparexemple,lorsquunclientsouhaiteobtenirlalistedesarticlesduneboutiquepouruneplagedeprix.LespagesHTMLsontalorsgnresdynamiquementenfonctiondecritresspcifiques(prix,dates,recherches...).

    UneServletestuncomposantJavaquiimplmentelinterface javax.servlet.Servlet.Cetteinterfacepermetdegrerlesrequtesduclient,dirigesverslaServletenquestion.LeserveurreoitunedemandeadresseuneServletsouslaformedunerequteHTTP.IltransmetalorslarequtelaServletconcerneparletraitementpuisrenvoielarponsefournieparcelleciauclient.LaServletestgreparleconteneurdeServletsJavaEE.LorsqueleserveurWeb reoit la requte du client, il charge la Servlet (si elle nest pas encore charge) et invoque linterfacejavax.servlet.Servletafindesatisfairelarequte.

    CycledevieduneServlet

    - 2 - ENI Editions - All rigths reserved

  • Ce type de programmation est trs proche du dveloppement CGI mais offre les outils pour grer les cookies,sessions,accsauxbasesdedonnesetautresavecuneexcellenteportabilit.

    ExempledeServletsimple :

    public class PremiereServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, java.io.IOException { } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, java.io.IOException { doGet(request, response); } }

    b.LesJSP(JavaServerPage)

    LAPIJSPpermetdedvelopperdespagesWebdynamiquesrapidementpartirdunsqueletteHTMLetdedonnesincluses directement dans chaque page. Les JSP permettent dinsrer des bouts de code Java (scriptlets)directementdanslecodeHTML.

    Dupointdevuedelastructure,uneJSPesttrsprochedunepagePHPoubienASP.UnepageJSPestunfichierquiportelextension.jspou.jspf(pourlesfragmentsdecode).

    Lors de la cration de Servlets, le but est de construire des composants capables de produire un service(essentiellementdu codeHTML).Toutefois, ceprincipeestparfois complexepourdespersonnesquine sontpashabitues laprogrammationobjetetaucode100%Java.Cestpourcesraisonsque lesdveloppeursdechezSUNontinventJSP.

    LapageJSPesttransformeenclasseJavapuiscompileenServletparleserveurdapplications.Cetraitementestralisparleserveurdapplicationsaupremierappeldelapageetchaquefoisquecettepageestmodifieparunprogrammeur.

    Cest cette tape qui ncessite un serveur dapplications Java EE, un compilateur Java et qui par consquentncessitepourlamajoritlinstallationdeJavaavecunJDKpluttquunJRE.

    CycledevieduneJSP

    - 3 - ENI Editions - All rigths reserved

  • Le rsultatde lacompilation (essentiellementducodeHTML)est renvoyauclient.Cette technologieestsimple,lgre et rapide. Les dveloppeurs de pages JSP peuvent ainsi mlanger du contenu statique et du contenudynamique.

    IlestdoncpossibledavoirdesquipesdedveloppementsparesavecunepersonnespcialistedeHTML/XHTMLetdudesignetunprogrammeurJavaquiraliselesscriptlets.LesJSPsontexcutessouslaformedeServlets,ellesdisposentdoncdesmmesfonctionnalitsquecellescietpeuventainsimanipulerlessessions,lesbasesdedonnes,lesmails...

    - 4 - ENI Editions - All rigths reserved

  • c.LESEJB(EntrepriseJavaBean)

    LesEJBsontdescomposantsmtierdistribus,cestdirequilssontinvocablesparlerseau.UncomposantEJBestuneclassequipossdedesattributsetmthodespourmettreenapplicationlalogiquemtier.LAPIEJBfournitun ensemble de services (persistance, transaction...) de gestion de composants. Il existe plusieurs (trois) typesdEJB :lesbeanssessions,lesbeansentitsetlesbeanscontrlsparmessage.

    EJBsession :ilpermetdemaintenirdesinformationssurlesclientsetlestraitementsquilsralisent.

    EJBentit :cestuncomposantpersistant,sontatestsauvegarddansunebasededonnes.

    EJBpilotparmessage :lesEJBmessagesontsemblablesauxEJBsessionmaissontinvoqusdiffremment(parlebiaisdeJavaMessageService).

    La mise en place dEJB ncessite lutilisation dun serveur dapplications capable de grer ces EJB.Actuellement,lesserveursGlassFish,JBossetJonasexistentdansledomainedulibre.LeserveurTomcatne

    permetpasdutiliserlesEJB.

    IlexisteensuiteauseindeJavaEE,laplateformedeServicesavecJDBC,JNI,JavaMail,JTA,RMI,JAASetXML.

    LAPI JDBCpermetde faciliter lobtentionde connexions JDBCversdes sourcesdedonnes (essentiellementdesbasesdedonnes,maisgalementannuaire...).LAPIfournitleslibrairiespourseconnecterauxbasesdedonnesetpourlagestiondestransactions.

    LAPI JNDI permet daccder des services de nommage ou dannuaire (LDAP par exemple). Cette API est parexempleutilisepourseconnecterunesourcededonnespourdesaccslabasededonnesoulagestiondesaccs(associeauxRealms).JNDIpermetdimplmenterunservicedenommage.LensembledesressourcesqueleserveurdapplicationsmetdispositionviacesAPIdeservices,doittreenregistravecunnomlogiqueunique,permettantauxapplicationsderecherchercetteressourcedansleserveur.

    LAPI JavaMail fournit des fonctionnalits de gestion de courrier lectronique (transfert, type de contenu, picesjointes...).JavaMailpermetlacrationetlenvoidemessageslectroniquesviaJava.CetteAPIpermetdemanipulerlesprotocolesdemessagerieInternetcommePOP,IMAP,SMTP.JavaMailnestpasunserveurdecourriermaispluttunoutilquipermetdinteragiraveccetypedeserveur.

    LesentitsBeansonttdveloppespourlemodledepersistanceenJavaEE.Cemodledecomposantsavaitde nombreux dtracteurs. Pour apporter des solutions ce problme, de nouvelles spcifications, des outils demapping objet/relationnel comme TopLink et Hibernate ont t dvelopps. Java EE apporte donc un nouveaumodledepersistancenommJPA.JPAsappuiesurJDBCpourcommuniqueraveclabasededonnesmaispermetdviterdemanipulerdirectementlesfonctionnalitsdeJDBCetlelangageSQL.

    3.LesautresAPI

    ParmilesautresAPIJavaEE,ilfautciter :

    JMS(JavaMessageService)permetdaccderunservicedemessagespourunegestionasynchronedescomposants.Lecomposantappelantposteunmessage(enarrireplan)destinationdunefiledattentedemessageshbergsparleserveurdapplicationspuiscontinuesontraitementsansattendre.

    RMI (RemoteMethod Invocation) permet de concevoir des applications distribues en Java. RMI permet lappel defonctionnalitsdistanceparlebiaisdelacommunicationrseau.

    JTA(JavaTransactionAPI)permetdemettreenplaceunegestiondestransactionsdansdesapplicationsdistribues(commit,rollback...).Leprincipedestransactionsestdeconsidrerunensembledoprationscommeuneseule.Cetypedeserviceestobligatoirepourdestraitementsbancaire.Parexemple,uneapplicationbancairequipermetderaliserdesvirementsentredeuxcomptesvadaborddbiterlepremiercompteetensuitecrditerlesecondcompte.Si le dbit puis le crdit aboutissent sans problme, alors la transaction est valide. JDBC permet de grer lestransactionssurunebasededonneslocalemaissilesdonnessontrparties,ilfaudraalorsutiliserlestransactionsJTA.JTApermeteneffetdegrerlestransactionsdistribuesquifontintervenirdiffrentesbasesdedonnes.

    JDBC(JavaDataBaseConnectivity)

    JNDI(JavaNamingandDirectoryInterface)

    JavaMail

    JPA(JavaPersistanceAPI)

    - 5 - ENI Editions - All rigths reserved

  • JCA (J2EE Connector Architecture) : ce connecteur permet Java EE dutiliser des gros systmes tels que lesmainframes.

    JAAS(JavaAuthenticationandAutorisationService)estunmcanismedescuritgrparleserveurdapplications.

    XML nest pas vritablement une API Java mais il est trs utilis pour la mise en place et la configuration desapplications.Demme,XMLestlabasedunnouveaumodedecommunicationentrelesapplicationsquiestappelWebService.Parexemple,JAXP(JavaAPIforXMLParsing)analysedesfichiersoudonnesXML,JAXRPC(JavaAPIforXMLbasedRPC)utilisedesWebServicesetJAXB(JavaAPIforXMLBinding)permetdegnrerdesclassesJavapartirdeschmasXMLouinversement.

    Actuellement,laversiondeJavaEEest5.0associelAPIServlet2.5,etlAPIJSP2.1(etApacheTomcat5.X6.X).

    - 6 - ENI Editions - All rigths reserved

  • EncodagedesapplicationsJava

    1.Prsentation

    Lesordinateurstravaillentavecdesbitsousuitesdoctets(unoctet=8bits).Leschanesdecaractres,entiers,relssont donc codes sous forme doctets. Les ordinateurs utilisent donc un procd qui consiste transformer leschanesdecaractresenoctets,associunetechniqueafinderelireleschanesdorigine.Cestceprocdquiestappelencodage.

    Ilexisteplusieursencodagesquiutilisentplusoumoins lemmenombredoctets,doncdecaractresdisponiblescomme ISO88591,ASCII,UTF8... LencodageUTF8est lepluspratiquepourchangerdes textesconstitusdecaractresUNICODE(standardduconsortiumUnicode).Ceconsortiumapourbutderpertoriertouslescaractresutilissdanslesdiffrenteslanguesetdassocierchacununcodenotsousformehexadcimal.LencodageUTF8estcompatibleaveclencodageASCIIcequiesttrspratiquelorsdesdveloppementsinformatiques.

    LorsdesdveloppementsdapplicationsJavaet/ouJavaEE, ilnestpasraredeconstaterdenombreuxproblmesdencodage des applications tant au niveau des messages prsents dans un navigateur, que des fichiers deproprits dune application ou encore de lencodage des caractres saisis au clavier. La mise en uvre duneapplicationJavancessitedonc lagestiondeplusieursparamtres.Ladifficultestquilnefautpasenoublierunseulsouspeinedeconstaterlaffichagedehiroglypheslaplaceducaractresouhait.

    2.Lesfichiers

    Lapremirecontraintevrifierestquetouslesfichiers(HTML,JSP,JSPF,XML,XSLT...)delapplicationdveloppesoient dans lencodage souhait. Pour cela, la plupart des IDE peuvent se paramtrer afin de slectionnerlencodage.AvecEclipse,nouspouvonsslectionner lencodagedans lemenuFentre Prfrences Editeurs CodagedufichiertexteetTypesdecontenu.

    3.LespagesJSPetJSPF

    IlestncessairededclarerdanschaquepageJSPouJSPFdentte lencodageutilis.Pourcela,ilfaututiliserladirectiveJSPadapte.

    ou

    - 1 - ENI Editions - All rigths reserved

  • Ilestpossiblegalementdecentraliserlencodagedanslefichierdeconfigurationetdedploiementdelapplicationweb.xmlduserveurTomcat.

    Config. de lencodage des pages JSP *.jsp UTF-8

    4.LespagesHTML/XHTML

    Il est galement important de prvenir le navigateur client de lencodage quil doit utiliser pour afficher la pageHTML/XHTML.Cettedirectiveestprciseaveclabalisemetaetleparamtrecontent.

    ...

    Ilestgalementpossibledeprciserlencodagedunefeuilledestyleexternelaidedeladirectiveplaceentoutdbutdefichier.

    @charset "UTF-8";

    5.LesfeuillesdestyleXSL

    Si des transformations XSLT sont utilises dans notre application, il est ncessaire de dclarer galementexplicitementlencodagedanscespages.

    6.CodeJava

    DupointdevueducodeJava,ilestpossibledutiliserunfiltrequivaforcerleserveurdapplicationsJavalirelesparamtresdelarequtedanslencodagesouhaitetquivarenvoyerlesrponsesaveclemmeencodage.

    package application.filters; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; public class EncodingFilter implements Filter { public static final String ENCODING = "encoding"; private String encoding; public void init(FilterConfig filterConfig) throws ServletException { this.encoding = filterConfig.getInitParameter(ENCODING); } public void doFilter(ServletRequest req, ServletResponse resp, FilterChain filterChain)throws IOException, ServletException { req.setCharacterEncoding(encoding); resp.setContentType("text/html;charset="+encoding);

    - 2 - ENI Editions - All rigths reserved

  • filterChain.doFilter(req, resp); } public void destroy() {} }

    Ilestalorspossiblededclarercefiltreauseindufichierdeconfigurationdelapplicationweb.xml.Lesfiltrestantexcutsdanslordrededclaration,cemappingdoittrelepremierdclardanslefichierdeconfiguration.

    encodingfilter application.filters.EncodingFilter encoding UTF-8 encodingfilter /*

    Lencodage peut aussi tre gr au sein dune Servlet gnrique. Chaque Servlet du projet devra alors ensuitehriterdecetteServlet.

    package application.servlets; import java.io.IOException; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public abstract class EncodingServlet extends HttpServlet { public static final String ENCODING = "encoding"; private String encoding; public void init(ServletConfig servletConfig)throws ServletException { this.encoding = servletConfig.getInitParameter(ENCODING); } public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException { req.setCharacterEncoding(encoding); resp.setContentType("text/html;charset="+encoding); } public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException { request.setCharacterEncoding(encoding); response.setContentType("text/html;charset="+encoding); } }

    7.EncodagedelaJVM

    IlestimportantdexcuterlaJVMdanslencodagevoulu.Letraitementdeschanesdecaractresdoittrelemmequelerestedelapplication.CestaulancementdelaJVM,doncaulancementduserveurJavaEE,quelencodageestspcifilaidedelargument :-Dfile.encoding=UTF-8

    AvecTomcat,cetargumentestspcifidanslefichierdelancementduserveur,catalina.sh.

    JAVA_OPTS="$JAVA_OPTS "-Dfile.encoding=utf-8"

    Ilestparfoisgalementncessairedevrifier lencodagedesURLde lapplication.AvecTomcat,cetencodageestdclarexplicitementvialattributURIEncodingsurleconnecteurCoyote.Voicilalignedufichierserver.xmlconcern :

    - 3 - ENI Editions - All rigths reserved

  • Lecodesuivantesttrsutilecarilpermetlatransformationdunechanedecaractresdansunencodageprcis.

    public static String transformStringEncoding(String init,String encodingBefore, String encodingAfter) { try { return new String(init.getBytes(encodingBefore), encodingAfter); } catch (UnsupportedEncodingException uee) { return null; } }

    8.Gestiondelencodage

    IlesttoutfaitpossibleenJavadegrerlencodageutiliser.Pourlesflotsdentreparexemple,laconnexionestraliselaidedelaclasseInputStreamReader.Lejeudecaractresutiliserpeuttrealorsprcis.Pardfaut,lejeudecaractresestfonctiondusystmedexploitationutilisetdelalocalisation(ex :fr_FRUTF8).

    Avecunflot,ilestpossibledeprciserlencodageutilis :

    InputStreamReader i=new InputStreamReader(is,"UTF-8");

    LenomdujeudecaractresutilispardfautestobtenuenprogrammationaveclamthodeSystem.getProperty()etleparamtrefile.encoding.

    package com.betaboutique.classes; public class Programmation { public static void main(String[] args) { System.out.println("Encodage : "+System.getProperty("file.encoding")); } }

    LorsdesdveloppementsWeb,ilestassezcourantquelesparamtresreusparlesmthodesHTTPGETetPOSTnesoientpasdansunformatcorrect.Lesproblmesportentalorssurlesaccents,lescaractresspciaux...Pourcela,latransformationdunencodagepeuttreforcenutilisant lesoctets.LecodecidessouspermetdetransformerunparamtrereuencaractresUTF8.

    String parametre=(String)request.getParameter("parametre"); String parametreUTF8=new String(parametre.getBytes(),"UTF-8");

    DemmepourlesenvoisdinformationsenprogrammationJavatraversdesflux,lencodageetlestransformationsdejeuxdecaractressontutiliss.

    package com.betaboutique.classes; import java.io.InputStream; import java.net.URL; import java.net.URLEncoder; public class Programmation { public static void main(String[] args) {

    - 4 - ENI Editions - All rigths reserved

  • try { //paramtre envoyer en direction du flux String parametreaenvoyer="mon paramtre"; String unautreparametreaenvoyer="un autre paramtre"; String unautreparametreeniso="un paramtre en iso"; URL url=new URL("http://www.essai.com"+"?parametre1=" +URLEncoder.encode (parametreaenvoyer,"UTF-8") +"&parametre2="+URLEncoder.encode(new String (unautreparametreaenvoyer.getBytes(), "UTF-8"),"UTF-8") +"&parametre3="+URLEncoder.encode(unautreparametreeniso,"ISO-8859-1")); //poster les informations dans le flux InputStream fluxLecture=url.openStream(); //fermer le flux fluxLecture.close(); } catch(Exception e) { System.out.println("Erreur de connexion"); } } }

    - 5 - ENI Editions - All rigths reserved

  • LesarchitecturesWeb

    1.Lestypesdarchitectures

    DanslesapplicationsWeb,lacommunicationentreleclientetleserveurestraliseselonleprotocoleTCP/IPquiestcharg du routage des donnes. Le transit des informations seffectue selon le protocole HTTP pour leWeb, lesdonnessontalorstransmisesentreleclientetleserveurviaTCP/IP.Ondistinguealorsdeuxtypesdeclients :

    Le client lger : il est aussi appel client Web car le module dexcution est alors un navigateur. LesapplicationsclientessontcomposesdepagesHTML/XHTMLvoireDHTMLaveclutilisationdulangageclientJavaScript.

    Leclientlourd:ilsagitduneapplicationcomposeduneinterfacegraphiquevolueouenmodeconsole.Dans lidal, les clients lourds communiquants ne contiennent que la logique prsentation (affichage desdonnes).Touslestraitementssontdlgusdescomposantsmtierdistants.

    IlexisteactuellementungrandnombredarchitecturesutilisespourleWeb.

    Larchitecture2tiersestcomposededeuxlments,unclientetunserveur.Cettearchitecturephysiquesimplepeuttrereprsentedecettefaon :

    Cettearchitecturepeutaussitrereprsenteavecunserveurdebasededonnes(SGBD),leschmaestalorslesuivant :

    Danscetypedarchitecture,leclientassumelestchesdeprsentationetcommuniqueuniquementavecleserveurdapplications.Leclientestditlourd.Cetypedarchitecturepeuttredvelopptrsrapidementenfonctiondelacomplexitduprojet.Ilexisteuntrsgrandnombredoutilsdedveloppementetdelangagespourlesarchitectures2tiers.

    Dupoint de vuedes inconvnients, le problmedvolutivit, demaintenanceet lamise enplace lors deprojetscomplexespeuventtrecits.

    Danslarchitecture3tiers, leclientestconstitudunsimplenavigateurInternetetcommuniqueavecleserveur.Cettearchitectureestcomposedetroislmentsoutroiscouches.Lacoucheprsentationouaffichageestleclientlgerdanslamesureoilnefaitaucuntraitement.LacouchefonctionnelleoumtierestengnralunserveurWeb.Etenfin,lacouchededonnesestlieauserveurdebasesdedonnes(SGBD).

    Lacoucheprsentation(depremierniveau)souventappeleIHM(InterfaceHommeMachine)correspondlapartievisibleetinteractive.CettepartieestralisepourleWebenHTMLengnralavecJavaScript,Flash...

    - 1 - ENI Editions - All rigths reserved

  • Lacouchemtier(desecondniveau)correspondlapartiefonctionnelledelapplication.Lesoprationsraliser, les fonctions daccs auxdonnes et les traitements sontmis la disposition des utilisateurs etinvoqusparleursrequtes.Pourfournircesservices,ellesappuieparfoissurlacoucheaccsauxdonnesetenretourrenvoielacoucheprsentationlesrsultatsquelleacalculs.

    Ladernirecouche(detroisimeniveau)grelaccsauxdonnesdusystme.Cesdonnespeuventtrestockessurlemmesystme(fichiers,fichiersXML,basededonnes,images...)ousurdautressystmes.Laccsauxdonnesesttransparentpourlacouchemtieretcorresponduniquementlaproccupationdelacoucheaccsauxdonnes.

    Dune manire gnrale cette abstraction amliore la maintenance du systme. Parmi les avantages de cettearchitecture,laflexibilitdelensemblepeuttrecite.Lapartieclientestcomposeuniquementdaffichage(pasdeprogrammation,derequtesSQL...).Defait,desmodificationspeuventtreralisesauniveauduSGBDsansquecelaapporteun impactsur lacoucheclient.Demme,par lasuite toutenouvelle technologiepeuttre introduitesanstoutremettreenquestion.Dupointdevuedveloppement,lasparationentreleclient,leserveuretleSGBDpermet une spcialisation des dveloppeurs et unemeilleure rpartition des tches et fonctions (dveloppeur demodle/designer,programmeur,administrateurdebasesdedonnes...).

    Legrosinconvnientdecemodle(etleprincipal),estlexpertisequilestncessairedavoiretquiestassezlongueobtenirpourbienmatriserchaquetiersetinterconnexions.Lescotsdedveloppementdunearchitecture3tierssontpluslevsquepourdu2tiers.

    Larchitecturentiersatpensepourpallierleslimitationsdesarchitectures3tiersetconcevoirdesapplicationspuissantes et simples maintenir. Dun point de vue thorique, cette architecture permet de solutionner lesproblmessuivants :

    Ellepermetlutilisationdeclientsriches.

    Ellesparenettementtouslesniveauxdelapplication.

    Ellefacilitelagestiondessessions.

    Elleoffredegrandescapacitsdextension.

    Une dfinition possible de ce type darchitecture est : une architecture 3tiers dans laquelle le traitement desdonnes(coucheaccsauxdonnesoumiddleware)contientluimmeplusieurscouchesmultipliantainsilestiers.

    Danscecas,lapplicationclientepeuttredveloppeavecdescomposantsgraphiques(Swingparexemple)etfaireappeldesrglesmtierEJBquiaccdentunebasededonnes.

    Il est aussi possible de trouver des applications clientes avec JSP, EJB et base de donnes. Le client est unnavigateurWeb.LespagesJSPaccdentauxrglesmtieretconstruisentlecontenuHTMLfourniaunavigateur.

    LestypesdarchitecturesenJavaEE

    - 2 - ENI Editions - All rigths reserved

  • UndrivdelarchitectureprcdenteestuneAppletclienteavecJSPetbasededonnes.Danscecas,leclientestencore un navigateur mais une Applet permet dobtenir une interface utilisateur plus complexe (mais aussi pluslourde) et plus interactive. Cette Applet peut accder au contenu produit par des JSP. Cellesci obtiennent desdonnesncessairesgrceJDBC.

    Une autre version de larchitecture prcdente est JWS (Java Web Start) avec JSP et base de donnes. CestpratiquementlemmecasquelarchitectureavecAppletsicenestqueleclientestuneapplicationtlchargeableetutilisabledemanireautonome(sansnavigateur)maisuniquementavecuneconnexionrseau.

    LederniertypedarchitecturereposesurlintgrationdeservicesWeb.UneapplicationclienteaccdeauxdonnesgrceunserviceWebprogrammenJava.

    - 3 - ENI Editions - All rigths reserved

  • Les architectures proposes par Java EE reposent sur le dcoupage des applications en plusieurs tiers auxresponsabilitsclairementspares.Lesprogrammeursvontdvelopperdescomposantsquiseronthbergsparunserveurdapplication JavaEE (Tomcat, JBoss...). Lesapplicationsdistribues (ralisessous formedecomposantsdistincts)permettentdediviserlelogicielenplusieurscouchesappelestiers(chaquecouchereprsenteuntiers).Lemodle leplus couranttant larchitecture3tiers/ntiers.Cettedivision facilite lamaintenanceet ladaptabilitduproduit.

    2.LarchitectureMVC(ModelViewController)

    LarchitectureMVCproposeparSunestlasolutiondedveloppementWebctserveurquipermetdesparerlapartielogique/mtierdelapartieprsentationdansuneapplicationWeb.Cestunpointessentieldudveloppementdeprojetscarcelapermet toute lquipedetravaillersparment(chacunpossdeses fichiers,ses logicielsdedveloppementetsescomposants).

    Cettearchitecture trouvesonoriginedans le langageSmallTalkaudbutdesannes1980,cenestdoncpasunmodle(designpattern)nouveauuniquement liJavaEE.Lobjectifprincipalestdediviser lapplicationentroispartiesdistinctes :lemodle,lavueetlecontrleur.

    DanslarchitectureMVC,nousretrouvons :

    LemodlequiestreprsentparlesEJBet/ouJavaBeanset/ousystmesdepersistances(Hibernate,objetssrialissenXML,stockagededonnesparlebiaisdeJDBC...).

    LavuequiestreprsenteparlesJSP.

    LecontrleurquiestreprsentparlesServlets.

    PrincipedefonctionnementdelarchitectureMVC

    - 4 - ENI Editions - All rigths reserved

  • 1.LeclientenvoieunerequteHTTPauserveur.CestengnraluneServlet(ouunprogrammeexcutablectserveur)quitraitelademande.

    2. La Servlet rcupre les informations transmises par le client et dlgue le traitement un composantmtieradapt.

    3.Lescomposantsdumodlemanipulentounondesdonnesdusystmedinformation(lecture,criture,misejour,suppression).

    4. Une fois les traitements termins, les composants rendent la main la Servlet en lui retournant unrsultat.LaServletstockealorslersultatdansuncontexteadapt(session,requte,rponse...).

    5.LaServletappellelaJSPadquatequipeutaccderaursultat.

    6.LaJSPsexcute,utiliselesdonnestransmisesparlaServletetgnrelarponseauclient.

    Lescomposantssontbiensrplusnombreuxmaisgalementplussimples.Leursspcificitsfontquilspourronttredveloppspardesspcialistes :lesServletsetEJBpardesdveloppeursJava,lesJSPpardesdveloppeursetWebdesigner,lesaccsauxdonnespardesspcialistesSQL...Cedcoupagepermetgalementunemaintenanceplusaisedusystme.Ainsi,lechangementdelachartegraphiqueseraoprfacilementenutilisantlesvuessanstoucheraumodleetaucontrleur.

    Afin de faciliter lutilisation du modle MVC dans les architectures Java EE, des frameworks (outils composs despcifications, librairies,outils...)dedveloppemententirementbasssurcemodleonttdvelopps(ApacheStruts/Spring).Leschmacomplexecidessousreprendunexempledemiseenplacedunetellearchitecturedansunprojetdentreprise.

    3.LesdiffrentsmodulesJavaEE

    Comme indiqu prcdemment, les architectures Java EE offrent de multiples possibilits. Il est donc ncessairedorganiserlesdiffrentslmentsduneapplicationenfonctiondeleurrle.

    LemoduleWebcontientleslmentsduneapplicationJavaEEquivontpermettrelutilisationdecetteapplicationautraversdun navigateurWeb et de toute application utilisant le protocoleHTTP. Les lments regroups dans cemoduleWeb sont les Servlets, les JSP et les ressources statiques de lapplication Internet (images, JavaScripts,fichiers statiques...). Il yagalementdesbibliothquesdynamiquesdveloppesen Java fournies sous formedefichiers.jaretquisontutilisespar lesServletset/ouJSP(manipulationdimages,defichiers...).LesmodulesWebpossdentundescripteurdedploiement, le fichierweb.xml. Lensembledes fichiersest regroupdansun fichierdextension.warsignifiantWebARchive.

    Les composants EJB sont constitus de fichiers de code Java. Il y a aussi dans cemodule des bibliothques au

    ModuleWeb

    ModuleEJB/composantsmtier

    - 5 - ENI Editions - All rigths reserved

  • format.jar.Lesmodulessontensuiteassemblsenarchivedextension.jar.

    IlestpossibledutiliserunclientricheavecuneinterfacegraphiquedveloppeenutilisantlesAPIdeprogrammationJava comme Swing et/ou AWT. Un module client permet un assemblage en classes et fournit un descripteur dedploiement.Lemoduleclientestunfichierdarchiveportantlextension.jar.

    ModuleClient

    - 6 - ENI Editions - All rigths reserved

  • Miseenplacedelenvironnement

    Linterface Java EE permet de crer des sitesWeb dynamiques avec une technologie Java. Lamise en place dunenvironnementJavaEEncessitelutilisationdunserveurdapplicationscapabledexcuterlecodeetderpondreauxrequtesdesclients.GlassFish,Jonas,JBoss,WebSphereetApacheTomcatfontpartiedecesserveursdapplicationsJava.

    Ilestgalementncessairedutiliserunenvironnementdedveloppementvolu.Ilnestpaspossiblededvelopperdemanireconfortabledescentainesdefichierssources,ladocumentation,lesfichiersdeconfigurationavecunsimplediteurdetexteetlecompilateurenlignedecommandes.

    IlexisteplusieursgrandsIDEJava :Eclipseetsesdiffrentesversions,JBuilder,NetBean...

    Eclipseest trspuissant, ildisposedunegrandepanopliedepluginspour linterfaceravecTomcat,pourmanipulerMysql,pourgrerlesfichiersXML,lesJSP,lecodeJavaScript...Enfin,pointimportant,EclipseestunprojetOpenSourcegratuit.

    Pourlaralisationdespagesetdesexemples,laversionLombozdEclipseserautilise(Eclipse+ensembledepluginspourJavaEE).CetteversioncompltedEclipseatdveloppeparleconsortiumObjectWeb.

    LinstallationseraexpliquepourunsystmeWindowsetpourunsystmeLinux.Vousremarquezalors lintrtdedvelopper en Java, tout est portable et indpendant de la plateforme de dveloppement. Nous vrifieronslinstallation complte de lenvironnement en dployant une application trs simple. Il est essentiel de testerlinstallation avec un petit projet plutt que de rencontrer des problmes ensuite lors de la ralisation dexemplescomplexes.

    1.InstallationduJDK(JavaDevelopmentKit)

    LeJavaDevelopmentKit(courammentabrgenJDK)estlenvironnementdanslequellecodeJavaestcompilpourtretransformenbytecodeafinquelaJVM(machinevirtuelleJava)puisselinterprter/lexcuter.

    La premire tape ncessaire linstallation de lenvironnement est la mise en place des bibliothques dedveloppementJava.Eneffet,avant linstallationduserveurJavaEE, ilest impratifque leJDKsoit installsur lamachineoceluiciserainstall.LeserveurdapplicationsfonctionneenJavaetadoncbesoinluiaussiduJDKpourtravailler.LeJDKfournirauncompilateurJavancessairepourletraitementdesJSP.AvantdinstalleruneversiondedveloppementJava,ilestncessairedevrifiersilesystmeactuelnepossdepasdjuneversiondeJava.

    Pourvrifiersi lesystmeactuelpossdeuneversiondeJava, il fautouvrirune invitedecommandesMsDOSetlancerlacommande :java -version

    NouspouvonsvoirquelaversionindiquedanscetexempleestJava1.6(ougalementappele6.0).LecompilateurutilisestJ2SE(ilauraittaussipossibledutiliserJavaEE).Sicettecommandenindiqueaucunrsultat,cestqueleJDKnestpasinstallouquelavariabledenvironnementPATHnestpascorrectementconfiguresurlesystme.

    Les variables denvironnement sont des raccourcis utiliss par Windows et Linux pour dsigner certainsdossiers(excutables)dudisquedur(ex :pasbesoindesaisir/usr/bin/java/javac,leraccourcijavacsuffit).

    Une fois lesvariablesdenvironnement correctement configures, lexcutiondevosapplications serabeaucoupplussimple.

    Nous pouvons galement obtenir des informations sur lAPI Java en utilisant sous Windows le panneau deconfiguration.LicneJavaouvreunefentreaveclesongletssuivants :GnralMisejourJavaScuritetAvanc.

    a.InstallationsousWindows

    Unefoiscesvrificationseffectues,linstallationdeJavaEEseffectuesimplementenexcutantlefichiertlchargsurlesitedeSunMicrosystems(http://java.sun.com/).Leprogrammedinstallationdmarrepuisindiquelestapessuivre.

    - 1 - ENI Editions - All rigths reserved

  • LapagesuivantepermetdetlchargerleJDK/JavaEE/JavaSE :http://java.sun.com/javase/downloads/index.jsp

    La version Windows Platform denviron 160 Mo permet dinstaller lenvironnement de dveloppement complet.Linstallation ne pose pas de problme particulier, il suffit de double cliquer sur lexcutable tlcharg etlinstallationseffectuetouteseuleaprsavoirindiqulerpertoiredinstallationdesbibliothques.

    1Lancementdelinstallation

    2Acceptationdesconditions

    - 2 - ENI Editions - All rigths reserved

  • 3Choixdurpertoiredinstallation

    4Findelinstallation

    b.InstallationsousLinux

    LinstallationsousLinuxncessiteletlchargementdelalibrairieauformat.bin.

    Toujourssurlammepage,ilestpossibledetlchargerlaversionduJDKpourLinux.

    LapagesuivantepermetdetlchargerleJDK/J2EE/JSE :

    https://sdlc5b.sun.com/ECom/EComActionServletjsessionid=BB61072B1EEB17E1232E99D84013FACB

    LaversionLinuxPlatform JavaEESDKdenviron150Mopermetune installationsousLinux.Linstallation sous

    - 3 - ENI Editions - All rigths reserved

  • LinuxestunpeudiffrentedecellesousWindows.Aprsletlchargementdelabibliothque,ilestncessairedecopiercellecidansunrpertoiredelibrairiesLinux(engnral/usr/local/src).

    Exempleaveclejdk1.6.0 :

    #mv /home/jdk-1_6_0-linux-i586.bin /usr/local/src

    Puis,ilfautrendrecepaquetexcutable.

    #chmod +x jdk-1_6_0-linux-i586.bin

    Linstallationpeuttreensuitelance.

    #./jdk-1_6_0-linux-i586.bin

    Toutlerpertoireestalorsdcompactdans/usr/local/src.

    IlfautmaintenantdplacerlerpertoireduJDKdansunrpertoirefinaldinstallation(engnral/usr/local).

    #mv /jdk.6.0_00 /usr/local

    Ilfautensuitesedplacerdanslerpertoire/usr/local.

    #cd /usr/local

    Unlien(raccourci)appeljdkpeuttrecr,ilseraplussimpledaccsquelenomcompletjdk.6.0_00.

    #ln -s jdk.6.0_00 jdk

    IlresteplacerlesdroitssurlesfichiersdelalibrairieJava.

    #chmod 755 jdk.6.0_00

    Javaestdsormais installmais il fautencoreparamtrer lesvariablesdenvironnementpourpouvoir lancer lescommandes directement (sans indiquer le chemin complet, ex : /usr/local/jdk/java). Dans ltat actuel nous nepouvonspaslancerJavadirectement :

    #java -version (not found...)

    Ilexisteplusieurssolutionspourcela :

    1.diterlefichier/etc/profileetajouterlalignesuivantedanslefichier.

    PATH=$PATH:/usr/local/jdk/bin

    2.diterlefichier/root/.bashrcetajouterlalignesuivantedanslefichier.

    export PATH=$PATH:/usr/local/jdk/bin

    3.diterlefichierdelutilisateurconnectetajouterlalignesuivantedanslefichier.

    export PATH=$PATH:/usr/local/jdk/bin

    4.ExporterlavariabledenvironnementPATHdirectementenlignedecommandedansunshell.

    export PATH=$PATH:/usr/local/jdk/bin echo $PATH (pour vrifier)

    Pourquelesmodificationssoienteffectives,ilfautfermertouteslesfentresetouvrirunnouveauterminal.

    Attention, par la suite nous raliserons un script de dmarrage de Tomcat (serveur dapplications) quiexporteraluimmelesvariablesdenvironnement.

    VouspouvezdsormaisvrifierquelinstallationduJDKsousLinuxestoprationnelle.

    - 4 - ENI Editions - All rigths reserved

  • #java -version

    - 5 - ENI Editions - All rigths reserved

  • InstallationduserveurdapplicationsJavaEE(Tomcat)

    UnserveurJavaEEestaussiappelserveurdapplications(applicationssignifiantapplicationsWeb).LutilisationdunserveurJavaEEestobligatoirepourledveloppementdepagesWebdynamiquesenJavaEE.

    UnserveurHTTPclassiquereoitdesrequtesHTTPetrenvoiedesrponsesmaisilneconnatpaslesServlets,lesJSP...IlestdoncessentieldutiliserunprogrammeappelmoteurdeServletsquiestcontenudansleserveurJavaEEetquipermetdepalliercemanque.Danslaplupartdescas,leserveurJavaEEcontientgalementunserveurHTTPmais il nest pas aussi puissant que les serveurs spcialiss du monde informatique pour les contenus statiques(Apache).

    Ilexisteungrandnombredeserveursquirpondentcettenorme(Tomcat,WebSphere,JRun,JBoss,GlassFish...).Nous utiliserons le serveur ApacheTomcat de la fondation Apache. Il est trs important de comprendre que cesserveurs servent uniquement fournir une plateforme dexploitationde lAPI Java EE fournie par SUN.Donc, si leserveur rpond la norme et au standard Java EE, le choix na alors que peu dimportance. La diffrence seraobservedunpointdevuerapidit,scurit,facilitdutilisation,monteencharge,gestionoupasdesEJB...

    LesversionsmajeuresdeTomcatcorrespondenttoutesuneimplmentationderfrencedestechnologiesServletetJSP.VoiciunbrefrappeldesrelationsentrelesversionsdestechnologiesJavaEEetlesversionsdeTomcat.

    Commeindiquprcdemment,ilestimpratifqueleJDKsoitdjinstallavantlinstallationduserveurdapplications.

    LeserveurTomcat6estdisponibleenlibretlchargement.LesversionsbinairesdeTomcatsontenfaitconstituesdeclassesJavaetsontdoncportablesentrelessystmesdexploitationetlesplatesformesmatrielles.

    Ilexistetroisformatsdarchivesbinaires :

    LesarchivesauformatZIP :unefoislerpertoiredcompress,leserveurestdirectementoprationnelaprsconfiguration.Ceformatestintressantpourlesadministrateurscarilpermetunemisejourrapideencasdechangementdeversionduserveur.Deplus, laconfigurationdusystmenestpasmodifie, linstallationesttransparente.

    LesarchivesauformatTAR.GZ :cestleformatlepluscommunsouslessystmesLinux.

    Les installeurs Windows : au format EXE permettent une installation partir dun assistant qui ralisegalementlaconfiguration.CestlamthodelaplussimplepourinstallerTomcatsurlesystmedeMicrosoft.

    1.Quelleversionchoisir?

    Tomcat 6.X est une adaptation de Tomcat 5.5 pour Java 5.0 (JDK 1.5) avec des amliorations concernant lesperformances. La version 1.5 de Java a vu apparatre de nombreusesmodifications dans le langage. Tomcat 6.XrequiertdoncauminimumunemachinevirtuelleJava1.5pourfonctionnercorrectement.

    Pourleguideetleprojet,laversiondeTomcatutiliseestlaversion6.0.16.

    LinstallationdeTomcatversion6supposeletlchargementdelabibliothquedepuislesitedelafondationApacheladressesuivante :http://tomcat.apache.org/

    Lasectiondownloadpermetdechoisirlaversionadaptenosbesoins.LesliensCoresontalorsutilissauformatsouhait (WindowsService Installerparexemple)afinde tlchargerTomcatpourWindows (http://apache.miroirfrancais.fr/tomcat/tomcat6/v6.0.16/bin/apachetomcat6.0.16.exe).

    Une fois la bibliothque tlcharge, il est demand dindiquer le chemin de la JVM (Java Virtual Machine) sur lesystme(dolimportancedinstallerleJDKavantleserveur).

    SpcificationsJ2EE APIServlet APIJSP ApacheTomcat

    J2EE1.2 2.2 1.1 3.X

    J2EE1.3 2.3 1.2 4.X

    J2EE1.4 2.4 2.0 5.X

    JavaEE5.0 2.5 2.1 5.X6.X

    InstallationsousWindows

    - 1 - ENI Editions - All rigths reserved

  • Tomcat6utiliseuncertainnombredeportsTCP/IPpourfonctionner.Ilfautdoncsassurerquecesportsnesontpasdjutiliss:Port8080 :portduconnecteurHTTPTomcat,Port8005 :portdarrtduserveur,

    Port8809 :portduconnecteurJK.

    LinstallationaveclinstalleurWindowspermetdecrerlesentresdanslemenuDmarrerdeWindowsainsiquunservice pour Tomcat permettant, si ncessaire, le dmarrage de celuici au lancement du systme. Linstalleurpropose galement de crer un utilisateur Tomcat pour administrer et grer les applications (un superadministrateur).

    1Lancementdelinstallation

    2Acceptationdesconditions

    - 2 - ENI Editions - All rigths reserved

  • 3Crationdelutilisateur(UserName :admin,Password :admin)

    4Suitedelinstallation

    - 3 - ENI Editions - All rigths reserved

  • 5Findelinstallation

    Aprslinstallation,lefonctionnementduserveurpeuttretestenlanantlemoniteurTomcatsitudanslemenudmarrer.Lemoniteurselancedanslesystray(barredestchesctdelhorlogeWindows)avecuneicnerouge.Leservicedemonitoringestlancmaisleserveurpasencore.PourrellementlancerleserveurTomcat,ilfautsoitdoublecliquersurlicnesoitfaireunclicdroitetstartservice.

    Danscettefentredemonitoring,TomcatpeuttredmarrencliquantsurStart,stoppavecleboutonStop...Lesautresongletsdelafentrepermettentdegrerleslogs,leJDKassociauserveur,lelancementaudmarragedelamachine,lesoprationsdarrtduserveur...

    Afindevrifierque leserveurestcorrectement installetoprationnel (capabledexcuterdesServletsetpages

    VrifierqueleserveurJavaEEestactif

    - 4 - ENI Editions - All rigths reserved

  • JSP),nouspouvonslancerunnavigateuretsaisirladressesuivante :http://localhost:8080/

    Lenomlocalhostcorrespondladresselocaledelamachine(leserveurdelamachinelocale)etleport8080estleportHTTPpourTomcat.

    Suivantleserveurutilis(Tomcat,JRun...)lefonctionnementestidentique,seulleportdaccsHTTPchange(8080,8200...).LelienTomcatManagerdumenupermetdegrerlesdiffrentesapplicationsdployessurleserveur.Uneauthentificationestncessaire.Lescoordonnes(identifiantetmotdepasse)correspondentcellessaisieslorsdelinstallationduserveur(UserName :admin,Password :admin).

    Il peut tre intressant dinstaller la partie administration de Tomcat. Pour cela, il faut tlcharger le ZIPAdministrationWebApplication(http://tomcat.apache.org)etdcompressercefichierdanslerpertoiredinstallationde Tomcat. Il sera alors possible daccder la partie administration du serveur ladresse suivante :http://localhost:8080/admin.

    Pourvrifier le fonctionnementduserveur,nouspouvons lancer lesexemplesprsents,pardfaut,sur leserveuravecdesServletsetdesJSP.

    PourlinstallationsousLinux,voirlechapitreLeserveurdapplicationsApacheTomcatconsacrTomcat.

    - 5 - ENI Editions - All rigths reserved

  • Installationdelenvironnementdedveloppement(IDE)Eclipse

    1.Prsentation

    Eclipseestlenvironnementdedveloppement(spcialispourlelangageJava)quiserautilisdanscetouvrage.Lechoix dEclipse repose essentiellement sur sa gratuit, sa facilit dutilisation, sa puissance de dveloppement etsurtout ses nombreux plugins (bibliothques additives). Il existe actuellement beaucoup de versions dEclipse debase(versions2.1,3.X).LaversionutilisedanscetouvragecorrespondEclipse3.3Europa.

    2.Installation

    Eclipse a t dclin en plusieurs versions spcifiques pour des dveloppements orients. Par exemple, pour ledveloppement Java EE, la version Lomboz dEclipse dveloppe par le consortium ObjectWeb(http://www.objectweb.org/)estactuellement lune des plus pousses et stables (parseurXML, syntaxe JSP,CSS,HTML,XHTML...).

    LaversionutilisedeLombozregroupeEclipseetlespluginspourledveloppementJavaEE.

    Laversiontlchargeestlasuivante :http://lomboz.objectweb.org/downloads/drops/R3.3200710290621/

    IlexisteuneversionpourWindowsetuneautrepourLinux.Ilestimportantdetlchargerleprojetcomplet(LombozCompleteInstallation)afindedisposerdunsystmerobusteetstable.

    Linstallationneposepasdeproblmeparticulier.Lefichiertlchargauformat.zipdoittredcompressdanslerpertoireonoussouhaitonsinstallerEclipse/Lomboz.Commepourleserveurdapplications,ilestimportantdebieninstaller avant lIDE un JDK Java. Lors de linstallation dEclipse, il sera alors demand de prciser le rpertoiredinstallationduJDK.

    SiaulancementdeWindowsnousobtenonsunefentrederreurdecetype : JVMTerminated.Exitcode=1..., il fautalorssupprimerlerpertoire.metadataquisetrouvedanslerpertoiredesprojetsdEclipse(Workspace)etrelancerlIDE.

    Lefichiertlchargauformat.tar.gzdoittrecopidanslerpertoiredessources.

    #cp lomboz.tar.gz /usr/local/src

    Ilfautensuitedzipperetdtarrercettearchive.

    #gunzip lomboz.tar.gz

    Unrpertoirenommlombozestalorscr.Ilfautdplacercerpertoiredans/usr/local.

    #mv -r lomboz /usr/local/lomboz

    Ilfautenfinpositionnerdesdroitscorrectssurlesfichiers.

    InstallationsousWindows

    InstallationsousLinux

    - 1 - ENI Editions - All rigths reserved

  • #chown -R tomcat:tomcat /usr/local/lomboz

    NouspouvonsensuitelancerlIDEEclipse.

    #/usr/local/lomboz/eclipse&

    Le lancement dEclipse est donc effectu en tapant la commande shell adapte (depuis le rpertoire dinstallationdEclipseouaveclechemincomplet).

    #eclipse -vm /usr/local/jdk

    CettecommandepermetdelancerEclipseenprcisantlerpertoiredinstallationduJDK.Pardfaut,lesprojetssontstocks dans le rpertoire workspace situ dans le rpertoire dEclipse. Il est galement possible de modifier ceparamtreavecloptiondata.

    #eclipse -data /home/lafosse/mesprojets

    3.LespluginsEclipse

    Un plugin est un composant logiciel additionnel qui permet un logiciel principal dapporter de nouvellesfonctionnalits.IlexisteunemultitudedepluginsplusoumoinsintressantsetfiablespourEclipsequisontclasssparcatgorie(J2EE,graphiques...)cetteadresseURL:http://www.eclipseplugincentral.com

    4.LancementdEclipseetparamtrageduserveurJavaEE(Tomcat)

    Au lancementdEclipse,unsplashscreen(crandattente)estaffichetpermetdechargerenarrireplan les trsnombreuseslibrairiesdelenvironnement.

    Ilfautensuitevaliderleworkspace(rpertoiredetravail)etlenvironnementsouvre.

    - 2 - ENI Editions - All rigths reserved

  • EclipsepossdeunplugindveloppparlasocitSYSDEOquipermetdegrerleserveurdapplicationsTomcat.Ceplugin permet de disposer dune barre doutils et de dmarrer, arrter et redmarrer Tomcat directement depuisEclipse. Linstallation est trs simple, il suffit de tlcharger le plugin EclipseTomcat cette adresse :http://www.eclipsetotale.com/tomcatPlugin.html

    IlestimportantdechoisirlepluginquicorrespondlaversiondEclipseinstalle.Pourlutilisationdeceguideetledveloppementduprojet,lepluginutilisesttomcatPluginV321.zip.

    Unefoisletlchargementtermin,ilfautdcompressercefichierdanslerpertoiredespluginsdEclipse(/lombozeclipe3.3/plugins/).

    AvantlinstallationdunnouveaupluginEclipse,ilestimportantdefermerlenvironnementdedveloppement,dinstallerlepluginetderelancerlenvironnement.

    Lorsdupremierlancement,ilestimportantdeparamtrercorrectementlIDEavecleserveurJavaTomcatetdevrifierleJDKutilis.PourcontrlerTomcatdepuisLombozetviterdetoujoursrechargerlespages,dmarrer/arrterTomcataveclemenudmarrer,ilfautraliserlesoprationssuivantes :MenuWindowsPreferencesTomcat.

    Dans la fentreprincipale, il faut indiquer la versiondeTomcatutilise (Version6.x), le rpertoiredinstallationdeTomcatet lesdclarationsdecontextes.Lesdclarationsdecontextespermettentdeprcisersiunseulfichierestutilispourdclarer lesapplicationsousiaucontraire, ilyaunfichierparapplication.Ilestprfrabledutiliserunfichierparapplicationoucontextepourdesraisonspratiquesdemaintenabilit.

    InstallationduplugindegestionduserveurTomcat

    - 3 - ENI Editions - All rigths reserved

  • Dans la fentre Application Tomcat Manager, il faut vrifier que lURL est bien http://localhost:8080/manager etindiquerlidentifiantetlemotdepasseTomcat(ceuxutilisslorsdelinstallationduserveur,pardfaut :UserName :adminPassword :admin).

    Enfin,linstallationdelenvironnementesttermineenvrifiantlacompatibilitetlaversionduJDKutilisparEclipse :WindowsPreferencesJavaCompiler.

    - 4 - ENI Editions - All rigths reserved

  • Danslafentre,ilestvisiblequelecompilateurJavaJDKutilisestlaversion6.0(JDK1.6).NouspouvonsdsormaisrelancerEclipseetobserverlanouvellebarredoutilspropose.

    5.Enrsum

    Ce chapitre nous a prsent les conventions utilises dans ce guide et au sein de Java ainsi que la gestion delencodageenJava.

    LaplateformeJavaEEatexpliqueendtailainsiquesesservicesassocistelsquelesServlets,JSP,EJB,JDBC...Dansuntroisimetemps,lesarchitecturesWebonttprsentesafindemontrerlapertinencedunchoixphysiqueavantledveloppementdunprojet.

    Enfin, lenvironnement Java EE a t mis en place avec linstallation du JDK Java, du serveur dapplications, delenvironnementdedveloppementetduparamtragedelensemble.

    - 5 - ENI Editions - All rigths reserved

  • QuestcequeTomcat?

    1.Prsentationetdfinition

    ApacheTomcatest leserveurdapplicationsJavaduprojet Jakartade la fondationApache.Ceserveur libre,souslicenceApachepermetdexcuterdesapplicationsWebdveloppesaveclestechnologiesJava(Servlets,JSP...).

    ApacheTomcattrouvesesoriginesautoutdbutdelapparitiondestechnologiesServletsetJSPJavalorsqueSunMicrosystemsdcidededonnerlecodedesonserveurJavaWebServerlafondationApache(1999).Aujourdhui,TomcatestpourSunMicrosystems,leserveurderfrencepourlestechnologiesJavaEEServletetJSP.TomcatestunmoteurdeServletsfiable,volutifetadaptlutilisationprofessionnelle.Ilestactuellementutilisdanslemondeentieretmisenapplicationauseindedomainestrsvaris.

    2.LafondationApache

    LeserveurWebApacheatdveloppparRobMcCoolen1994.LapremireversiondeceserveurWebestrenduedisponibleenAvril1995souslenomdApache(APatchyServer).Aujourdhui,leserveurWebApacheestleserveurleplusutilisdelaplante.En1999,lesdveloppeursloriginedApachefondentlApacheSoftwareFoundation.Cetteorganisationbutnon lucratif dveloppedenombreuxprojetset logiciels libres (le serveurTomcat,des librairiespourledveloppementInternet,leserveurWebApache,desbibliothquesdebalises...).

    3.LeprojetJakarta

    Jakarta est un des trs nombreux projets de la fondation Apache. Jakarta divise ses projets en trois grandescatgories :

    lesserveursdapplications

    lesbibliothques,outilsetAPI

    lesframeworks.

    LeserveurdapplicationsTomcatappartientlapremirecatgoriedesprojetsApache.Parmilesautresprojets,ilya :

    JMeter :outildemesuredeperformancesdesapplicationsWeb

    Log4J :bibliothquedegestiondesfichiersjournaux(logs)ettracesdeprogrammation

    Struts :leframeworkdedveloppementWebenJavaleplusclbre

    ANT :loutildautomatisationdesapplicationsWeb

    Commons :unensembledebibliothquesdeprogrammationJava.

    Actuellement,leprojetTomcataprisunetelleampleurquilnestplusconsidrcommeunsousprojetJakarta(delacatgorieserveursdapplications)maiscommeunprojetcompletdnommApacheTomcat.

    4.volutionsdeTomcat

    LapremireversiondeTomcatestlaversion3.XquiestlimplmentationdestechnologiesServlets2.2etJSP1.1.CetteversionatconuepartirducodesourcedonnparSunMicrosystemslafondationApache.partirde2000,leserveuratcompltementmodifietdonnealorsnaissancelaversion4.X.LeserveurpossdealorsunnouveaumoteurdeServletsbaptisCatalina(Servlets2.3etJSP1.2).

    Tomcat5.XestapparurcemmentetimplmentelesServlets2.4etJSP2.0.Cetteversionapportedesnouveautsauniveaudumonitoring(intgrationdeJMXJavaManagementExtension)ainsiqueplusieursoptimisations(mmoire,

    - 1 - ENI Editions - All rigths reserved

  • configurationduserveur...).Tomcat5.XintgrelesupportdelaversionJava5.0.LadernireversiondeTomcat6.XpermetlutilisationdeJava6.0.CetteversionreposesurlesServlets2.5etJSP2.1.

    Le serveur JakartaTomcat est dveloppdepuis sespremiresversionsen Java. LesapplicationshbergesparTomcat sont ellesmmes crites en Java, lintgration est alors totale et robuste. Aujourdhui, la version 6.X deTomcatsaittirerprofitdesamliorationsapporteslaplateformeJavaSE,notammententermedeperformance.

    - 2 - ENI Editions - All rigths reserved

  • InstallationdeTomcat

    1.Quelleversionchoisir?

    Actuellement, Tomcat propose une version 6.X stable qui est supporte par la majorit des environnements dedveloppement.Laversion6.XdeTomcatutiliselaspcificationJavaEE5ainsiquelAPIServlet2.5etlAPIJSP2.1.CestcetteversiondeTomcatquiserautilisetoutaulongdeceguideetquiestparfaitementgreparEclipsepourlesoprationsdedmarrage,darrtetde redmarrageduserveur.LeserveurTomcat6.Xestdisponibleen libretlchargementsurlesiteInternetdApachecetteadresse :http://tomcat.apache.org

    2.InstallationsousWindows

    Pour linstallation sous Windows, vous pouvez vous rfrer au premier chapitre de ce guide de dveloppementdapplicationsWebenJava.Ladmarchesuivreestexpliqueendtailavecuneprogressiontapepartape.

    3.InstallationsousLinux

    Commeindiqudanslepremierchapitredeceguide,leserveurdapplicationsabesoindunJDKJavapourfonctionnercorrectement.IlestdoncncessairedavoirinstallunJDK1.5ouJDK1.6fonctionnelavantdeprocderlinstallationduserveurTomcat.LaversiondeTomcatutilisedansceguideestapachetomcat6.0.16etpeuttretlchargecetteadresse :http://tomcat.apache.org/download60.cgi.

    Lorsdelinstallation,nousallonsprparerleserveurdefaoncequilpuissedialoguerparlasuiteavecleserveurWeb.LesystmeLinuxutilistoutaulongdeceguideestuneversionDebian(Etch)stable.

    Avanttoutechose,ilestncessairedemettrejourlespaquetsinstalls.

    #apt-get update #apt-get upgrade

    Apacheserautilisparlasuitelorsdudploiementdunexemplecompletsurunserveurenproduction.

    Les serveurs dj installs sur le systme sont dsinstalls afin de paramtrer lensemble de manire stable etuniforme.

    #apt-get remove --purge apache #apt-get remove --purge apache2 #apt-get remove --purge apache-perl #apt-get remove --purge apache-ssl

    Nousallonsensuite,dtruirelesrpertoiresdesprcdentesinstallations.

    #rm -rf /etc/apache #rm -rf /etc/apache2 #rm -rf /etc/apache-ssl #rm -rf /etc/apache-perl

    NousprocdonslinstallationduserveurWebApache(1.3ou2.0auchoix).

    #apt-get install apache

    LtapesuivanteconsisteinstallerleJDK1.5ouJDK1.6Java.IlexistedetrsfortesdpendancesdelaplateformeJavaEE5etTomcat6.XavecJava5.IlestdoncimpratifdinstallerunserveurTomcat6surunJDK5.0auminimum.

    PourlinstallationdujdksousLinux,vouspouvezvousrfrerauchapitreObjectifsetspcificationsdeJavaEEdeceguidededveloppementdapplicationsWebenJava.

    Vrifierlespaquetsinstalls

    MiseenplaceduserveurWebApache

    InstallationduJDK1.5/1.6

    - 1 - ENI Editions - All rigths reserved

  • LinstallationdeTomcatpartirdunearchiveestassezsimple.IlestncessairedetlchargersurlesitedApacheTomcat larchive du serveur au format .bin. La version utilise pour ce guide est la suivante : apachetomcat6.0.16.tar.gz.

    Aveclaversion6.0.XdeTomcat,lapartieadministrationnestpasinclusemaisfaitpartieduneoption.Ilestdonc important de tlcharger galement la partie administration du serveur : apachetomcat6.0.16

    admin.tar.gz.

    Aprsletlchargement,ilfautcopierlarchivedanslerpertoiredessourcesLinux(/usr/local/src).

    #cp apache-tomcat-6.0.16.tar.gz /usr/local/src

    Ilfautensuitedtarrerlarchivedanslerpertoire/usr/local.

    #tar -xzf apache-tomcat-6.0.16.tar.gz -C /usr/local

    IlfautmaintenantcrerunlienpourrfrencerTomcatdirectement.

    #cd /usr/local #ln -s apache-tomcat-6.0.16 ./tomcat

    IlseradoncpossiblederfrencerTomcatdecettemaniresanssesoucierdelaversionutilise.

    #cd /usr/local/tomcat

    Dsormais, ilestncessairedecrerunutilisateursystme,ddiTomcatetdindiquerquecetutilisateurest lepropritairedeTomcat.

    #groupadd tomcat #useradd -g tomcat -d /usr/local/tomcat tomcat #chown -R tomcat:tomcat apache-tomcat-6.0.16 #chmod 770 apache-tomcat-6.0.16

    Leserveurdebaseestdsormaisoprationnel.Nouspouvonsalorsvrifiersonfonctionnementenlanantleserveuretenouvrantunnavigateurladressesuivante :http://localhost:8080/.

    #/usr/local/tomcat/bin/startup.sh

    Pourunfonctionnementcorrectetafindviterdepositionnerlesvariablesdenvironnementchaquedmarrageoudanslesfichiersspcifiques,ilestncessairedecrerunscriptdedmarrageetdarrtdeTomcat.

    #! /bin/bash # LAFOSSE JEROME NAME="apache-tomcat6.0.16" #variables denvironnement TOMCAT_HOME=/usr/local/tomcat CATALINA_HOME=/usr/local/tomcat JAVA_HOME=/usr/local/jdk CATALINA_OPTS="-Dfile.encoding=iso8859-1" TOMCAT_USER=tomcat LC_ALL=fr_FR #exporter les variables export TOMCAT_HOME CATALINA_HOME JAVA_HOME CATALINA_OPTS TOMCAT_USER LC_ALL cd $TOMCAT_HOME/logs case "$1" in start) echo -ne "Demarrer $NAME.\n" /bin/su $TOMCAT_USER $TOMCAT_HOME/bin/startup.sh ;; stop) echo -ne "Arreter $NAME.\n" /bin/su $TOMCAT_USER $TOMCAT_HOME/bin/shutdown.sh

    InstallationdeTomcat6.0.X

    - 2 - ENI Editions - All rigths reserved

  • ;; *) echo "Usage : /etc/init.d/tomcat {start|stop}" exit 1 ;; esac exit 0

    Ilestaussipossibledemodifierlgrementlescriptafindegrerlapartieredmarrageduserveuretainsidviterderaliserdesarrts/dmarragespourunsimpleredmarrage.

    ... restart) echo -ne "Redemarrer $NAME.\n" /bin/su $TOMCAT_USER $TOMCAT_HOME/bin/shutdown.sh sleep 7 /bin/su $TOMCAT_USER $TOMCAT_HOME/bin/startup.sh ;; ...

    Il est ncessaire de copier ce script dans le rpertoire ddi aux services de la machine Linux et de le rendreexcutable.

    #cp tomcat /etc/init.d/ #chmod 755 /etc/init.d/tomcat

    Lepropritairedecescriptdoittrelesuperutilisateurrootcarcestleseulutilisateurquialedroitdedmarrerdesservices.

    #chown root:root /etc/init.d/tomcat

    Nouspouvonsdsormaistesterlefonctionnementduserveurenutilisantlescommandessuivantes :

    #/etc/init.d/tomcat start #/etc/init.d/tomcat stop

    Pour activer le script au dmarrage du systme afin de lancer Tomcat ds lamorage du systme, il est possibledutiliserlacommande :#chkconfig - -add /etc/init.d/tomcat

    cestadedelinstallationleserveurTomcatestoprationnel.Ilestdsormaispossibledelancerunnavigateuretdeseconnectersurlapagedaccueilduserveurladressesuivante:http://localhost:8080/

    Ilestsouventtrsutiledesuivrelestraceslorsdundmarrageouarrtduserveur.Demme,lesfichiersjournauxpermettentderenseignerlesadministrateurssurlesproblmesdeconnexionauSGBD,lesexceptions,lestracesdeprogrammation...LesfichiersjournauxdeTomcatsontstocksdanslerpertoire :/usr/local/tomcat/logs.

    Unebonnehabitudeestdouvrirenpermanenceuneconsoleaveclacommandesuivantequitraceentempsrellefichierdelogsduserveur.

    #tail -f /usr/local/tomcat/logs/catalina.out&

    Suivrelesfichiersjournaux

    - 3 - ENI Editions - All rigths reserved

  • LenomdonnauservicedeTomcat6.0.X(moteurdeServlets)estCatalina.

    4.MiseenplacedelapartieadministrationdeTomcat

    Pardfaut,lapartieadministrationduserveurnestpasinstalle.SinouscliquonssurlelienTomcatAdministrationouquenousaccdons ladressesuivante :http://localhost:8080/admin/ lemessagesuivantestaffich :Tomcatsadministrationwebapplicationisnolongerinstalledbydefault.Downloadandinstallthe"admin"packagetouseit.Nousallons donc procder linstallation de la partie administration en utilisant la librairie apachetomcat6.0.16admin.tar.gz.

    IlestncessairedecommencerlinstallationendtarrantlarchivedanslerpertoiredessourcesLinux.

    #tar -xzf apache-tomcat-6.0.16-admin.tar.gz /usr/local/src

    Lerpertoireapachetomcat6.0.16vatrecr.Ilfautalorscopiertoutlecontenudecerpertoire(quipossdeplusdefichiersquelaversiondorigine)danslerpertoiredinstallationdeTomcat.

    #cd /usr/local/src/apache-tomcat-6.0.16 #cp -r * /usr/local/tomcat/

    Leserveurestpresqueoprationnel,ilfautjusteremettrelesbonsdroitssurlesfichiersetrpertoiresetredmarrerleserveur(arrtpuisdmarrage).

    #chown -R tomcat:tomcat /usr/local/apache-tomcat-6.0.16 #chmod 770 apache-tomcat-6.0.16 #/etc/init.d/tomcat stop #/etc/inid.t/tomcat start

    Nouspouvonsdsormaisnousconnecterladressesuivantehttp://localhost:8080/admin/maisilestncessairedecrerunutilisateurmanagerTomcat.

    Pourcela,ilestncessairedditerlefichier :/usr/local/tomcat/conf/tomcatusers.xml.

    #vi /usr/local/tomcat/conf/tomcat-users.xml

    Lalignesuivanteestajoute,ellepermetdecrerunutilisateuraveclidentifiantadminetlemotdepasseadminpuisonredmarreleserveur.

    #/etc/init.d/tomcat stop #/etc/init.d/tomcat start

    En fait, lapartieadministrationdeTomcatestuneapplication/webapp fournie sous formede fichiers .tarou .gz.Laseulediffrenceavec lesautreswebappsestque leprojetnestpas livrsous la formedune

    archive.wardirectementdployable.Ilfautdonccopierlesfichiersdeconfigurationaubonendroit.

    Pour viter certains problmes au dmarrage du serveur, il est ncessaire dditer lefichier /usr/local/tomcat/conf/server.xmletdemettreencommentaire la lignesuivantequiestappeleAPR

    pour Apache Portable Runtime et qui empche parfois Tomcat de fonctionner correctement :

    5.AugmenterlammoirealloueTomcat

    Tomcatestdveloppen langageJavaetcommetoutprogrammequiutilisece langage, ilestassezgourmandentermedemmoire.IlestdoncparfoisncessairedaugmenterlammoirealloueTomcatafinquilpuissecompilerplus rapidement les pages et rpondre au plus vite aux requtes clients (mme en phase de dveloppement unserveurrapideestplussouple).

    SousWindows

    - 4 - ENI Editions - All rigths reserved

  • SousWindows,lammoirealloueTomcatpeuttreparamtreaveclaconsoledegestionsituedanslesystray.IlfautouvrirlongletJavaetparamtrerleschampsInitialmemorypooletMaximummemorypool.Pourlutilisationdeceguideetdesesexemples,200MoserontallousTomcat.

    Une autre solution pour la gestion de la mmoire alloue Tomcat est dutiliser Eclipse et longletWindows Preferences.Dans lapartie rserveTomcat, ilestpossibledeprciser lammoire initiale (Xms)et lammoiremaxi(Xmx).Danscetexemple,200MosontallousTomcat.Ilestimportantdenepasallouertropdemmoireparrapportauxpossibilitsdelamachineafindviterdesblocageslorsdedploiements/codages.

    Pour augmenter la mmoire alloue Tomcat sous Linux, il est ncessaire dditer le fichier deconfiguration/usr/local/tomcat/bin/catalina.shetdajouterlalignesuivanteendbutdefichier.Danscetexemple,2GodeRAMsontallousTomcatpourunserveurenproduction.

    JAVA_OPTS="-Xms2048m -Xmx2048m"

    SousLinux

    - 5 - ENI Editions - All rigths reserved

  • CouplerTomcatetleserveurWebApache

    1.Prsentation

    Sinousnesouhaitonspasinstallerunserveurenproduction,cettepartieestalorsfacultative.Eneffet,ellenepermetpasdamliorerlenvironnementdedveloppementmaiselleestrecommandepourundploiementsurunserveurenproduction.

    Dans une architecture en production, il est recommand dutiliser un serveur Web en frontal dun serveurdapplications. Ces recommandations sont galement appliques dans le cas de lutilisation dun conteneur WebcommeTomcat.LutilisationdunserveurWebenfrontalestncessairepourdesraisonsdeperformance,descuritetdeconfigurabilit.

    Performance :lemoteurHTTPdeTomcatestbeaucouppluslentquelemoteurHTTPdunserveurWebddi cette tche. Le serveurWeb permet de dlivrer les contenus statiques comme les pagesHTML, le codeJavaScript, les images du site, les feuilles de style... Tomcat sera utilis alors pour servir uniquement lescontenusdynamiquesenJava.

    Scurit :leserveurWebestutilisenfrontaletisoleleconteneurWebdInternet.Leconteneurestalorsauplusprsdesdonnesetilestmoinssollicitpourdesservicessimples.

    Configurabilit :unserveurWebcommeApachedisposeduneplusgrandepalettedeservices(pointdevueHTP)queTomcat(.htaccess,gestiondesdroits,urlrewriting,alias,annuaire...).

    2.UnconnecteurpourlintgrationduserveurWeb

    LintgrationdunserveurTomcatavecunserveurWebsefaitautraversdunconnecteurconfigurauseindeTomcatetduneextensionajouteauserveurWeb.UnconnecteurTomcatestuneclasse Javaqui supporteunprotocolerseauspcifiqueetpropritaire.LalibrairiedextensionduserveurWebestchargedynamiquementparleserveurWeblorsdesondmarrageetpermetundialogueentrelesdeuxserveurs.Plusieursconnecteursexistentcommelemodulemod_jserv pour le serveur JServ et lemodulemod_webapp pour Tomcat 4.X. Cesmodules sont dsormaisabandonnsauprofitduconnecteurJK.

    LeconnecteurJKutiliseleprotocoleAJP(ApacheJServProtocol)danssaversion1.3(AJP13).Ceconnecteurestplusperformant mais il offre galement le support de plusieurs systmes dexploitation, de plusieurs serveurs Web(Apache,IIS,LotusDomini)etduprotocoleHTTPS.CeconnecteurestaujourdhuilarfrencepourlecouplagedunserveurdapplicationsavecunserveurWeb.

    a.Fonctionnement

    LeconnecteurJKutilisedoncleprotocoleAJP13etncessitelinstallationdumodulemod_jkpourfonctionneravecApache.LeconnecteurJKpermetainsidutiliserleserveurWebenfrontaletdedlguercertainestchesauserveurTomcat.

    Les requtes des clients sont envoyes au serveur Web Apache qui retourne alors directement les contenusstatiquescommelesimages,JavaScript,pagesHTML,...Pourlesrequtesavecducontenudynamique,lemodulemod_jkduserveurWebestalorssollicitetdlguecertainestchesauserveurdapplicationsTomcat.

    LaconfigurationdeTomcatavecunserveurWebutiliselanotiondeworkeroutravailleur.UntravailleurestliuneinstancedeserveurTomcat.UntravailleurestcaractrisparunnomdhteouuneadresseIPetunnumrodeport(commeunesocket/prise).LetravailleurAJP13reprsenteuneinstancedeTomcatenfonctionnementetilestutiliscommepluginpour leserveurApache.Lemodulemod_jkagitalorscommeunrouteurderequtesvers leserveurTomcat.

    - 1 - ENI Editions - All rigths reserved

  • b.Installationdumodulemod_jk

    LextensiondApachequisupporteleconnecteurJKestlemodulemod_jk.Cemoduleestlivrsousformedebinaires(oucodesource).

    Lemodulemod_jkfonctionnesurleport8009deTomcat.Pardfaut,lefichierdeconfigurationdeTomcatserver.xml propose un connecteur AJP13 qui fonctionne sur le port 8009 :

    Avantde commencer linstallation, il fautmettreenplace sousLinuxDebian, lepaquetapachedev quipermetdecompilerlesmodulesdApache.

    #apt-get install apache-dev

    LinstallationdeTomcat6.XavecuneintgrationpourunserveurWebnerequiertaucuneconfigurationparticulire.Pourutilisermod_jk, il fautun connecteur compatible configurdans le fichierserver.xml de linstancede serveurTomcat 6.X. Cette configuration existe dsormais par dfaut avec Tomcat 6.X et propose un connecteur quifonctionnesurleport8009.Ensuite,ilestncessairedetlchargerleconnecteur(ladernireversion)surlesitedApacheTomcat(http://tomcat.apache.org).Leliensuivantestutilis :TheApacheJakartaTomcatConnector.Pourceguide, cest la version jakartatomcatconnectors1.2.15src.tar.gz du connecteur qui a t utilise. LinstallationcommenceencopiantlabibliothquesourcedanslerpertoiredessourcesLinux.

    #cp jakarta-tomcat-connectors-1.2.15-src.tar.gz /usr/local/src

    Ensuite,larchiveestdtarr(e):

    #tar -xzf jakarta-tomcat-connectors-1.2.15-src.tar.gz

    Il faut ensuite compiler le fichier source prsent dans le rpertoire /usr/local/src/jakartatomcatconnectors1.2.15src/jk/native.

    #./configure -with-apxs=/usr/bin/apxs #make

    Loption withapxs permet de prciser lemplacement de la commande apxs qui est utilise pour construire lesmodulesdApache.Unfichiersourcecompilvaalorstregnr.CefichiersourceestalorscopidanslerpertoiredeslibrairiesApache.

    #cp apache-1.3/mod_jk.so.0.0.0 /usr/lib/apache/1.3/mod_jk.so

    Ilfautalorspositionnerlesdroitscorrectssurlemodule.

    #chown root:root /usr/lib/apache/1.3/mod_jk.so #chmod 644 /usr/lib/apache/1.3/mod_jk.so

    c.Configurerlemodulemod_jk

    IlnousresteconfigurerlefichierdegestiondApachepourquilchargedynamiquementlorsdesondmarragelemodulemod_jk.Pourcela,ilfautditerselonlaversiondApachelefichierhttpd.confoumodules.confetajouterleslignessuivantes :

    LoadModule jk_module /usr/lib/apache/1.3/mod_jk.so JkWorkersFile /etc/apache/workers.properties JkLogFile /usr/local/tomcat/logs/mod_jk.log JkLogLevel warn

    Lapremireoprationpermetderaliserlechargementdumodulemod_jkdansleserveurApache(LoadModule).LadirectiveJkWorkersFilepermetdespcifierlemplacementdufichierdeconfigurationdumodule.LadirectiveJkLogFileprciselemplacementdunfichierjournalrservaumoduleetladirectiveJkLogLevelindiqueletypedemessagesenregistrsdanscefichier.

    Il ne restemaintenant plus qu configurer le serveurWebApache et crer le fichierworkers.properties. Il fautcommencerparditerlefichierdeconfigurationdApache/etc/apache/httpd.confpuisajouterleslignessuivantespournotrehtevirtuel.

    - 2 - ENI Editions - All rigths reserved

  • ServerName monserveur.com #les parties statiques de mon application sont gres par Apache Alias /images /usr/local/tomcat/webapps/monapplication/images Alias /css /usr/local/tomcat/webapps/monapplication/css DocumentRoot /usr/local/tomcat/webapps/monapplication #les requtes ne sont transmises Tomcat que pour les servlets et JSP JkMount worker1 JkMount worker1 #pages daccueil autorises DirectoryIndex index.html index.htm index.jsp

    Vousremarquezqueleserveurseracapablededfinirlapageindex.jspcommepagedaccueildelapplication.Demme, tous les contenus autres que lesServlets (extension .do)et les JSP (extension .jsp) seront traits par leserveurWebquiestplusappropri.

    La directive JkMount est trs importante car cest elle qui permet au serveur Apache daccder aux applicationsTomcat.Ellepermeteneffet,despcifieruntravailleurpourlaccsaucontexte.Ilyauradoncuneredirectionderequtesutilisateurdestinationdutravailleur.Ladirective JkUnMountpermetderaliser linverseetdoncdenepasredirigerlesrequtesutilisateursdestinationderessourcesparticulires.

    Exemple :

    JkUnMount /usr/local/tomcat/webapps/monapplication/mesimages/*.gif

    DautresdirectivesdApachesontutilisablesaveclemod_jk.JkAutoAliaspermetderaliserunaliasdurpertoiredeTomcatsurlerpertoirededonnesApache,JkLogStampFormatpermetdegrerleformatdeladatedanslefichierjournal dumodule, JkExtractSSL permet de transmettre les informations SSL vers le serveur Tomcat (taton pardfaut)...

    d.Crerlefichierdeconfigurationdutravailleur

    Une fois le fichier de configuration dApachemodifi, il faut ensuite crer le fichier de configuration du travailleurindiquparladirectiveJkWorkersFiledanslefichierdApache.CefichierpermetdegrerlacommunicationentreleserveurWebetleserveurTomcat.Lefichierutilisn