0% ont trouvé ce document utile (0 vote)
25 vues78 pages

JavaEE ch2

Le document décrit les différentes méthodes HTTP utilisées entre le client et le serveur, notamment GET et POST. GET est utilisé pour récupérer des ressources tandis que POST permet de soumettre des données au serveur, sans limite de taille.
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
25 vues78 pages

JavaEE ch2

Le document décrit les différentes méthodes HTTP utilisées entre le client et le serveur, notamment GET et POST. GET est utilisé pour récupérer des ressources tandis que POST permet de soumettre des données au serveur, sans limite de taille.
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

01/04/2022

2021/2022
Université Abdelmalek Essaâdi
École Normale Supérieure
Tétouan

LA SERVLET

Objectif
2

 découvrir ce qu'est une servlet, son rôle au sein de


l'application et comment elle doit être mise en place.

1
01/04/2022

Rappel: le fonctionnement du protocole HTTP


3

 Le langage qu'utilisaient le client et le serveur pour s'échanger des


informations.

Rappel: le fonctionnement du protocole HTTP


3

 Le langage qu'utilisaient le client et le serveur pour s'échanger des


informations.
 Les méthodes HTTP: Ce sont les mots qu'utilise le navigateur pour
poser des questions au serveur (GET, POST et HEAD)

2
01/04/2022

GET
4

 La méthode utilisée par le client pour récupérer une ressource web du


serveur via une URL

GET
4

 La méthode utilisée par le client pour récupérer une ressource web du


serveur via une URL

 Lorsque vous tapez www.site.com dans la barre d'adresses de votre


navigateur et que vous validez, votre navigateur envoie une requête GET
pour récupérer la page correspondant à cette adresse et le serveur la lui
renvoie.

3
01/04/2022

GET
4

 La méthode utilisée par le client pour récupérer une ressource web du


serveur via une URL

 Lorsque vous tapez www.site.com dans la barre d'adresses de votre


navigateur et que vous validez, votre navigateur envoie une requête GET
pour récupérer la page correspondant à cette adresse et le serveur la lui
renvoie.

 La même chose se passe lorsque vous cliquez sur un lien.

GET
4

 La méthode utilisée par le client pour récupérer une ressource web du


serveur via une URL

 Lorsque vous tapez www.site.com dans la barre d'adresses de votre


navigateur et que vous validez, votre navigateur envoie une requête GET
pour récupérer la page correspondant à cette adresse et le serveur la lui
renvoie.

 La même chose se passe lorsque vous cliquez sur un lien.

 Lorsqu'il reçoit une telle demande, le serveur ne fait pas que retourner la
ressource demandée.

4
01/04/2022

GET
5

 Il est possible de transmettre des données au serveur lorsque l'on


effectue une requête GET, au travers :

GET
5

 Il est possible de transmettre des données au serveur lorsque l'on


effectue une requête GET, au travers :
1. de paramètres directement placés après l'URL (paramètres
nommés query strings)

5
01/04/2022

GET
5

 Il est possible de transmettre des données au serveur lorsque l'on


effectue une requête GET, au travers :
1. de paramètres directement placés après l'URL (paramètres
nommés query strings)
2. de cookies placés dans les en-têtes de la requête :

GET
5

 Il est possible de transmettre des données au serveur lorsque l'on


effectue une requête GET, au travers :
1. de paramètres directement placés après l'URL (paramètres
nommés query strings)
2. de cookies placés dans les en-têtes de la requête :

 La limite de ce système est que, comme la taille d'une URL est


limitée, on ne peut pas utiliser cette méthode pour envoyer des
données volumineuses au serveur (par exemple un fichier).

6
01/04/2022

GET
5

 Il est possible de transmettre des données au serveur lorsque l'on


effectue une requête GET, au travers :
1. de paramètres directement placés après l'URL (paramètres
nommés query strings)
2. de cookies placés dans les en-têtes de la requête :

 La limite de ce système est que, comme la taille d'une URL est


limitée, on ne peut pas utiliser cette méthode pour envoyer des
données volumineuses au serveur (par exemple un fichier).
 Il est uniquement possible de récupérer ou de lire des informations,
sans que cela ait un quelconque impact sur la ressource demandée.

GET
5

 Il est possible de transmettre des données au serveur lorsque l'on


effectue une requête GET, au travers :
1. de paramètres directement placés après l'URL (paramètres
nommés query strings)
Une requête GET est censée pouvoir être répétée
2. de cookies placéssans
indéfiniment dansrisques
les en-têtes
pour laderessource
la requêteconcernée.
:
 La limite de ce système est que, comme la taille d'une URL est
limitée, on ne peut pas utiliser cette méthode pour envoyer des
données volumineuses au serveur (par exemple un fichier).
 Il est uniquement possible de récupérer ou de lire des informations,
sans que cela ait un quelconque impact sur la ressource demandée.

7
01/04/2022

POST
6

 La taille du corps du message d'une requête POST n'est pas limitée.

POST
6

 La taille du corps du message d'une requête POST n'est pas limitée.


 Cette
méthode qu'il faut utiliser pour soumettre au serveur des
données de tailles variables, ou que l'on sait volumineuses (pour
envoyer des fichiers par exemple).

8
01/04/2022

POST
6

 La taille du corps du message d'une requête POST n'est pas limitée.


 Cette méthode qu'il faut utiliser pour soumettre au serveur des
données de tailles variables, ou que l'on sait volumineuses (pour
envoyer des fichiers par exemple).
 Cette méthode doit être utilisée pour réaliser les opérations qui ont un
effet sur la ressource, et qui ne peuvent par conséquent pas être
répétées sans l'autorisation explicite de l'utilisateur.

POST
6

 La taille du corps du message d'une requête POST n'est pas limitée.


 Cette
