C05 Programmation Web Servlets
Transcript of C05 Programmation Web Servlets
-
8/16/2019 C05 Programmation Web Servlets
1/35
1
SERVLETS
Part4-1
Définition d’un Servlet
Un des composants de l’architecture Java EE s’exécutant ducoté serveur générant dynamiquement des pages web. Traite des requêtes HTTP et fournit aux clients des réponses
HTTP.
Comparable à : CGI (« Common Gateway Interface »),
Langages de script coté serveur PHP, ASP…
Un Servlet s’exécute dans un « conteneur de Servlet ») permettant d’établir le lien entre le Servlet, la machinevirtuelle java et le serveur Web.
Ex : Glassfish, Tomcat, Weblogic, …
ISIC/S3Prof. Asmaa El Hannani 302
-
8/16/2019 C05 Programmation Web Servlets
2/35
2
Utilité des servlets
Créer des pages dynamiques (HTML/XML) «à la volée».
Effectuer des traitements applicatifs coté serveur Web et bénéficier de leur puissance de calcul et de l’accès aux basesde données.
Écrire une application Web en Java dont l’interface utilisateurest dans le client :
navigateur, applet,
téléphone portable…
ISIC/S3Prof. Asmaa El Hannani 303
Avantages des servlets
Portabilité Technologie indépendante de la plate-forme et du serveur.
Puissance
Disponibilité des API de Java. Manipulation d’images, connectivité aux bases de données (JDBC)…
Efficacité Utilisent des threads (processus légers) plutôt que des processus système
Sûreté Typage fort de Java et gestion des erreurs par exceptions.
Fonctionnement dans une machine virtuelle.
Faible coût Nombreux serveurs gratuits.
ISIC/S3Prof. Asmaa El Hannani 304
-
8/16/2019 C05 Programmation Web Servlets
3/35
3
Les technologies
ISIC/S3Prof. Asmaa El Hannani 305
Servlet: Fonctionnement
Le serveur Web associe une ou plusieurs URLs à chaqueservlet
Un servlet lit les données envoyées par un client (requêteHTTP)
données explicites (formulaire)
données implicites (Request Header)
Le conteneur de servlet déclenche le servlet qui s’exécute côtéserveur
Le servlet génère et envoie la réponse au client données explicites (HTML/XML)
données implicites (Response Header, Status Code)
ISIC/S3Prof. Asmaa El Hannani 306
-
8/16/2019 C05 Programmation Web Servlets
4/35
4
Servlet: Fonctionnement
ISIC/S3Prof. Asmaa El Hannani 307
L'API Servlet
-
8/16/2019 C05 Programmation Web Servlets
5/35
5
Servlet: Modèle de programmation
Un servlet est un objet qui peut être manipulé par le conteneurvia l’interface javax.servlet.Servlet suivante:
Tout servlet (que vous écrivez) doit implémenter cette interface soit directement,
soit en dérivant d’une classe implémentant déjà cette interfacecomme (GenericServlet ou HttpServlet )
ISIC/S3Prof. Asmaa El Hannani 309
L’API Servlet
L'API Servlet fournit deux classes qui proposent déjà uneimplémentation:
GenericServlet : pour la conception de Servlets indépendantesdu protocole
HttpServlet : pour la conception de Servlets spécifiques au protocole HTTP
ISIC/S3Prof. Asmaa El Hannani 310
-
8/16/2019 C05 Programmation Web Servlets
6/35
6
L’API Servlet
Your Servlet
ISIC/S3Prof. Asmaa El Hannani 311
La classe GenericServlet
javax.servlet.GenericServlet
définit un servlet indépendant des protocoles réseaux
est une classe abstraite qui fournit une implémentation de base
de l’interface Servlet
Méthodes init()
service()
destroy()
service() est le principal point d’entrée c’est une méthodeabstraite qui doit être implémentée par la classe dérivée
Déjà implémentées
ISIC/S3Prof. Asmaa El Hannani 312
-
8/16/2019 C05 Programmation Web Servlets
7/35
7
La classe HttpServlet
javax.servlet.http.HttpServlet
hérite de GenericServlet et fournit une implémentation spécifiqueà HTTP de l’interface Servlet
2 méthodes remplacent service() de la classe mère : doGet() : pour les requêtes Http de type GET
doPost() : pour les requêtes Http de type POST
Votre servlet doit obligatoirement contenir l’une ou l’autre de
ces 2 méthodes redéfinie, choisie selon le mode d’envoi duformulaire HTML qui l'exécute.
service() de HttpServlet appelle automatiquement la bonne
méthode (doGet ou doPost) en fonction du type des requêteshttp.
ISIC/S3Prof. Asmaa El Hannani 313
Exemple
ISIC/S3Prof. Asmaa El Hannani 314
-
8/16/2019 C05 Programmation Web Servlets
8/35
8
Cycle de vie d’un servlet
Cycle de vie d’un servlet
n’existe pas
initialisé Traitement de 1 à N requêtes,chacune dans un thread séparé
service()
Instanciation puis initialisation
constructeur
init()
Destruction (shutdown du serveur, …)
destroy()
ISIC/S3Prof. Asmaa El Hannani 316
-
8/16/2019 C05 Programmation Web Servlets
9/35
9
Cycle de vie d’un servlet: Initialisation
Initialisation: init()
une fois crée, le servlet est initialisé avec cette méthode
elle n’est appelée qu’une seule fois par le serveur
on peut y placer
les connexions réseaux
les connexions BD
la récupération des paramètres d’initialisation la récupération des paramètres de contexte de
l’application
ISIC/S3Prof. Asmaa El Hannani 317
Cycle de vie d’un servlet: Traitement
Traitement: service()
Lors de la réception d’une requête, le conteneur crée: un objet ServletRequest (la requête), et
un objet ServletResponse (la réponse)
Le conteneur appelle ensuite la méthode service() avec cesdeux objets en paramètres pour permettre au servlet derépondre à la requête du client.
service() de HttpServlet appelle automatiquement la bonne
méthode (doGet ou doPost) en fonction du type des requêteshttp.
ISIC/S3Prof. Asmaa El Hannani 318
-
8/16/2019 C05 Programmation Web Servlets
10/35
10
Cycle de vie d’un servlet: Destruction
Destruction: destroy ()
destruction du servlet
appelée qu’une seule fois quand le servlet est déchargé parle serveur, ou quand le serveur est arrêté
on y place la fermeture des connexions réseaux, BD
ISIC/S3Prof. Asmaa El Hannani 319
Premier servlet
-
8/16/2019 C05 Programmation Web Servlets
11/35
11
Un premier servlet: HelloServlet
API à importerServlet de type
HttpServlet
Redéfinitionde doGet
Résultat
ISIC/S3Prof. Asmaa El Hannani 322
Un premier servlet
Toute servlet doit au moins importer trois packages :
java.io pour la gestion des flux et
deux packages de l'API servlet ;
javax.servlet.*
javax.servlet.http.*
Il faut déclarer une nouvelle classe qui hérite de HttpServlet.
Il faut redéfinir la méthode doGet() ou doPost pour y insérerle code qui va envoyer dans un flux le code HTML de la page
générée.
ISIC/S3Prof. Asmaa El Hannani 323
-
8/16/2019 C05 Programmation Web Servlets
12/35
12
Structure de base d’un servlet http
ISIC/S3Prof. Asmaa El Hannani 324
Optionnelle
Optionnelle
Obligatoire
Structure des méthodes doGet/doPost
Détail des méthodes doGet() et doPost()
ISIC/S3Prof. Asmaa El Hannani 325
-
8/16/2019 C05 Programmation Web Servlets
13/35
13
Lire la requête et répondre
Requêtes et Réponses HTTP
ISIC/S3Prof. Asmaa El Hannani 327
-
8/16/2019 C05 Programmation Web Servlets
14/35
14
Lire la requête du client
HttpServletRequest hérite de ServletRequest encapsule la requête HTTP et fournit des méthodes pour accéder
à toutes les informations
contient les informations sur l’environnement du serveur
Méthodes de HttpServletRequest String getMethod()
retourne la méthode HTTP
String getHeader(String name)
retourne le paramètre name de l’entête HTTP de la requête
String getRemoteHost()
retourne le nom d’hôte du client
String getRemoteAddr()
retourne l’adresse IP du client
ISIC/S3Prof. Asmaa El Hannani 328
Lire la requête du client (2)
Méthodes de HttpServletRequest (suite) String getParameter(String name)
retourne la valeur d’un champ de formulaire
Enumeration getParameterNames()
retourne tous les noms des paramètres
String getServerName()
retourne le nom du serveur
String getServerPort()
retourne le port sur lequel le serveur écoute
ISIC/S3Prof. Asmaa El Hannani 329
-
8/16/2019 C05 Programmation Web Servlets
15/35
15
Lire la requête du client
Exemple : AffichInfo
ISIC/S3Prof. Asmaa El Hannani 330
Lire la requête du client
Exemple : AffichInfo
Exemple
http://localhost/exemples/servlets/TraceServlet/tutu?toto=titi
getMethod() → GET
getPathInfo() → /tutu
getQueryString() → toto=titi
getRequestURI() → /exemples/ servlets/TraceServlet/tutu
getServletPath() → / servlets/TraceServlet
getContextPath() → /exemples
ISIC/S3Prof. Asmaa El Hannani 331
-
8/16/2019 C05 Programmation Web Servlets
16/35
16
Répondre au serveur
HttpServletResponse hérite de ServletResponse utilisé pour construire un message de réponse HTTP renvoyé au
client
contient les méthodes nécessaires pour définir: le type decontenu, l’entête, et le code de retour
contient un flux de sortie pour envoyer des données (HTML ouXML ou autre) au client
Méthodes de HttpServletResponse void setStatus( int statusCode )
définit le code de retour de la réponse
void setHeader( String name, String value )
définit la valeur de l’entête name
ISIC/S3Prof. Asmaa El Hannani 332
Répondre au serveur (2)
Méthodes (suite) void setContentType( String type )
définit le type MIME du contenu
PrintWriter getWriter()
pour envoyer des données texte au client
ServletOutputStream getoutputStream()
flux pour envoyer des données binaires
void sendRedirect( String url )
redirige le client vers l’URL
On peut
renvoyer du HTML
rediriger vers une page donnée
faire une action (upload/download,…) ISIC/S3Prof. Asmaa El Hannani 333
-
8/16/2019 C05 Programmation Web Servlets
17/35
17
setContentType
ISIC/S3Prof. Asmaa El Hannani 334
Renvoie d’une feuille Excel
Exemple : ExcelServlet
ISIC/S3Prof. Asmaa El Hannani 335
-
8/16/2019 C05 Programmation Web Servlets
18/35
18
Traitement des données
Traitement des données
Un formulaire HTML
permet de saisir les données
mécanisme pour envoyer les données au serveur Web
Rappel: les balises ⟨FORM⟩: pour définir un formulaire
⟨INPUT⟩: pour définir un élément d’interface text,
password,
checkbox,
radio,
submit, reset
⟨TEXTAREA⟩: zone de texte sur plusieurs lignes
⟨SELECT⟩: liste déroulante ISIC/S3Prof. Asmaa El Hannani 337
-
8/16/2019 C05 Programmation Web Servlets
19/35
19
Traitement des données (2)
Attributs de
action: URL où envoyer les données
method: méthode à utiliser pour l’envoi (GET/POST)
Les données sont envoyées lorsque l’on clique sur un boutonde type submit
ISIC/S3Prof. Asmaa El Hannani 338
Nom:
Traitement des données (3)
Les méthodes GET et POST GET
les champs du formulaire sont ajoutés à l’URL de l’attribut ACTION
forme nom=valeur
URL?nom1=val1&nom2=val2&…
POST
les données sont passées dans le corps du message HTTP
envoi de données confidentielles ou binaires par exemple
ISIC/S3Prof. Asmaa El Hannani 339
-
8/16/2019 C05 Programmation Web Servlets
20/35
20
Traitement des données (4)
Les paramètres d'une requête sont accessibles dans l'objet(HttpServletRequest) request
request.getParameter("paramname")
Il est possible de récupérer tous les noms des paramètres request.getParameterNames()
Exemple de lecture des paramètres
dans le formulaire
dans la méthode doXXX()
String n = request.getParameter (“nom”);
ISIC/S3Prof. Asmaa El Hannani 340
Données passées dans l’URL
Exemple : AffichParam
ISIC/S3Prof. Asmaa El Hannani 341
-
8/16/2019 C05 Programmation Web Servlets
21/35
21
Données passées dans l’URL
Exemple : AffichParam
ISIC/S3Prof. Asmaa El Hannani 342
Traitement des données d’un formulaire
Exemple : AffichForm
Chemin relatif
vers le servlet
ISIC/S3Prof. Asmaa El Hannani 343
-
8/16/2019 C05 Programmation Web Servlets
22/35
22
Traitement des données d’un formulaire
Exemple : AffichForm
ISIC/S3Prof. Asmaa El Hannani 344
Traitement des données d’un formulaire
Exemple : AffichForm
ISIC/S3Prof. Asmaa El Hannani 345
-
8/16/2019 C05 Programmation Web Servlets
23/35
23
Traitement des données d’un formulaire
Exemple : AffichForm
ISIC/S3Prof. Asmaa El Hannani 346
État d’un servlet
-
8/16/2019 C05 Programmation Web Servlets
24/35
24
HTTP: protocole sans états
HTTP gère les paires requête/réponse ouverture
requête
réponse
fermeture
HTTP: protocole sans états
aucun historique des différentes requêtes n’est conservé les requêtes sont totalement indépendantes les unes des autres
ISIC/S3Prof. Asmaa El Hannani 348
La gestion des états
Une application Web a besoin de savoir
quel utilisateur a émis la requête
les requêtes déjà émises par cet utilisateur
l’état général actuel de l’application nombre de visites, nombre de produits vendus, consultés,…
Il faut rajouter à HTTP un mécanisme de gestion des états
ISIC/S3Prof. Asmaa El Hannani 349
-
8/16/2019 C05 Programmation Web Servlets
25/35
25
Techniques de mémorisation
Différentes techniques pour échanger les donnéesd’identification de la session dans chaque requête:
cookies
réécriture d’URL
champ de formulaire caché (“hidden ”)
utilisation des sessions grâce à HttpSession
ISIC/S3Prof. Asmaa El Hannani 350
Les cookies
-
8/16/2019 C05 Programmation Web Servlets
26/35
26
Qu’est-ce qu’un cookie ?
Fragment d’information textuelle échangé entre le client et leserveur Web
collection de paires nom/valeur
chargés dans la mémoire du client
un cookie permanent est sauvegardé dans un fichier texte sur leclient
partie de l’entête HTTP
Utilisé pour mémoriser les préférences de l’utilisateur, oumême l’identifier.
Désactivable
ISIC/S3Prof. Asmaa El Hannani 353
Anatomie
ISIC/S3Prof. Asmaa El Hannani 354
-
8/16/2019 C05 Programmation Web Servlets
27/35
-
8/16/2019 C05 Programmation Web Servlets
28/35
28
Méthodes supplémentaires
void setPath(String path)
définit le chemin
void setSecure(boolean flag)
true si SSL, false par défaut
void setDomain(String domain)
définit le domaine
ISIC/S3Prof. Asmaa El Hannani 357
Envoi de cookie
Méthode addCookie() de la classe HttpServletResponse
public void doGet(HttpServletRequest req,
HttpServletResponse rep) {
Cookie c = new Cookie(“nom”, “toto”);
c.setMaxAge(365*24*3600); !// 1an
rep.addCookie(c);
rep.setContentType(“text/html”);
...
}
ISIC/S3Prof. Asmaa El Hannani 358
-
8/16/2019 C05 Programmation Web Servlets
29/35
29
Lecture de cookie
Le navigateur envoie automatiquement les cookies
correspondant à domain et path
Un servlet peut récupérer les cookies envoyés précédemmentau navigateur
méthode getCookies() de HttpServletRequest
public Cookie[] getCookies()
ISIC/S3Prof. Asmaa El Hannani 359
Lecture de cookie (2)
Pour rechercher un cookie particulier, il faut parcourir le
tableau et rechercher le cookie à partir de son nom grâce à laméthode getName() de l'objet Cookie.
...
Cookie[] cookies = request.getCookies();
String valeur = "";
for(int i=0;i
-
8/16/2019 C05 Programmation Web Servlets
30/35
30
Réécriture d’URL et Champs de formulaires cachés
Réécriture d’URL
Principe
ajouter dans la chaîne de requête du servlet des informations permettantd’identifier la session
http://host/path/file?sessionid=1234&uid=”elhannani” il est accédé par chaque servlet mentionné qui récupère les informations
persistantes (SGBD, fichiers) à partir de cet ID
Avantage
fonctionne même si les cookies sont désactivés
Inconvénients encodage des URLs (données visibles, caractères autorisés, longueur)
toutes les pages sont dynamiquement générées
pas de bookmarks possibles
ISIC/S3Prof. Asmaa El Hannani 362
-
8/16/2019 C05 Programmation Web Servlets
31/35
31
Champs de formulaires cachés
Principe
On cache les données de session dans les champs “hidden ”
Avantage
fonctionne même si les cookies sont désactivés
Inconvénients beaucoup de travail
toutes les pages doivent être le résultat de soumission deformulaires
-
8/16/2019 C05 Programmation Web Servlets
32/35
32
Les sessions
Définition d’une session une série d’interactions liées entre un client et un serveur Web
englobe plusieurs requêtes HTTP sur une période donnée
Utilisées pour mémoriser les actions (requêtes HTTP) d’unutilisateur unique au cours du temps
exemple: opérations bancaires, caddie,…
ISIC/S3Prof. Asmaa El Hannani 365
L’interface HttpSession
Les objets HttpSession mémorisent les données de chaqueutilisateur.
Fonctionnement similaire à une table de hachage stockée sur leserveur.
A chaque ID de session est associé, via la table de hachage,l’ensemble des informations de la session.
Les objets session résident sur le serveur, et c’est l’objetrequest qui maintient les informations
Les sessions sont automatiquement associées au client via lescookies ou la réécriture d’URL.
ISIC/S3Prof. Asmaa El Hannani 366
-
8/16/2019 C05 Programmation Web Servlets
33/35
33
Comportement de base des sessions
Accès à l’objet session appel à request.getSession pour recevoir un objet HttpSession
(table de hachage associée à l’utilisateur)
Extraire les informations associées à une session appel à getAttribute sur l’objet HttpSession, récupérer la valeur,
vérifier si le résultat est nul
Mémoriser les informations de la session
utiliser setAttribute avec une clé et une valeur Supprimer les données de la session
removeAttribute supprime une valeur
invalidate pour annuler une session
logout pour déloguer le client de l’application Web
ISIC/S3Prof. Asmaa El Hannani 367
Obtenir l’objet session
Deux méthodes de HttpServletRequest HttpSession getSession()
retourne la session courante, si elle n’existe pas, elle est créée
HttpSession getSession(boolean create)
idem sauf que la session n’est créée que si create=true, sinonretournenull
ISIC/S3Prof. Asmaa El Hannani 368
-
8/16/2019 C05 Programmation Web Servlets
34/35
34
Mémoriser et extraire les données
Une fois la session obtenue, on peut mémoriser et extraire lesdonnées grâce aux méthodes de HttpSession.
void setAttribute(String name, Object val)
Object getAttribute(String name)
ISIC/S3Prof. Asmaa El Hannani 369
Mémoriser et extraire les données
Exemple: HttpSessionServlet
Exemple
ISIC/S3Prof. Asmaa El Hannani 370
-
8/16/2019 C05 Programmation Web Servlets
35/35
Méthodes de HttpServletRequest
isRequestedSessionIdValid()
vrai si l’ID de la session est valide dans le contexte courant
isRequestedSessionIdFromCookie()
vrai si l’ID de la session provient d’un cookie
isRequestedSessionIdFromURL()
vrai si l’ID de la session provient d’un URL
getRequestedSessionId()
retourne l’ID de la session
ISIC/S3Prof. Asmaa El Hannani 371
Méthodes de HttpSession
isNew()
vrai si nouvelle session
invalidate() invalide la session et supprime les associations nom/valeur
getMaxInactiveInterval()
retourne l’intervalle maximal d’inactivité en secondes
setMaxInactiveInterval()
définit l’intervalle maximal d’inactivité en secondes
getId
retourne l’identifiant de la session
ISIC/S3Prof. Asmaa El Hannani 372