Académique Documents
Professionnel Documents
Culture Documents
présenté par :
SALHI Dhai eddine
Table des Matières
1 Introduction 4
2 Modèle Client/Serveur 5
2.1 Qu’est-ce qu’un serveur ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.2 Qu’est-ce qu’un client ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.3 Qu’appelle-t-on architecture client/serveur ? . . . . . . . . . . . . . . . . . . . . 5
2.4 Avantages du modèle client/serveur . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.5 Inconvénients du modèle client/serveur . . . . . . . . . . . . . . . . . . . . . . . 7
3 Protocole http 8
3.1 Format d’une URL http . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
3.2 Champs de l’URL HTTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
3.3 Méthodes http . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
3.4 Requête et réponse http . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
3.5 Codes de statut . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
4 Plateforme Java EE 12
4.1 Séparation des préoccupations . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
4.2 Le développement web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
4.3 Architecture J2EE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
4.4 Les Conteneurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
4.4.1 Le conteneur web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
4.4.2 Application Web avec un conteneur . . . . . . . . . . . . . . . . . . . . . 16
4.5 Module Web (.war) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
5 Les servlets 18
5.1 La présentation des servlets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
5.2 Le fonctionnement d’une servlet (cas d’utilisation de http) . . . . . . . . . . . . 18
5.3 Le rôle du conteneur web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
5.4 Cycle de vie d’une servlet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
5.5 Les servlets http . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
5.6 L’analyse de la requête . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
5.7 La méthode doGet() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
5.8 La méthode doPost() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
5.9 Exemple de servlet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
5.10 La structure d’un fichier .war . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
5.11 Le fichier web.xml . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
8 Les sessions 39
8.1 Les méthodes traditionnelles de suivi de session . . . . . . . . . . . . . . . . . . 39
8.1.1 Réécriture d’URL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
8.1.2 Champs de formulaire cachés . . . . . . . . . . . . . . . . . . . . . . . . 40
8.1.3 Utilisation de cookies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
8.2 L’objet HttpSession . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
8.2.1 Comment obtenir l’objet HttpSession? . . . . . . . . . . . . . . . . . . . 41
1 INTRODUCTION CAWA SALHI.D
1 Introduction
Quand on parle d’une application web, la première pensée est un site web. Par exemple, un
client devant son PC ouvre un navigateur web et veut consulter son extrait de compte CCP, les
informations de son compte sont affichées dans une page HTML avec une interface graphique
attirante et dynamique faite en CSS, JavaScript, etc. et à chaque moi le client remarque que la
somme est modifié cela veut dire qu’il y a un système d’information derrière cette interface qui
modifie et stocke les données et qui a une relation avec la partie Web (où bien qui peu interpréter
les données en une page HTML), le but de cette matière est de connaitre les composants de ce
système présenté dans le schéma suivant :
Application Web
A partir de ce schéma, nous constatons que nous avons besoin de connaitre deux primitives
avant de passer à développer une application web : la première est l’architecture Client/serveur
et la deuxième est le protocole http.
Le World Wide Web est un grand système réparti sur un ensemble de machines connectées par
un réseau Internet. A travers ce système nous pouvons envoyer plusieurs types de données :
textes, images, sons, vidéos, etc. La figure suivante illustre la communication entre le client et
le serveur via le World Wide Web.
4
2 MODÈLE CLIENT/SERVEUR CAWA SALHI.D
2 Modèle Client/Serveur
L’environnement client/serveur désigne un mode de communication à travers un réseau entre
plusieurs programmes ou logiciels : l’un, qualifié de client, envoie des requêtes ; l’autre ou les
autres, qualifiés de serveurs, attendent les requêtes des clients et y répondent. Par extension,
le client désigne également l’ordinateur sur lequel est exécuté le logiciel client, et le serveur,
l’ordinateur sur lequel est exécuté le logiciel serveur.
On appelle logiciel serveur un programme qui offre un service sur le réseau. Le serveur accepte
des requêtes, les traite et renvoie le résultat au demandeur. Le terme serveur s’applique à la
machine sur lequel s’exécute le logiciel serveur.
On appelle logiciel client un programme qui utilise le service offert par un serveur. Le client
envoie une requête et reçoit la réponse. Le client peut-être raccordé par une liaison temporaire.
Architecture à 2 niveaux
5
2 MODÈLE CLIENT/SERVEUR CAWA SALHI.D
Architecture à 2 niveaux
Architecture à 3 niveaux
Dans cette architecture (3-tier en anglais), aussi nommée trois tiers en français, un niveau
supplémentaire est ajouté :
• Un serveur de données qui fournit au serveur d’application les données requises pour
répondre au client.
Architecture à 3 niveaux
Architecture à N niveaux
L’architecture 3 niveaux permet de spécialiser les serveurs dans une tâche précise : avantage
de flexibilité, de sécurité et de performance. L’architecture peut être étendue sur un nombre
de niveaux plus important : on parle dans ce cas d’architecture à N niveaux (ou multi-tier).
6
2 MODÈLE CLIENT/SERVEUR CAWA SALHI.D
• Des ressources centralisées : étant donné que le serveur est au centre du réseau, il peut
gérer des ressources communes à tous les utilisateurs, comme par exemple une base de
données centralisée, afin d’éviter les problèmes de redondance et de contradiction
• Une meilleure sécurité : car le nombre de points d’entrée permettant l’accès aux données
est moins important
• Une administration au niveau serveur : les clients ayant peu d’importance dans ce modèle,
ils ont moins besoin d’être administrés
• Un réseau évolutif : grâce à cette architecture il est possible de supprimer ou rajouter des
clients sans perturber le fonctionnement du réseau et sans modification majeure
• Un maillon faible : le serveur est le seul maillon faible du réseau client/serveur, étant
donné que tout le réseau est architecturé autour de lui ! Heureusement, le serveur a une
grande tolérance aux pannes (notamment grâce au système RAID)
7
3 PROTOCOLE HTTP CAWA SALHI.D
3 Protocole http
HTTP (Hypertext Transfer Protocol) permet d’accéder aux fichiers situés sur le réseau Internet.
Il est notamment utilisé pour le World Wide Web. En matière de protocole, HTTP se place
au dessus de TCP et fonctionne selon un principe de requête/réponse : le client transmet
une requête comportant des informations sur le document demandé et le serveur renvoie le
document si disponible ou, le cas échéant, un message d’erreur.
Protocole http
HTTP est un protocole sans connexion et chaque couple requête/réponse est de ce fait indépendant.
HTTP://<host>:<port>/<path>?<query>#<fragment>
8
3 PROTOCOLE HTTP CAWA SALHI.D
Les méthodes HTTP les plus fréquemment utilisées sont : GET, POST et HEAD. Cinq autres
méthodes sont cependant définies. Le tableau suivant détaille les méthodes HTTP disponible
en fonction de la version du protocole :
Méthodes http
Requête http
• Une ligne de requête (request-line) contenant la méthode utilisée, l’URL du service de-
mandé, la version utilisée de http.
9
3 PROTOCOLE HTTP CAWA SALHI.D
Réponse http
• Une ligne de statut (status-line) contenant la version de HTTP utilisée et un code d’état
• Le corps du document retourné (les données HTML ou binaires par exemple). Une réponse
ne contient pas obligatoirement un corps (exemple : sil s’agit d’une réponse à une requête
HEAD, seule la ligne de statut et les en-têtes sont retournés.
HTTP/1.1 200 OK
Date: Mon, 15 Dec 2003 23:48:34 GMT
Server: Apache/1.3.27 (Darwin) PHP/4.3.2 mod_perl/1.26
Expires: Mon, 15 Dec 2003 23:49:34 GMT
Last-Modified: Fri, 04 May 2001 00:00:38 GMT
Accept-Ranges: bytes
Content-Length: 1456
Content-Type: text/html
<html>
...
Dans cet exemple, le code 200 nous indique que le document demandé a été trouvé. Pour
faciliter la gestion du cache du client, le serveur transmet la date actuelle, la date de dernière
modification du document et la date d’expiration (après laquelle le document doit être demandé
à nouveau).
L’en-tête Content-Type nous apprend que le document retourné est de type HTML et l’en-
tête Content-length indique que le corps du document a une longueur de 1456 octets. L’en-
tête Server renseigne sur le logiciel serveur utilisé. L’envoi d’une telle information n’est pas
recommandé d’un point de vue sécuritaire.
10
3 PROTOCOLE HTTP CAWA SALHI.D
Lorsque le serveur renvoie un document, il lui associe un code de statut renseignant ainsi le
client sur le résultat de la requête (requête invalide, document non trouvé...). Les principales
valeurs des codes de statut HTTP sont détaillées dans le tableau ci-après.
Codes de statut
11
4 PLATEFORME JAVA EE CAWA SALHI.D
4 Plateforme Java EE
De nombreuses possibilités existent pour réaliser des applications Internet depuis plusieurs
années. Des langages ont été créés, des architectures et des environnements de travail ont été
conçus pour répondre aux besoins et faciliter la tâche des développeurs. Sun (le concepteur de
Java) a donc mis en place un ensemble de technologies pour réaliser des applications Web. Ces
technologies sont regroupées sous le nom J2EE (Java 2 Entreprise Edition), désormais Java EE
et c’est le but de notre cours qui repose sur 2 objectifs majeurs :
• Développer une application web robuste basée sur une plateforme et architecture solide.
Et pour pouvoir bien traiter les deux points précédents, il faut avoir certains pré-requis :
Il est possible de représenter Java EE comme un ensemble de spécifications d’API, une archi-
tecture, une méthode de packaging et de déploiement d’applications et la gestion d’applications
déployées sur un serveur compatible Java. Où Une API est un ensemble de librairies ou bib-
liothèques de fonctions destinées à être utilisées par les programmeurs dans leurs applications.
Java Entreprise Edition est destiné aux gros (très gros) systèmes d’entreprises. Les librairies
utilisées fonctionnent difficilement sur un simple PC et requièrent une puissance beaucoup plus
importante (notamment au niveau de la mémoire).
Java Entreprise Edition est apparue à la fin des années 90. Cette évolution apporte au langage
Java une plateforme logicielle robuste et complète pour le développement. La plateforme Java
EE a souvent été remise en cause, mal utilisée et mal comprise. Des outils Open Source sont
venus la concurrencer. Ces remarques et la concurrence ont permis à Sun d’améliorer son pro-
duit et d’éditer des versions de plus en plus abouties. Java EE ne remplace en aucun cas J2SE.
Au contraire, J2SE est la base de Java EE qui est plus complet et qui est axé sur le Web. La
plateforme J2SE offre des outils de développement d’applications client/serveur, applications
graphiques fenêtrées et Applets.
12
4 PLATEFORME JAVA EE CAWA SALHI.D
La plateforme J2EE sépare la partie présentation de la partie métier et la partie données bien
sur, le client léger interroge la partie présentation par le protocole http, cette partie demande
les traitements au niveau de coté métier par le protocole RMI. Le métier obtient les données
stockées dans les SGBD par le protocole SQL.
Le développement web se base sur deux critères essentiels le serveur web et le serveur d’application.
- Le serveur web : marche sur le protocole http, répond aux requêtes des clients (demande
page web) et qui retourne les pages.
- Le serveur d’application : il exécute les codes sources demandés par les clients lourds où
par le serveur web.
Il existe deux types de pages web :
- Les pages statiques : Elles fonctionnent sur un serveur web seulement, le serveur cherche la
page demandée dans le système des fichiers et renvoie au client telle quelle sans aucun change-
ment.
13
4 PLATEFORME JAVA EE CAWA SALHI.D
- Les pages dynamiques : Le serveur web a besoin d’aide d’un serveur d’application pour
faire le traitement dynamique.
NB : Attention à ne pas confondre avec une page animée et une page dynamique.
Java EE est une plate-forme fortement orientée serveur pour le développement et l’exécution
d’applications distribuées. Elle est composée de deux parties essentielles :
• Un ensemble de spécifications pour une infrastructure dans laquelle s’exécutent les com-
posants écrits en Java : un tel environnement se nomme serveur d’application.
• Un ensemble d’APIs qui peuvent être obtenues et utilisées séparément. Pour être utilisées,
certaines nécessitent une implémentation de la part d’un fournisseur tiers.
Une API (Application Programming Interface ) est une interface de programmation. C’est un
ensemble de fonctions, procédures ou classes mises à disposition des programmes informatiques
sous forme de bibliothèque logicielle.
L’architecture d’une application se découpe idéalement en au moins trois tiers :
• La partie cliente : permet le dialogue avec l’utilisateur. Elle peut être composée :
– d’applets.
• La partie métier : encapsule les traitements (dans des EJB, JSP et Servlets).
14
4 PLATEFORME JAVA EE CAWA SALHI.D
Architecture J2EE
Les conteneurs assurent la gestion du cycle de vie des composants qui s’exécutent en eux. Les
conteneurs fournissent des services qui peuvent être utilisés par les applications lors de leur
exécution. Il existe plusieurs conteneurs définit par Java EE:
Afin de réaliser une application web dynamique, nous avons besoin de deux types de pages
EE Servlet et JSP. Ces deux types de pages sont enregistrés dans un répertoire qui s’appelle
le conteneur Web, où nous trouvons aussi tous les fichiers qui concerne les coté web : CSS,
JavaScript, etc. Ce conteneur est le responsable de générer les réponses HTML aux clients.
• Servlets : qui sont des classes Java spécifiques pouvant être exécutées sur un serveur JEE.
La méthode principale de ces classes sera appelée à chaque requête du client et recevra
en paramètre la requête soumise. Après traitement (dans le corps de la méthode), elle
renverra ensuite au client la page HTML générée. Tomcat est un exemple de conteneur.
• JSP : qui ont le même but que les Servlets mais avec une syntaxe plus proche de l’HTML
(comparable au PHP).
15
4 PLATEFORME JAVA EE CAWA SALHI.D
Un fichier WAR (pour Web application Archive) est un fichier JAR utilisé pour contenir un
ensemble de Java Server Pages, servlets, classes Java, fichiers XML, et des pages web statiques
(HTML, JavaScript. . . ), le tout constituant une application web. Cette archive est utilisée pour
déployer une application web sur un serveur d’applications.
16
4 PLATEFORME JAVA EE CAWA SALHI.D
Le répertoire source contient les fichiers JSP et les pages HTML statiques ainsi que les différents
fichiers web CSS, JavaScript, etc.
Le répertoire WEB-INF contient le fichier web.xml qui définit la structure et le paramétrage
de l’application web. Si l’application est fondée uniquement sur des fichiers JSP, alors web.xml
peut être omis. Si l’application est fondée sur des servlets, alors web.xml indique quelles sont
les URL associées à chaque servlet. Le fichier est aussi utilisé pour définir des variables et pour
définir des dépendances à prendre en compte pour le déploiement.
Le répertoire WEB-INF/classes est prévu pour contenir les fichiers .class, et est automatique-
ment inclus dans le classpath. De la même façon, le répertoire WEB-INF/lib est prévu pour
contenir les bibliothèques Java.
17
5 LES SERVLETS CAWA SALHI.D
5 Les servlets
A la base, les serveurs web sont seulement capables de renvoyer des fichiers présents sur le
serveur en réponse à une requête d’un client. Cependant, pour permettre l’envoi d’une page
HTML contenant par exemple une liste d’articles répondant à différents critères, il faut créer dy-
namiquement cette page HTML. Plusieurs solutions existent pour ces traitements. Les servlets
Java sont une de ces solutions.
Une servlet est un programme qui s’exécute côté serveur en tant qu’extension du serveur. Elle
reçoit une requête du client, elle effectue des traitements et renvoie le résultat. La liaison entre
la servlet et le client peut être directe ou passer par un intermédiaire comme par exemple un
serveur http.
Même si pour le moment la principale utilisation des servlets est la génération de pages html
dynamiques utilisant le protocole http et donc un serveur web, n’importe quel protocole re-
posant sur le principe de requête/réponse peut faire usage d’une servlet.
Ecrite en Java, une servlet en retire ses avantages : la portabilité, l’accès à toutes les API de
Java dont JDBC pour l’accès aux bases de données, ...
Une servlet peut être invoquée plusieurs fois en même temps pour répondre à plusieurs requêtes
simultanées.
Dans une architecture Client/Serveur trois tiers, la servlet se positionne dans le tiers du milieu
entre le client léger chargé de l’affichage et la source de données.
Un serveur d’applications permet de charger et d’exécuter les servlets dans une JVM. C’est
une extension du serveur web. Ce serveur d’applications contient entre autres un moteur de
servlets qui se charge de manager les servlets qu’il contient.
Pour exécuter une servlet, il suffit de saisir une URL qui désigne la servlet dans un navigateur.
18
5 LES SERVLETS CAWA SALHI.D
• Le serveur crée un objet qui représente la requête http ainsi que l’objet qui contiendra la
réponse et les envoie à la servlet.
• La servlet crée dynamiquement la réponse sous forme de page html transmise par un flux
dans l’objet contenant la réponse. La création de cette réponse utilise bien sûr la requête
du client mais aussi un ensemble de ressources incluses sur le serveur telles que des fichiers
ou des bases de données.
Un conteneur web est un moteur de servlets qui prend en charge et gère les servlets : chargement
de la servlet, gestion de son cycle de vie, passage des requêtes et des réponses ... Un conteneur
web peut être intégré dans un serveur d’applications qui va contenir d’autres conteneurs et
éventuellement proposer d’autres services..
Le chargement et l’instanciation d’une servlet se font selon le paramétrage soit au lancement du
serveur soit à la première invocation de la servlet. Dès l’instanciation, la servlet est initialisée
une seule et unique fois avant de pouvoir répondre aux requêtes. Cette initialisation peut
permettre de mettre en place l’accès à des ressources telles qu’une base de données.
1.Chargement de la classe
2.Instanciation du servlet
3.Appel de init()
5.Appel de destroy()
19
5 LES SERVLETS CAWA SALHI.D
L’usage principal des servlets est la création de pages HTML dynamiques. L’API fournit une
classe qui encapsule une servlet utilisant le protocole http. Cette classe est la classe HttpServlet.
Cette classe hérite de GenericServlet, donc elle implémente l’interface Servlet, et redéfinit toutes
les méthodes nécessaires pour fournir un niveau d’abstraction permettant de développer facile-
ment des servlets avec le protocole http.
Ce type de servlet n’est pas utile seulement pour générer des pages HTML bien que cela soit
son principal usage, elle peut aussi réaliser un ensemble de traitements tels que mettre à jour
une base de données. En réponse, elle peut générer une page html qui indique le succès ou
non de la mise à jour. Une servlets peut aussi par exemple renvoyer une image qu’elle aura
dynamiquement générée en fonction de certains paramètres.
Elle définit un ensemble de fonctionnalités très utiles : par exemple, elle contient une méthode
service() qui appelle certaines méthodes à redéfinir en fonction du type de requête http (do-
Get(), doPost(), etc ...).
La requête du client est encapsulée dans un objet qui implémente l’interface HttpServletRe-
quest : cet objet contient les données de la requête et des informations sur le client.
La réponse de la servlet est encapsulée dans un objet qui implémente l’interface HttpServle-
tResponse.
Typiquement pour définir une servlet, il faut définir une classe qui hérite de la classe HttpServlet
et redéfinir la méthode doGet() et/ou doPost() selon les besoins.
20
5 LES SERVLETS CAWA SALHI.D
La méthode service() héritée de HttpServlet appelle l’une ou l’autre de ces méthodes en fonction
du type de la requête http :
• une requête GET : c’est une requête qui permet au client de demander une ressource.
• une requête POST : c’est une requête qui permet au client d’envoyer des informations
issues par exemple d’un formulaire.
Une servlet peut traiter un ou plusieurs types de requêtes grâce à plusieurs autres méthodes :
La classe HttpServlet hérite aussi de plusieurs méthodes définies dans l’interface Servlet : init(),
destroy() et getServletInfo().
La méthode service() est la méthode qui est appelée lors de l’invocation de la servlet.
Par défaut dans la classe HttpServlet, cette méthode contient du code qui réalise une analyse
de la requête client contenue dans l’objet HttpServletRequest. Selon le type de requête GET ou
POST, elle appelle la méthode doGet() ou doPost(). C’est bien le type de requête qui indique
la méthode à utiliser dans la servlet.
Ainsi, la méthode service() n’est pas à redéfinir pour ces requêtes et il suffit de redéfinir les
méthodes doGet() et/ou doPost() selon les besoins.
Une requête de type GET est utile avec des liens. Par exemple :
Dans une servlet de type HttpServlet, une telle requête est associée à la méthode doGet().
21
5 LES SERVLETS CAWA SALHI.D
La méthode doGet()
Dans l’exemple ci-dessus, le formulaire comporte deux zones de saisies correspondant à deux
paramètres : NOM et PRENOM.
Dans une servlet de type HttpServlet, une telle requête est associée à la méthode doPost().
La méthode doPost()
La méthode doPost() doit généralement recueillir les paramètres pour les traiter et générer
la réponse. Pour obtenir la valeur associée à chaque paramètre il faut utiliser la méthode
getParameter() de l’objet HttpServletRequest. Cette méthode attend en paramètre le nom du
paramètre dont on veut la valeur. Ce paramètre est sensible à la casse.
22
5 LES SERVLETS CAWA SALHI.D
Au dessous nous avons une servlet avec la méthode doPost qui reçoit une demande via un
formulaire HTML post, et la réponse contient les informations sur le serveur qui exécute la
requête. et voici le code source complet:
Résultat de Servlet
23
5 LES SERVLETS CAWA SALHI.D
Comme les fichiers jar, les fichiers war possèdent une structure particulière qui est incluse dans
un fichier compressé de type ”zip” possédant comme extension ”.war”.
war.jpg
Le nom du fichier .war est important car ce nom sera automatiquement associé dans l’url pour
l’accès à l’application en concaténant le nom du domaine, un slash et le nom du fichier war. Par
exemple, pour un serveur web sur le poste local avec un fichier test.war déployé sur le serveur
d’applications, l’url pour accéder à l’application web sera http://localhost/test/.
Le répertoire WEB-INF et le fichier web.xml qu’il contient doivent obligatoirement être présents
dans l’archive. Le fichier web.xml est le descripteur de déploiement de l’application web.
Le serveur web peut avoir accès par le serveur d’applications à toutes les ressources contenues
dans le fichier .war hormis celles présentes dans le répertoire WEB-INF. Ces dernières ne sont
accessibles qu’au serveur d’application.
Le répertoire WEB-INF/classes est automatiquement ajouté par le conteneur au CLASSPATH
lors du déploiement de l’application web.
Toute l’arborescence avec les fichiers qu’elle contient sera incluse dans le fichier nom-web-
app.war.
Le fichier /WEB-INF/web.xml est un fichier au format XML qui est le descripteur de déploiement
permettant de configurer : l’application, les servlets, les sessions, les bibliothèques de tags per-
sonnalisés, les paramètres de contexte, les types Mimes, les pages par défaut, les ressources
externes, la sécurité de l’application et des ressources J2EE.
24
5 LES SERVLETS CAWA SALHI.D
Le fichier web.xml commence par un prologue et une indication sur la version de la DTD à
utiliser. Celle-ci dépend des spécifications de l’API servlet utilisée.
Le fichier web.xml contient une entête qui déclare la version de xml ainsi que le type de codage.
<servlet>
</servlet>
2. Le tag h icon i permet de préciser une petite et une grande image pour les outils
graphiques.
<servlet>
<icon>
<small-icon>image/iconSmall.gif</small-icon>
</icon>
</servlet>
3. Le tag h servlet-name i permet de donner un nom à la servlet qui sera utilisé pour le
mapping avec l’URL par défaut de la servlet.
<servlet>
<servlet-name>MaServlet</servlet-name>
</servlet>
<servlet>
<servlet-name>MaServlet</servlet-name>
<servlet-class>projet.Maservlet</servlet-class>
</servlet>
25
5 LES SERVLETS CAWA SALHI.D
5. Le tag hservlet-mappingi permet d’associer la servlet à une URL. Ce tag possède les
tags fils hservlet-name¿i et hservlet-mappingi.
<servlet-mapping>
<servlet-name>MaServlet</servlet-name>
<url-pattern>/Monlien</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>60</session-timeout>
</session-config>
7. Le tag hwelcome-file-listi permet de définir les pages par défaut. Chacun des fichiers
est défini grâce au tag fils hwelcome-filei
<welcome-file-list>
<welcome-file>MaServlet</welcome-file>
</welcome-file-list>
26
6 LES JSP (JAVA SERVER PAGES) CAWA SALHI.D
Les JSP permettent d’introduire du code Java dans des tags prédéfinis à l’intérieur d’une page
HTML. La technologie JSP mélange la puissance de Java côté serveur et la facilité de mise en
page d’HTML côté client.
Une JSP est habituellement constituée :
• de tags JSP
Concrètement, les JSP sont basées sur les servlets. Au premier appel de la page JSP, le moteur
de JSP génère et compile automatiquement la servlet qui permet la génération de la page web.
Le code HTML est repris intégralement dans la servlet. Le code Java est inséré dans la servlet.
La servlet générée est compilée et sauvegardée puis elle est exécutée. Les appels suivants de la
JSP sont beaucoup plus rapides car la servlet, conservée par le serveur, est directement exécuté.
27
6 LES JSP (JAVA SERVER PAGES) CAWA SALHI.D
Les servlets et les JSP ont de nombreux points communs puisqu’une JSP est finalement con-
vertie en une servlet. Le choix d’utiliser l’une ou l’autre de ces technologies ou les deux doit
être fait pour tirer le meilleur parti de leurs avantages.
Dans une servlet, les traitements et la présentation sont regroupés. L’aspect présentation est
dans ce cas pénible à développer et à maintenir à cause de l’utilisation répétitive de méthodes
pour insérer le code HTML dans le flux de sortie. De plus, une simple petite modification
dans le code HTML nécessite la recompilation de la servlet. Avec une JSP, la séparation des
traitements et de la présentation rend ceci très facile et automatique.
Il est préférable d’utiliser les JSP pour générer des pages web dynamiques.
L’usage des servlets est obligatoire si celles-ci doivent communiquer directement avec une applet
ou une application et non plus avec un serveur web.
Dans un premier temps, Sun a fourni un kit de développement pour les JSP : le Java Server Web
Development Kit (JSWDK). Ensuite, Sun a chargé le projet Apache de développer l’implémentation
de référence du moteur de JSP : le projet Tomcat. Depuis la version 2.2, l’implémentation de
référence est le projet Glassfish.
Il est aussi possible d’utiliser n’importe quel conteneur web compatible avec les spécifications
28
6 LES JSP (JAVA SERVER PAGES) CAWA SALHI.D
Une grande partie du contenu d’une JSP est constituée de code HTML. D’ailleurs, le plus
simple pour écrire une JSP est d’écrire le fichier HTML avec un outil dédié et d’ajouter ensuite
les tags JSP pour ce qui concerne les parties dynamiques.
La seule restriction concernant le code HTML concerne l’utilisation des fragments < % et % >
dans la page générée. Dans ce cas. Sinon l’analyseur syntaxique du moteur de JSP considère
que ce sont des tags JSP et renvoie une erreur.
Les directives permettent de préciser des informations globales sur la page JSP. Les spécifications
des JSP définissent trois directives :
• include : permet d’inclure des fichiers statiques dans la JSP avant la génération de la
servlet
29
6 LES JSP (JAVA SERVER PAGES) CAWA SALHI.D
Cette directive doit être utilisée dans toutes les pages JSP : elle permet de définir des options
qui s’appliquent à toute la JSP.
Elle peut être placée n’importe où dans le source mais il est préférable de la mettre en début de
fichier, avant même le tag hHTMLi. Elle peut être utilisée plusieurs fois dans une même page
mais elle ne doit définir la valeur d’une option qu’une seule fois, sauf pour l’option import.
Les options sont :
2. buffer=”none | 8kb | sizekb” : Cette option permet de préciser la taille du buffer des
données générées contenues par l’objet out de type JspWriter.
7. language=”java” : Cette option définit le langage utilisé pour écrire le code dans la
JSP. La seule valeur autorisée actuellement est java.
8. session=”true—false” : Cette option permet de préciser si la JSP est incluse dans une
session ou non. La valeur par défaut (true) permet l’utilisation d’un objet session de type
HttpSession qui permet de gérer des informations dans une session.
30
6 LES JSP (JAVA SERVER PAGES) CAWA SALHI.D
Cette directive permet d’inclure un fichier dans le code source JSP. Le fichier inclus peut être
un fragment de code JSP, HTML ou Java. Le fichier est inclus dans la JSP avant que celle-ci
ne soit interprétée par le moteur de JSP.
Ce tag est particulièrement utile pour insérer un élément commun à plusieurs pages tel qu’un
en-tête ou un bas de page.
Si le fichier inclus est un fichier HTML, celui-ci ne doit pas contenir de tag
qui ferait double emploi avec ceux présents dans le fichier JSP. Ceci impose d’écrire des fichiers
HTML particuliers uniquement pour être inclus dans les JSP : ils ne pourront pas être utilisés
seuls.
La syntaxe est la suivante :
Si le chemin commence par un ’/’, alors le chemin est relatif au contexte de l’application, sinon
il est relatif au fichier JSP.
31
6 LES JSP (JAVA SERVER PAGES) CAWA SALHI.D
Ces tags permettent d’insérer du code Java qui sera inclus dans la servlet générée à partir de
la JSP. Il existe trois tags pour insérer du code Java :
• le tag de déclaration : le code Java est inclus dans le corps de la servlet générée. Ce
code peut être la déclaration de variables d’instances ou de classes ou la déclaration de
méthodes.
• le tag d’expression : évalue une expression et insère le résultat sous forme de chaı̂ne de
caractères dans la page web générée.
• le tag de scriptlets : par défaut, le code Java est inclus dans la méthode service() de la
servlet.
Il est possible d’utiliser dans ces tags plusieurs objets définis par les JSP.
32
6 LES JSP (JAVA SERVER PAGES) CAWA SALHI.D
Ce tag permet de déclarer des variables ou des méthodes qui pourront être utilisées dans la
JSP. Il ne génère aucun caractère dans le fichier HTML de sortie.
La syntaxe est la suivante :
Exemple :
Les variables ainsi déclarées peuvent être utilisées dans les tags d’expressions et de scriptlets.
Il est possible de déclarer plusieurs variables dans le même tag en les séparant avec des caractères
’ ;’.
Ce tag permet aussi d’insérer des méthodes dans le corps de la servlet.
Le moteur de JSP remplace ce tag par le résultat de l’évaluation de l’expression présente dans
le tag.
33
6 LES JSP (JAVA SERVER PAGES) CAWA SALHI.D
Ce résultat est toujours converti en une chaı̂ne. Ce tag est un raccourci pour éviter de faire
appel à la méthode println() lors de l’insertion de données dynamiques dans le fichier HTML.
La syntaxe est la suivante :
34
7 JDBC (JAVA DATABASE CONNECTIVITY)
CAWA SALHI.D
Toutes les classes de JDBC sont dans le package java.sql. Il faut donc l’importer dans tous les
programmes devant utiliser JDBC.
import java.sql.*;
35
7 JDBC (JAVA DATABASE CONNECTIVITY)
CAWA SALHI.D
Classe Rôle
DriverManager Charger et configurer le driver de la base de données.
Connection Réaliser la connexion et l’authentification à la BDD.
Statement (et PreparedStatement) Contenir la requête SQL et la transmettre à la BDD.
ResultSet Parcourir les informations retournées par BDD.
La connexion à une base de données requiert au préalable le chargement du pilote JDBC qui
sera utilisé pour communiquer avec la base de données. Une fabrique permet alors de créer une
instance de type Connection qui va encapsuler la connection à la base de données.
Pour se connecter à une base de données via ODBC, il faut tout d’abord charger le pilote
JDBC-ODBC qui fait le lien entre les deux.
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Pour se connecter à une base de données, il faut instancier un objet de la classe Connection en
lui précisant sous forme d’URL la base à accéder.
La syntaxe URL peut varier d’un type de base de données à l’autre mais elle est toujours de la
forme : protocole:sous-protocole:nom
36
7 JDBC (JAVA DATABASE CONNECTIVITY)
CAWA SALHI.D
”jbdc” désigne le protocole et vaut toujours ”jdbc”. ”odbc” désigne le sous protocole qui définit
le mécanisme de connexion pour un type de base de données.
Le nom de la base de données doit être celui saisi dans le nom de la source sous ODBC.
La méthode getConnection() peut lever une exception de la classe java.sql.SQLException.
Le code suivant décrit la création d’une connexion avec un user et un mot de passe :
A la place de ” myLogin ” ; il faut mettre le nom du user qui se connecte à la base et mettre
son mot de passe à la place de ”myPassword ”
Une fois la connexion établie, il est possible d’exécuter des ordres SQL. Les objets qui peuvent
être utilisés pour obtenir des informations sur la base de données sont :
Classe Rôle
DatabaseMetaData informations à propos de la base de données
ResultSet résultat d’une requête et information sur
ResultSetMetaData informations sur les colonnes (nom et type) d’un ResultSet
Les requêtes d’interrogation SQL sont exécutées avec les méthodes d’un objet Statement que
l’on obtient à partir d’un objet Connection
try {
Statement stmt = con.createStatement();
résultats = stmt.executeQuery(requete);
} catch (SQLException e) {
//traitement de l’exception
37
7 JDBC (JAVA DATABASE CONNECTIVITY)
CAWA SALHI.D
Un objet de la classe Statement permet d’envoyer des requêtes SQL à la base. La création
d’un objet Statement s’effectue à partir d’une instance de la classe Connection.
Pour une requête de type interrogation (SELECT), la méthode à utiliser de la classe Statement
est executeQuery(). Pour des traitements de mise à jour, il faut utiliser la méthode executeUp-
date(). Lors de l’appel à la méthode d’exécution, il est nécessaire de lui fournir en paramètre
la requête SQL sous forme de chaine.
Le résultat d’une requête d’interrogation est renvoyé dans un objet de la classe ResultSet par
la méthode executeQuery().
La méthode executeUpdate() retourne le nombre d’enregistrements qui ont été mis à jour.
...
//insertion d’un enregistrement dans la table client
Lorsque la méthode executeUpdate() est utilisée pour exécuter un traitement de type DDL
( Data Definition Langage : définition de données ) comme la création d’un table, elle retourne
0. Si la méthode retourne 0, cela peut signifier deux choses : le traitement de mise à jour n’a
affecté aucun enregistrement ou le traitement concernait un traitement de type DDL.
Si l’on utilise executeQuery() pour exécuter une requête SQL ne contenant pas d’ordre
SELECT, alors une exception de type SQLException est levée.
...
requete = "INSERT INTO client VALUES (4,’client 4’,’prenom 4’)";
try {
38
8 LES SESSIONS CAWA SALHI.D
8 Les sessions
Le protocole HTTP est un protocole non connecté (on parle aussi de protocole sans états, en
anglais stateless protocol), cela signifie que chaque requête est traitée indépendamment des
autres et qu’aucun historique des différentes requêtes n’est conservé. Ainsi le serveur web ne
peut pas se ”souvenir” de la requête précédente, ce qui est dommageable dans des utilisations
telles que le e-commerce, pour lequel le serveur doit mémoriser les achats de l’utilisateur sur
les différentes pages.
Il existe une méthode (pouvant se décliner en plusieurs variantes) permettant d’assurer le suivi
de session : Elle consiste à stocker les informations concernant l’utilisateur sur le serveur, et
de les relier à chaque requête grâce à un identifiant (généralement appelé id) présent dans la
requête et sur le serveur. Il existe plusieurs façons standards (utilisées dans tous les types de
technologies côté serveur) de passer l’identifiant en paramètre dans la requête :
39
8 LES SESSIONS CAWA SALHI.D
// Creation du cookie
Cookie C = new Cookie("id","674684641");
Dans ce cas, le conteneur crée un identifiant de session pour chaque utilisateur. Le conteneur
utilise cet identifiant pour identifier l’utilisateur concerné. Un objet de HttpSession peut être
utilisé pour effectuer deux tâches:
40
8 LES SESSIONS CAWA SALHI.D
2. afficher et manipuler des informations sur une session, telles que l’identificateur de session,
l’heure de création et l’heure du dernier accès.
public HttpSession getSession (): renvoie la session en cours associée à cette demande ou,
si la demande ne comporte pas de session, en crée une.
La page index.html
<form action="servlet1">
Name:<input type="text" name="userName"/><br/>
<input type="submit" value="go"/>
</form>
La servlet 01
String n=request.getParameter("userName");
HttpSession session=request.getSession();
session.setAttribute("uname",n);
this.getServletContext().getRequestDispatcher("/bonjour.jsp").
41
8 LES SESSIONS CAWA SALHI.D
forward(request, response);
}catch(Exception e){System.out.println(e);}
}
}
La servlet 02
42
8 LES SESSIONS CAWA SALHI.D
References
1. Boone, B. (1996). Java essentials for C and C++ programmers. Addison-Wesley.
3. DOUDOUX, J. M. (2008). Développons en Java avec Eclipse. Version 0.80, 1(15), 12.
5. Berners-Lee, T., Cailliau, R., Luotonen, A., Nielsen, H. F., et Secret, A. (1994). The
world-wide web. Communications of the ACM, 37(8), 76-82.
6. Index, C. V. N. (2013). Global mobile data traffic forecast update, 2012-2017. Cisco
white paper.
43