méthode qu'il faut utiliser pour soumettre au serveur des
données de tailles variables, ou que l'on sait volumineuses (pour
envoyer des fichiers par exemple).
 Cette méthode doit être utilisée pour réaliser les opérations qui ont un
effet sur la ressource, et qui ne peuvent par conséquent pas être
répétées sans l'autorisation explicite de l'utilisateur.
Exemple: un message d'alerte après avoir actualisé une page web

9
01/04/2022

POST
6

 La taille du corps du message d'une requête POST n'est pas limitée.


 Cette
méthode qu'il faut utiliser pour soumettre au serveur des
données de tailles variables, ou que l'on sait volumineuses (pour
envoyer des fichiers par exemple).
 Cette méthode doit être utilisée pour réaliser les opérations qui ont un
effet sur la ressource, et qui ne peuvent par conséquent pas être
répétées sans l'autorisation explicite de l'utilisateur.
Exemple: un message d'alerte après avoir actualisé une page web
 parce que la page que vous souhaitez recharger a été récupérée via la
méthode POST

HEAD
7

 Identique à la méthode GET

10
01/04/2022

HEAD
7

 Identique à la méthode GET


 Le serveur n'y répondra pas en renvoyant la ressource accompagnée des
informations la concernant, mais seulement ces informations (les en-têtes
HTTP).

HEAD
7

 Identique à la méthode GET


 Le serveur n'y répondra pas en renvoyant la ressource accompagnée des
informations la concernant, mais seulement ces informations (les en-têtes
HTTP).
 Il est ainsi possible par exemple de vérifier la validité d'une URL ou de
vérifier si le contenu d'une page a changé ou non sans avoir à récupérer la
ressource elle-même :

11
01/04/2022

HEAD
7

 Identique à la méthode GET


 Le serveur n'y répondra pas en renvoyant la ressource accompagnée des
informations la concernant, mais seulement ces informations (les en-têtes
HTTP).
 Il est ainsi possible par exemple de vérifier la validité d'une URL ou de
vérifier si le contenu d'une page a changé ou non sans avoir à récupérer la
ressource elle-même :
 il suffit de regarder ce que contiennent les différents champs des en-têtes.

sur le serveur…
8

lorsqu'une requête lui parvient:

12
01/04/2022

sur le serveur…
8

lorsqu'une requête lui parvient:


 Il la transmet à un autre élément (conteneur) : il s'agit en réalité d'un

conteneur de servlets (conteneur web). Celui-ci va alors créer deux


nouveaux objets:

sur le serveur…
8

lorsqu'une requête lui parvient:


 Il la transmet à un autre élément (conteneur) : il s'agit en réalité d'un
conteneur de servlets (conteneur web). Celui-ci va alors créer deux
nouveaux objets:

13
01/04/2022

sur le serveur…
8

lorsqu'une requête lui parvient:


 Il la transmet à un autre élément (conteneur) : il s'agit en réalité d'un

conteneur de servlets (conteneur web). Celui-ci va alors créer deux


nouveaux objets:
 HttpServletRequest : cet objet contient la requête HTTP, et donne
accès à toutes ses informations, telles que les en-têtes (headers) et le
corps de la requête.

sur le serveur…
8

lorsqu'une requête lui parvient:


 Il la transmet à un autre élément (conteneur) : il s'agit en réalité d'un
conteneur de servlets (conteneur web). Celui-ci va alors créer deux
nouveaux objets:
 HttpServletRequest : cet objet contient la requête HTTP, et donne
accès à toutes ses informations, telles que les en-têtes (headers) et le
corps de la requête.
 HttpServletResponse : cet objet initialise la réponse HTTP qui sera

renvoyée au client, et permet de la personnaliser, en initialisant par


exemple les en-têtes et le corps.

14
01/04/2022

sur le serveur…
8

lorsqu'une requête lui parvient:


 Il la transmet à un autre élément (conteneur) : il s'agit en réalité d'un

conteneur de servlets (conteneur web). Celui-ci va alors créer deux


nouveaux objets:
 HttpServletRequest : cet objet contient la requête HTTP, et donne
le conteneur de servlets va les transmettre à votre
accès à toutes ses informations, telles que les en-têtes (headers) et le
corps deapplication,
la requête. et plus précisément aux servlets
 HttpServletResponse : cet objet initialise la réponse HTTP qui sera
renvoyée au client, et permet de la personnaliser, en initialisant par
exemple les en-têtes et le corps.

qu'est-ce qu'une servlet?


9

 Une servlet est en réalité une simple classe Java, qui a la particularité
de permettre le traitement de requêtes et la personnalisation de
réponses.

15
01/04/2022

qu'est-ce qu'une servlet?


9

 Une servlet est en réalité une simple classe Java, qui a la particularité
de permettre le traitement de requêtes et la personnalisation de
réponses.

 Une servlet est capable de gérer n'importe quel type de requête, mais
dans les faits il s'agit principalement de requêtes HTTP.

qu'est-ce qu'une servlet?


9

 Une servlet est en réalité une simple classe Java, qui a la particularité
de permettre le traitement de requêtes et la personnalisation de
réponses.

 Une servlet est capable de gérer n'importe quel type de requête, mais
dans les faits il s'agit principalement de requêtes HTTP.
 le package servlet : on y trouve une quarantaine de classes et
interfaces, parmi lesquelles l'interface nommée Servlet.

16
01/04/2022

qu'est-ce qu'une servlet?


9

 Une servlet est en réalité une simple classe Java, qui a la particularité
de permettre le traitement de requêtes et la personnalisation de
réponses.

 Une servlet est capable de gérer n'importe quel type de requête, mais
dans les faits il s'agit principalement de requêtes HTTP.
 le package servlet : on y trouve une quarantaine de classes et

interfaces, parmi lesquelles l'interface nommée Servlet.


 C’est l'interface mère que toute servlet doit obligatoirement implémenter.

l'interface Servlet
10

 Il existe déjà des classes de base qui l'implémentent

