Vous êtes sur la page 1sur 27

Servlets

M.Youssfi
Architecture J2EE
Introduction

Navigateur web Serveur web


Requête HTTP
Conteneur de servlet
Method=GET ou POST

HttpRequest
Servlet
COOKIES
Réponse HTTP doGet()
HttpResponse
doPost()

(HTML, javascript, css, XML)


HttpSession
LE PROTOCOLE HTTP
 HTTP :HyperText Tranfert Protocol
(RFC 1945 et 2068)
 Protocole de rapatriement des documents
 Protocole de soumission de formulaires
 Fonctionnement (très simple en HTTP/1.0)
 Connexion
 demande (GET, POST) d’un document
 renvoi du document (status=200) ou d’une
erreur
 déconnexion
Dialogue HTTP
 Types de dialogue
 Récupération d’un document
 méthode GET
 Soumission d’un formulaire
 méthodes GET ou POST
 Envoi de Document et Gestion de Site
 méthodes PUT, DELETE
 Méthode HEAD (Récupération des infos sur le
document).
Le client envoie la requête : Méthode POST

Entête de la requête

Post /Nom_Script HTTP/1.0 Méthode,chemin,version

Accept : Text/html Documents acceptés

Accept : image/gif
Accept : image/jpeg
Type et version du
User-Agent : Mozilla/4.0 navigateur ayant soumis
la requête.
*** saut de ligne ***
Var1=Value1&
Paramètres des différents
Var2=Value2 champs du formulaire.
Var3=Value3

corps de la requête
Le client envoie la requête : Méthode GET

Entête de la requête

GET /Nom_Script?var1=val1&var2=val2&…. HTTP/1.0


Accept : Text/html
Accept : image/gif
Accept : image/jpeg
User-Agent : Mozilla/4.0

corps de la requête est vide


Le Serveur retourne la réponse :

Entête de la réponse

HTTP/1.0 200 OK Ligne de Status

Date : Wed, 05Feb02 15:02:01 GMT


Server : Apache/1.3.24 Nom du Serveur

Mime-Version 1.0
Dernière modification
Last-Modified : Wed 02Oct01 24:05:01GMT
Content-Type : Text/html
Type de contenu
Content-legnth : 4205 Sa taille
*** saut de ligne ***
<HTML><HEAD> Le fichier que le client va
afficher
….
</BODY></HTML>

corps de la réponse
Introduction aux servlets

 Les servlets sont au serveur Web ce que les


applets sont au navigateur pour le client.
 Une servlet est une classe Java , exécutée
par un moteur de servlets, fonctionnant du
côté serveur au même titre que les CGI et
les langages de script côté serveur tels que
ASP ou bien PHP
 Les servlets permettent donc de gérer des
requêtes HTTP et de fournir au client une
réponse HTTP dynamique.
Avantages des servlets
 Les servlets ont de nombreux avantages par
rapport aux autres technologies côté serveur.
 Tout d'abord, étant donné qu'il s'agit d'une technologie
Java, les servlets fournissent un moyen d'améliorer les
serveurs web sur n'importe quelle plateforme, d'autant
plus que les servlets sont indépendantes du serveur web
 Une servlet s’exécute dans un conteneur de servlet
qui est indépendant du serveur web
 D'autre part les servlets sont beaucoup plus
performantes que les scripts, car il s'agit de pseudo-
code (code java compilé), chargé automatiquement lors
du démarrage du serveur ou bien lors de la connexion
du premier client.
Avantages des servlets
 Les servlets sont donc actives (résidentes en
mémoire) et prêtes à traiter les demandes des clients
grâce à des threads,
 tandis qu'avec les langages de script traditionnels un
nouveau processus est créé pour chaque requête
HTTP.
 Cela permet donc une charge moins importante au
niveau du processeur du serveur
 L'un des principaux atouts des servlets est la
réutilisation, permettant de créer des composants
encapsulant des services similaires, afin de pouvoir
les réutiliser dans des applications futures.
 Enfin une servlet étant une application Java, peut
utiliser toutes les API Java afin de communiquer avec
des applications extérieures, se connecter à des bases
de données, accèder aux entrée-sorties.
Architecture du package
servlet.jar
 Les servlets sont des classes Java implémentant des
