Vous êtes sur la page 1sur 16

La présentation des servlets

• 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.
• 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.

1
Le fonctionnement d'une servlet
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. 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.
Au fil des requêtes, la servlet peut être appelée par plusieurs threads lancés par le serveur. Ce principe de
fonctionnement évite d'instancier un objet de type servlet à chaque requête et permet de maintenir un
ensemble de ressources actives telles qu'une connexion à une base de données.
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 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.
5.Le serveur récupère l'objet réponse et envoie la page html au client. 2
Les différences entre les servlets et les CGI
Les programmes ou script CGI (Common Gateway Interface) sont aussi utilisés pour générer des pages
HTML dynamiques. Ils représentent la plus ancienne solution pour réaliser cette tâche.
Un CGI peut être écrit dans de nombreux langages.
Il existe plusieurs avantages à utiliser des servlets plutôt que des CGI :
•la portabilité offerte par Java bien que certains langages de script tels que PERL tournent sur plusieurs
plate-formes.
•la servlet reste en mémoire une fois instanciée ce qui permet de garder des ressources systèmes et gagner
le temps de l'initialisation. Un CGI est chargé en mémoire à chaque requête, ce qui réduit les performances.
•les servlets possèdent les avantages de toutes les classes écrites en Java : accès aux API, aux JavaBeans, le
garbage collector, ...

3
Les différences entre les servlets et les CGI

CGI est basé sur le processus, c’est-à-


La servlet est basé sur les threads, c’est-à- dire que pour chaque nouvelle
dire que pour chaque nouvelle demande, un demande, un nouveau processus est
nouveau thread est créé. créé.

4
La présentation des servlets
L'API servlet regroupe un ensemble de classes dans deux packages :
•javax.servlet : contient les classes pour développer des servlets 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
utilisé par les serveurs web.

5
6
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
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().
 

7
Serveur Sous classe HttpServlet

doGet()
Request

service()

Response
doPost()

8
Servlet <<Interface>> ServletConfig <<Interface>>
+ init(…) + getInitParameter(String): String
+ service(…) + getServletName(): String
+ destroy() +…

GenericServlet {abstraite}
+ service(...) {abstraite}
HttpServlet définit la
+ ...
méthode service
qui appelle doXXX
selon la requête
HttpServlet
HTTP reçue (doGet, Dériver HttpServlet
+ service(…)
doPost…). pour construire des
+ doXXX (…)
L’implantation par Servlets spécifiques
défaut de doXXX au protocole HTTP en
rend une erreur redéfinissant doGet,
HelloWorld doPost…
HTTP 405 (méthode + doGet(…)
non supportée).
La méthode doPost()
Une requête POST n'est utilisable qu'avec un formulaire
HTML.
Dans l'exemple, 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() 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.

10
La génération de la réponse
La servlet envoie sa réponse au client en utilisant un objet de type HttpServetResponse. HttpServletResponse est une
interface : il n'est pas possible d'instancier un tel objet mais le moteur de servlets instancie un objet qui implémente
cette interface et le passe en paramètre de la méthode service.
Cette interface possède plusieurs méthodes pour mettre à jour l'en-tête http et la page HTML de retour.

11
12
Les informations contenues dans la requête
De nombreuses informations en provenance du client peuvent être extraites de l'objet
ServletRequest passé en paramètre par le serveur (ou de HttpServletRequest qui hérite de
ServletRequest).
Les informations les plus utiles sont les paramètres envoyés dans la requête.
L'interface ServletRequest dispose de nombreuses méthodes pour obtenir ces informations :

13
14
Partage d’information dans une application
ServletContext
 Le ServletContext est un conteneur d’informations unique de
l’application web.
 Une Servlet retrouve le ServletContext de son application web
par appel à getServletContext().
 Exemples de méthodes de ServletContext :
• void setAttribute(String name, Object o) : stocke un objet sous le nom
indiqué
• Object getAttribute(String name) : retrouve l’objet sous le nom indiqué
• Enumeration getAttributeNames() : retourne l’ensemble des noms de
tous les attributs stockés
• void removeAttribute(String name) : supprime l’objet stocké sous le
nom indiqué

15
Partage du contrôle dans une applicationdu contrôle dans une application

 Une Servlet peut laisser à une autre Servlet de la même


application tout ou partie du traitement. Utilisé souvent
pour structurer une application avec une servlet contrôleur
et des servlets spécialisées.
 Plus précisément une Servlet peut déléguer une requête
entière ou inclure la réponse d’un autre programme.
 Pour déléguer une requête, il faut obtenir un objet
RequestDispatcher. On peut ensuite ‘forwarder’ la requête
vers une autre servlet (ou le plus souvent vers une page
JSP). Le contrôle ne revient plus à la servlet d’origine. Des
données peuvent être passées par l’URL ou par le
ServletContext.

16

Vous aimerez peut-être aussi