17
01/04/2022

l'interface Servlet
10

 Il existe déjà des classes de base qui l'implémentent


 il suffit donc d'hériter d'une de ces classes pour créer une servlet

l'interface Servlet
10

 Il existe déjà des classes de base qui l'implémentent


 il suffit donc d'hériter d'une de ces classes pour créer une servlet

18
01/04/2022

l'interface Servlet: Création d'une servlet


11

 Pour traiter des requêtes HTTP, nous allons donc faire hériter notre
servlet de la classe HttpServlet!

l'interface Servlet: Création d'une servlet


11

 Pour traiter des requêtes HTTP, nous allons donc faire hériter notre
servlet de la classe HttpServlet!
 clic droit sur le répertoire src, puis choisissez New > Class

19
01/04/2022

l'interface Servlet: Création d'une servlet


11

 Pour traiter des requêtes HTTP, nous allons donc faire hériter notre
servlet de la classe HttpServlet!
 clic droit sur le répertoire src, puis choisissez New > Class

l'interface Servlet: Création d'une servlet


11

 Pour traiter des requêtes HTTP, nous allons donc faire hériter notre
servlet de la classe HttpServlet!
 clic droit sur le répertoire src, puis choisissez New > Class

20
01/04/2022

l'interface Servlet: Création d'une servlet


11

 Pour traiter des requêtes HTTP, nous allons donc faire hériter notre
servlet de la classe HttpServlet!
clic droit
package sur le répertoire src, puis choisissez New > Class
com.ldw.servlets;

import javax.servlet.http.HttpServlet;

public class Test extends HttpServlet {

l'interface Servlet: la classe HttpServlet


12

 La Javadoc nous donne des informations utiles concernant le


fonctionnement de cette classe :

21
01/04/2022

l'interface Servlet: la classe HttpServlet


12

 La Javadoc nous donne des informations utiles concernant le


fonctionnement de cette classe :
 C'est une classe abstraite: on ne pourra pas l'utiliser telle
quelle et qu'il sera nécessaire de passer par une servlet qui
en hérite.

l'interface Servlet: la classe HttpServlet


12

 La Javadoc nous donne des informations utiles concernant le


fonctionnement de cette classe :
 C'est une classe abstraite: on ne pourra pas l'utiliser telle
quelle et qu'il sera nécessaire de passer par une servlet qui
en hérite.
 La classe propose les méthodes Java nécessaires au
traitement des requêtes et réponses HTTP.

22
01/04/2022

l'interface Servlet: la classe HttpServlet


13

l'interface Servlet: la classe HttpServlet


13

 doGet() pour gérer la méthode GET ;

23
01/04/2022

l'interface Servlet: la classe HttpServlet


13

 doGet() pour gérer la méthode GET ;


 doPost() pour gérer la méthode POST ;

l'interface Servlet: la classe HttpServlet


13

 doGet() pour gérer la méthode GET ;


 doPost() pour gérer la méthode POST ;

 doHead() pour gérer la méthode HEAD.

24
01/04/2022

l'interface Servlet: la classe HttpServlet


14

Comment la classe fait-elle pour associer chaque type de requête HTTP


à la méthode Java qui lui correspond ?

l'interface Servlet: la classe HttpServlet


14

Comment la classe fait-elle pour associer chaque type de requête HTTP


à la méthode Java qui lui correspond ?

 ceci est géré automatiquement par sa méthode service():

25
01/04/2022

l'interface Servlet: la classe HttpServlet


14

Comment la classe fait-elle pour associer chaque type de requête HTTP


à la méthode Java qui lui correspond ?

 ceci est géré automatiquement par sa méthode service():


 elle
se charge de lire l'objet HttpServletRequest et de distribuer la
requête HTTP à la méthode doXXX() correspondante.

En résumé
15

 une servlet HTTP doit hériter de la classe abstraite HttpServlet


;
 une servlet doit implémenter au moins une des méthodes
doXXX(), afin d'être capable de traiter une requête entrante.

26
01/04/2022

En résumé
15

 une servlet HTTP doit hériter de la classe abstraite HttpServlet


;
 une servlet doit implémenter au moins une des méthodes
doXXX(), afin d'être capable de traiter une requête entrante.
 les servlets vont être les points d'entrée de notre application
web, c'est par elles que tout va passer.
 Contrairement au Java SE, il n'existe pas en Java EE de point
d'entrée unique prédéfini, comme pourrait l'être la méthode
main()…

Servlet: Mise en place


16

 Lorsque nous avions mis en place une page HTML statique, nous accédions
directement à la page en question via une URL directe pointant vers le
fichier depuis notre navigateur.

27
01/04/2022

Servlet: Mise en place


16

 Lorsque nous avions mis en place une page HTML statique, nous accédions
directement à la page en question via une URL directe pointant vers le
fichier depuis notre navigateur.

Mais dans le cas d'une servlet (une classe Java), comment faire ?

Servlet: Mise en place


17

 Les servlets! On peut les voir comme des gendarmes : si les


requêtes étaient des véhicules, les servlets seraient chargées de faire
la circulation sur le gigantesque carrefour qu'est l’application

28
01/04/2022

Servlet: Mise en place


17

 Les servlets! On peut les voir comme des gendarmes : si les


requêtes étaient des véhicules, les servlets seraient chargées de faire
la circulation sur le gigantesque carrefour qu'est l’application
 Pour obtenir cette autorité et être reconnues en tant que telles, les

servlets nécessitent un traitement:

Servlet: Mise en place


17

 Les servlets! On peut les voir comme des gendarmes : si les


requêtes étaient des véhicules, les servlets seraient chargées de faire
la circulation sur le gigantesque carrefour qu'est l’application
 Pour obtenir cette autorité et être reconnues en tant que telles, les
servlets nécessitent un traitement:
 il va falloir les enregistrer auprès de notre application.

29
01/04/2022

Servlet: Mise en place


17

