JavaEE ch2
JavaEE ch2
2021/2022
Université Abdelmalek Essaâdi
École Normale Supérieure
Tétouan
LA SERVLET
Objectif
2
1
01/04/2022
2
01/04/2022
GET
4
GET
4
3
01/04/2022
GET
4
GET
4
Lorsqu'il reçoit une telle demande, le serveur ne fait pas que retourner la
ressource demandée.
4
01/04/2022
GET
5
GET
5
5
01/04/2022
GET
5
GET
5
6
01/04/2022
GET
5
GET
5
7
01/04/2022
POST
6
POST
6
8
01/04/2022
POST
6
POST
6
9
01/04/2022
POST
6
HEAD
7
10
01/04/2022
HEAD
7
HEAD
7
11
01/04/2022
HEAD
7
sur le serveur…
8
12
01/04/2022
sur le serveur…
8
sur le serveur…
8
13
01/04/2022
sur le serveur…
8
sur le serveur…
8
14
01/04/2022
sur le serveur…
8
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
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.
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
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
l'interface Servlet
10
17
01/04/2022
l'interface Servlet
10
l'interface Servlet
10
18
01/04/2022
Pour traiter des requêtes HTTP, nous allons donc faire hériter notre
servlet de la classe HttpServlet!
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
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
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
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;
21
01/04/2022
22
01/04/2022
23
01/04/2022
24
01/04/2022
25
01/04/2022
En résumé
15
26
01/04/2022
En résumé
15
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
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 ?
28
01/04/2022
29
01/04/2022
30
01/04/2022
31
01/04/2022
Le fichier web.xml:
Le fichier web.xml:
C'est le cœur de votre application :
32
01/04/2022
Le fichier web.xml:
C'est le cœur de votre application :
Le fichier web.xml:
C'est le cœur de votre application :
33
01/04/2022
Le fichier web.xml:
C'est le cœur de votre application :
Le fichier web.xml:
C'est le cœur de votre application :
34
01/04/2022
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.
35
01/04/2022
Définition de la servlet
21
<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
<servlet>
<servlet-name>Test</servlet-name>
<servlet-class>com.ldw.servlets.Test</servlet-class>
</servlet>
Définition de la servlet
21
<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
Définition de la servlet
22
38
01/04/2022
Définition de la servlet
22
Définition de la servlet
22
39
01/04/2022
Définition de la servlet
23
Définition de la servlet
23
<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
Définition de la servlet
24
41
01/04/2022
Définition de la servlet
24
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
42
01/04/2022
Mapping de la servlet
79
Mapping de la servlet
79
43
01/04/2022
Mapping de la servlet
27
Mapping de la servlet
27
44
01/04/2022
Mapping de la servlet
27
30
<servlet-mapping>
<servlet-name>Test</servlet-name>
<url-pattern>/toto</url-pattern>
</servlet-mapping>
</web-app>
45
01/04/2022
<servlet-mapping>
<servlet-name>Test</servlet-name>
<url-pattern>/toto</url-pattern>
</servlet-mapping>
</web-app>
Redémarrer notre serveur pour que ces modifications soient prises en compte.
46
01/04/2022
Redémarrer notre serveur pour que ces modifications soient prises en compte.
Accéder à l'URL http://localhost:8080/test/toto
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
Redémarrer notre serveur pour que ces modifications soient prises en compte.
Accéder à l'URL http://localhost:8080/test/toto
Redémarrer notre serveur pour que ces modifications soient prises en compte.
Accéder à l'URL http://localhost:8080/test/toto
48
01/04/2022
49
01/04/2022
50
01/04/2022
51
01/04/2022
52
01/04/2022
53
01/04/2022
54
01/04/2022
55
01/04/2022
56
01/04/2022
57
01/04/2022
58
01/04/2022
59
01/04/2022
On observe :
60
01/04/2022
On observe :
un code HTTP 200 OK, qui signifie que la requête s'est
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
Le conteneur de servlets:
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
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é.
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
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é.
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
65
01/04/2022
66
01/04/2022
l'instance d'une servlet est-elle créée lors du premier appel à cette servlet, ou
bien dès le démarrage du serveur ?
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
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:
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
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)
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)
69
01/04/2022
70
01/04/2022
HttpServletResponse.
71
01/04/2022
72
01/04/2022
73
01/04/2022
74
01/04/2022
75
01/04/2022
Testez….
76
01/04/2022
77
01/04/2022
En résumé
46
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é à
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
78