Programmation n-tiers Chapitre III

publicité
Institut Supérieur des Études Technologiques de Kasserine
Département Technologies de l'Informatique
Programmation n-tiers
Chapitre III - Les Servlets
DSI21
DSI21 - 2015/2016
Programmation n-tiers
Introduction
●
●
●
●
●
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 dynamiquement cette page HTML.
Plusieurs solutions existent pour ces traitements.
Les servlets Java sont une de ces solutions.
Mais les servlets peuvent aussi servir à d'autres usages.
DSI21 - 2015/2016
Programmation n-tiers
2
La présentation des servlets (1/2)
●
●
●
●
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 reposant sur le
principe de requête/réponse peut faire usage d'une servlet.
DSI21 - 2015/2016
Programmation n-tiers
3
La présentation des servlets (2/2)
●
●
●
Écrite 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.
DSI21 - 2015/2016
Programmation n-tiers
4
Le fonctionnement d'une servlet
(cas d'utilisation de http)
●
●
●
Un serveur d'applications permet de charger et d'exécuter les
servlets dans une JVM (Java Virtual Machine).
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.
DSI21 - 2015/2016
Programmation n-tiers
5
Le fonctionnement d'une servlet
(cas d'utilisation de http)
●
Pour exécuter une servlet, il suffit de saisir une URL qui désigne la
servlet dans un navigateur.
1) Le serveur reçoit du navigateur la requête http qui a recours à
une servlet
2) Si c'est la première sollicitation de la servlet, le serveur
l'instancie. Les servlets sont stockées (sous forme de fichiers
.class) dans un répertoire particulier du serveur. Ce répertoire
dépend du serveur d'applications utilisé. La servlet reste en
mémoire jusqu'à l'arrêt du serveur. Certains serveurs
d'applications permettent aussi d'instancier des servlets dès le
lancement du serveur.
DSI21 - 2015/2016
Programmation n-tiers
6
Le fonctionnement d'une servlet
(cas d'utilisation de http) suite
3) 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
4) La servlet crée dynamiquement la réponse sous forme de page
html transmise via 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 de
que des fichiers ou des bases de données.
5) Le serveur récupère l'objet réponse et envoie la page html au
client.
DSI21 - 2015/2016
Programmation n-tiers
7
Les outils nécessaires pour
développer des servlets
●
●
Initialement, pour développer des servlets avec le JDK Standard
Edition, il fallait utiliser le Java Server Development Kit (JSDK)
qui est une extension du JDK. Pour réaliser les tests, le JSDK
fournissait, dans sa version 2.0 un outil nommé servletrunner et
depuis sa version 2.1, il fournit un serveur http allégé.
Actuellement, pour exécuter des applications web, il faut utiliser un
conteneur web ou un serveur d'applications : il existe de
nombreuses versions commerciales telles que IBM Webpshere ou
BEA WebLogic mais aussi des versions libres telles que Tomcat
du projet GNU Jakarta.
DSI21 - 2015/2016
Programmation n-tiers
8
Les outils nécessaires pour
développer des servlets
●
●
●
●
Ce serveur d'applications ou ce conteneur web doit utiliser ou
inclure un serveur http dont le plus utilisé est Apache.
Le choix d'un serveur d'applications ou d'un conteneur web doit
tenir compte de la version du JSDK qu'il supporte pour être
compatible avec celle utilisée pour le développement des servlets.
Le choix entre un serveur commercial et un libre doit tenir compte
principalement du support technique, des produits annexes fournis
et des outils d'installation et de configuration.
Pour simplement développer des servlets, le choix d'un serveur libre
se justifie pleinement de part sa gratuité et sa « légèreté ».
DSI21 - 2015/2016
Programmation n-tiers
9
Le rôle du conteneur web
●
●
●
●
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.
DSI21 - 2015/2016
Programmation n-tiers
10
L'API servlet
●
●
●
●
Les servlets sont conçues pour agir selon un modèle de
requête/réponse.
Tous les protocoles utilisant ce modèle peuvent être utilisés : http,
ftp, etc ...
L'API servlets est une extension du jdk de base, et en tant que
telle elle est regroupée dans des packages préfixés par javax.
L'API servlet regroupe un ensemble de classes dans deux
packages :

javax.servlet : contient les classes pour développer des serlvets
génériques indépendantes d'un protocole