 Les servlets! On peut les voir comme des gendarmes : si les


requêtes étaient des véhicules, les servlets seraient chargées de faire
la circulation sur le gigantesque carrefour qu'est l’application
 Pour obtenir cette autorité et être reconnues en tant que telles, les

servlets nécessitent un traitement:


 il va falloir les enregistrer auprès de notre application.
 Il faut donc un moyen de faire comprendre à l’application que la
servlet existe, à la fois pour lui donner l'autorité sur les requêtes et
pour la rendre accessible au public.

Servlet: Mise en place


18

 Il va falloir configurer quelque part le fait que notre servlet va être


associée à une URL.

30
01/04/2022

Servlet: Mise en place


18

 Il va falloir configurer quelque part le fait que notre servlet va être


associée à une URL.
 lorsque le client la saisira, la requête HTTP sera automatiquement
aiguillée par notre conteneur de servlet vers la bonne servlet, celle qui
est en charge de répondre à cette requête.

Servlet: Mise en place


18

 Il va falloir configurer quelque part le fait que notre servlet va être


associée à une URL.
 lorsque le client la saisira, la requête HTTP sera automatiquement
aiguillée par notre conteneur de servlet vers la bonne servlet, celle qui
est en charge de répondre à cette requête.
 Ce "quelque part" se présente sous la forme d'un simple fichier texte :
le fichier web.xml.

31
01/04/2022

Servlet: Mise en place


19

Le fichier web.xml:

Servlet: Mise en place


19

Le fichier web.xml:
 C'est le cœur de votre application :

 On trouve tous les paramètres qui contrôlent son cycle de vie.

32
01/04/2022

Servlet: Mise en place


19

Le fichier web.xml:
 C'est le cœur de votre application :

 On trouve tous les paramètres qui contrôlent son cycle de vie.

Lier notre servlet à une URL:

Servlet: Mise en place


19

Le fichier web.xml:
 C'est le cœur de votre application :

 On trouve tous les paramètres qui contrôlent son cycle de vie.

Lier notre servlet à une URL:


 Ce fichier de configuration doit impérativement se nommer web.xml et se

situer juste sous le répertoire /WEB-INF de votre application.

33
01/04/2022

Servlet: Mise en place


19

Le fichier web.xml:
 C'est le cœur de votre application :

 On trouve tous les paramètres qui contrôlent son cycle de vie.

Lier notre servlet à une URL:


 Ce fichier de configuration doit impérativement se nommer web.xml et se

situer juste sous le répertoire /WEB-INF de votre application.


 Éditez-le, et supprimez le contenu généré par défaut.

Servlet: Mise en place


19

Le fichier web.xml:
 C'est le cœur de votre application :

 On trouve tous les paramètres qui contrôlent son cycle de vie.

Lier notre servlet à une URL:


 Ce fichier de configuration doit impérativement se nommer web.xml et se

situer juste sous le répertoire /WEB-INF de votre application.


 Éditez-le, et supprimez le contenu généré par défaut.

 Si jamais le fichier est absent de votre arborescence, créez simplement un

nouveau fichier XML en veillant bien à le placer sous le répertoire /WEB-INF


et à le nommer web.xml.

34
01/04/2022

Servlet: Mise en place


19

Le fichier
<?xml version="1.0"
web.xml: encoding="UTF-8"?>
<web-app
 C'est le cœur de votre application :
xmlns="http://java.sun.com/xml/ns/javaee"
 Onxmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
trouve tous les paramètres qui contrôlent son cycle de vie.
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
Lierhttp://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
notre servlet à une URL:
 Ce version="3.0">
fichier de configuration doit impérativement se nommer web.xml et se
situer juste sous le répertoire /WEB-INF de votre application.
</web-app>
 Éditez-le, et supprimez le contenu généré par défaut.

 Si jamais le fichier est absent de votre arborescence, créez simplement un

nouveau fichier XML en veillant bien à le placer sous le répertoire /WEB-INF


et à le nommer web.xml.

Servlet: Mise en place


20

 La mise en place d'une servlet se déroule en deux étapes:

35
01/04/2022

Servlet: Mise en place


20

 La mise en place d'une servlet se déroule en deux étapes:


1. déclarer la servlet.
2. lui faire correspondre une URL.

Définition de la servlet
21

 La première chose à faire est de déclarer notre servlet :

<servlet>
<servlet-name>Test</servlet-name>
<servlet-class>com.ldw.servlets.Test</servlet-class>
</servlet>

36
01/04/2022

Définition de la servlet
21

 La première chose à faire est de déclarer notre servlet :


 ils'agit de lui donner une carte d'identité, un moyen pour le serveur
de la reconnaître.

<servlet>
<servlet-name>Test</servlet-name>
<servlet-class>com.ldw.servlets.Test</servlet-class>
</servlet>

Définition de la servlet
21

 La première chose à faire est de déclarer notre servlet :


 il s'agit de lui donner une carte d'identité, un moyen pour le serveur
de la reconnaître.
 il faut ajouter une section au fichier:

<servlet>
<servlet-name>Test</servlet-name>
<servlet-class>com.ldw.servlets.Test</servlet-class>
</servlet>

37
01/04/2022

Définition de la servlet
22

 La balise responsable de la définition d'une servlet se nomme


logiquement <servlet>, et les deux balises obligatoires de cette section
sont très explicites :

Définition de la servlet
22

 La balise responsable de la définition d'une servlet se nomme


logiquement <servlet>, et les deux balises obligatoires de cette section
sont très explicites :

 <servlet-name> permet de donner un nom à une servlet. C'est


ensuite via ce nom qu'on fera référence à la servlet.

38
01/04/2022

Définition de la servlet
22

 La balise responsable de la définition d'une servlet se nomme


logiquement <servlet>, et les deux balises obligatoires de cette section
sont très explicites :

