Uploaded by ahmed ajmii

INTROWCD CH02 Le Modèle Servlet

advertisement
SERVLET & JSP
CHAPITRE 2
LE MODÈLE SERVLET
Yosri ZOUARI
05-2019
Plan
Introduction aux Servlets
Cycle de vie d’une Servlet
La Requête
La Réponse
Les Annotations Servlet API 3.0
Introduction aux Servlets
C’est quoi une Servlet?
Comment fonctionne une Servlet?
Quelles sont les détails techniques d’une Servlet?
Définition d’une Servlet
Composant qui permet de gérer les requêtes HTTP et de
fournir une réponse HTTP
Servlet est à son tour gérée par un moteur de Servlet
« Servlet Container »
« Servlet Container » assure la communication avec le serveur
Web
Servlet est une classe JAVA  gérée par la JVM
Architecture Servlet
Vue générale
Architecture Servlet
Vue approfondie
Quelle est la différence entre GET et POST?
GET vs. POST
GET
POST
Le traitement de la requête n’affecte pas
l’état du serveur
Le traitement de la requête affecte l’état
du serveur : CRUD DB
Les paramètres sont passés dans l’URL
 l’URL ne doit passé dépasser une
longueur de 255 caractères
Les paramètres sont passé dans le corps
de la requête
Servlet API
Paquets
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
 javax.servlet.annotation : contient des annotations pour annoter les
servlets, les filtres et les écouteurs. Il spécifie également les
métadonnées pour les composants annotés.
 javax.servlet.descriptor : contient des types fournissant un accès par
programme aux informations de configuration d’une application
Web.

Servlet API
paquet « javax.servlet »
Servlet API
Interfaces du paquet « javax.servlet »
RequestDispatcher : Définition d’un objet qui permet le renvoi d’une
requête vers une autre ressource du serveur (une autre servlet, une
JSP, ...)
Servlet : Définition de base d’une servlet
ServletConfig : Définition d’un objet pour configurer la servlet
ServletContext : Définition d’un objet pour obtenir des informations
sur le contexte d’exécution de la servlet
ServletRequest : Définition d’un objet contenant la requête du client
ServletResponse : Définition d’un objet qui contient la réponse
renvoyée par la servlet
SingleThreadModel : Permet de définir une servlet qui ne répondra
qu’à une seule requête à la fois
Servlet API
Classes du paquet « javax.servlet »
Classes :

GenericServlet : Classe définissant une servlet indépendante de tout
protocole
 ServletInputStream : Flux permet la lecture des données de la
requête cliente
 ServletOutPutStream : Flux permettant l’envoie de la réponse de la
servlet
Exceptions :
SevletException : Exception générale en cas de problème durant
l’exécution de la servlet
 UnavailableException : Exception levée si la servlet n’est pas
disponible

Servlet API
paquet « javax.servlet.http »
Servlet API
Interfaces du paquet « javax.servlet.http »
Interfaces :



HttpServletRequest : Hérite de ServletRequest  définit un objet
contenant une requête selon le protocole http
HttpServletResponse : Hérite de ServletResponse  définit un objet
contenant la réponse de la servlet selon le protocole http
HttpSession : Définit un objet qui représente une session
Classes :



Cookie : Classe représentant un cookie (ensemble de données
sauvegardées par le navigateur WEB sur le poste client)
HttpServlet : Hérite de GenericServlet  classe définissant une servlet
utilisant le protocole http
HttpUtils : Classe proposant des méthodes statiques utiles pour le
développement de servlet http
Servlet API
Diagramme de classe
Avantages Servlet
Portabilité : Exploiter la portabilité de JAVA
Puissance : API mature
Efficacité et endurance : Servlet chargée une seule fois
Sureté :