javax.servlet.http : contient les classes pour développer des
servlets qui reposent sur le protocole http
DSI21 - 2015/2016
Programmation n-tiers
11
L'API servlet
Le package javax.servlet définit plusieurs interfaces, méthodes et exceptions :
DSI21 - 2015/2016
Programmation n-tiers
12
L'API servlet
Le package javax.servlet.http définit plusieurs interfaces et méthodes :
DSI21 - 2015/2016
Programmation n-tiers
13
La requête et la réponse
L'interface ServletRequest définit plusieurs méthodes qui permettent d'obtenir des
données sur la requête du client :
L'interface ServletRequest définit plusieurs méthodes qui permettent d'obtenir des
données sur la requête du client :
DSI21 - 2015/2016
Programmation n-tiers
14
Un exemple de servlet
●
●
Une servlet qui implémente simplement l'interface Servlet doit
évidemment redéfinir toutes les méthodes de l'interface.
Il est très utile lorsque que l'on crée une servlet qui implémente
directement l'interface Servlet de sauvegarder l'objet ServletConfig
fourni par le conteneur en paramètre de la méthode init() car c'est
le seul moment où l'on a accès à cet objet.
DSI21 - 2015/2016
Programmation n-tiers
15
Un exemple de servlet
DSI21 - 2015/2016
Programmation n-tiers
16
Le protocole HTTP
●
●
●
●
●
Le protocole HTTP est un protocole qui fonctionne sur le modèle
client/serveur.
Un client qui est une application (souvent un navigateur web)
envoie une requête à un serveur (un serveur web).
Ce serveur attend en permanence les requêtes sur un port
particulier (par défaut le port 80).
A la réception de la requête, le serveur lance un thread qui va la
traiter pour générer la réponse.
Le serveur renvoie la réponse au client une fois les traitements
terminés.
DSI21 - 2015/2016
Programmation n-tiers
17
Le protocole HTTP
●
●
●
●
●
La requête est composée de trois parties :
1)la commande
2)la section en-tête
3)le corps
La première ligne de la requête contient la commande à exécuter
par le serveur.
La commande est suivie éventuellement d'un argument qui précise
la commande (par exemple l'url de la ressource demandée).
Enfin la ligne doit contenir la version du protocole HTTP utilisé,
précédée de HTTP/.
Il existe deux versions principales du protocole HTTP : 1.0 et 1.1.
DSI21 - 2015/2016
Programmation n-tiers
18
Le protocole HTTP
●
Exemple :
GET / index.html HTTP/1.0
●
●
●
Avec HTTP 1.1, les commandes suivantes sont définies : GET,
POST, HEAD, OPTIONS, PUT, DELETE, TRACE et CONNECT.
Les trois premières sont les plus utilisées.
Il est possible de fournir sur les lignes suivantes de la partie en-tête
des paramètres supplémentaires.
Cette partie en-tête est optionnelle.
DSI21 - 2015/2016
Programmation n-tiers
19
Le protocole HTTP
●
●
●
●
●
●
●
Les informations fournies peuvent permettre au serveur d'obtenir
des informations sur le client.
Chaque information doit être mise sur une ligne unique.
Le format est nom_du_champ : valeur.
Les champs sont prédéfinis et sont sensibles à la casse.
Une ligne vide doit précéder le corps de la requête.
Le contenu du corps de la requête dépend du type de la
commande.
La requête doit obligatoirement être terminée par une ligne vide.
DSI21 - 2015/2016
Programmation n-tiers
20
Le protocole HTTP
●
●
La réponse est elle aussi composée des trois mêmes parties :
1) une ligne de statuts
2) un en-tête dont le contenu est normalisé
3) un corps dont le contenu dépend totalement de la requête
La première ligne de l'en-tête contient un état qui est composé :
1) de la version du protocole HTTP utilisé,
2) du code de statut
3) et d'une description succincte de ce code.
DSI21 - 2015/2016
Programmation n-tiers
21
Le protocole HTTP
●
●
Le code de statut est composé de trois chiffres qui donnent des
informations sur le résultat du traitement qui a généré cette
réponse.
Ce code peut être associé à une catégorie en fonction de sa
valeur :
DSI21 - 2015/2016
Programmation n-tiers
22
Le protocole HTTP
●
Plusieurs codes sont définis par le protocole HTTP dont les plus
importants sont :
➢ 200 : traitement correct de la requête
➢ 204 : traitement correct de la requête mais la réponse ne
contient aucun contenu (ceci permet au browser de laisser la
page courante affichée)
➢ 404 : la ressource demandée n'est pas trouvée (sûrement le plus
célèbre)
➢ 500 : erreur interne du serveur
DSI21 - 2015/2016
Programmation n-tiers
23
Les servlets http
●
●
●
●
L'usage principal des servlets est la création de pages HTML
dynamiques.
Sun/Oracle 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
facilement des servlets avec le protocole http.
DSI21 - 2015/2016
Programmation n-tiers
24
Les servlets 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.
DSI21 - 2015/2016
Programmation n-tiers
25
Les servlets http
●
●
●
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
(doGet(), doPost(), etc ...).
La requête du client est encapsulée dans un objet qui implémente
l'interface HttpServletRequest : 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 HttpServletResponse.
DSI21 - 2015/2016
Programmation n-tiers
26
Les servlets http
●
●
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
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
DSI21 - 2015/2016
Programmation n-tiers
27
Les servlets http
●
●
Une servlet peut traiter un ou plusieurs types de requêtes grâce à
plusieurs autres méthodes :
●
doHead() : pour les requêtes http de type HEAD
●
doPut() : pour les requêtes http de type PUT
●
doDelete() : pour les requêtes http de type DELETE
●
doOptions() : pour les requêtes http de type OPTIONS
●
doTrace() : pour les requêtes http de type TRACE
La classe HttpServlet hérite aussi de plusieurs méthodes définies
dans l'interface Servlet : init(), destroy() et getServletInfo().
DSI21 - 2015/2016
Programmation n-tiers
28
DSI21 - 2015/2016
Programmation n-tiers
29
Téléchargement