 <servlet-name> permet de donner un nom à une servlet. C'est


ensuite via ce nom qu'on fera référence à la servlet.
 <servlet-class> sert à préciser le chemin de la classe de la servlet
dans votre application.

Définition de la servlet
22

 La balise responsable de la définition d'une servlet se nomme logiquement


<servlet>, et les deux balises obligatoires de cette section sont très
explicites :

 <servlet-name> permet de donner un nom à une servlet. C'est ensuite via


ce nom qu'on fera référence à la servlet.
 <servlet-class> sert à préciser le chemin de la classe de la servlet dans
votre application.

Bonne pratique : gardez un nom de classe et un nom de servlet identiques.

39
01/04/2022

Définition de la servlet
23

 Il est possible d'insérer au sein de la définition d'une servlet d'autres balises


facultatives :

Définition de la servlet
23

 Il est possible d'insérer au sein de la définition d'une servlet d'autres balises


facultatives : <servlet>
<servlet-name>Test</servlet-name>
<servlet-class>com.ldw.servlets.Test</servlet-class>
<description>Ma première servlet de test.</description>

<init-param>
<param-name>auteur</param-name>
<param-value>Coyote</param-value>
</init-param>

<load-on-startup>1</load-on-startup>
</servlet>

40
01/04/2022

Définition de la servlet
24

Trois nouveaux blocs :

Définition de la servlet
24

Trois nouveaux blocs :


 <description> permet de décrire plus amplement le rôle de la servlet.
Cette description n'a aucune utilité technique et n'est visible que dans
ce fichier;

41
01/04/2022

Définition de la servlet
24

Trois nouveaux blocs :


 <description> permet de décrire plus amplement le rôle de la servlet.

Cette description n'a aucune utilité technique et n'est visible que dans
ce fichier;
 <init-param> permet de préciser des paramètres qui seront accessibles
à la servlet lors de son chargement.

Définition de la servlet
24

Trois nouveaux blocs :


 <description> permet de décrire plus amplement le rôle de la servlet.
Cette description n'a aucune utilité technique et n'est visible que dans
ce fichier;
 <init-param> permet de préciser des paramètres qui seront accessibles
à la servlet lors de son chargement.
 <load-on-startup> permet de forcer le chargement de la servlet dès le
démarrage du serveur.

42
01/04/2022

Mapping de la servlet
79

 Faire correspondre notre servlet déclarée à une URL, afin


qu'elle soit joignable par les clients :

Mapping de la servlet
79

 Faire correspondre notre servlet déclarée à une URL, afin


qu'elle soit joignable par les clients :
<servlet-mapping>
<servlet-name>Test</servlet-name>
<url-pattern>/toto</url-pattern>
</servlet-mapping>

43
01/04/2022

Mapping de la servlet
27

La balise responsable de la définition du mapping se nomme logiquement


<servlet-mapping>, et les deux balises obligatoires de cette section sont:

Mapping de la servlet
27

La balise responsable de la définition du mapping se nomme logiquement


<servlet-mapping>, et les deux balises obligatoires de cette section sont:

 <servlet-name> permet de préciser le nom de la servlet à


laquelle faire référence. Cette information doit correspondre
avec le nom défini dans la précédente déclaration de la servlet.

44
01/04/2022

Mapping de la servlet
27

La balise responsable de la définition du mapping se nomme logiquement


<servlet-mapping>, et les deux balises obligatoires de cette section sont:

 <servlet-name> permet de préciser le nom de la servlet à


laquelle faire référence. Cette information doit correspondre
avec le nom défini dans la précédente déclaration de la servlet.
 <url-pattern> permet de préciser la ou les URL relatives au
travers desquelles la servlet sera accessible. Ici, ça sera /toto !

30

<?xml version="1.0" encoding="UTF-8"?>


<web-app
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<servlet>
<servlet-name>Test</servlet-name>
<servlet-class>com.ldw.servlets.Test</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>Test</servlet-name>
<url-pattern>/toto</url-pattern>
</servlet-mapping>
</web-app>

45
01/04/2022

L'ordre des sections de déclaration au sein du fichier est important : il est


impératif de définir une servlet avant de spécifier son mapping.
30

<?xml version="1.0" encoding="UTF-8"?>


<web-app
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<servlet>
<servlet-name>Test</servlet-name>
<servlet-class>com.ldw.servlets.Test</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>Test</servlet-name>
<url-pattern>/toto</url-pattern>
</servlet-mapping>
</web-app>

Servlet: Mise en service


31

 Redémarrer notre serveur pour que ces modifications soient prises en compte.

46
01/04/2022

Servlet: Mise en service


31

 Redémarrer notre serveur pour que ces modifications soient prises en compte.
 Accéder à l'URL http://localhost:8080/test/toto

Servlet: Mise en service


31

 Redémarrer notre serveur pour que ces modifications soient prises en compte.
 Accéder à l'URL http://localhost:8080/test/toto

47
01/04/2022

Servlet: Mise en service


31

 Redémarrer notre serveur pour que ces modifications soient prises en compte.
 Accéder à l'URL http://localhost:8080/test/toto

 Le mapping a fonctionné et que notre serveur a bien contacté notre servlet !

Servlet: Mise en service


31

 Redémarrer notre serveur pour que ces modifications soient prises en compte.
 Accéder à l'URL http://localhost:8080/test/toto

 Le mapping a fonctionné et que notre serveur a bien contacté notre servlet !


 Le serveur retourne le code d'erreur 405 et précise que la méthode GET n'est
pas supportée par la servlet associée à l'URL…

48
01/04/2022

Servlet: Mise en service


32

qui a été générée cette page d'erreur ?

Servlet: Mise en service


32

qui a été générée cette page d'erreur ?


 conteneur de servlets:

49
01/04/2022

Servlet: Mise en service


32

qui a été générée cette page d'erreur ?


conteneur de servlets:
1.reçu la requête HTTP depuis le serveur web ;

Servlet: Mise en service


32

qui a été générée cette page d'erreur ?