Typage fort
Gestion des exceptions
Premier Exemple de Servlet
Développer l’exercice :
Tutorial_Première_Servlet_HelloWorld_3.docx
Premier Exemple
Réflexion après le premier exemple
C’est quoi ce ficher « web.xml » ?
C’est quoi cette structure du projet ?
Comment la Servlet est exécutée ?
C’est quoi ces objets qu’on a manipulé « HttpServletRequest » et
« HttpServletResponse » ?
C’est quoi ces annotations qu’on a utilisé ?
Evolution de l’API Servlet
Avant Servlet API 3.0 la configuration de Servlet est effectuée
au niveau du « web.xml »
Depuis Servlet API 3.0, la configuration des Servlets est
effectuée via l’annotation « @WebServlet ».
L’exercice « Tutorial_Première_Servlet_HelloWorld.docx »
illustre la spécification Servlet API 2.5
Cycle de vie d’une Servlet
Quand une Servlet est créée?
Comment une Servlet est invoquée?
Quand une Servlet est morte?
Cycle de vie d’une Servlet
Vue général
Cycle de vie d’une Servlet
Vue approfondie
Cycle : Loading -- Instantiation -- initialization -serving -- destroying
Servlet est chargée et instanciée avant la
première requête
Chargement de la Servlet : exécution des blocs
statiques
Instanciation de la Servlet : création de l’instance
et initialiser les paramètres d’instance
Appel de la méthode « init » : une exception de
type « javax.resource.spi.UnavailableException »
est lancée si l’initialisation échoue
Cycle de vie d’une Servlet
Vue approfondie
La Servlet est invoquée par le conteneur web
suite à une requête HTTP :



La méthode « service » de la classe parent
« HttpSevlet » est invoquée
Dans le corps de la méthode on fait appel à l’une
des 6 méthodes « doXXX » selon la méthode de
la requête HTTP
Plusieurs requêtes  plusieurs threads  accès
simultané à la méthode service pour une seule
Instance de servlet
Serveur arrêté  appel de la méthode
« destroy » de la servlet  But : libérer les
ressources allouées dans la méthode « init »
Cycle de vie d’une Servlet
Scénario complet
La Requête
Comment on récupère une requête http dans une Servlet?
Qu’est ce qu’on peut récupérer d’une requête http?
HttpServletRequest
Utilité
Question :
A quoi sert l’objet « HttpServletRequest » ?
 Qu’est ce qu’on a besoin de récupérer de « HttpServletRequest » ?

Réponse :
Paramètre de la requête HTTP
 Paramètres de l’entête de la requête
 Les cookies utilisateur
 URL, PATH et diverses autres informations relatives à la requêtes

HttpServletRequest
Diagramme de classes
HttpServletRequest
Récupération des paramètres d’une requête
Besoin : Récupère les paramètres passés en paramètres dans une requête HTTP
Solution : « HttpServletRequest » propose un ensemble de méthodes pour récupérer les
paramètres :
Méthode
Description
String getParameter(String name)
Retourne la valeur d’un paramètre en
format String
Map<String,String[]>getParameterMap()
Retourne un Map
Clé : nom Valeur : un tableau de valeur
Enumeration<String>getParameterNames Retourne une Enumeration des noms de
()
paramètres
String[] getParameterValues(name)
Retourne un tableau des valeurs d’un
paramètre
HttpServletRequest
Récupération de l’entête d’une requête HTTP
Besoin : Récupérer les
paramètres de l’entête d’une
requête HTTP
Solution :
« HttpServletRequest »
définie des méthodes pour
récupérer ces données
HttpServletRequest
Récupération de l’entête d’une requête HTTP
Méthode
String getHeader(String name)
Enumeration getHeaders(String name)
Enumeration getHeaderNames()
Long getDateHeader(String)
Int getIntHeader(String name)
Récupération de l’entête d’une requête HTTP
Exemple
Récupération de l’entête d’une requête HTTP
Résultat
HttpServletRequest
Introduction aux Cookies
C’est quoi un « Cookie » ? :

est un petit fichier texte qui contient une petite quantité d'informations sur un
utilisateur visitant votre site et est stocké sur l'ordinateur du visiteur du site par
son navigateur

