Académique Documents
Professionnel Documents
Culture Documents
ma
Tl./Fax : 035 64 18 61 - GSM : 063 05 10 39
Rsidence Fs-Carrefour, Bureau N 6, Lot Walili, Avenue des FAR, Fs - Maroc.
Par N. Chenfour
Dveloppement
dapplications distribues
avec Java/JEE
Site Web : http://www.acs.ma - Email : formation@acs.ma
Tl./Fax : 035 64 18 61 - GSM : 063 05 10 39
Rsidence Fs-Carrefour, Bureau N 6, Lot Walili, Avenue des FAR, Fs - Maroc.
Table des Matires
Chapitre 1. Architecture Gnrale JEE ...................... 4
Chapitre 2. Les Servlets et Tomcat ......................... 11
Chapitre 3. Les JSP............................................... 39
Chapitre 4. Accs aux Bases de donnes avec JDBC.. 47
Chapitre 4. Les EJB3 avec JBoss et Eclipse............... 60
Copyright ACS TechnoCenter / N. Chenfour, Tel : 06 63 05 10 39, email : nchenfour@acs.ma
3
Copyright ACS TechnoCenter / N. Chenfour, Tel : 06 63 05 10 39, email : nchenfour@acs.ma
4
1.1 Architecture
Chapitre 1. Architecture
Gnrale JEE
HTTP
RMI JDBC
Serveur Web Serveur
dApplication
Serveur de BD
Servlet
JSP1 JSP-N
JSP2
Couche de Prsentation Couche Mtier
EJB1 EJB-N
EJB2
Session Bean
Persistance
Copyright ACS TechnoCenter / N. Chenfour, Tel : 06 63 05 10 39, email : nchenfour@acs.ma
5
1.2 Les Servlets
Les Servlets sont la base de la programmation Web JEE. Toute la
conception dun site web en Java repose sur ces lments que sont les
Servlets.
Une Servlet est une classe Java qui tourne sur la machine du serveur web,
et qui est invoque lorsquun navigateur client appelle lURL lie ce
serveur.
La Servlet gnre alors automatiquement du code HTML quelle envoie au
client demandeur.
1.3 Les JSP
Une page JSP est une page HTML contenant du code Java. Nous avons
dj dit que la servlet permet de gnrer du code HTML. Cependant on se
trouve limit par le code java et la gnration de chane de caractres
(entre guillemets) contenant du code HTML. Difficile donc crire
correctement, corriger et maintenir (ce qui ncessite une
recompilation explicite de la Servlet chaque modification du code HTML
contenu dans celle-ci.
Tous ces problmes sont rsolus laide des JSPs. Ces deux entits
peuvent alors collaborer ensemble cot du modle de donnes pour
constituer un modle de dveloppement web robuste, souple et
satisfaisant : le modle MVC2.
1.4 RMI
RMI ou encore, Remote Method Invocation est une technologie dveloppe
et fournie par Sun partir du JDK 1.1 pour permettre des appels distants
de mthodes dobjets qui tournent en rseau dans un environnement
distribu.
Copyright ACS TechnoCenter / N. Chenfour, Tel : 06 63 05 10 39, email : nchenfour@acs.ma
6
L'appel cot client dune telle mthode est un peu plus compliqu que
l'appel d'une mthode d'un objet local. Il consiste obtenir une rfrence
sur l'objet distant puis simplement appeler la mthode partir de cette
rfrence.
La technologie RMI se charge de rendre transparente la localisation de
l'objet distant, son appel et le renvoi du rsultat.
En fait, elle utilise deux classes particulires, le stub et le skeleton,
gnres automatiquement avec le JDK.
Le stub est une classe qui se situe ct client et le skeleton est son
homologue cot serveur. Ces deux classes se chargent d'assurer tous les
mcanismes d'appel, de communication, d'excution, de renvoi et de
rception du rsultat.
1.5 EJB
Les Entreprise Java Bean ou EJB sont des composants serveurs qui
tournent sous un serveur dapplication permettant de fournir un certain
nombre de services mtiers par lintermdiaire dun premier type dEJB ;
les EJB de session (ou Session Beans). Ils fournissent aussi des services
daccs base de donnes par lintermdiaire dun 2
me
type dEJB : les
beans entits Entity Beans .
Le but des EJB est de faciliter la cration d'applications distribues pour
les entreprises.
Une des principales caractristiques des EJB est de permettre aux
dveloppeurs de se concentrer sur les traitements orients mtiers car les
EJB et l'environnement dans lequel ils s'excutent prennent en charge un
certain nombre de traitements tel que la gestion des transactions, la
persistance des donnes, la scurit, ...
Copyright ACS TechnoCenter / N. Chenfour, Tel : 06 63 05 10 39, email : nchenfour@acs.ma
7
1.6 JDBC
Java DataBase Connectivity est une API Java permettant daccder des
bases de donnes de faons transparente par rapport la base de
donnes utilise. Les procdures de connexion, de manipulation et
dadministration sont les mmes indpendamment du SGBD : oracle,
MySQL, ODBC ou autre.
1.7 Struts
Struts (http://struts.apache.org/), ou encore Apache Struts , est un
framework open source gr par le groupe Jakarta de la communaut
Apache, utilis pour faciliter le dveloppement des applications web J2EE.
Il a t cr par Craig McClanahan qui est pass la fondation Apache en
2000 en sous-partie du projet Jakarta.
Lobjectif du framework Struts est de permettre la mise en place dune
architecture MVC (Modle-Vue-Contrleur) plus aisment. Il se base
pour cela sur la technologie des Servlets (dune manire transparente) et
celle des JSP en les tendant et en donnant accs des objets amliorant
lapproche de ces dernires. Cela dbouche sur une meilleure structuration
du code dune application web Java ; ce qui ainsi une meilleure
maintenabilit du code.
En plus, Struts se dmarque aujourdhui (avec sa version 2 ; rsultat
dune fusion entre le projet Struts et le projet WebWork) par le fait quil
nimpose aucune implmentation dinterface ou extension de classe du
framework. Les objets qu'il gre sont des objets Java ordinaires (ou
encore des POJO [Plain Old Java Objects]). Les classes ainsi ralises
(sauf si le dveloppeur intgre dlibrment les API Struts) sont
totalement indpendantes du framework.
Par ailleurs, le framework Struts offre une vaste bibliothque de balise
permettant de raliser toute la logique de prsentation dune manire
simple et assiste.
Copyright ACS TechnoCenter / N. Chenfour, Tel : 06 63 05 10 39, email : nchenfour@acs.ma
8
1.8 Hibernate
Les informations ou donnes, manipules par une application quelconque
sont gnralement sauvegardes dans une base de donnes qui pour la
grande majorit des applications est une base de donnes relationnelle.
Lapplication quant elle est base sur les mcanismes de la
programmation oriente objets. Lutilisation dun outil d'ORM (Object
Relationnal Mapping) simpose alors afin de soulager le dveloppeur de
leffort considrable quil devrait fournir pour raliser lensemble des
classes lui permettant de convertir les objets en des tuples et
inversement.
Hibernate est lun des outils les plus populaires, stables et robuste
permettant le mapping objet/relationnel pour les applications Java. Il
sagit dont dun ORM (Objet Relational Mapper) qui consiste faire le lien
entre la reprsentation objet des donnes et sa reprsentation
relationnelle base sur un schma SQL.
Hibernate est un framework open source dont le fondateur est Gavin King,
qui fait entre autre partie de l'quipe de dveloppement de JBOSS.
Non seulement, Hibernate s'occupe du transfert des classes Java dans les
tables de la base de donnes (et des types de donnes Java dans les
types de donnes SQL), mais il permet aussi de requter les donnes et
propose des moyens de les rcuprer. Il peut donc rduire de manire
considrable le temps de dveloppement ralis habituellement base de
lAPI JDBC avec plusieurs lignes de code permettant de grer tous les
transferts des objets ncessaires. Le framework Hibernate libre ainsi le
dveloppeur de plus que 90% des tches de programmation lies la
persistance des donnes. Il offre aussi la gestion automatique du mapping
dan les diffrents cas que sont la composition, les associations, lhritage,
le polymorphisme ainsi que la prise en charge des collections Java.
Hibernate rentre ainsi dans le cadre des frameworks bass sur les POJO
(Plain Old Java Object) offrant un POJO la possibilit dtre persitant
Copyright ACS TechnoCenter / N. Chenfour, Tel : 06 63 05 10 39, email : nchenfour@acs.ma
9
avec un minimum deffort; en utilisant un simple moteur de persistance.
Le schma idal est alors le suivant :
PojoClass pojo = new PojoClass() ;
PersistanceEngine engine = PersistanceEngineFactory.createEngine();
engine.save(pojo);
1.9 Spring
Spring (http://www.springframework.org) est un framework open source
cr par Rod Johnson qui le dcrit pour la premire fois en 2002 dans son
livre (sous le nom Interface21) Expert One-on-One : J2EE Design and
Development. L'objectif dsign du framework est d'offrir une alternative
viable aux EJB plus simple utiliser dans le cadre du dveloppement
d'applications professionnelles.
Spring est d'abord un conteneur d'objets Java dans le mme sens que
Tomcat est un conteneur de servlets ou JBoss un conteneur d'EJB.
Nanmoins, Spring se dmarque des conteneurs cits du fait que les
objets qu'il gre sont des objets Java ordinaires (nomms POJO [Plain Old
Java Objects] dans la littrature).
Par ailleurs, Spring dispose d'une implmentation AOP qui lui permet
d'offrir de nombreux services et ce, sans que les classes Java aient
implmenter une quelconque interface propritaire. Spring fournit
galement une riche API qui simplifie la programmation de certaines
tches et l'utilisation d'outils open source rpandus.
Copyright ACS TechnoCenter / N. Chenfour, Tel : 06 63 05 10 39, email : nchenfour@acs.ma
10
Copyright ACS TechnoCenter / N. Chenfour, Tel : 06 63 05 10 39, email : nchenfour@acs.ma
11
2.1 Dfinition
Une Servlet est une classe Java qui tourne sous un serveur Web (nous
utiliserons le serveur Apache Tomcat). La Servlet doit implmenter
linterface javax.servlet.Servlet directement, ou indirectement
en tendant la classe javax.servlet.http.HTTPServlet .
Lorsqu'une servlet est appele par un client, la mthode service()
est excute. Celle-ci est le principal point d'entre de toute servlet et
accepte deux objets en paramtres :
L'objet ServletRequest encapsulant la requte du client, c'est--dire
qu'il contient l'ensemble des paramtres passs la servlet.
L'objet ServletResponse permettant de renvoyer une rponse au
client. Il est ainsi possible de crer des en-ttes HTTP (headers),
d'envoyer des cookies au navigateur du client, ...
Afin de dvelopper une servlet fonctionnant avec le protocole HTTP, il
suffit de crer une classe tendant HttpServlet .
La classe HttpServlet redfinie la mthode service en redirigeant la
requte vers lune des deux mthodes doGet ou doPost en
fonction de la mthodes du protocole HTTP utilise : GET ou bien POST, il
suffira alors de redfinir la mthode adquate afin de traiter la requte :
public void doGet(HttpServletRequest req, HttpServletResponse res);
public void doPost(HttpServletRequest req, HttpServletResponse res);
Chapitre 2.
Les Servlets & Tomcat
Copyright ACS TechnoCenter / N. Chenfour, Tel : 06 63 05 10 39, email : nchenfour@acs.ma
12
2.2 Cycle de vie d'une servlet
Le cycle de vie dune servlet est assur par le conteneur de servlet
(Tomcat) comme suit :
1. le serveur cre un pool de threads auxquels il va pouvoir affecter
chaque requte
2. La servlet est charge au dmarrage du serveur ou lors de la
premire requte
3. La servlet est instancie par le serveur
4. La mthode init() est invoque par le conteneur
5. Lors de la premire requte, le conteneur cre les objets Request et
Response spcifiques la requte
6. La mthode service() est appele chaque requte. Les objets
Request et Response lui sont passs en paramtre
7. Grce l'objet Request, la mthode service() va pouvoir analyser
les donnes en provenance du client
8. Grce l'objet Response, la mthode service() va fournir une
rponse au client
9. La mthode destroy() est appele lors du dchargement de la
servlet. La servlet est alors signale au garbage collector.
Pour crer une servlet il est indispensable de mettre en oeuvre l'interface
javax.servlet.Servlet permettant au conteneur d'assurer le cycle de vie de
la servlet.
La mise en place de l'interface (gnralement ralise en tendant
javax.servlet.GenericServlet ou javax.servlet.HttpServlet) fait appel cinq
mthodes :
la mthode init()
la mthode service()
la mthode getServletConfig()
la mthode getServletInfo()
la mthode destroy()
Copyright ACS TechnoCenter / N. Chenfour, Tel : 06 63 05 10 39, email : nchenfour@acs.ma
13
2.3 Installation du Serveur Tomcat
1- Installer Tomcat (exemple 6.0.10) :
Le serveur Tomcat volue avec lvolution des Servlet et des JSP (nous
utiliserons la version 6.0)
Version Apache Tomcat Version Servlet/JSP
6.0.x 2.5/2.1
5.5.x 2.4/2.0
4.1.x 2.3/1.2
3.3.x 2.2/1.1
2- Le rpertoire dinstallation par dfaut est :
C:\Program Files\Apache Software Foundation\Tomcat 6.0
3- On obtient larborescence suivante:
Copyright ACS TechnoCenter / N. Chenfour, Tel : 06 63 05 10 39, email : nchenfour@acs.ma
14
4- On dveloppe les Servlets dans le rpertoire webapps , soit
dans le sous rpertoire ROOT soit dans un nouveau sous rpertoire
de webapps appel un context (appel par exemple contexte ).
Dans tous les cas, le rpertoire de travail doit avoir larchitecture
suivante :
2.4 Configuration de Tomcat sous Eclipse JEE
Commencer tout dabord par la configuration de lenvironnement Eclipse.
Pour cela allez au menu Window/Preferences
Ensuite +Server/Runtime Environments , puis cliquer sur le bouton
add
contexte
Copyright ACS TechnoCenter / N. Chenfour, Tel : 06 63 05 10 39, email : nchenfour@acs.ma
15
Slectionner Apache / Apache Tomcat v6.0 , puis Next
On obtient une nouvelle fentre dans laquelle il faut cliquer sur le bouton
browse pour slectionner le rpertoire dinstallation de Tomcat :
Copyright ACS TechnoCenter / N. Chenfour, Tel : 06 63 05 10 39, email : nchenfour@acs.ma
16
Crer ensuite votre application Web par le biais dun projet web
dynamique Dynamic Web Project . En fin crer la Servlet :
2.5 Dveloppement dune application Web base sur les
Servlets :
Code de la Servlet :
import java.io.PrintWriter;
import javax.servlet.*;
import javax.servlet.http.*;
public class FirstServlet extends HttpServlet {
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException {
try {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<html><body>");
out.println("<h1 align='center'>First Servlet</h1>");
out.println("</body></html>");
}
catch(Exception e) {}
}
}
On peut ajouter la Servlet une mthode doPost pour prendre en charge
aussi bien les requtes GET que les requtes POST :
Copyright ACS TechnoCenter / N. Chenfour, Tel : 06 63 05 10 39, email : nchenfour@acs.ma
17
public void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException
{
doGet(request, response);
}
Descripteur de dploiement
Il sagit du fichier web.xml se trouvant dans le rpertoire WEB-INF du
rpertoire de travail :
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">
<!-- JSPC servlet mappings start -->
<servlet>
<servlet-name>FirstServlet</servlet-name>
<servlet-class>FirstServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>FirstServlet</servlet-name>
<url-pattern>/f1.html</url-pattern>
</servlet-mapping>
</web-app>
Invocation de la servlet depuis lExplorateur
Internet :
- Si on a travaill dans le rpertoire ROOT :
http://localhost:8080/f1.html
- Si on a travaill dans un autre rpertoire : exemple contexte
http://localhost:8080/contexte/f1.html
Copyright ACS TechnoCenter / N. Chenfour, Tel : 06 63 05 10 39, email : nchenfour@acs.ma
18
2.6 Lobjet HttpServletRequest
Mthode Description
String getMethod()
Rcupre la mthode HTTP utilise
par le client
String getHeader(String Key)
Rcupre la valeur de l'attribut Key de
l'en-tte
String getRemoteHost()
Rcupre le nom de domaine du client
String getRemoteAddr()
Rcupre ladresse IP du client
String getParameter(String Key)
Rcupre la valeur du paramtre Key
(cl) d'un formulaire. Lorsque
plusieurs valeurs sont prsentes, la
premire est retourne
String[] getParameterValues(String Key)
Rcupre les valeurs correspondant
au paramtre Key (cl) d'un
formulaire, c'est--dire dans le cas
d'une slection multiple (cases
cocher, listes choix multiples) les
valeurs de toutes les entits
slectionnes
Enumeration getParameterNames()
Retourne un objet Enumeration
contenant la liste des noms des
paramtres passs la requte
String getServerName()
Rcupre le nom du serveur
String getServerPort()
Rcupre le numro de port du
serveur
Copyright ACS TechnoCenter / N. Chenfour, Tel : 06 63 05 10 39, email : nchenfour@acs.ma
19
2.7 Lobjet HttpServletResponse
Mthode Description
String setStatus(int StatusCode)
Dfinit le code de retour de la rponse
void setHeader(String Nom, String
Valeur)
Dfinit une paire cl/valeur dans les en-
ttes
void setContentType(String type)
Dfinit le type MIME de la rponse HTTP,
c'est--dire le type de donnes envoyes
au navigateur
void setContentLength(int len)
Dfinit la taille de la rponse
PrintWriter getWriter()
Retourne un objet PrintWriter
permettant d'envoyer du texte au
navigateur client.
ServletOutputStream getOutputStream()
Dfinit un flot de donnes envoyer au
client, par l'intermdiaire d'un objet
ServletOutputStream, driv de la
classe java.io.OutputStream
void sendredirect(String location)
Permet de rediriger le client vers l'URL
location
Copyright ACS TechnoCenter / N. Chenfour, Tel : 06 63 05 10 39, email : nchenfour@acs.ma
20
2.8 Traitement des formulaires
1- On crit un fichier HTML pour le formulaire :
Code du Formulaire :
<html>
<body>
<form name="FormName" action="RepProduit.html" method="post">
<table border="0">
<tr><td>Ref : </td><td><input type="text" name="Ref" size="10"></td>
<tr><td>Desig : </td><td>
<input type="text" name="Desig" size="30"></td>
<tr><td>PU : </td><td><input type="text" name="PU" size="6"></td>
<tr><td>Quantit : </td><td><input type="text" name="Q" size="6"></td>
<tr><td colspan=2><input type="submit" value="Enregistrer"></td></tr>
</table>
</form>
</body>
</html>
Avec "RepProduit.html" tant le nom de mapping de la Servlet :
Copyright ACS TechnoCenter / N. Chenfour, Tel : 06 63 05 10 39, email : nchenfour@acs.ma
21
2- Code de La Servlet :
import java.io.PrintWriter;
import javax.servlet.*;
import javax.servlet.http.*;
public class RepProduit extends HttpServlet {
public void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException {
try {
String ref = request.getParameter("Ref");
String desig = request.getParameter("Desig");
String pu = request.getParameter("PU");
String q = request.getParameter("Q");
Produit p = new Produit(ref, desig, pu, q);
}
catch(Exception e) {}
}
public void doPost(HttpServletRequest request, HttpServletResponse
response) throws ServletException {
doGet(request, response);
}
}
Copyright ACS TechnoCenter / N. Chenfour, Tel : 06 63 05 10 39, email : nchenfour@acs.ma
22
2.9 Le Descripteur de dploiement
Le descripteur de dploiement d'une application web est un fichier nomm
web.xml situ dans le rpertoire WEB-INF du rpertoire racine de l'application
web. Il contient les caractristiques et paramtres de l'application. Cela inclut
la description des servlets utilises, ou les diffrents paramtres
d'initialisation.
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app>
...
</web-app>
Dans le fichier web.xml, tous les paramtres de configuration sont dfinis
entre les balises web-app.
2.9.1 Description de l'application
<web-app>
...
<display-name></display-name>
<description> </description>
...
</web-app>
Deux balises relvent de la description de l'application. La premire, display-
name permet de donner un nom l'application. Il s'agit de description, pour
s'y retrouver dans les fichiers. Cela n'a pas d'incidence sur le fonctionnement
de la webapp. La balise description permet de fournir une description plus
dtaille. De mme, elle est inoprante techniquement parlant.
Copyright ACS TechnoCenter / N. Chenfour, Tel : 06 63 05 10 39, email : nchenfour@acs.ma
23
2.9.2 Dclaration des servlets
Il convient ensuite de dclarer les servlets que l'application utilise. C'est--dire
les servlets potentiellement accessibles par les clients, au travers d'une URL.
<web-app>
...
<servlet>
<servlet-name>maservlet</servlet-name>
<servlet-class>com.acs.jee.FirstServlet</servlet-class>
<description>une servlet simple.</description>
<init-param>
<param-name></param-name>
<param-value></param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
...
</web-app>
La balise <servlet> </servlet> doivent encadrer la dclaration d'une
servlet.
On doit affecter un nom chaque servlet dclare, dans une balise
<servlet-name>. Ce nom n'est pas ncessairement le nom de la classe
de la servlet. Il s'agit d'un identifiant interne au fichier web.xml, rutilis
par la suite.
La balise <description> permet de fournir des informations
supplmentaires sur la servlet, si on le souhaite. Cela n'a pas d'utilit
technique, cette description n'est visible qu'ici.
Copyright ACS TechnoCenter / N. Chenfour, Tel : 06 63 05 10 39, email : nchenfour@acs.ma
24
Enfin, il est bien sr indispensable de dfinir la classe de la servlet, dans
la balise <servlet-class>. Rappelons que cette classe doit se trouver
dans le rpertoire WEB-INF/classes de l'application, en respectant les
packages. Dans notre cas, la classe devra tre :
WEB-INF/classes/com/acs/jee/FirstServlet.class.
Il est possible de spcifier des paramtres d'initialisation pour une
servlet. Il s'agit de paramtres chargs en mme temps que la servlet,
et qu'elle peut rcuprer. Ce genre de paramtre se dclare au sein de
balises <init-param>. La sous-balise <param-name> permet alors de
dfinir le nom du paramtre, sa valeur tant spcifie dans la sous-
balise <param-value>. L'application peut rcuprer la valleur de ce
paramtre laide de la mthode suivante :
getServletConfig().getInitParameter(""),
le paramtre fournir la mthode tant un param-name de ce fichier,
pour en rcuprer la param-value.
La balise load-on-startup demande que la servlet soit charge ds le
dmarrage du serveur (et non lors de sa premire sollicitation). Le
nombre entier situ l'intrieur de ces balises reprsente l'ordre de
chargement. S'il y avait plusieurs servlets dans ce fichier, on pourrait
dfinir par exemple la position 2 de chargement pour une autre...
2.9.3 Mapping des servlets
<web-app>
...
<servlet-mapping>
<servlet-name>maservlet</servlet-name>
<url-pattern>/uneservlet</url-pattern>
</servlet-mapping>
...
</web-app>
Copyright ACS TechnoCenter / N. Chenfour, Tel : 06 63 05 10 39, email : nchenfour@acs.ma
25
Le mapping d'une servlet sert indiquer au serveur quelle servlet charger
pour une requte donne du client. Remarquons que les URL des servlets sont
relatives l'URL du contexte (la webapp) auquel elles appartiennent.
Effectuer un mapping est trs simple, et se droule au sein d'une balise
servlet-mapping. Il faut spcifier le nom de la servlet mapper (balise
servlet-name). Ce nom doit correspondre un nom de servlet dfini dans la
dclaration des servlets. Puis, dans la balise url-pattern, dfinir l'URL par
laquelle cette servlet est accessible. Il s'agit bien d'une pattern, car il est
possible d'utiliser des caractres spciaux. L'instruction suivante par exemple
<url-pattern>/test/*</url-pattern> permet de configurer laccs la servlet
ds que l'URL contiendra la squence "/test/" (n'importe quelle URL
commenant par "/test/").
2.9.4 Paramtres de contexte
Il est galement possible de dfinir des paramtres de contexte pour une
application web. A la diffrence des paramtres d'initialisation de servlets,
ceux-ci seront accessibles par toutes les servlets de l'application web dont ce
fichier est le descripteur de dploiement.
<web-app>
...
<context-param>
<param-name></param-name>
<param-value></param-value>
<description></description>
</context-param>
...
</web-app>
Copyright ACS TechnoCenter / N. Chenfour, Tel : 06 63 05 10 39, email : nchenfour@acs.ma
26
Les balises param-name et param-value permettent respectivement de dfinir
le nom du paramtre et sa valeur. Quant la balise description, elle autorise
comme d'habitude l'apposition d'une petite description, non oprante
techniquement.
Une servlet peut rcuprer un tel paramtre grce la mthode
getServletContext().getInitParameter("applicationName"),
le paramtre fournir la mthode tant un param-name de ce fichier, pour
en rcuprer la param-value.
2.9.5 Fichiers index
<web-app>
...
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
...
</web-app>
Un descripteur de dploiement permet galement de spcifier les fichiers
d'accueil de l'application web. Dans notre exemple, si le path du Context de
l'application web est "/appli", l'URL "http://localhost:port/appli" appelle la
page d'accueil. Le serveur cherchera donc la page index.html dans le
document root de l'application. Si elle n'existe pas (mieux vaut alors ne pas la
fournir dans cette liste !), le fichier index.jsp sera recherch. Notons que,
dans Tomcat 5 (spcification 2.4 des servlets), l'on peut dfinir une servlet
comme fichier d'accueil, en insrant dans la liste son servlet-name.
Copyright ACS TechnoCenter / N. Chenfour, Tel : 06 63 05 10 39, email : nchenfour@acs.ma
27
2.9.6 Mapping de types MIME
<web-app>
...
<mime-mapping>
<extension>jpg</extension>
<mime-type>image/jpeg</mime-type>
</mime-mapping>
...
</web-app>
Lorsque le serveur recevra une requte pour une ressource statique (fichier
HTML, image, fichier multimdia...), il enverra la ressource s'il la trouve. Dans
la rponse HTTP, il devra paramtrer l'en-tte Content-Type (type de
contenu). Pour ce faire, il se basera sur ces types MIME mapps, en fonction
de l'extension du fichier retourner. Donc, si par exemple un fichier .jpg lui
est demand, il dfinira le Content-Type comme image/jpeg. Ceci est
prsent ici titre d'information. Notons bien que les mapping de types MIME
sont prvus dans le fichier web.xml gnral de Tomcat
(TOMCAT_HOME/conf/web.xml). On peut donc en rajouter directement dans
ce fichier. Nanmoins, il est utile de savoir que l'on peut en dfinir dans tous
les descripteurs de dploiement, et limiter ainsi leur porte l'application
concerne.
Copyright ACS TechnoCenter / N. Chenfour, Tel : 06 63 05 10 39, email : nchenfour@acs.ma
28
2.9.7 Scurisation des resources web
Contraintes de scurit
Protger l'accs une ressource consiste lui appliquer une contrainte de
scurit. Cette contrainte sera dfinie dans le descripteur de dploiement
web.xml. Toute l'application ne sera pas ncessairement scurise, nous
allons pouvoir dfinir quelles ressources sont protger.
Une contrainte de scurit se dfinie entre les balises <security-constraint>
et </security-constraint>. Exemple :
<web-app>
...
<security-constraint>
<display-name>...</display-name>
<web-resource-collection>
<web-resource-name>...</web-resource-name>
<url-pattern></url-pattern>
<url-pattern></url-pattern>
<http-method>GET</http-method>
<http-method>POST</http-method>
</web-resource-collection>
<auth-constraint>
<role-name></role-name>
<role-name></role-name>
</auth-constraint>
</security-constraint>
...
</web-app>
Copyright ACS TechnoCenter / N. Chenfour, Tel : 06 63 05 10 39, email : nchenfour@acs.ma
29
Comme dans les diffrentes configurations de dploiement, on fournit un nom
pour notre contrainte de scurit <display-name>.
L'lment <web-resource-collection> dcrit les ressources pour lesquelles
la contrainte va s'appliquer. La balise <web-resource-name> donne un nom
cet ensemble de ressources. Nom qui pourra tre rutilis dans certaines
demandes d'authentification.
L'lment <url-pattern> permet de dfinir pour quelles URL la contrainte
doit tre mise en oeuvre. C'est donc ici que l'on slectionne les ressources
protger. Comme d'habitude, il s'agit d'un pattern, on peut donc notamment
utiliser le caractre '*'. Si on met par exemple :
<url-pattern>/acs/*</url-pattern>
alors toutes les URL commenant par "/acs/" seront concernes par la
protection. Comme d'habitude, il s'agit d'une URL relative celle du contexte
de l'application.
Grce aux balises <http-method>, on peut dfinir les mthodes HTTP
concernes par la contrainte. On pourra ainsi indiquer que l'accs telle
ressource par la mthode GET doit tre protge, mais pas l'accs cette
mme ressource par la mthode POST. Dans lexemple, nous avons protg
les deux.
Une fois les ressources protger sont dfinies, il convient de prciser quels
utilisateurs, et plus exactement quels rles peuvent y avoir accs. dans la
balise <auth-constraint>, on peut indiquer les <role-name> ayant le droit
d'accder aux ressources dfinies plus haut. Ces noms de rles doivent bien
sr correspondre aux rles connus par Tomcat.
Une fois les contraintes de scurit dfinies, nous devons spcifier le mode de
login (ou authentification) des utilisateurs. Il existe plus quune solution :
- authentification basique utilisant une bote de dialogue standard
gnre automatiquement.
- Ou par formulaire personnalis par le dveloppeur.
Copyright ACS TechnoCenter / N. Chenfour, Tel : 06 63 05 10 39, email : nchenfour@acs.ma
30
La configuration du mode de login laide de lauthentification basique est
ralise laide de la balise <login-config>. Le contenu de cet lment varie
selon la mthode d'authentification. Nous nous intressons ici la mthode
basique. Elle consiste en une bote de dialogue, gre par le navigateur, qui
demande le login et le mot de passe. Elle envoie ensuite l'information au
serveur qui se charge des vrifications ncessaires. Il est noter que si l'on
peut mettre plusieurs contraintes de scurits dans une webapp, un seul
login-config est acceptable :
<web-app>
...
<security-constraint>
...
</security-constraint>
<login-config>
<auth-method>BASIC</auth-method>
<realm-name></realm-name>
</login-config>
...
</web-app>
Cela aura pour effet, lorsque l'utilisateur demandera une URL protge,
d'afficher la bote de dialogue suivante dans le navigateur :