 conteneur de servlets:
1.reçu la requête HTTP depuis le serveur web ;
2.généré un couple d'objets requête/réponse ;

50
01/04/2022

Servlet: Mise en service


32

qui a été générée cette page d'erreur ?


 conteneur de servlets:
1.reçu la requête HTTP depuis le serveur web ;
2.généré un couple d'objets requête/réponse ;
3.parcouru le fichier web.xml de votre application à la recherche
d'une entrée correspondant à l'URL contenue dans l'objet
requête ;

Servlet: Mise en service


32

qui a été générée cette page d'erreur ?


 conteneur de servlets:
1.reçu la requête HTTP depuis le serveur web ;
2.généré un couple d'objets requête/réponse ;
3.parcouru le fichier web.xml de votre application à la recherche
d'une entrée correspondant à l'URL contenue dans l'objet
requête ;
4.trouvé et identifié la servlet que vous y avez déclarée ;

51
01/04/2022

Servlet: Mise en service


32

qui a été générée cette page d'erreur ?


 conteneur de servlets:
1. reçu la requête HTTP depuis le serveur web ;
2. généré un couple d'objets requête/réponse ;
3. parcouru le fichier web.xml de votre application à la recherche d'une
entrée correspondant à l'URL contenue dans l'objet requête ;
4. trouvé et identifié la servlet que vous y avez déclarée ;
5. contacté votre servlet et transmis la paire d'objets requête/réponse.

Servlet: Mise en service


33

pourquoi cette page d'erreur a-t-elle été générée ?

52
01/04/2022

Servlet: Mise en service


33

pourquoi cette page d'erreur a-t-elle été générée ?

 afin que la servlet soit capable de traiter une requête HTTP de


type GET, il faut y implémenter une méthode… doGet() !

Servlet: Mise en service


33

pourquoi cette page d'erreur a-t-elle été générée ?

 afin que la servlet soit capable de traiter une requête HTTP de


type GET, il faut y implémenter une méthode… doGet() !
 la méthode service() de la classe HttpServlet s'occupera elle-
même de transmettre la requête GET entrante vers la méthode
doGet() de la servlet

53
01/04/2022

Servlet: Mise en service


34

comment cette page d'erreur a-t-elle été générée ?

Servlet: Mise en service


34

comment cette page d'erreur a-t-elle été générée ?


 C'est la méthode doGet() de la classe mère HttpServlet qui est en la cause

54
01/04/2022

Servlet: Mise en service


34

comment cette page d'erreur a-t-elle été générée ?


 C'est la méthode doGet() de la classe mère HttpServlet qui est en la cause

 Le comportement par défaut des méthodes doXXX() de la classe


HttpServlet est de renvoyer un code d'erreur HTTP 405 !

Servlet: Mise en service


34

comment cette page d'erreur a-t-elle été générée ?


 C'est la méthode doGet() de la classe mère HttpServlet qui est en la cause

 Le comportement par défaut des méthodes doXXX() de la classe


HttpServlet est de renvoyer un code d'erreur HTTP 405 !
 Si le développeur a bien fait son travail, pas de problème : c'est bien la
méthode doXXX() de la servlet qui sera appelée.

55
01/04/2022

Servlet: Mise en service


34

comment cette page d'erreur a-t-elle été générée ?


 C'est la méthode doGet() de la classe mère HttpServlet qui est en la cause

 Le comportement par défaut des méthodes doXXX() de la classe


HttpServlet est de renvoyer un code d'erreur HTTP 405 !
 Si le développeur a bien fait son travail, pas de problème : c'est bien la
méthode doXXX() de la servlet qui sera appelée.
 S'il a mal fait son travail et a oublié de surcharger la méthode doXXX()
voulue, alors c'est la méthode de la classe mère HttpServlet qui sera
appelée, et un code d'erreur sera automatiquement renvoyé au client.

Servlet: Mise en service


35

 il suffit de surcharger la méthode doGet() de la classe HttpServlet dans


la servlet Test.

56
01/04/2022

Servlet: Mise en service


35

 il suffit de surcharger la méthode doGet() de la classe HttpServlet dans


la servlet Test.
package com.ldw.servlets;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class Test extends HttpServlet {
public void doGet( HttpServletRequest request, HttpServletResponse response ) throws
ServletException, IOException{
}
}

Servlet: Mise en service


36

 Réessayons alors de contacter la servlet via l’URL

57
01/04/2022

Servlet: Mise en service


36

 Réessayons alors de contacter la servlet via l’URL


 Cela dit, notre servlet ne fait strictement rien de la requête

HTTP reçue : le navigateur nous affiche alors une page…


blanche !

Servlet: Mise en service


37

Comment le client sait-il que la requête est arrivée à bon port ?

58
01/04/2022

Servlet: Mise en service


37

Comment le client sait-il que la requête est arrivée à bon port ?


 Si le navigateur affiche une simple page blanche, c'est parce

qu'il considère la requête comme terminée avec succès :

Servlet: Mise en service


37

Comment le client sait-il que la requête est arrivée à bon port ?


 Si le navigateur affiche une simple page blanche, c'est parce
qu'il considère la requête comme terminée avec succès :
 si ce n'était pas le cas, il afficherait un des codes et
messages d'erreur HTTP

59
01/04/2022

Servlet: Mise en service


37

Comment le client sait-il que la requête est arrivée à bon port ?


 Si le navigateur affiche une simple page blanche, c'est parce

qu'il considère la requête comme terminée avec succès :