pour enregistrer les préférences de l'utilisateur, personnaliser les données, rappeler la
dernière visite, ou pour garder une trace des articles dans un ordre pendant qu'un
utilisateur navigue
Quand une cookie est créée ? :
HttpServletRequest
Emplacement des Cookies
Dans l’inspecteur de la page HTML :
Dans le navigateur :
HttpServletRequest
Propriétés d’une Cookie
Nom
Description
name
Nom de la propriété
value
Valeur de la propriété
maxAge
Date d’expiration
domain
Nom de domaine propriétaire de cette « cookie »
Les cookies ne peuvent être lus que par le site qui
les a créés ou par un site «en dessous» du site qui
les a créés
path
URL absolue propriétaire de cette « cookie »
HttpServletRequest
Récupération des Cookies
Comme la requête et la réponse, l’API Servlet
enveloppe le Cookie dans un objet JAVA
fournissant les méthodes nécessaires pour
récupérer/saisir le contenue
Cookie
Méthodes de la classe
Méthode
Description
public void setMaxAge(int expiry)
Fixer l'âge maximum de la Cookie en secondes.
public String getName()
Retourne ne nom de la Cookie. Le nom n’est
plus éditable après création.
public String getValue()
Retourne la valeur de la Cookie.
public void setName(String name)
Saisir le nom de la Cookie.
public void setValue(String value)
Saisir la valeur de la Cookie.
HttpServletRequest
Exercice : paramètres d’un formulaire
Développer un formulaire dans un fichier HTML
Mettre dans l’action du formulaire le path de notre servlet
Récupérer les paramètres du formulaire dans la méthode
POST de notre servlet
Mettre un break point au niveau du post de la méthode de la
servlet et développer l’objet « httpServletRequest »
La Réponse
Comment on récupère une réponse http dans une Servlet?
Qu’est ce qu’on peut récupérer d’une réponse http?
Qu’est ce qu’on peut manipuler avec une réponse http?
HttpServletResponse
Utilité
Question :
A quoi sert l’objet « HttpServletResponse » ?
 Qu’est ce qu’on peut saisir dans une « HttpServletResponse » ?

Réponse :
Paramètres de l’entête de la réponse
 Le corps de la réponse
 Des cookies

HttpServletResponse
Diagramme de classes
HttpServletResponse
Saisir l’entête de la réponse
Besoin : Saisir des paramètres de l’entête d’une réponse HTTP
Solution : « HttpServletResponse » définie des méthodes pour saisir ces données
Méthode
setDateHeader(String name, long date);
addDateHeader(String name, long date);
setHeader(String name, String value);
addHeader(String name, String value);
setIntHeader(String name, int value);
addIntHeader(String name, int value);
HttpServletResponse
Redirection
Contexte :


Utilisateur valide un formulaire
Le PATH de la validation du formulaire
s’affiche dans le navigateur
Problème : Utilisateur peut rafraichir
la page  envoie une deuxième fois
le formulaire
Besoin : une solution qui permet
d’avoir une nouvelle URL dans le
navigateur
Solution : « redirection »
Comment : Utiliser la méthode
« redirect(String) » de
« HttpServletResponse »
HttpServletResponse
Redirection
Exemple :

Redirection vers un autre domaine
HttpServletResponse
Redirection

Redirection vers une ressource locale
HttpServletResponse
Création d’une Cookie
Besoin : Créer une nouvelle cookie
Solution : « HttpServletResponse » définie la méthode
« addCookies(Cookie cookie) » pour ajouter une nouvelle « Cookie »
Exemple : 
Note : un navigateur est supposé supporter 20 cookies/site, 300
cookies en total et une taille maximale de 4KByte maximum/cookie
HttpServletResponse
Spécifier le type du contenu retourner dans la réponse
Besoin : On a besoin de retourner différent types de contenus dans la
réponse
Solution : « HttpServletResponse » définie la méthode « setContentType(String
mimeType) » pour spécifier le type du contenu qu’on va saisir dans la réponse
comme :



application/json
text/html
texte/plain
Exemple :
Exercice
Redirection & Cookie
Créer un nouveau projet Web
Créer une Servlet « ServletB » qui :
affiche « Hello World »
 Affiche le contenu de la Cookie.

Créer une Servlet « ServletA » qui :
Crée une cookie qui sauvegarde un paramètre
« lastAccessDateTime » qui contiendra la date complète d’accès.
 Fait une redirection vers la Servlet « ServletB ».