classes et des interfaces provenant des packages :
 javax.servlet : un package générique indépendant
du protocole utilisé
 javax.servlet.http: un package spécifique au
protocole HTTP 1.0
 Accessoirement le package java.io doit être importé,
notamment pour gérer les entrées-sorties et les
exceptions.
 Le package javax.servlet est fourni dans le JSDK
(Java Servlet Development Kit. (Fichier servlet.jar)
Architecture du Servlet
package servlet.jar
 Ainsi toutes les servlets implémentent GenericSrvlet
directement ou indirectement l'interface
Servlet, en dérivant une classe qui service()
l'implémente: c'est-à-dire généralement la
classe HttpServlet, elle-même issue de
GenericServlet. HttpServlet
 La classe GenericServlet doPost()
(javax.servlet.GenericServlet) définit une
doGet()
classe abstraite (implémentation de base
de l'interface Servlet).
NotreServlet
doPost()
doGet()
Fonctionnement d’une servlet
 Lorsqu'une servlet est appelée par un
client, la méthode service() est exécutée.
Celle-ci est le principal point d'entrée de
toute servlet et accepte deux objets en
paramètres:
 L'objet ServletRequest encapsulant la requête du
client, c'est-à-dire qu'il contient l'ensemble des
paramètres passés à la servlet (informations sur
l'environnement du client, cookies du client, URL
demandée, ...)
 L'objet ServletResponse permettant de renvoyer
une réponse au client (envoyer des informations
au navigateur).
Développement d’une servlet
 Afin de développer un servlet fonctionnant avec le
protocole HTTP, il suffit de créer une classe étendant
HttpServlet (qui implémente elle-même l'interface
Servlet).
 La classe HttpServlet (dérivant de GenericServlet)
permet de fournir une implémentation de l'interface
Servlet spécifique à HTTP.
 La classe HttpServlet redéfinit la méthode service en
lisant la méthode HTTP utilisée par le client, puis en
redirigeant la requête vers une méthode appropriée.
 Les deux principales méthodes du protocole HTTP
étant GET et POST, il suffit de redéfinir la méthode
adéquate afin de traiter la requête :
Développement d’une servlet
 Si la méthode utilisée est GET, il suffit de
redéfinir la méthode :
 public void doGet(
HttpServletRequest request,
HttpServletResponse response
)
 Si la méthode utilisée est POST, il suffit de
redéfinir la méthode :
 public void doPost(
HttpServletRequest request,
HttpServletResponse response
)
Développement d’une servlet
import javax.servlet.*;
import javax.servlet.http.*;
Import java.io.*;
public class ServletName extends HttpServlet {

public void doGet(HttpServletRequest req, HttpServletResponse


res) throws ServletException {
// lecture de la requete
// traitements
// envoi de la reponse
}

public void doPost(HttpServletRequest req, HttpServletResponse


res) throws ServletException {
// lecture de la requete
// traitements
// envoi de la reponse
}
}
HttpServletRequest
Méthode Description
Récupère la méthode HTTP utilisée par le
String getMethod()
client
Récupère la valeur de l'attribut Key de l'en-
String getHeader(String Key)
tête
String getRemoteHost() Récupère le nom de domaine du client
String getRemoteAddr() Récupère l'adresse IP du client

Récupère la valeur du paramètre


Key (clé) d'un formulaire.
String getParameter(String
Lorsque plusieurs valeurs sont
Key)
présentes, la première est
retournée
Récupère les valeurs correspondant au
paramètre Key (clé) d'un formulaire,
String[] getParameterValues(String c'est-à-dire dans le cas d'une sélection
Key) multiple (cases à cocher, listes à choix
multiples) les valeurs de toutes les entités
sélectionnées
Retourne un objet Enumeration contenant la
Enumeration getParameterNames() liste des noms des paramètres passés à la
requête
String getServerName() Récupère le nom du serveur
String getServerPort() Récupère le numéro de port du serveur
HttpServletResponse
Méthode Description
String setStatus(int StatusCode) Définit le code de retour de la réponse
void setHeader(String Nom, String Valeur) Définit une paire clé/valeur dans les en-têtes

Définit le type MIME de la réponse


void setContentType(String
HTTP, c'est-à-dire le type de
type)
données envoyées au navigateur
void setContentLength(int len) Définit la taille de la réponse

Retourne un objet PrintWriter


permettant d'envoyer du texte au
PrintWriter getWriter() navigateur client. Il se charge de
convertir au format approprié les
caractères Unicode utilisés par Java
Définit un flot de données à envoyer au client, par
ServletOutputStream getOutputStream() l'intermédiaire d'un objet ServletOutputStream, dérivé de
la classe java.io.OutputStream

void sendredirect(String Permet de rediriger le client vers l'URL


location) location
Gestion des servlets

Moteur de
Servlets
Créer un pool Thread Thread
de threads

Instancier la servlet
Servlet
Appeler la méthode init()

Initialisation
Affecter une requête à un thread Appeler la méthode service()
Requête HTTP 1
Exécution
Affecter une requête à un thread Appeler la méthode service() service
Requête HTTP 2

Réponse HTTP 1 Exécution


service
Réponse HTTP 2

Terminer le pool de threads

Appeler la méthode destroy()


Cycle de vie d’une servlet

 Le serveur crée un pool de threads auxquels il va pouvoir


affecter chaque requête
 La servlet est chargée au démarrage du serveur ou lors de
la première requête
 La servlet est instanciée par le serveur
 La méthode init() est invoquée par le conteneur
 Lors de la première requête, le conteneur crée les objets
Request et Response spécifiques à la requête
 La méthode service() est appelée à chaque requête dans un
nouveau thread. Les objets Request et Response lui sont
passés en paramètre
 Grâce à l'objet request, la méthode service() va pouvoir
analyser les informations en provenance du client
 Grâce à l'objet response, la méthode service() va fournir
une réponse au client
 La méthode destroy() est appelée lors du déchargement de
la servlet, c'est-à-dire lorsqu'elle n'est plus requise par le
serveur. La servlet est alors signalée au garbage collector .
Interface d’une servlet
 Pour créer 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 (généralement réalisée
en étendant javax.servlet.GenericServlet ou
javax.servlet.HttpServlet) fait appel à cinq méthodes :
 public void init(ServletConfig config) throws
ServletException
 public void service(ServletRequest req, ServletResponse
res) throws ServletException, IOException
 public ServletConfig getservletConfig()
 public String getServletInfo()
 public void destroy()
Première Servlet
 import javax.servlet.*;
 import javax.servlet.http.*;
 import java.io.*;
 public class PremiereServlet extends HttpServlet {
 public void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException,
IOException {
 response.setContentType("text/html");
 PrintWriter out = response.getWriter();
 out.println("<HTML>");
 out.println("<HEAD><TITLE> Titre </TITLE></HEAD>");
 out.println("<BODY>");
 out.println("Ma première servlet");
 out.println("</BODY>");
 out.println("</HTML>");
 out.close();
 }
 }
Déploiement d’une servlet

 Avec Tomcat
 Pour définir une application Web, créer le fichier
<tomcat_dir>/conf/catalania/localhost/nomAPP.xml

<Context path="/nomAPP" reloadable="true"


docBase="D:\eclipse-SDK-3.0-
win32\eclipse\workspace\nomAPP"
workDir="D:\eclipse-SDK-3.0-
win32\eclipse\workspace\nomAPP\work" />
 Dans cet exemple, l'application web se nomme nomAPP
 Mettre les classes dans <docBase>/WEB-INF/classes
Descripteur de déploiement de la
servlet : web.xml

 Créer le fichier <docBase>/WEB-INF/web.xml


<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web
Application 2.2//EN"
"http://java.sun.com/j2ee/dtds/web-app_2.2.dtd">
<web-app>
<servlet>
 …..
</servlet>
</web-app>
Descripteur de déploiement de la
servlet : web.xml

<web-app>
<servlet>

<servlet-name> ps </servlet-name>
<servlet-class> PremiereServlet </servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ps</servlet-name>
<url-pattern>/first</url-pattern>
</servlet-mapping>
</web-app>
Charger et invoquer une
Servlet
 D'une manière générale, une URL du type :

http://host:port/nomApp/first?param1=value1&…

Machine ou Liste des


Alias paramètres et
se trouve le Numéro de port Web appli. correspondant à de leurs
serveur de sur lequel il est à <url-pattern> valeurs
servlets l’écoute