01 - Servlets-JSP-Taglibs - FR Essential - V1.1

download 01 - Servlets-JSP-Taglibs - FR Essential - V1.1

of 50

Transcript of 01 - Servlets-JSP-Taglibs - FR Essential - V1.1

  • 8/3/2019 01 - Servlets-JSP-Taglibs - FR Essential - V1.1

    1/50

    Servlets &

    JavaServerPages

    EssentielEssentiel

    www.supinfo.com

    Copyright SUPINFO. All rights reserved

    Campus Booster ID :

    Version 1.0

  • 8/3/2019 01 - Servlets-JSP-Taglibs - FR Essential - V1.1

    2/50

    Sommaire

    1. INTRODUCTION ............................................................................................................................ ........ .3

    1.1. PRSENTATION.............................................................................................................................................3

    2. LES SERVEURS DAPPLICATIONS J2EE ..........................................................................................5

    2.1. PRSENTATION.............................................................................................................................................5

    2.2. FONCTIONNEMENT........................................................................................................................................ 5

    2.2.1. Les requtes ........................................................................................................................................5

    2.2.2. Configuration ............................................................................................................................ ........ .7

    2.2.3. Compilation de servlets et tests .................................................................................................. ........7

    3. LES SERVLETS ......................................................................................................................................10

    3.1. PRSENTATION...........................................................................................................................................10

    3.1.1. Avantages ................................................................................................................................... ......10

    3.1.2. Inconvnients ....................................................................................................................................11

    3.2. IMPLMENTATIONDEBASE........................................................................................................................... 11

    3.2.1. Structure fondamentale ........................................................................................................ ......... ...11

    3.2.2. Cycle de vie ........................................................................................................................... ......... ..12

    3.2.3. Lire la requte ................................................................................................................................. .14

    3.2.4. crire la rponse ............................................................................................................................. . 15

    3.3. IMPLMENTATIONAVANCE..........................................................................................................................16

    3.3.1. Les cookies ............................................................................................................................ ......... ..16

    3.3.2. Les sessions ............................................................................................................................. ........ .19

    3.3.3. Linterface SingleThreadModel........................................................................................................20

    3.3.4. Utilisation du ServletContext............................................................................................................21

    4. LES JAVA SERVER PAGES ...................................................................................................... ......... .22

    4.1. PRSENTATION...........................................................................................................................................22

    4.2. ELMENTSDEBASEDUSCRIPTING..................................................................................................................224.3. LESOBJETSIMPLICITESEN JSP .....................................................................................................................23

    4.4. EXEMPLEDUTILISATIONAVECUNFORMULAIRE............................................................................................... 24

    4.5. ELMENTSDACTION : INCLUSIONSDESCRIPTSETBALISES JSP: ........................................................ ........ ....26

    4.6. DIRECTIVES...............................................................................................................................................29

    4.6.1. Directives de pages ................................................................................................................. ........ .29

    4.6.2. Directives dinclusions .................................................................................................................... .29

    4.6.3. Directives des tag-libs ..................................................................................................................... .30

    4.7. LESBALISESPERSONNALISES (TAGLIB) ........................................................................................................ .30

    4.7.1. Prsentation ...................................................................................................................... ........ .......30

    4.7.2. Utilisation de taglib prdfinies ............................................................................................ ......... ..31

    4.7.3. LAPI JSP Custom Tag .....................................................................................................................35

    5. INTERACTIONS ENTRE JSP ET SERVLET ....................................................................................46

    5.1. POURQUOIFAIREDESINTERACTIONSENTRELES JSP ET SERVLET........................................................................46

    5.2. A PARTIRDUNE SERVLET........................................................................................................................... 46

    5.3. A PARTIRDUNSCRIPT JSP ............................................................................................................. ........ ....47

    5.4. TRANSMISSIONDESDONNESSUPPLMENTAIRES...............................................................................................47

    5.5. APPLICATIONDUMODLE MVC ...................................................................................................... ......... ..48

    6. HBERGEURS GRATUITS ..................................................................................................................50

  • 8/3/2019 01 - Servlets-JSP-Taglibs - FR Essential - V1.1

    3/50

    Essentiel Servlets & JavaServerPages 3 / 50

    1.Introduction

    1.1.Prsentation

    De nos jours, les sites Internet ne se limitent plus des contenus statiques, identiques dunutilisateur lautre. Il devient ncessaire de pouvoir mettre disposition des internautes uncontenu personnalis variant en fonction de leurs besoins, leur permettant ainsi daccder linformation demande et de pouvoir interagir avec celle-ci et celles des autres utilisateurs.

    Les Servlets et les JSP constituent la solution offerte par Sun en ce qui concerne la crationdapplications Web dynamiques.

    Contrairement aux langages de scripts simples o se mlangent couches mtier, prsentation etaccs aux donnes, les Servlets/JSP permettent ici une architecture plus claire, dtache etmodulaire en incitant le programmeur sparer ces couches.

    Pour une programmation optimise, une application Web doit tre fonde sur une architectureMVC (Model-View-Controller).

    La couche prsentation (View) correspond aux pages Web affiches au niveau du client (browser,applet, application propritaire ).

    Ces pages peuvent tre statiques ou dynamiques. Dans le dernier cas, elles sont le rsultat duncode excut ct serveur. La programmation de cette couche peut tre ralise par un serveurdapplication J2EE laide des composants suivants :

    Les Servlets Java

    Les Java Server Pages

    Les JavaBeans

  • 8/3/2019 01 - Servlets-JSP-Taglibs - FR Essential - V1.1

    4/50

    Essentiel Servlets & JavaServerPages 4 / 50

    Les Tag Librairies

  • 8/3/2019 01 - Servlets-JSP-Taglibs - FR Essential - V1.1

    5/50

    Essentiel Servlets & JavaServerPages 5 / 50

    2.Les serveurs dapplications J2EE

    2.1.Prsentation

    Il existe de nombreux serveurs dapplications mais chacun deux prsente des avantages et desinconvnients. Ils sont, en effet, adapts diffrentes utilisations.

    Certains sont exclusivement spcialiss dans le dveloppement de Servlet/JSP (Tomcat, Resin,Jetty, WebSphere Express et Weblogic Express) tandis que dautres englobent lensemble des

    spcifications J2EE (JBoss, Jonas, Oracle 9iAS, WebSphere Application Server, WeblogicPlatform).

    Lors du choix dun serveur applicatif, on va videmment prendre en compte son prix. Si lamajorit dentre eux sont payants, il en existe tout de mme qui sont tout fait comptitifs en opensource ; Tomcat, Jetty, JBoss, Jonas ou Orion.

    Robuste et stable, Tomcat est le serveur standard pour le dveloppement Servlet/JSP. Nous lavonsdonc choisi pour les diffrents exemples du cours.

    2.2.Fonctionnement

    2.2.1.Les requtes

    Une requte HTTP de base

    Une requte HTTP est effectue par un navigateur Web (appel aussi client) auprs dun serveurWeb afin de rcuprer le contenu dune page Web.

    Les diffrentes tapes du processus sont les suivantes :

    Le navigateur se connecte au serveur

    Le navigateur envoie sa requte au serveur Le serveur cherche la page demande (la rponse) Le serveur commence envoyer le contenu de la page rponse (ou une page derreur) Le navigateur affiche la page au fur et mesure quil la reoit

    Une fois le transfert termin, le navigateur ferme la connexion

    Remarque : Dans le cas dune requte simple (vers une page html par exemple) aucun moteur deservlet nintervient pour la gnration du rsultat.

    Une requte sur un serveur Java

    Le serveur Web doit saccompagner dun module supplmentaire qui grera les servlets. Celui-ciest appel moteur de servlets ou conteneur de servlets . Ce module est soit intgrdirectement au serveur Web soit sous forme de moteur indpendant. Nous expliquerons ci-aprs la

  • 8/3/2019 01 - Servlets-JSP-Taglibs - FR Essential - V1.1

    6/50

    Essentiel Servlets & JavaServerPages 6 / 50

    diffrence entre ces deux technologies. Dans notre exemple, nous allons prendre le cas o notremoteur de servlets est indpendant (afin de mieux comprendre la distribution des tches entre lesdeux composants).

    Les diffrentes tapes du processus sont les suivantes :

    Le navigateur se connecte au serveur et envoie sa requte Le serveur dtecte que lon veut un accs une servlet et transfre donc la requte au

    moteur de servlets

    Le moteur vrifie que la servlet est instancie Si cest le premier appel, le moteur cre une instance de la servlet et appelle la mthode

    init() de celle-ci

    Le moteur appelle ensuite la mthode service() de la servlet. Cette mthode reoit deuxobjets en paramtres :

    o Le premier reprsentant la requte du cliento Le deuxime reprsentant la rponse donner ce client

    Le moteur retourne le rsultat gnr au serveur web qui le renvoie au client. Le client affiche la page et ferme la connexion

    Lors des appels suivants aucune instance ne sera cre puisque le moteur utilise toujours la mme.Dans le cas de plusieurs appels synchrones (et dune servlet gnrique) le moteur cr pour chaqueappel un thread particulier qui gnrera le rsultat pour lappel associ.

    Moteur de Servlets

    o Mode AutonomeUn moteur de servlet autonome est un moteur qui est totalement indpendant, c'est--dire quilcontient galement un serveur Web. Toutes les requtes passent par le moteur de servlet, quellesappellent une page statique basique ou une servlet.

    Ce mode est surtout utilis lorsque lon utilise uniquement des servlets ou que lon souhaite lestester (lors de dveloppement en local par exemple).

    Mode Li au serveur web

    Le moteur de servlet est le plus souvent li au serveur Web. En effet, dans la majorit des cas, les

    servlets sont couples avec les JSP ou tout autre type de pages accessibles via ce serveur Web. Lefait que le moteur soit indpendant du serveur Web permet doptimiser les temps de rponses carle moteur nest sollicit que pour le traitement des servlets (et non pour toutes les requtes).

    Cependant la plupart des moteurs de servlet peuvent tre utiliss aussi bien en mode autonomequen mode li.

  • 8/3/2019 01 - Servlets-JSP-Taglibs - FR Essential - V1.1

    7/50

    Essentiel Servlets & JavaServerPages 7 / 50

    2.2.2.Configuration

    Apache Tomcat

    Pour indiquer quels dossiers sont partags sur le serveur vous devez crer un Context Path surle fichier de configuration du serveur : server.xml .

    Ce fichier permet de spcifier une multitude dinformations concernant le paramtrage du serveur,cependant nous ne nous attarderons que sur les spcifications de base pour lutilisation de servletet JSP.

    Il vous permet notamment de configurer diffrents noms dhtes ( host ) afin de spcifierdiffrents paramtres pour chacun deux.

    Voici le contenu dune balise host de base pour la configuration de localhost (hte par dfaut).

    Llment principal retenir ici est la balise : Context . En effet cest elle qui va permettre dedfinir des Context Path et donc de partager des dossiers de votre disque dur.

    Dans lexemple ci-dessus nous dfinissons 2 Context qui sont mapps sur des dossiers locaux.

    Le premier : localhost est mapp sur : C:\www_root\localhost\ .

    Le second : localhost2 est mapp sur : C:\www_root\localhost2\ .

    Vous pourrez accder ces deux context depuis votre navigateur web via les adresses :http://localhost:port/localhost/ et http://localhost:port/localhost2/.

    Le port est dfini dans le fichier de configuration du serveur (par dfaut il est gal : 8080).

    2.2.3.Compilation de servlets et tests

    Nous allons dans cette partie utiliser une servlet la plus basique qui puisse exister. Elle affichera

    simplement un Hello World lors de son appel par le client.

    Voici son code :

  • 8/3/2019 01 - Servlets-JSP-Taglibs - FR Essential - V1.1

    8/50

    Essentiel Servlets & JavaServerPages 8 / 50

    import java.io.IOException;

    import java.io.PrintWriter;

    import javax.servlet.GenericServlet;

    import javax.servlet.ServletRequest;

    import javax.servlet.ServletResponse;

    public final class HelloServlet extends GenericServlet {

    publicvoidservice (ServletRequest req, ServletResponse res)

    throws IOException {res.setContentType("text/html");

    PrintWriter pageWriter = res.getWriter();

    pageWriter.println("");

    pageWriter.println("");

    pageWriter.println("Hello World");

    pageWriter.println("");

    pageWriter.println("");

    }

    }

    Compilation

    Si vous souhaitez excuter la compilation partir dune ligne de commande et du compilateurjavac du JDK vous devrez vrifier que votre variable denvironnement : CLASSPATH contientbien un chemin pointant vers les fichiers JAR des servlets standard (librairies).

    Ensuite vous navez qu excuter la commande :

    javac HelloServlet.java

    Le compilateur vous cre un fichier de classe quil faudra mettre un endroit prcis en fonction dumoteur de servlets que vous utilisez.

    Dploiement

    Pour utiliser votre servlet il faut maintenant la dployer.

    o Apache Tomcat

    Nous allons dployer la servlet basique pour lexemple.

    Tout dabord, il faut que vous ayez au moins un context path sur votre serveur (nous utiliserons

    le context : localhost).

    Voici larborescence que lon doit utiliser pour faire fonctionner les servlets :

    /=> Racine du context

    /.classpath => Fichier de dfinissions des chemins aux librairies/WEB-INF/classes => Dossier qui contient les packages et servlets

    /WEB-INF/lib => Dossier qui peut contenir des librairies externes

    /WEB-INF/web.xml => Fichier de configuration de lapplication

    /work/=> Dossier de travail pour le moteur de servlet

    Nous plaons donc notre fichier : HelloServlet.classdans le dossier : /WEB-INF/classes/.

  • 8/3/2019 01 - Servlets-JSP-Taglibs - FR Essential - V1.1

    9/50

    Essentiel Servlets & JavaServerPages 9 / 50

    Nous devons maintenant indiquer au moteur de servlet que nous souhaitons utiliser ce context en

    tant que web-application . Cela se fait via le fichier web.xml.

    Voici ce que doit contenir au minimum notre fichier pour que notre servlet puisse fonctionner :

    Web.xml de base

    Fichier xml de dfinition dune application Web-apps de base.

    HelloServlet

    HelloServlet

    HelloServlet

    /servlet/Hello

    Nous pouvons remarquer que nous spcifions que cest une web-app par le biais de la balise :

    Nous indiquons alors que cette web-app contient la servlet HelloServlet qui correspond la classeHelloServlet(.class).

    Et finalement nous mappons le path : servlet/Hello la servlet. Cela nous permet alorsdaccder au rsultat de la servlet via ladresse : http://localhost:8080/localhost/servlet/Hello

    Remarque : il faut bien respecter lordre des balises, cela signifie que vous ne pouvez pas mettre

    une balise suivie dune balise puis nouveau une balise.En effet, il nest pas certain que tous les serveurs parsent correctement ce genre de fichier.

    http://localhost:8080/localhost/servlet/Hellohttp://localhost:8080/localhost/servlet/Hello
  • 8/3/2019 01 - Servlets-JSP-Taglibs - FR Essential - V1.1

    10/50

    Essentiel Servlets & JavaServerPages 10 / 50

    3.Les Servlets

    3.1.Prsentation

    Les servlets reprsentent lalternative dans le monde Java la programmation des CGI (CommonGateway Interface). Cest une classe Java qui, charge dynamiquement, permet daccrotre lescapacits dun serveur Web et de rpondre des requtes dynamiquement. Le fait quellessexcutent dans une machine virtuelle Java (JVM) sur le serveur, leur assure une portabilitcomplte et une scurit accrue.

    Contrairement aux applets, les servlets nimposent pas au client davoir le support de Java car elles

    sexcutent ct serveur.

    3.1.1.Avantages

    Les servlets ont normment davantages compars aux simples CGI. En effet, les servlets peuventtre toutes gres par des threads spars au sein du mme processus ou par des threads dansplusieurs processus rpartis sur diffrents serveurs.

    Lautre gros avantage des servlets est quelles sont portables dun systme dexploitation lautremais aussi dun serveur Web lautre.

    Voici une liste non exhaustive des avantages :

    Efficacito

    Semi compileso Rsidenteso Multithreads

    o Gestion du cache

    o Connexions persistantes (pour les bases de donnes par exemple)

    Pratique

    o Gestion des cookies

    o Suivi de session

    o Simplification pour la manipulation du protocole HTTP

    o Portables (sur tous les systmes dexploitations supportant Java)o Il existe un grand nombre de solutions gratuites

    Puissance

    o Communication bidirectionnelle avec le serveur Web

    o change de donnes via URIo Partage de donnes entre servletso Chanage de servlet (inclusion de servlet dans une autre )

  • 8/3/2019 01 - Servlets-JSP-Taglibs - FR Essential - V1.1

    11/50

    Essentiel Servlets & JavaServerPages 11 / 50

    3.1.2.Inconvnients

    Le seul inconvnient des servlets est quelles sont limites en matire dinterface graphique carelles sexcutent ct serveur. Cependant il est tout fait possible de les coupler destechnologies telles que Flash, Applet Afin de rendre le contenu et les donnes beaucoup plus

    interactives.

    3.2.Implmentation de base

    3.2.1.Structure fondamentale

    Nous avons vu prcdemment comment installer et configurer un serveur Web et un moteur deservlets. Nous allons maintenant nous attarder sur le concept mme des servlets avec leurconception proprement dite.

    Interface Servlet

    Pour quune classe reprsente une servlet, il faut imprativement quelle implmente linterfaceServlet (du package javax.servlet) directement ou indirectement. Cette interface oblige implmenter les mthodes suivantes :

    La mthodepublic void init(ServletConfig cfg) La mthodepublic void service(ServletRequest req, ServletResponse res) La mthodepublic void destroy() La mthodepublic ServletConfig getServletConfig()

    La mthodepublic String getServletInfo()

    Nous tudierons ces mthodes en dtail ci-dessous.

    Remarque : les trois premires mthodes reprsentent le cycle de vie dune servlet.

    Lutilisation de linterface Servlet nest pas trs courante. En effet diffrentes classes abstraites ontt dveloppes afin de simplifier la tche au dveloppeur.

    Classe GenericServlet

    Cette premire classe est la plus basique. Elle appartient elle aussi au package javax.servlet. Ilvous suffit tout simplement, dans une classe fille, dimplmenter la mthode : publicvoidservice(ServletRequest req, ServletResponse res).

    Voici un exemple de servlet implmentant cette classe :

    import java.io.IOException;

    import java.io.PrintWriter;

    import javax.servlet.GenericServlet;

    import javax.servlet.ServletRequest;

    import javax.servlet.ServletResponse;

  • 8/3/2019 01 - Servlets-JSP-Taglibs - FR Essential - V1.1

    12/50

    Essentiel Servlets & JavaServerPages 12 / 50

    public final class HelloServlet extends GenericServlet {

    publicvoidservice(ServletRequest req, ServletResponse res)

    throws IOException {res.setContentType ("text/html");

    PrintWriter pageWriter = res.getWriter();

    pageWriter.println("");

    pageWriter.println("");

    pageWriter.println("Coucou");

    pageWriter.println("");

    pageWriter.println("");

    }

    }

    Classe HttpServlet

    Cette classe est un peu plus volue et davantage oriente dveloppement Web. Elle est cependant

    inclue dans le package :javax.servlet.http. De mme que pour la classe prcdente, nous pouvonssimplement implmenter la mthode : public void service(ServletRequest req, ServletResponseres) cependant une alternative souvre nous. Comme le protocole HTTP permet de transmettredes donnes de diffrentes manires (GET ou POST), cette classe possde les mthodes syrapportant. Cela permet dimplmenter les mthodes indpendamment des mthodes que lonsouhaite utiliser.

    La mthode public doGet(HttpServletRequest req, HttpServletResponse res) est appelelors dune requte de type GET.

    La mthode public doPost(HttpServletRequest req, HttpServletResponse res) estappele lors dune requte de type POST.

    Vous pouvez galement trouver dautres mthodes public doXxx(HttpServletRequest req, HttpServletResponse res) avec Xxx = (Put, Delete, Options )

    Remarque : si vous ne souhaitez pas diffrencier le type de mthode utilise pour la requte, vouspouvez soit utiliser la classe GenericServlet, soit nimplmenter que la mthode service() dansvotre servlet.

    De plus vous pouvez remarquer que nous utilisons lobjet Http[ServletResponse/ServletRequest]

    la place de ServletResponse/ServletRequest.

    3.2.2.Cycle de vie

    Nous avons pu voir que le moteur de servlet nutilise quune seule instance par servlet et que

    chaque requte cliente a pour rsultat un nouveau thread qui est transmis doGet() ou doPost()ou bienservice() (selon les cas). Nous allons ici examiner comment les servlets sont initialises,utilises et dtruites. Ces tapes sappellent le Cycle de vie dune servlet.

  • 8/3/2019 01 - Servlets-JSP-Taglibs - FR Essential - V1.1

    13/50

    Essentiel Servlets & JavaServerPages 13 / 50

    La mthode init()

    La mthode init() est appele uniquement lors du premier appel la servlet (soit via un appel clientsoit lors du dmarrage du serveur en fonction de votre configuration serveur). Par consquent, elleest employe pour effectuer les oprations de paramtrage et dinitialisation de la servlet.

    Il existe deux prototypes de la mthode init().

    Le premier ne prend aucun argument et est utilis lorsque la servlet na pas lire deparamtre variant dun serveur lautre.

    La dfinition de celle-ci ressemble ceci :

    publicvoidinit() throws ServletException {// Initialisation Code

    }

    La seconde version de init() est utilise lorsque le servlet a besoin daccder auxparamtres de configuration du serveur afin de sadapter au serveur sur laquelle elle estlance. On peut trs bien penser rcuprer les paramtres de connexion une base dedonnes par exemple, un fichier de mots de passes ou bien dautres choses encore.

    Le second prototype ressemble ceci :

    publicvoidinit(ServletConfig cfg) throws ServletException {

    super.init(cfg);// Initialisation Code

    }

    Cette mthode admet un argument de type ServletConfig qui permet de rcuprer les valeurs des

    diffrents paramtres de configuration grce la mthode getInitParameter() qui demande enentre le nom du paramtre et retourne, en sortie, sa valeur.

    La premire ligne du corps de la mthode fait appel super.init(). Cette ligne ne doit pas treoublie, en effet la mthode init() de la classe parent enregistre lobjet ServletConfig un endroitprcis dans la servlet qui est utilis par la suite.

    Remarque : si vous dcidez de surcharger la mthode init(), noubliez surtout pas lappel super.init() car vous risquez davoir des problmes

    La mthode service

    Cette mthode est appele pour chaque requte reue. Cette mthode vrifie le type de requte etappelle automatiquement soitdoGet(),doPost(),doTrace() Dans une servlet, qui doit traiter les

    requtes POST et GET de la mme manire, vous pourriez tre tent de surchargerservice()maisce nest pas la bonne solution ! En effet, cela risquerait de nuire lvolution de votre servlet. Ilvaut mieux dans ce cas appelerdoPost() viadoGet() ou inversement.

    Grce cette mthode, vous pourrez, par la suite, surcharger les mthodes doPut(), doTrace(),doOptions()soit directement dans la servlet soit dans les servlets filles .

  • 8/3/2019 01 - Servlets-JSP-Taglibs - FR Essential - V1.1

    14/50

    Essentiel Servlets & JavaServerPages 14 / 50

    Voici le prototype de cette mthode :

    publicvoidservice(ServletRequest req, ServletResponse res) throws IOException

    La mthode destroy

    Le serveur peut demander la suppression de linstance de la servlet, soit par demande explicite de

    ladministrateur (redmarrage du serveur par exemple), soit parce que la servlet demeure inactifpendant une trop longue priode. Le serveur appelle alors la mthode destroy() de la servlet afinque celle-ci effectue toutes les oprations de destruction. Vous pouvez retrouver des oprations defermeture de connexion une base de donnes, dinterruption de threads lancs en tches de fond,fermer un fichier

    Remarque : un serveur Web peut trs bien sinterrompre cause dun bug ou autre problmetechnique (une personne peut trs bien dbrancher la prise de courant !) cest pour cela quil nefaut pas faire confiance 100% lappel automatique de cette mthode et faire des sauvegardesdlments principaux durant lexcution de la servlet.

    Voici le prototype de cette mthode :

    publicvoiddestroy()

    3.2.3.Lire la requte

    La lecture des donnes de la requte se fait via linstance de lobjet HttpServletRequest pass enparamtre des mthodesdoGet(),doPost()

    Depuis la requte, il est possible de rcuprer tous les paramtres passs au serveur web par leclient :

    Il existe quatre mthodes pour cela :

    La mthode getParameter(String name): retourne la valeur dun paramtre partir deson nom

    La mthode getParameterValues(String name): retourne une liste de valeurs dunparamtre partir de son nom (utilis par exemple dans une liste choix multiples)

    La mthode getParameterMap() : retourne une liste dassociations de paramtres et devaleurs

    La mthode getParameterNames(): retourne la liste de tous les noms des paramtrespasss au serveur web

    Cet objet permet galement de rcuprer des informations concernant le client :

    La mthodegetRemoteAddr(): retourne ladresse IP du client La mthodegetRemoteHost() : retourne le nom complet de lhte client

  • 8/3/2019 01 - Servlets-JSP-Taglibs - FR Essential - V1.1

    15/50

    Essentiel Servlets & JavaServerPages 15 / 50

    De la mme faon, nous pouvons rcuprer des informations concernant le serveur :

    La mthodegetServerName(): retourne le nom complet du serveur La mthodegetServerPort(): retourne le numro du port utilis par le serveur

    Vous pouvez galement accder lensemble des variables denvironnement du serveur (commepour les scripts CGI).

    Voici un tableau rcapitulatif des mthodes utiliser :

    Variable denvironnement CGI Mthodes dune servlet HTTP

    SERVER_NAME getServerName()

    SERVER_PROTOCOLE getProtocole()

    SERVER_PORT getServerPort()

    REQUEST_METHOD getMethod()

    PATH_INFO getPathInfo()PATH_TRANSLATED getPathTranslated()

    SCRIPT_NAME getServletPath()

    DOCUMENT_ROOT getServletContext().getRealPath("/")

    QUERY_STRING getQueryString()

    REMOTE_HOST getRemoteHost()

    REMOTE_ADDR getRemoteAddr()

    AUTH_TYPE getAuthType()

    REMOTE_USER getRemoteUser()

    CONTENT_TYPE getContentType()

    CONTENT_LENGTH getContentLength()

    HTTP_ACCEPT getHeader("Accept")

    HTTP_USER_AGENT getHeader("User-Agent")

    HTTP_REFERER getHeader("Referer")

    3.2.4.crire la rponse

    La rponse la requte se fait via linstance de lobjet : HttpServletResponse passe en paramtredes mthodesdoGet(),doPost() (Nous noterons linstance de cet objet : res ).

    Type de contenu

    La premire chose faire est dindiquer la servlet le type de donnes quelle va renvoyer. Eneffet vous pouvez trs bien retourner du html, une image gnre

    La mthode :setContentType() vous permettra deffectuer cela. Elle prend en paramtre le type decontenu. Voici quelques exemples dutilisation de cette mthode :

    res.setContentType("text/html") // page HTML

    res.setContentType("text/xml") // page XML

    res.setContentType("image/jpeg") // image JPEG

  • 8/3/2019 01 - Servlets-JSP-Taglibs - FR Essential - V1.1

    16/50

    Essentiel Servlets & JavaServerPages 16 / 50

    Il est possible de renvoyer tout type de contenu en spcifiant exactement le bon type MIME1.

    criture

    Lcriture des donnes de type texte dans la rponse se fait par lobjet : PrintWriter que lon peut

    rcuprer par la mthode :getWriter().PrintWriter out = res.getWriter();

    out.println("");

    out.println("");

    out.println("Bonjour le monde");

    out.println("");

    out.println("");

    out.close();

    Si votre rponse renvoie des donnes binaires, il est prfrable dutiliser lobjetServletOutputStream dont une instance est retourne par la mthode :getOutputStream()

    Voici un exemple pour retourner une image partir dune image locale :

    res.setContentType("image/gif");

    ServletOutputStream out = res.getOutputStream();

    FileInputStream fis = new FileInputStream (new File ("./logo.gif"));

    while (fis.available() > 0) {fis.read (buf, 0, buf.length);

    out.write(buf);

    out.flush();

    }

    fis.close();

    out.close();

    3.3.Implmentation avance

    Nous avons vu, dans la partie prcdente, les bases pour le dveloppement de servlet. Nous allons prsent nous attarder sur des concepts plus avancs.

    3.3.1.Les cookies

    Principe

    Les cookies sont de petites informations textuelles envoyes par le serveur et renvoy par le client,sans modification de sa part, chaque visite ultrieure. Cette technique peut tre trs intressantepour garder une trace des visiteurs (savoir sil est dj venu sur le site ou non ).

    Avantages

    Les cookies permettre de garder un lien entre le client et sa session sur un serveur par le biais dun

    identifiant de session par exemple.

    1

    Multipurpose Internet Mail Extensions

  • 8/3/2019 01 - Servlets-JSP-Taglibs - FR Essential - V1.1

    17/50

    Essentiel Servlets & JavaServerPages 17 / 50

    Lutilisation des cookies est trs simple mettre en place et permet de grer un ensemble defonctionnalits intressantes pour le visiteur.

    Inconvnients

    Les cookies sont transmis chaque requte, cela peut alourdir les demandes et rponses du client sices cookies sont utiliss abusivement.

    Lutilisation de cookies nest pas prconiser pour une utilisation scurise, en effet les valeurs dechaque paramtre sont passes en clair dans la requte et peuvent tre rcupres par un pirateassez facilement.

    Les cookies ne sont pas toujours accepts par le client, cela peut poser un norme problmelorsquun systme na pas de moyen en parallle mis en place.

    Cration de cookies

    Les servlets ont leur propre API de cookies. Les cookies sont reprsents par lobjet Cookie. Voiciune description de cette classe :

    Le constructeur Cookie(String name, String value) : constructeur qui prend en paramtrele nom du cookie et sa valeur assigne.

    Une fois lobjet cookie instanci, vous pouvez spcifier certains attributs de celui-ci (ce sont des setters ) ou rcuprer une information dun cookie via le getter correspondant :

    La mthode String getComment(): retourne le commentaire La mthodesetComment(String): assigne un commentaire

    La mthode String getDomain(): retourne le domaine La mthodesetDomain(String domainPattern) : assigne un domaine

    La mthode int getMaxAge(): retourne la dure en secondes avant que le cookie soitprim

    La mthode setMaxAge(int lifetime) : indique la dure en secondes avant que le cookiesoit prime, la valeur 0 indique que le cookie doit tre supprim.

    La mthode String getName() : retourne le nom du cookie La mthodesetName(String name) : assigne un nom au cookie

    La mthode String getPath() : retourne le chemin dun cookie La mthode setPath(String path) : assigne un chemin au cookie (permet dindiquer que le

    cookie nest utilis que pour certains niveaux dans le site)

    La mthode boolean getSecure(): retourne true si le cookie est transmis que pour lesconnexions scurises

    La mthode setSecure(boolean secureFlag) : positionne le drapeau dindication detransmission.

    La mthode String getValue() : retourne la valeur du cookie

  • 8/3/2019 01 - Servlets-JSP-Taglibs - FR Essential - V1.1

    18/50

    Essentiel Servlets & JavaServerPages 18 / 50

    La mthodesetValue(String cookieValue) : assigne ou modifie la valeur du cookie

    Une fois le cookie paramtr il faut le rajouter len-tte http : Set-Cookie. Pour cela vous avezjuste appeler la mthodeaddCookie() de lobjet de rponse de votre servlet.

    Voici un exemple de cration de cookie :

    Cookie cookieDejaVenu = new Cookie("dejaVenu", "1");cookieDejaVenu.setMaxAge(60 * 60 * 24 * 365); // 1 an

    res.addCookie(cookieDejaVenu);

    Lecture des cookies

    Les cookies reus sont stocks dans un tableau que lon peut rcuprer par linstance de lobjetHttpServletResquest via la mthode getCookies(). Celle-ci renvoie un tableau dont la longueur

    reprsente le nombre de cookie envoy (si la longueur est gale nulle, aucun cookie na tenvoy). Pour obtenir un cookie en particuliers partir de son nom vous devez parcourir le tableauen appelant pour chaque lment la mthodegetName() jusqu temps darriver sur le cookie quivous intresse.

    Une fois rcuprer vous avez juste appeler la mthodegetValue() pour rcuprer son contenu.

    Voici un exemple de cration de cookie :

    publicvoiddoGet(HttpServletRequest req, HttpServletResponse res)

    throws ServletException, IOException {// Initialisation

    PrintWriter out = res.getWriter();res.setContentType ("text/html");

    Cookie[] tabCookies = req.getCookies();

    Cookie cookie;

    // Boucle qui affiche tous les cookies

    for (int i = 0; i < tabCookies.length; i++) {cookie = tabCookies [i];

    out.println("Cookie : " + i + "
    " +

    " - Nom : " + cookie.getName() + "
    " +

    " - Valeur : " + cookie.getValue() + "
    ");

    }

    out.flush();

    out.close();

    }

    Si vous voulez supprimer un cookie, il suffit dattribut une dure de vie 0 votre objet cookie :

    c1.setMaxAge(0);

  • 8/3/2019 01 - Servlets-JSP-Taglibs - FR Essential - V1.1

    19/50

    Essentiel Servlets & JavaServerPages 19 / 50

    3.3.2.Les sessions

    Prsentation

    Nous avons vu prcdemment comment garder des informations chez le client par le biais decookie. Cependant ce mcanisme est trs limit, cest donc pour cela que le systme de session at mis en place.

    Lorsque lon parle de session, lactivit se passe ct Serveur et non Client (contrairement auxcookies). Les sessions sont trs utilises dans les applications web et plus particulirement dans lessites e-business Elles permettent de stocker des informations pour chaque client ct serveur.

    Avantages

    Les sessions sont excutes ct serveur ce qui leur permet dtre beaucoup plus scurises que lescookies.

    Un seul identifiant est ncessaire pour lier le serveur et le client car les donnes sont stockes surle serveur.

    Les sessions sont simples dutilisation grce lAPI de suivi de session des servlets.

    Inconvnients

    Un lien doit tre mis en place entre le client et le serveur (identifiant de session) soit par cookiesoit par le mcanisme de rcriture dURL.

    API de suivi de session

    Les servlets possdent une API pour la gestion des sessions. Lutilisation de sessions dans lesservlets est trs simple car il suffit de rcuprer lobjet session li la requte actuelle. Si aucunobjet de session na encore t cr, on peut dcider de le crer automatiquement.

    La classe dcrivant une session est : HttpSession.

    Voici une description de chacun des mthodes de celle-ci :

    La mthode Object getValue() ou Objet getAttribute(String name) : retourne la valeurdun attribut de la session prcdemment ajout.

    Remarque : la mthode getValue() est remplacer par getAttribute() depuis la version2.2 de lAPI des servlets.

    La mthode putValue(String name, Object value) ou setAttribute(String name, Objectvalue): associe un objet un nom dattribut de la session.Remarque : la mthode putValue() est remplacer par setAttribute() depuis la version2.2 de lAPI des servlets.

    La mthoderemoveValue(String name) ou removeAttribute(String name) : supprime unattribut partir de son nom.

  • 8/3/2019 01 - Servlets-JSP-Taglibs - FR Essential - V1.1

    20/50

    Essentiel Servlets & JavaServerPages 20 / 50

    Remarque : la mthoderemoveValue() est remplacer par removeAttribute() depuis laversion 2.2 de lAPI des servlets.

    La mthode String[] getValueNames() ou Enumeration getAttributeNames(): retourneles noms de tous les attributs de la session.

    Remarque : la mthode getValueNames() est remplacer par getAttributeNames()depuis la version 2.2 de lAPI des servlets.

    La mthode StringgetId() : retourne lidentifiant unique de la session (il peut tre utiliscomme une cl ).

    La mthode boolean isNew() : retourne true si la session vient dtre cres (nouvellesession) ou false dans le cas dune session dj existante.

    La mthode invalidate() : invalide lensemble de la session et libre tous les objets qui ysont associs.

    Gestion de la session

    Tout dabord il vous faut rcuprer lobjet session associ la requte cliente, pour appeler lamthode :getSession() de lobjet HttpServletRequest.

    HttpSession session = req.getSession(true);

    Pour que la session soit cre automatiquement (dans le cas o elle nexisterait pas), nous passons

    trueen paramtre la mthodegetSession().Remarque : Si on passait false en paramtre, la mthodegetSession() nous retournerait un objetnull.

    Avec cet objet session, vous allez pouvoir lui ajouter des objets (mthodesetAttribute()), en retirer(mthoderemoveAttribute()) ou en lire (mthodegetAttribute()).

    3.3.3.Linterface SingleThreadModel

    Nous avons vu quune servlet na quune seule instance qui est attaque par plusieurs threads lafois (1 thread par client). Ceci peut parfois tre gnant lorsque lon veut, par exemple, quun objetde connexion une base de donnes ne soit pas partag parmi les threads, la modification dunfichier prcis

    Une premire solution serait daffecter lattribut synchronized la mthode service() de laservlet.

    Cependant il existe un meilleur moyen de grer cela. En effet, il existe linterfaceSingleThreadModel qui permet dindiquer au moteur de servlets que lon souhaite quune

    instance de la servlet ne soit attaque que par un Thread la fois.

  • 8/3/2019 01 - Servlets-JSP-Taglibs - FR Essential - V1.1

    21/50

    Essentiel Servlets & JavaServerPages 21 / 50

    Cette interface ne comporte aucune mthode implmenter, elle ne reprsente quun drapeau pourle moteur de servlet.

    Finalement cette interface est pratique car elle permet en quelques sortes de scuriser les accsconcurrents, cependant ce nest pas la meilleure solution. Lidal est de crer dans le cas duneconnexion la base de donnes, une gestion de pool de connexions multithreades. En effet, il sepeut que la base de donnes naccepte quun nombre restreint de connexions (qui peut tre dpasspar le nombre de clients accdant la servlet).

    3.3.4.Utilisation du ServletContext

    On appelle contexte associ la servlet (ServletContext) lenvironnement au sein duquel laservlet sexcute. Lobjet ServletContext est cr par le containeur de servlet et permet daccder

    des informations rattaches lenvironnement.Lobjet cr est partag par toutes les servlets du containeur. Cela permet donc de partager desinformations entre les servlets.

    Description de lobjet ServletContext

    Voici une description des mthodes principales de lobjet ServletContext :

    La mthode Object getAttribute(String name): retourne lattribut associ name

    La mthodesetAttribute(String name, Object o): assigne un objet un nom dattribut

    La mthoderemoveAttribute(String name): supprime un attribut du context

    La mthode Enumeration getAttributeNames(): retourne la liste des attributs ducontexte

    La mthode int getMajorVersion(): retourne la dernire version supporte parlenvironnement

    La mthode int getMinorVersion(): retourne la premire version minimale supporte

    Utilisation lobjet ServletContext

    Laccs au context se fait par le biais de la mthode getServletContext() de la servlet. Lobjetrcupr est du type ServletContext.

  • 8/3/2019 01 - Servlets-JSP-Taglibs - FR Essential - V1.1

    22/50

    Essentiel Servlets & JavaServerPages 22 / 50

    4.Les Java Server Pages

    4.1.Prsentation

    Nous venons donc de voir les diverses utilisations dune servlet avec leurs avantages et leurs

    inconvnients.

    Les servlets, classes java tendant la classejavax.servlet.http.HttpServlet, mettent laccent sur lecode java. Les pages JSP sont, elles, plutt proches du code html.

    En effet, une page JSP ressemble beaucoup une page html laquelle on a ajout du code Javaencapsul dans des balises (). Elle va cependant rutiliser des fonctionnalits de la classeServlet telles que la variable request de la classe HttpSerlvetRequest ou la variable out de la

    classejavax.servlet.ServletOutputStream.

    Au contraire des servlets une page JSP va nous permettre de sparer clairement deux types de code(le traitement de la requte et la gnration du flux HTML).

    Il est trs ais de programmer laide dune page JSP ; en effet, il nest pas ncessaire davoir unegrande connaissance de lAPI sous-jacente.

    Par ailleurs, contrairement aux servlets, le webmaster va pouvoir modifier le code HTML sans

    avoir toucher au code Java.

    Comme nous venons de le voir, une page JSP peut la fois contenir du code Java et du code html.

    Le HTML va composer la structure statique de la page tandis que le code JSP composera les

    lments dynamiques de la page. Ces lments peuvent tre de 3 types :

    Elments de scripting Directives

    Elments daction

    4.2.Elments de base du scripting

    Il existe 4 types dlments de scripting dans une page JSP : les scriplets, les commentaires, lesdclarations et les expressions.

    Les scriplets, , sont des blocs de code Java intgrs au sein dune pageHTML. Ces caractres vont permettre dindiquer le langage utiliser pour traiter le codeencapsul. Les variables dclares dans cette portion de code ne seront connues que du code de lapage qui suivra.

    Exemple :

  • 8/3/2019 01 - Servlets-JSP-Taglibs - FR Essential - V1.1

    23/50

    Essentiel Servlets & JavaServerPages 23 / 50

    Les commentaires, , comme leur nom lindique vont vous permettre

    dinsrer des commentaires dans votre code. Vous pouvez videmment utiliser les balises de

    commentaire HTML, mais lavantage des balises JSP est que les commentaires ne seront pasvisibles des utilisateurs.

    Les dclarations, , vont permettre de dclarer des mthodes et des variables dinstance,connues de toute la page JSP, afin quelles soient intgres dans la servlet rsultante. Elles peuventtre places puis utilises nimporte o dans la page JSP.

    Les expressions, , sont values lorsquune page JSP est demande et leurs rsultats sontconvertis en une chane transmise lobjet out implicite. Aucun point-virgule nest requis la fin

    dune expression.

    Exemple:

    Message :

    Affichage:

    Hello!

    4.3.Les objets implicites en JSP

    Lorsque vous allez coder en java lintrieur de vos scriplets, vous aurez accs une listedlments, appels objets implicites, qui vous permettront dinteragir avec lenvironnement de laservlet dexcution.

    Llment request fait rfrence lobjetjavax.servlet.http.HttpServletRequest associ la requte. Il va permettre daccder aux paramtres POST, GET, ou les en-ttes desrequtes http tels que les cookies.

    Llment response fait rfrence lobjetjavax.servlet.http.HttpServletResponseenvoy avec la rponse du client. Il nest pas souvent utilis, puisquon lui prfre le fluxde sortie out.

    Llment out fait rfrence lobjetjavax.servlet.jsp.JspWriter est un flux de sortiepermettant denvoyer la rponse au client.

    Llment config fait rfrence lobjetjavax.servlet.ServletConfig de la page.

  • 8/3/2019 01 - Servlets-JSP-Taglibs - FR Essential - V1.1

    24/50

    Essentiel Servlets & JavaServerPages 24 / 50

    Llment pageContext fait rfrence au contexte de la page, reprsent par lobjetjavax.servlet.jsp.PageContext. Il va permettre daccder diffrents attributs de la page.

    Llment application fait rfrence lobjetjavax.servlet.ServletContext. Il vapermettre denregistrer des donnes globales tout comme les variables dinstance. La

    diffrence est que ces donnes vont tre partags par toutes les servlets du moteur deservlets.

    Llment page fait rfrence une instance de la page elle-mme tout comme le fait thisdans une classe java.

    Llment session fait rfrence lobjetjavax.servlet.http.HttpSession.

    Llment exception fait rfrence lobjetjava.lang.Throwable. Il permet dattraperles exceptions.

    4.4.Exemple dutilisation avec un formulaire

    On souhaite crer un formulaire trs simple permettant dentrer des donnes dans un champ detexte puis de les afficher dans une page suivante que lon accdera laide dun bouton.

    Figure 1 : Formulaire.html

    Figure 2 : ResultForm.jsp

    Voici le code correspondant aux pages JSP Formulaire.html et ResultForm.jsp :

  • 8/3/2019 01 - Servlets-JSP-Taglibs - FR Essential - V1.1

    25/50

    Essentiel Servlets & JavaServerPages 25 / 50

    FirstJSP.html :

    Nous ne attarderons pas sur cette partie de code puisque ce fichier ne contient que du code HTML.

    Mon Formulaire

    Mon Formulaire

    Votre nom

    Votre prenom

    Result .jsp :

    Cette partie de code est plus intressante ; on peut voir ici comment rcuprer des donnesenvoyes par un formulaire.

    Ainsi, grce la mthode getParameter(String s) de la variable request, on peut rcuprer la valeurdes variables passes en paramtre.

    Rsultats de mon formulaire

    Mes informations

    Nom:

    Prenom:

  • 8/3/2019 01 - Servlets-JSP-Taglibs - FR Essential - V1.1

    26/50

    Essentiel Servlets & JavaServerPages 26 / 50

    value="Retour">

    4.5.Elments daction : Inclusions de scripts et balises

    jsp:

    Un lment daction est constitu de balises que lon peut intgrer dans une page JSP.

    Voici ci-dessous la description des actions JSP standard.

    jsp:useBean

    La balise useBean va permettre de sparer la partie traitement du code de la partie prsentation. Eneffet, on va avoir des classes java, qui vont nous permettre de crer les JavaBeans.Ceux-ci vontrcuprer diffrentes donnes de la page JSP, les traiter et ventuellement retourner des donnesque lon pourra afficher dans la page JSP.

    Un JavaBean est un objet reprsent une classe Java qui doit respecter les rgles suivantes :- Elle doit comporter au moins un constructeur sans arguments dclar en public- Aucuns des attributs ne doivent tre publics- Chaque attribut (property) doit avoir un getter et un setter.

    - Pour les attributs boolens, on doit remplacergetXXX() par isXXX().

    //SES ATTRIBUTS.

    La balise useBean permet dinstancier un composant JavaBean qui pourra tre appel dans lapage JSP.

    MonBean.java

    package monpackage;

    publicclass MonBean {

    private int nb;

    private boolean empty;

    public MonBean() {}

    publicint increm(int i) {

    return nb + 10;}

    public int getNb() {return nb;

  • 8/3/2019 01 - Servlets-JSP-Taglibs - FR Essential - V1.1

    27/50

    Essentiel Servlets & JavaServerPages 27 / 50

    }

    public voidsetNb(int nb) {

    this.nb = nb;}

    public booleanisNb() {

    return empty;}

    }

    TestBean.jsp

    Ici, un objet de type monpackage.MonBean vient dtre cr et affect la variable testB.

    Remarque : Il est ncessaire de placer votre classe dans un package.

    Les balises jsp:setProperty et getProperty

    Ces balises vont permettre de rcuprer ou modifier les valeurs dune instance de JavaBean.

    Il y a 3 manires de faire :

    Une toile pour property permet dattribuer automatiquement chaque attribut de lobjet bean lesvaleurs rcupres dun formulaire par exemple.

    On peut indiquer directement le nom de la proprit laquelle on veut attribuer une valeur.

    On peut indiquer directement le nom de la proprit laquelle on veut attribuer une valeur et, deplus indiquer la valeur grce lattribut value.

    Pour rcuprer les valeurs assignes grce aux balises , on agira de la maniresuivante :

    On peut, par la suite, utiliser cette instance de JavaBean dans des balises scriplets et faire appel ses mthodes. Ainsi, au lieu dutiliser la balise , on pourra utiliser la syntaxe

    suivante :

    Les balises jsp:include et param

    La balise include est utilise pour intgrer des ressources statiques ou dynamiques dans une pageJSP. Elle va permettre dinclure des fichiers au moment de la requte.

  • 8/3/2019 01 - Servlets-JSP-Taglibs - FR Essential - V1.1

    28/50

    Essentiel Servlets & JavaServerPages 28 / 50

    Il est aussi possible dinclure un fichier au moment de la traduction de la page, juste avant la

    compilation (4.4.2).

    Afin de passer des informations la ressource inclure il suffit dajouter la ligne suivante :

    (...)

    jsp:forward

    Cette balise est utilise pour passer le contrle de la requte une autre ressource dynamique oustatique.

    Afin de passer des informations la ressource inclure, il suffit de procder de la mme manire

    que la balise include, avec la balise param.

    Exemple :

    Ainsi, dans la page Redirect.jsp on va pouvoir rcuprer la valeur de redir laide de lavariable request (request.getParameter("redir")).

    Les balises jsp:plugin et jsp:fallback

    La balise plugin est utilise pour gnrer des tags HTML ou permettantdindiquer au navigateur client le chargement du plugin correspondant la balise.

    La balise fallback va permettre de spcifier le message montrer si le client ne supporte paslaffichage dapplet.

    La rponse HTTP est insre dans la

    rponse de la JSP originale

    JSP

    originale

    Fichier inclure

    RponseHTTP

    Com ilation

    < s :include>

    JSP

    compil

  • 8/3/2019 01 - Servlets-JSP-Taglibs - FR Essential - V1.1

    29/50

    Essentiel Servlets & JavaServerPages 29 / 50

    4.6.Directives

    Les directives sont des messages envoys au container JSP qui vont indiquer au container la faondont il doit transcrire une page en servlet. Ces directives sont reprables grce aux caractres.

    Il existe 3 types de directives ; les directives de pages, les directives dinclusions et les balises

    personnaliss.

    4.6.1.Directives de pages

    Ces directives se prsentent sous la forme suivante : . Elles prennent enparamtre un certain nombre de paramtres lists ci-dessous:

    Param

    tre R

    le du param

    tre Valeurs possibleslangage Indique le langage utilis java info Le texte contenu dans ce paramtre, contenant des informations sur

    la page sera rcuprable grce la mthode servlet.getServletInfo()

    dpend du container de

    la jsp

    contentType Indique le type MIME(Multipurpose Internet Mail Extension) de la

    page ainsi que le jeu de caractres utiliss

    text/html;charset=ISO-

    8859-1

    extends Indique la classe mre de la servlet gnre. Cet attribut est

    manipuler avec prcaution.

    class

    import Indique les inclusions de package ou de classes. Plusieurs

    localisations peuvent tre spcifies, spares laide de virgule.

    Il correspond limport dans une classe java.

    Aucune

    buffer Par dfaut, le contenu dune page JSP est bufferis pour accrotre

    les performances.

    8192b

    autoFlush Indique si le tampon doit tre vid lorsquil est plein. true / false

    session Indique si la page courante peut accder aux donnes stockes

    dans la session.

    true / false

    isThreadSafe Indique si le modle SingleThreadModel (vu au point 3.3.3) est

    utilis ou non.

    true / false

    errorPage Toute exception non gre dans le code sera remonte la classe

    mre de la JSP.

    url

    isErrorPage Indique au conteneur J2EE que la servlet gnre sert de page

    derreur.

    false

    * les valeurs en gras sont les valeurs par dfaut

    4.6.2.Directives dinclusions

    Ces directives permettent dinclure le contenu dun autre fichier dans la page JSP courante laidede la syntaxe suivante : .

    Ce type dinclusion est ralis avant la compilation de la JSP en servlet

  • 8/3/2019 01 - Servlets-JSP-Taglibs - FR Essential - V1.1

    30/50

    Essentiel Servlets & JavaServerPages 30 / 50

    4.6.3.Directives des tag-libs

    Ces directives dfinissent l'adresse et le prfixe d'une librairie de balises (tags) pouvant treutiliss dans la page.

    Elles permettent d'aller crer de nouveaux tags de la forme :

    ...

    Nous tudierons plus prcisment ces directives dans le chapitre suivant (4.7).

    4.7.Les balises personnalises (Taglib)

    4.7.1.Prsentation

    Comme nous lavons expliqu prcdemment, une page JSP est une page de code qui peut contenirdu HTML et du code Java. Malgr la puissance offerte par le langage Java, il arrive souvent quelon rcrive plusieurs fois la mme chose au sein d'une mme page JSP (boucles, tests,rcupration d'objets en session).

    Afin dviter ce type de perte de temps, un mcanisme permettant d'effectuer ces tches rptitives l'aide de balises personnalises a t mis en place. Ce mcanisme qui dfinit le fonctionnementde nouvelles balises s'appelle taglib.

    Permettant d'isoler le code Java dans un fichier .java plutt que dans un fichier .jsp, ces taglib ontpour but de faciliter lorganisation dune ralisation dun site Web en JSP. Ceci est en effetfondamental pour le dveloppement et surtout la maintenance puisquon va permettre d'isoler letravail des Web designers de celui des dveloppeurs.

    Ainsi, on va avoir un fichier TLD qui va dcrire les attributs de la balise et un fichier Java qui vadcrire les actions de la balise.

    JSP

    originale

    Fichier inclure

    JSP

    Originale

    JSP

    compil

    rcom ilation com ilation

    Fichier

  • 8/3/2019 01 - Servlets-JSP-Taglibs - FR Essential - V1.1

    31/50

    Essentiel Servlets & JavaServerPages 31 / 50

    4.7.2.Utilisation de taglib prdfinies

    (Les CustomTag prsentent une grande richesse dans la programmation JSP. L o lon va pouvoirrellement profiter de leur puissance, cest en rutilisant des taglibs prdfinies, trs compltes etparfaitement rutilisables.)

    La JSTL (JavaServer Pages Standard Tag Library) est une librairie de rfrence. Elle contient touteune srie de balises personnalises qui vont permettre, par exemple, ditrer, excuter des requtesSQL, utiliser des documents XML.

    Il existe, par ailleurs de nombreuses autres librairies toutes aussi puissantes les unes que les autres.

    Voici quelques liens o vous trouverez les plus connues :

    http://jakarta.apache.org/taglibs/

    http://displaytag.sourceforge.net/install.html

    http://struts.apache.org/userGuide/

    La JavaServer Pages Standard Tag Library

    La JSTL prsente donc de nombreuses fonctionnalits. Nous allons prsenter quelques exemplesdutilisation.

    Tout dabord, pour utiliser des balises de cette librairie, il faut utiliser un conteneur dapplication

    implmentant au moins lAPI servlet 2.3 et lAPI JSP 1.2 (J2EE 1.3). La dernire version 1.1ncessite un conteneur implmentant lAPI servlet 2.4 et lAPI JSP 2.0 (J2EE 1.4).

    Tous les fichiers ncessaires leur utilisation se trouvent dans larchive Standard 1.1 Taglib. qui estlimplmentation de rfrence dApache Jakarta..

    Une fois larchive rcupre, il faudra placer :

    les TLD (prsents dans /tld) dans le rpertoire /WEB-INF/tlds/ les fichiers jstl.jar et standard.jar (prsents dans /lib) dans le rpertoire /WEB-

    INF/lib

    Les JSTL prsentent 5 librairies diffrentes :

    La librairie Core reprsente les fonctions de base et est associe au fichier TLD c.tld.

    La librairie XML reprsente les traitements XML et est associe au fichier TLD x.tld

    La librairie Format reprsente les fonctions dinternationalisation de la page JSP (I18n)ainsi que la manipulation de dates. Elle est associe au fichier TLD fmt.tld

    http://jakarta.apache.org/taglibs/http://displaytag.sourceforge.net/install.htmlhttp://struts.apache.org/userGuide/http://jakarta.apache.org/site/downloads/downloads_taglibs-standard.cgihttp://jakarta.apache.org/taglibs/http://displaytag.sourceforge.net/install.htmlhttp://struts.apache.org/userGuide/http://jakarta.apache.org/site/downloads/downloads_taglibs-standard.cgi
  • 8/3/2019 01 - Servlets-JSP-Taglibs - FR Essential - V1.1

    32/50

    Essentiel Servlets & JavaServerPages 32 / 50

    La librairie Database reprsente les traitements SQL, elle est associe au fichier TLDsql.tld

    La librairie Functions reprsente des fonctions supplmentaires, portant majoritairementsur la manipulation de chanes de caractres.

    Nous tudirons en dtails les librairies Core et Format

    La librairie Core

    Cette librairie concerne les balises de base telles que des balises de condition, de gestion durl ou

    ditration.

    - Les balises dexpression de langage : out, set, remove et catch.

    La balise out permet denvoyer un flux de sortie la page JSP contenu dans lattribut value. Elleprend, de plus pour attributs default (valeur par dfaut si value est nulle)et escapeXml (boolenindiquant si les caractres particuliers , &, ", - doivent tre convertis en leur quivalentHTML , &, ",-, true par dfaut).

    On notera que cette balise doit contenir au moins lattribut value et ne doit pas contenir de corps.

    Exemple :

    La balise set permet de stocker une variable dont on va dfinir la porte de visibilit.

    Elle permet d instancier une variable, laide des attributs var (nom de la variable) et value(valeur stocker) ou bien de modifier les valeurs dun objet bean, laide des attributs target(nom de la variable contenant le bean), property (nom de la proprit du bean) et value. Cestensuite lattribut scope qui va permettre de spcifier la porte de visibilit de la variable. Il peutprendre en paramtre les valeurs suivantes : page, request, session et application.

    Exemple 1:

    Exemple 2:

  • 8/3/2019 01 - Servlets-JSP-Taglibs - FR Essential - V1.1

    33/50

    Essentiel Servlets & JavaServerPages 33 / 50

    Pour rcuprer la valeur de la variable, on va pouvoir utiliser la balise out vue prcdemment enutilisant la syntaxe suivante ${nomvariable}.

    Il est important de spcifier dans la directive de page lattribut isELIgnored lavaleur false. En effet, tant par dfaut true, la page jsp interprterait la chane de caractre"${nomvariable}" en tant que chane de caractre et non en tant que variable. Cependant, avec unconteneur JSP 2.0, lattribut isElignored est par dfaut sur false :

    Exemple :

    Si on ne prcise pas la porte de la variable dans lattribut value (value="${mess}"), elle sera, pardfaut recherche dans la page, puis dans la requte, la session, et enfin dans lapplication.

    La balise remove permet de supprimer une variable. Il suffit pour cela de spcifier le nom de lavariable dans lattribut var et la porte de cette variable dans lattribut scope.

    La balise catch, comme son nom lindique, permet dattraper les exceptions. Le code risquant de

    lever une exception doit tre encapsul entre les balises catch. Lattribut var qui contient lesinformations concernant lexception leve possde une proprit message qui va permettredafficher un message derreur.

    Exemple :

    - Les balises de condition et ditration : if, choose, when, forEach, forTokens.

    La balise ifvalue une condition est si elle est vraie, le corps de la balise est excut

    Exemple :

    Test vrai

    Puisque le test est valide, "Test vrai" est affich.

    La balise choose est quivalente un menu switch. Elle sutilise conjointement avec la balisewhen qui permet de lister les diffrents choix. Si aucune des conditions when nest vrifie, labalise otherwise dfinit un comportement par dfaut.

    Exemple :

    La variable vaut 4

    La variable vaut 5

    La variable vaut 6

    La variable nest pas comprise entre 4 et 6

  • 8/3/2019 01 - Servlets-JSP-Taglibs - FR Essential - V1.1

    34/50

    Essentiel Servlets & JavaServerPages 34 / 50

    - Les balises de gestion durl : import, url, redirect.

    La balise import permet dimporter des ressources comme des fichiers texte, XML, pages JSP. Ilest possible dimporter des ressources distantes ou locales. Lattribut var sert stocker laressource sous forme de String et varReader va servir obtenir un Reader permettant deparserlaressource, notamment les fichiers XML tudis plus loin.

    Exemple :

    La balise url permet de stocker une URL, locale ou distante, dans une variable pouvant trerutilise ultrieurement.

    Exemple :

    La balise redirect sert rediriger un client vers une URL.

    Exemple :

    La librairie Format

    Cette librairie contient des balises spcifiques pour linternationalisation des pages JSP. Lemultilangue sappuie sur des ResourceBundle qui grent des fichiers .properties. Chaque langue ason fichier .properties et ce pour chaque bundle. Un bundle doit tre compos de fichier propertiespossdant une racine commune. Par exemple, le bundle message est compos dun fichiermessage.properties de base, dun message_en.properties pour langlais, dun

    message_fr.properties pour le franais etcUn fichier properties est compos de couples cls/valeurs :

    Fichier message_en.propertiesaccueil = Welcome

    texte = This page is a test

    Fichier message_fr.propertiesAccueil = Bienvenue

    Texte = Cette page est un test

    Ces fichier properties sont placer dans le rpertoire WEB-INF/classes.

  • 8/3/2019 01 - Servlets-JSP-Taglibs - FR Essential - V1.1

    35/50

  • 8/3/2019 01 - Servlets-JSP-Taglibs - FR Essential - V1.1

    36/50

    Essentiel Servlets & JavaServerPages 36 / 50

    Linterface Tag est donc linterface implmenter lors de la cration dun tag handler. Lesdiffrentes mthodes quelle implmente vont permettre, tour tour linitialisation, lvaluationpuis la fermeture de notre balise. Leur comportement suit un cycle de vie, dcrit ci-dessous.

    Le cycle de vie dun Tag Handler

    Tout dabord, il faut savoir que dans une page JSP, une balise nest instancie quune seule fois.Cela signifie que si vous faites appel une mme balise plusieurs fois dans une page, le containerfera toujours appel la mme instance du tag handler (classe Java correspondant la balise).

    Le cycle de vie dun tag handler est contrl par le container de JSP :

    1. Dans un premier temps, le container de JSP obtient une instance du tag handler partir dupool, ou en cre une nouvelle.

    2. Il appelle ensuite la mthodesetPageContext() laquelle il passe un objet PageContext

    reprsentant la page JSP qui contient le custom tag.

    3. Le container appelle ensuite la mthodesetParent() laquelle il passe un objet Tag (tagdu parent) ou un objet null.

    4. Le container de JSP dfinit ensuite tous les attributs du custom tag. Les attributs sonttraits comme les proprits dans un Javabean (getters, setters)

    5. Le container appelle ensuite la mthodedoStartTag(). Celle-ci peut retourner les valeurs :a. Tag.SKIP_BODY : Il ny a pas dvaluation du corps de la balise, cest dire

    que le contenu entre la balise douverture et de fermeture ne sera pas affich.

    b. Tag.EVAL_BODY_INCLUDE : Le container traite le corps du tag en tant queJSP et il est affich dans la page JSP (ce corps peut tre constitu de JSP, deHTML, et mme dautres tags).

    6. Quelle que soit la valeur retourne prcdemment, le container appelle ensuite la mthodedoEndTag().Cette mthode retourne la valeur

    a. Tag.SKIP_PAGE : pas de traitement pour le reste de la page JSP, le contenu de

    la page se trouvant aprs la balise de fermeture ne sera pas affich.b. Tag.EVAL_PAGE : Le reste de la page JSP est trait normalement.

    7. La dernire mthode appele est la mthoderelease(). Cest au sein de cette mthode quilest possible dcrire du code de libration de la mmoire (fermeture des connexions ).

    On notera bien que cette mthode nest pas forcment appele chaque mthodedoEndTag() ! En effet, le container ne fera appel cette mthode que lorsque lobjet Taghandler ne sera plus utilis, juste avant de supprimer sa rfrence dfinitivement.

    8. Enfin, le container de JSP retourne une instance du tag handler dans le pool.

  • 8/3/2019 01 - Servlets-JSP-Taglibs - FR Essential - V1.1

    37/50

    Essentiel Servlets & JavaServerPages 37 / 50

    Schma du cycle de vie du Tag handler (1)

    Pour le moment, les mthodes de notre Tag handler nous limitent dans nos actions. Par exemple,

    on ne peut valuer le corps de notre balise (son contenu) quune seule fois, et, si lon peut afficherdes donnes, on ne peut pas rcuprer le corps de la balise et le modifier.On ne peut que rcuprer des donnes mises en paramtre de la balise.

    Exemple de balise implmentant directement linterface Tag :

    Nous allons crer un Tag handler correspondant une balise messColor. Cette balise va afficher lemessageHello World Tag ! avec une couleur dfinie en paramtre.

    public classMonTag implements Tag {

    private PageContext pageContext;

    private Tag parent;

    private String color;

    public void setColor(String color) {this.color = color;

    }

    public void setPageContext(PageContext arg0) {pageContext = arg0;

    }

    public void setParent(Tag arg0) {parent = arg0;

    }

    public Tag getParent() {return parent;

    }

    Tag.SKIP_PAGE

    Tag.EVAL_PAGE

    Tag.SKIP_BODY

    Tag.EVAL_BODY_INCLUDE

    setPageContext()

    setParent()

    setAttribute()

    valuation ducontenu du corps

    Pas dvaluation du reste dela page

    valuation dureste de la page

    doStartTa

    doEndTa

    release()

  • 8/3/2019 01 - Servlets-JSP-Taglibs - FR Essential - V1.1

    38/50

    Essentiel Servlets & JavaServerPages 38 / 50

    publicint doStartTag() throws JspException {JspWriter out = pageContext.getOut();

    try {out.println("Hello World Tag !

    ");

    } catch (IOException e){

    }

    return SKIP_BODY;}

    publicint doEndTag() throws JspException {

    return SKIP_PAGE;}

    publicvoidrelease() {}

    }

    Linterface IterationTag

    Linterface IterationTag, qui tend linterface Tag, permet dafficher plusieurs fois le contenudun tag.

    public interfaceIterationTag {

    int doAfterBody();}

    La mthode doAfterBody() est appele aprs l a mthode doStartTag() et peut retournerTag.SKIP_BODY ou Tag.EVAL_BODYAGAIN.

    Elle va permettre la rvaluation du corps de la balise plusieurs fois. SidoAfterBody() retournelentier Tag.SKIP_BODY la mthode doEndTag() est directement appele, si lentier

    Tag.EVAL_BODYAGAIN est retournla mthodedoAfterBody() est rappele.Schma du cycle de vie du Tag handler(2)

    Tag.SKIP_BODY

    IterationTag.EVAL_B

    ODY_AGAIN Tag.SKIP_PAGE

    Tag.EVAL_PAGE

    Tag.SKIP_BODY

    Tag.EVAL_BODY_INCLUDE

    setPageContext()

    setParent()

    setAttribute()

    valuation du contenu du corps

    Pas dvaluation du reste dela page

    valuation dureste de la page

    doStartTa

    doEndTa

    doA terBod

  • 8/3/2019 01 - Servlets-JSP-Taglibs - FR Essential - V1.1

    39/50

    Essentiel Servlets & JavaServerPages 39 / 50

    Linterface BodyTag

    Linterface BodyTag, qui tend linterface IterationTag, permet de rcuprer le corps de labalise.

    public interfaceBodyTag {

    voiddoInitBody();

    voidsetBodyContent(BodyContent b);}

    Cette interface implmente deux mthodes supplmentaires :

    La mthode setBodyContent(BodyContent b), appele aprs l a mthode doStartTag() va

    initialiser le BodyContent, et donc permettre de rcuprer le corps de la balise et de le modifier.

    La mthodedoInitBody() va permettre de vrifier que cet objet BodyContent a bien t initialis etretourner une JspTagException si ce nest pas le cas.

    Schma du cycle de vie du Tag handler(3)

    BodyTag.EVAL_BODY_BU

    FFERED

    IterationTag.EVAL_BOD

    Y_AGAIN

    ou

    BodyTag.EVAL_BODY_B

    UFFERED

    Tag.SKIP_BOD

    Y

    release()

    Tag.SKIP_BODY

    IterationTag.EVAL_B

    ODY_AGAIN

    Tag.SKIP_PAGETag.EVAL_PAGE

    Tag.SKIP_BO

    DY

    Tag.EVAL_BODY_INCLUDE

    setPageContext()

    setParent()

    setAttribute()

    valuation du contenudu cor s

    Pas dvaluation du reste dela page

    valuation dureste de la page

    doStartTa

    doEndTa

    release()

    doA terBod

    setBodyContent()

    doInitBod

    valuation du contenu du corps

    doA terBod

  • 8/3/2019 01 - Servlets-JSP-Taglibs - FR Essential - V1.1

    40/50

    Essentiel Servlets & JavaServerPages 40 / 50

    Cration dun custom tag

    On peut diviser les customs Tags en deux catgories ;

    Les balises sans traitement de corps

    Il sagit des balises comme les sauts de ligne (balise
    en HTML) qui ne vont pas ncessiter demodification de contenu.

    Pour crer une balise ne ncessitant pas de modification de contenu, on va crer une classetendant la classe TagSupport qui elle-mme implmente linterface IterationTag :

    public classTagSupport {

    int doEndTag();

    int doStartTag();

    static Tag findAncestorWithClass(Tag from, Class classe);String getId();

    Tag getParent();

    Object getValue(String k);

    Enumeration getValues();

    voidremoveValue(String k);

    voidsetId(String id);

    voidsetPageContext(PageContext pageContext);

    voidsetParent(Tag t);

    voidsetValue(String k, Object o);}

    Lavantage dtendre la classe TagSupport et non linterface InterationTag est que lon pourra neredfinir que les mthodes dont on a besoin de modifier.

    En effet, on a pu remarquer dans les exemples de classe implmentant les interfaces Tag,IterationTag ou BodyTag, que lon est oblig de redfinir toutes les mthodes des interfaces ce quiest assez contraignant.

    Voici les implmentations par dfaut de cette classe TagSupport :

    La mthodedoStartTag() retourne lentier SKIP_BODY.

    La mthodedoAfterBody() retourne lentier SKIP_BODY.

    La mthodedoEndTag() retourne lentier EVAL_PAGE.

    Exemple de balise sans traitement de corps :

    Nous allons, dans cet exemple, crer une balise affichant le message "Tag sans corps" avec un fontcolor dfini. Pour cela, nous allons crer une classe Java (tag handler) TagSansCorps, tendant laclasse TagSupport.

    TagSansCorps.java

    public classTagSansCorps extends TagSupport {

    private String couleur;

    public voidsetCouleur(String couleur) {

    this.couleur = couleur;}

    public int doEndTag() throws JspException{JspWriter out = pageContext.getOut();

    try {

  • 8/3/2019 01 - Servlets-JSP-Taglibs - FR Essential - V1.1

    41/50

    Essentiel Servlets & JavaServerPages 41 / 50

    out.println("Tag sans

    corps");

    } catch (Exception e) {System.out.println(e.getLocalizedMessage());

    }

    return EVAL_PAGE;}

    }

    La classe TagSansCorps possde donc un attribut couleur qui va dfinir la couleur de font de notremessage.

    Les balises avec traitement de corps

    Il sagit des balises comme des mises en gras ou en couleur (balises ou bien en html) qui vont modifier un contenu.

    Pour ce type de balises, on va crer une classe tendant la classe BodyTagSupportquielle-mmetend la classe TagSupport et implmente linterface BodyTag :

    public classBodyTagSupport {

    int doAfterBody();

    int doEndTag();

    voiddoInitBody();

    int doStartTag();BodyContent getBodyContent();

    JspWriter getPreviousOut();

    voidrelease();

    voidsetBodyContent(BodyContent b);}

    Ainsi, pour rcuprer le corps de la balise, vous allez rcuprer le BodyContent de la classeBodyTagSupport.

    La classe BodyContent :

    Cette classe hrite de javax.servlet.jsp.JspWriter. Elle reprsente le corps du custom tag(lorsquil existe).

    Le BodyContent dun custom tag peut tre rcupr partir de la mthodegetBodyContent() delinterface bodytag partir du paramtre en argument de la mthode.

    String content = bodyContent.getString() ;

    Enfin, lcriture vers la page JSP se fait laide dun PrintWriter joint au corps du tag

    JspWriter out = bodyContent.getEnclosingWriter() ;

    Voici les implmentations par dfaut de cette classe BodyTagSupport :

    La mthodedoStartTag() retourne lentier EVAL_BODY_BUFFERED.

    La mthodedoAfterBody() retourne lentier SKIP_BODY.

    La mthodedoEndTag() retourne lentier EVAL_PAGE.

    Exemple de balise de traitement de corps :

  • 8/3/2019 01 - Servlets-JSP-Taglibs - FR Essential - V1.1

    42/50

    Essentiel Servlets & JavaServerPages 42 / 50

    La classe UpperTag.java que lon a utilis dans lexemple de fichier .tld correspond justement une balise de traitement de corps puisquelle doit permettre de rcuprer un corps, le mettre enmajuscule et le renvoyer.

    Cette classe UpperTag va donc tendre la classe BodyTagSupport :

    UpperTag.java

    publicclass UpperTag extends BodyTagSupport {

    privateint nb = 0;

    private String couleur = "";

    publicint doAfterBody() throws JspException {nb--;

    if (nb >= 0) {BodyContent bc = getBodyContent();

    String s = bc.getString().toUpperCase();

    JspWriter out = getBodyContent().getEnclosingWriter();

    try {out.println("
    Votre

    contenu: " + s+"");

    bc.clearBody();

    return EVAL_BODY_BUFFERED; // le renvoi de//EVAL_BODY_BUFFERED va provoquer le rappel de cette mthode doAfterBody()

    } catch (IOException io) {

    }

    }

    return SKIP_BODY;}

    /**

    * @param couleur The couleur to set.

    */

    public voidsetCouleur(String couleur) {this.couleur = couleur;

    }

    /**

    * @param nb The nb to set.

    */

    public voidsetNb(String nb) {

    this.nb = Integer.parseInt(nb);}

    }

    R

    le et format du fichier TLD (Tag Librairy Descriptor)Le fichier TLD est un fichier XML qui va permettre de dfinir les diffrentes balisespersonnalises.

    Syntaxe dun fichier TLD :

    Balise Rle de la balise

    (obligatoire) Constitue llment racine du fichier

    (obligatoire) version de la librairie de balise

  • 8/3/2019 01 - Servlets-JSP-Taglibs - FR Essential - V1.1

    43/50

    Essentiel Servlets & JavaServerPages 43 / 50

    (obligatoire) version des spcifications JSP dont dpend la librairie debalise

    nom court pour la librairie

    informations pour la documentation

    lien vers une source additionnelle de documentationidentifiant de manire unique la librairie

    englobe la dfinition dune balise personnalise

    o Llment tag

    Llment tag va permettre de dfinir les diffrentes caractristiques de notre balise personnalise laide des lments suivants :

    Nom de llment Rle de dlment

    name (obligatoire) identifiant pour le tag

    tagclass (obligatoire) Nom de la classe correspondant la baliseteiclass Nom de la classe dinfo concernant la tagclass

    body-content

    Empty :pas de contenu pour le tag

    JSP : le corps peut tre constitudlments JSP

    tagdependent : le corps doit tre interprtpar ce tag

    type de contenu

    info descriptions, infos

    Attribute

    name (obligatoire) : identifiant required : (true,false)

    rtextprvalue:la valeur de cet attribut peut

    tre dtermin au moment de larequte(true,false)

    o Exemple de fichier TLD

    Dans cet exemple, nous avons une classe Java UpperTag.java qui va permettre de mettre un texte

    en majuscule. Nous souhaitons donc dfinir la balise correspondante dans notre fichier Desc.tld.

    Fichier Desc.tld :

    1.0

    1.2

    mesTags

    Mes premiers Tags

    Majuscule

    UpperTag

  • 8/3/2019 01 - Servlets-JSP-Taglibs - FR Essential - V1.1

    44/50

    Essentiel Servlets & JavaServerPages 44 / 50

    nb

    true

    false

    couleurtrue

    true

    Rle du descripteur de dploiement

    Le descripteur de dploiement est un fichier XML qui va permettre au container de JSP laccs aufichier TLD (en lui indiquant le nom, lemplacement dans le rpertoire...). Il est possible

    dliminer le rle du descripteur de dploiement en ajoutant des informations sur le nom etlemplacement du fichier TLD directement dans la page JSP. Toutefois cela diminue la flexibilit,car lors de changements, il convient de modifier tous les fichiers JSP utilisant les customs Tags.

    Exemple de fichier web.xml :

    Td_Corriges

    index.html

    index.htm

    index.jsp

    /MesTags

    /WEB-INF/tlds/Desc.tld

    Syntaxe et utilisation dun custom tag

    Lorsque vous voudrez intgrer votre balise personnalise dans une page JSP, il suffira de toutdabord de dclarer la balise en dbut de page comme suit :

    Lattribut uri permet de spcifier le chemin o se trouve le fichier TLD qui dcrit la syntaxe de labalise, tandis que lattribut prefix permet de dfinir une instance du custom tag.

  • 8/3/2019 01 - Servlets-JSP-Taglibs - FR Essential - V1.1

    45/50

    Essentiel Servlets & JavaServerPages 45 / 50

    Pour utiliser votre balise personnalise, il suffit alors dutiliser les expressions suivantes :

    body

    Exemple :

    Hello World

  • 8/3/2019 01 - Servlets-JSP-Taglibs - FR Essential - V1.1

    46/50

    Essentiel Servlets & JavaServerPages 46 / 50

    5.Interactions entre JSP et Servlet

    5.1.Pourquoi faire des interactions entre les JSP et

    Servlet

    Bien quelles prsentent des avantages normes (gnration dimage en temps rel, compressionde pages ) lorsque lapplication ncessite beaucoup de programmation, les servlets ne sont pasvraiment adaptes la gnration de code HTML, cest galement pour cela que les JSP ont faitleur apparition.

    Mme si les technologies comme les JavaBeans, les Tag-Libs, les scriptlets ont fait leur apparitionet ont montr leur puissance en ce qui concerne lintgration de code java propre dans les pages dersultat, il reste toujours un problme.

    Les JSP sont fournies pour ne fournir quun seul type de prsentation. Si lon souhaite crer uneapplication complexe cherchant prsenter les informations de faon diffrentes en fonction desdemandes du client cela devient de plus en plus complexe.

    Cest alors quinterviennent les transmissions de requtes.

    5.2.A partir dune Servlet

    Pour utiliser la transmission de requte ou linclusion de document externe il faut utiliser unRequestDispatcher. Cet objet sobtient depuis un ServletContext et la mthodegetRequestDispatcher().

    Vous devez fournir une URL absolue du fichier vers lequel vous voulez transmettre votre requte.Si vous voulez obtenir un RequestDispatcher vers ladresse : http://host/folder/page.jsp il vous

    faudra faire lappel suivant :

    RequestDispatcher dispat =

    getServletContext().getRequestDispatcher("/folder/page.jsp");

    Une fois que vous avez eu votre objet il ne vous reste plus qu appeler la mthode forward() ouinclude() de celui-ci. Vous devez fournir celle-ci les objets HttpServletRequest etHttpServletResponse.

    Si vous utilisez include, la ressource est insre dans la servlet active.

    Si vous utilisezforward, le flux est compltement redirig vers la nouvelle ressource (lappelant nepeut plus effectuer de sortie au client, cette tche est transmise la nouvelle ressource

    uniquement).

    http://host/folder/page.jsphttp://host/folder/page.jsp
  • 8/3/2019 01 - Servlets-JSP-Taglibs - FR Essential - V1.1

    47/50

    Essentiel Servlets & JavaServerPages 47 / 50

    Linclusion ou le forward vers une nouvelle ressource (page ou servlet) se fait ainsi :

    // Inclusion

    voidservice(HttpServletRequest req, HttpServletResponse res) {RequestDispatcher dispat =

    getServletContext().getRequestDispatcher("/folder/page.jsp");

    dispat.include(req, res);

    }

    // Forward

    voidservice(HttpServletRequest req, HttpServletResponse res) {RequestDispatcher dispat =

    getServletContext().getRequestDispatcher("/folder/page.jsp");

    dispat.forward(req, res);

    }

    Remarques :

    Linclusion dune servlet dans une autre est synchrone, cest dire quelle ne rend la mainqu la fin de la mthodeservice()de la servlet appele

    La redirection est quand elle asynchrone

    5.3.A partir dun script JSP

    La transmission de requte dans une JSP est quasiment la mme que celle pour une servlet. En

    effet mme si ce concept est beaucoup moins utilis il peut ltre lorsque la JSP dcouvre quunedonne transmise nest pas correcte par exemple.

    La mthode classique de redirection peut tre utilis avec les JSP, cependant il est prfrabledutiliserjsp:forward pour des raisons de commodits.

    Voici le code qui permet de rediriger vers une autre page :

    // Forward

    5.4.Transmission des donnes supplmentaires

    Lorsque vous faite une inclusion ou un forward vous passer la main un nouveau script ou uneservlet. Cela ne veux pas dire que les donnes que vous avez pu travailler dans le premier scriptsont passes lautre script.

    La solution cela est dutiliser lobjet HttpServletRequest et la mthodesetAttribute(). La pagede destination pourra alors accder ces informations via la mthodegetAttribute().

  • 8/3/2019 01 - Servlets-JSP-Taglibs - FR Essential - V1.1

    48/50

    Essentiel Servlets & JavaServerPages 48 / 50

    Depuis la version 2.2 des servlets une nouvelle manire denvoyer des informations a t mise enplace. Vous pouvez directement mettre les paramtres dans lurl (mthode GET) que vous passerlors de la demande du RequestDispatcher.

    Voici un exemple dutilisation de cette mthode :

    // Forward

    voidservice(HttpServletRequest req, HttpServletResponse res) {String url = "/folder/page.jsp?param1=valeur1&param2=valeur2";

    RequestDispatcher dispat = getServletContext().getRequestDispatcher(url);

    dispat.forward(req, res);

    }

    5.5. Application du modle MVC

    En ayant en tte la liste des avantages et inconvnients des Servlets et des JSP, la mise en placedune architecture MVC se fait naturellement. En effet, les Servlets sont limites graphiquement, ilconvient de les cantonner aux traitements des requtes. De plus, les JSP tant intgres du codeHTML, un designer aura plus de facilits les modifier, ainsi on les utilisera pour la partiegraphique dune application Web.

    Ainsi la partie graphique affiche au client est compose de pages JSP. Cest la partie Vue delarchitecture MVC.

    Lutilisateur effectue, partir de ces pages JSP, des requtes qui sont transmises une Servlet.Cette dernire correspond au Contrleur dans notre architecture MVC. La Servlet va traiter lareqete client en agissant la fois sur la Vue et sur le Modle.Le Modle correspond la logique mtier de lapplication. Il contient tous les objets mtiers, parexemple des JavaBeans, avec lesquels le Contrleur peut interagir. Il est possible de fairecommuniquer directement le Contrleur avec les objets mtiers mais ce nest pas recommand. Il ya gnralement une couche supplmentaire qui sintercale entre les deux.Une fois tous les traitements ncessaires la requte effectus, la Servlet va rediriger lutilisateursur la page JSP approprie.

  • 8/3/2019 01 - Servlets-JSP-Taglibs - FR Essential - V1.1

    49/50

    Essentiel Servlets & JavaServerPages 49 / 50

    Toutefois, sen tenir cette architecture tout au long du cycle de vie de lapplication est uneopration difficile. De nouvelles fonctionnalits viennent se greffer au fur et mesure, et rendentla maintenance peu aise. Afin daider le dveloppeur dans sa tche, des frameworks sont apparuspour structurer les projets dapplications Web. On citera entre autres Struts, Tapestry et plus

    rcemment JSF.

  • 8/3/2019 01 - Servlets-JSP-Taglibs - FR Essential - V1.1

    50/50

    Essentiel Servlets & JavaServerPages 50 / 50

    6.Hbergeurs gratuits

    Les Servlets et JSP tant destines au monde professionnel, la qute dun hbergeur gratuit pources technologies nest pas aise.

    Voici deux hbergeurs gratuits :

    MyJavaServeravec un petit test pour pouvoir sinscrire

    EatJ.com

    Deux listes assez anciennes :

    http://developpeur.journaldunet.com/tutoriel/jav/011124jav_jspfreehost.shtml

    http://oinko.net/freejsp/

    http://www.myjavaserver.com/http://www.myjavaserver.com/http://s43.eatj.com/index.jsphttp://developpeur.journaldunet.com/tutoriel/jav/011124jav_jspfreehost.shtmlhttp://oinko.net/freejsp/http://www.myjavaserver.com/http://s43.eatj.com/index.jsphttp://developpeur.journaldunet.com/tutoriel/jav/011124jav_jspfreehost.shtmlhttp://oinko.net/freejsp/