 si ce n'était pas le cas, il afficherait un des codes et
messages d'erreur HTTP
 Vous pouvez utiliser l'onglet Réseau de l'outil Firebug pour
visualiser qu'effectivement, une réponse HTTP est bien reçue
par le navigateur

Servlet: Mise en service


38

On observe :

60
01/04/2022

Servlet: Mise en service


38

On observe :
 un code HTTP 200 OK, qui signifie que la requête s'est

effectuée avec succès ;

Servlet: Mise en service


38

On observe :
 un code HTTP 200 OK, qui signifie que la requête s'est
effectuée avec succès ;
 la longueur des données contenues dans la réponse
(Content-Length) : 0...

61
01/04/2022

Servlet: Mise en service


39

Le conteneur de servlets:

Servlet: Mise en service


39

Le conteneur de servlets:
1. Quand il a généré la paire d'objets requête/réponse, il a initialisé le
statut de la réponse avec une valeur par défaut : 200.

62
01/04/2022

Servlet: Mise en service


39

Le conteneur de servlets:
1. Quand il a généré la paire d'objets requête/réponse, il a initialisé le
statut de la réponse avec une valeur par défaut : 200.
 le conteneur de servlets crée un objet réponse qui stipule que tout
s'est bien passé.

Servlet: Mise en service


39

Le conteneur de servlets:
1. Quand il a généré la paire d'objets requête/réponse, il a initialisé le
statut de la réponse avec une valeur par défaut : 200.
 le conteneur de servlets crée un objet réponse qui stipule que tout
s'est bien passé.
2. Il transmet cet objet à la servlet, qui est alors libre de le modifier.

63
01/04/2022

Servlet: Mise en service


39

Le conteneur de servlets:
1. Quand il a généré la paire d'objets requête/réponse, il a initialisé le
statut de la réponse avec une valeur par défaut : 200.
 le conteneur de servlets crée un objet réponse qui stipule que tout
s'est bien passé.
2. Il transmet cet objet à la servlet, qui est alors libre de le modifier.
3. Lorsqu'il reçoit à nouveau l'objet en retour, si le code de statut n'a
pas été modifié par la servlet, c'est que tout s'est bien passé.

Servlet: Mise en service


39

Le conteneur de servlets:
1. Quand il a généré la paire d'objets requête/réponse, il a initialisé le
statut de la réponse avec une valeur par défaut : 200.
 le conteneur de servlets crée un objet réponse qui stipule que tout
s'est bien passé.
2. Il transmet cet objet à la servlet, qui est alors libre de le modifier.
3. Lorsqu'il reçoit à nouveau l'objet en retour, si le code de statut n'a
pas été modifié par la servlet, c'est que tout s'est bien passé.
pas de nouvelles = bonne nouvelle

64
01/04/2022

Servlet: Mise en service


40

Cycle de vie d'une servlet

Servlet: Mise en service


40

Cycle de vie d'une servlet


 Quand une servlet est demandée pour la première fois ou quand
l'application web démarre, le conteneur de servlets va créer une instance
de celle-ci et la garder en mémoire pendant toute l'existence de
l'application.

65
01/04/2022

Servlet: Mise en service


40

Cycle de vie d'une servlet


 Quand une servlet est demandée pour la première fois ou quand
l'application web démarre, le conteneur de servlets va créer une instance
de celle-ci et la garder en mémoire pendant toute l'existence de
l'application.
 cette instance sera réutilisée pour chaque requête entrante dont les
URL correspondent au pattern d'URL défini pour la servlet.

Servlet: Mise en service


40

Cycle de vie d'une servlet


 Quand une servlet est demandée pour la première fois ou quand
l'application web démarre, le conteneur de servlets va créer une instance
de celle-ci et la garder en mémoire pendant toute l'existence de
l'application.
 cette instance sera réutilisée pour chaque requête entrante dont les
URL correspondent au pattern d'URL défini pour la servlet.
 tous les appels vers l'URL /test/toto seront dirigés vers la même et
unique instance de la servlet, générée par Tomcat lors du tout
premier appel

66
01/04/2022

Servlet: Mise en service


41

 l'instance d'une servlet est-elle créée lors du premier appel à cette servlet, ou
bien dès le démarrage du serveur ?

Servlet: Mise en service


41

 l'instance d'une servlet est-elle créée lors du premier appel à cette servlet, ou
bien dès le démarrage du serveur ?
 C'est par défaut au premier appel d'une servlet que son unique instance est
créée.

67
01/04/2022

Servlet: Mise en service


41

 l'instance d'une servlet est-elle créée lors du premier appel à cette servlet, ou
bien dès le démarrage du serveur ?
 C'est par défaut au premier appel d'une servlet que son unique instance est
créée.
 Ce mode de fonctionnement est configurable:

Servlet: Mise en service


41

 l'instance d'une servlet est-elle créée lors du premier appel à cette servlet, ou
bien dès le démarrage du serveur ?
 C'est par défaut au premier appel d'une servlet que son unique instance est
créée.
 Ce mode de fonctionnement est configurable:
 une balise facultative:<load-on-startup>N</load-on-startup>(N un entier positif)

68
01/04/2022

Servlet: Mise en service


41

 l'instance d'une servlet est-elle créée lors du premier appel à cette servlet, ou
bien dès le démarrage du serveur ?
 C'est par défaut au premier appel d'une servlet que son unique instance est
créée.
 Ce mode de fonctionnement est configurable:
 une balise facultative:<load-on-startup>N</load-on-startup>(N un entier positif)

 le serveur va charger l'instance de la servlet en question directement pendant le


chargement de l'application.

Servlet: Mise en service


41

 l'instance d'une servlet est-elle créée lors du premier appel à cette servlet, ou
bien dès le démarrage du serveur ?
 C'est par défaut au premier appel d'une servlet que son unique instance est
créée.
 Ce mode de fonctionnement est configurable:
 une balise facultative:<load-on-startup>N</load-on-startup>(N un entier positif)