Vérifier que l’appel à la Servlet « ServletA » fait la
redirection vers la Servlet « ServletB ».
Vérifier que le cookie a été bien reçue par le navigateur.
Les Annotations Servlet API 3.0
C’est quoi ces annotations ?
Comment on manipule ces annotations ?
Pourquoi ces annotations ?
Les Annotations
Introduction
Les annotations sont une nouvelle fonctionnalité introduite dans
la spécification Servlet 3.0.
Avant Servlet 3.0, déclarer des servlets  on doit le faire
dans le fichier « web.xml ».
A partir de Servlet 3.0, on peut simplement annoter les classes
de servlet en utilisant l'annotation « @WebServlet ».
Elles sont définies dans le package « javax.servlet.annotation »
Les Annotations
Liste des annotations
Parmi les annotations on distingue :
@WebServlet : Définit une Servlet
 @WebFilter : Définit un Filter
 @WebListener : Définit un Listener
 @WebInitParam : Définit des paramètres d’initialisation
 @ServletSecurity : Utilisée dans une Servlet pour définir les
contraintes de sécurité
 @MultipartConfig : Utilisée dans une Servlet pour définir les
propriétés de téléchargement de fichier

@WebServlet
Définition
« @WebServlet » est utilisée pour déclarer un servlet.
La classe annotée doit étendre la classe « javax.servlet.http.HttpServlet ».
Attributs :
Nom
Type
Obligatoire
Description
value
urlPatterns
String[]
OUI
Spécifie un ou plusieurs URL patterns de la Servlet.
name
String
NON
Nom de la Servlet.
displayName
String
NON
Nom affiché de la Servlet
description
String
NON
Description de la Servlet
asyncSupported
boolean
NON
Indique si la Servlet supporte ou non le mode
asynchrone. Par défaut : false
@WebServlet
Définition
Nom
Type
Obligatoire
Description
initParams
WebInitParam[]
NON
Spécifie un ou plusieurs
paramètres d’initialisation. Chaque
paramètre est spécifié par
«@WebInitParam».
loadOnStartup
init
NON
Spécifie l’ordre de chargement des
Servlets
smallIcon
String
NON
Spécifie le nom de la petite icone
de la Servlet
largeIcon
String
NON
Spécifie le nom de la grande icone
de la Servlet
@WebServlet
Initialisation d’une Servlet - Introduction
C’est une nouvelle méthode pour définir les paramètres
d’initialisation d’un Servlet via « @WebInitParam »
Syntaxe :
Attributs :
Nom
Type
Obligatoire
Description
name
String
OUI
Nom du paramètre
value
String
OUI
Valeur du paramètre
description
String
NON
Description du paramètre
@WebServlet
Initialisation d’une Servlet
@WebServlet
Asynchrone concept - Définition
Servlet 3.0 introduit la possibilité de traitement asynchrone des demandes
afin que le thread puisse retourner dans le conteneur et effectuer d'autres
tâches.
Lorsque le traitement asynchrone commence sur la demande, un autre
thread peut générer la réponse
Pourquoi ce concept ? :




Dans un Serveur, chaque requête est assignée à un Thread qui invoque la Servlet.
Tans qu’une Servlet n’a pas retourné de réponse, le Thread n’est pas libéré.
Si une Servlet consacre un temps de traitement important, cela peut conduire à la
famine de threads
Si le serveur reçoit un grand nombre de demandes à traiter, il atteindra la limite
maximale de threads de servlet et les autres demandes obtiendront des erreurs
de connexion refusée.
@WebServlet
Asynchrone concept - Illustration
@WebServlet
Asynchrone concept - Exemple
On utilise l’attribut « asyncSupported » de l’annotation pour indiquer si
la servlet est asynchrone.
Exemple :
Récapitulons
C’est quoi une Servlet ?
Quel est le cycle de vie d’une
Servlet ?
Comment on récupère une
requête HTTP dans une Servlet ?
Comment on récupère une
réponse HTTP dans une Servlet ?
Citer quelques annotations
définies dans Servlet 3.0
Download