01 - Servlets-JSP-Taglibs - FR Essential - V1.1
-
Upload
abdo-taoufik -
Category
Documents
-
view
231 -
download
0
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("
Votrecontenu: " + 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¶m2=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/