 le serveur va charger l'instance de la servlet en question directement pendant le


chargement de l'application.
 le chiffre N correspond à la priorité que vous souhaitez donner au chargement de
votre servlet.

69
01/04/2022

Servlet: Mise en service


42

Envoyer des données au client:

Servlet: Mise en service


42

Envoyer des données au client:


 Utiliser la servlet pour reproduire la page HTML statique (test.html)

70
01/04/2022

Servlet: Mise en service


42

Envoyer des données au client:


 Utiliser la servlet pour reproduire la page HTML statique (test.html)

 Pour envoyer des données au client il va falloir manipuler l'objet

HttpServletResponse.

Servlet: Mise en service


public void doGet( HttpServletRequest request, HttpServletResponse response ) throws
ServletException,
42 IOException{
response.setContentType("text/html");
Envoyer des données au client: "UTF-8" );
response.setCharacterEncoding(
 Utiliser la servlet
PrintWriter out =pour reproduire la page HTML statique (test.html)
response.getWriter();
out.println("<!DOCTYPE html>");
 Pour envoyer des données au client il va falloir manipuler l'objet
out.println("<html>");
HttpServletResponse.
out.println("<head>");
out.println("<meta charset=\"utf-8\" />");
out.println("<title>Test</title>");
out.println("</head>");
out.println("<body>");
out.println("<p>Ceci est une page générée depuis une servlet.</p>");
out.println("</body>");
out.println("</html>");
}

71
01/04/2022

Servlet: Mise en service


43

1. modifier l'en-tête Content-Type de la réponse HTTP, pour préciser au client


que nous allons lui envoyer une page HTML, en faisant appel à la méthode
setContentType() de l'objet HttpServletResponse.

Servlet: Mise en service


43

1. modifier l'en-tête Content-Type de la réponse HTTP, pour préciser au client


que nous allons lui envoyer une page HTML, en faisant appel à la méthode
setContentType() de l'objet HttpServletResponse.
2. Par défaut, l'encodage de la réponse envoyée au client est initialisé à ISO-
8859-1.

72
01/04/2022

Servlet: Mise en service


43

1. modifier l'en-tête Content-Type de la réponse HTTP, pour préciser au client


que nous allons lui envoyer une page HTML, en faisant appel à la méthode
setContentType() de l'objet HttpServletResponse.
2. Par défaut, l'encodage de la réponse envoyée au client est initialisé à ISO-
8859-1.
 il ne permet pas de manipuler les caractères asiatiques, les alphabets arabes,
cyrilliques, scandinaves ainsi que d'autres caractères plus exotiques.

Servlet: Mise en service


43

1. modifier l'en-tête Content-Type de la réponse HTTP, pour préciser au client


que nous allons lui envoyer une page HTML, en faisant appel à la méthode
setContentType() de l'objet HttpServletResponse.
2. Par défaut, l'encodage de la réponse envoyée au client est initialisé à ISO-
8859-1.
 il ne permet pas de manipuler les caractères asiatiques, les alphabets arabes,
cyrilliques, scandinaves ainsi que d'autres caractères plus exotiques.
 il est recommandé d'utiliser l'encodage UTF-8.

73
01/04/2022

Servlet: Mise en service


43

1. modifier l'en-tête Content-Type de la réponse HTTP, pour préciser au client


que nous allons lui envoyer une page HTML, en faisant appel à la méthode
setContentType() de l'objet HttpServletResponse.
2. Par défaut, l'encodage de la réponse envoyée au client est initialisé à ISO-
8859-1.
 il ne permet pas de manipuler les caractères asiatiques, les alphabets arabes,
cyrilliques, scandinaves ainsi que d'autres caractères plus exotiques.
 il est recommandé d'utiliser l'encodage UTF-8.
 il est possible d'initialiser l'encodage de la réponse directement via un appel à la
méthode setContentType( "text/html; charset=UTF-8").

Servlet: Mise en service


44

74
01/04/2022

Servlet: Mise en service


44

 importer java.io.PrintWriter dans la servlet.

Servlet: Mise en service


44

 importer java.io.PrintWriter dans la servlet.

75
01/04/2022

Servlet: Mise en service


44

 importer java.io.PrintWriter dans la servlet.

Testez….

Servlet: Mise en service


45

 Il a fallu 10 appels à out.println()

76
01/04/2022

Servlet: Mise en service


45

 Il a fallu 10 appels à out.println()


 La servlet n'est pas censée s'occuper de l'affichage, c'est la vue

qui doit s'en charger!!!

Servlet: Mise en service


45

 Il a fallu 10 appels à out.println()


 La servlet n'est pas censée s'occuper de l'affichage, c'est la vue
qui doit s'en charger!!!

77
01/04/2022

En résumé
46

 le langage Java n'est pas du tout adapté à la rédaction de pages


web !
 il faut orienter vers quelque chose de plus efficace.
 l'affichage de contenu HTML n'ayant rien à faire dans le
contrôleur (notre servlet),
 On va créer une vue et la mettre en relation avec la servlet.

En résumé
47

 Le client envoie des requêtes au serveur grâce aux méthodes du protocole HTTP, notamment
GET, POST et HEAD.
 Le conteneur web place chaque requête reçue dans un objet HttpServletRequest, et place chaque
réponse qu'il initialise dans l'objet HttpServletResponse.
 Le conteneur transmet chaque couple requête/réponse à une servlet : c'est un objet Java assigné à

une requête et capable de générer une réponse en conséquence.


 La servlet est donc le point d'entrée d'une application web, et se déclare dans son fichier de
configuration web.xml.
 Une servlet peut se charger de répondre à une requête ou à un groupe entier de requêtes.

 Pour pouvoir traiter une requête HTTP de type GET, une servlet doit implémenter la méthode
doGet() ; pour répondre à une requête de type POST, la méthode doPost() ; etc.
 Une servlet n'est pas chargée de l'affichage des données, elle ne doit donc pas s'occuper de la

présentation (HTML, CSS, etc.).

78

Vous aimerez peut-être aussi