Vous devez avoir 10 000 questions à me poser et je compte bien y répondre !
Tout d'abord, afin que vous compreniez mieux la façon dont tout ceci fonctionne, vous devez savoir pourquoi on appelle Tomcat un conteneur de servlet.
Vous vous souvenez que le web fonctionne avec un système de
questions - réponses (requêtes HTTP, réponses HTTP) et que, lorsque vous demandez une page web, vous envoyez
une requête de type GET.
Les Zéros se souvenant de ces points ont très certainement remarqué que la méthode déclarée dans notre servlet contient le nom du type de requête envoyée : requête de type GET - méthode
doGet
.
Un autre point troublant :
la méthode doGet
de notre servlet prend deux objets en paramètres et ceux-ci ont des noms qui ressemblent beaucoup à requête HTTP et réponse HTTP !
Est-ce que ça veut dire que notre servlet reçoit la requête HTTP et retourne la réponse HTTP ?
Vous y êtes presque...

En fait, ce n'est pas la servlet qui reçoit tout ceci directement :
c'est Tomcat !
C'est le conteneur de servlets qui reçoit et envoie les requêtes HTTP... Dès que ce dernier reçoit une requête, il instancie deux objets :
- un objet HttpServletRequest contenant les informations de la requête HTTP ;
- un objet HttpServletResponse, servant à fournir la réponse attendue.
Une fois ceci fait, il va utiliser la servlet correspondant à la requête demandée et va invoquer la méthode adéquate, ici
doGet(HttpServletRequest request, HttpServletResponse response)
!
La méthode adéquate ? Tu veux dire qu'il peux y avoir plusieurs méthodes dans une servlet ?
Vous avez vu juste !
Pour faire court, il y existe une méthode pour chaque type de requête HTTP :
- GET : méthode doGet()
, c' est la méthode la plus courante pour demander une ressource. Une requête GET est sans effet sur la ressource, il doit être possible de répéter la requête sans effet ;
- POST : méthode doPost()
, cette méthode doit être utilisée lorsqu'une requête modifie la ressource ;
- HEAD : méthode doHead()
, cette méthode ne demande que des informations sur la ressource, sans demander la ressource elle-même ;
- OPTIONS : méthode doOptions()
, cette méthode permet d'obtenir les options de communication d'une ressource ou du serveur en général ;
- CONNECT : méthode doConnect()
, cette méthode permet d'utiliser un proxy comme un tunnel de communication ;
- TRACE : méthode doTrace()
, cette méthode demande au serveur de retourner ce qu'il a reçu, dans le but de tester et d'effectuer un diagnostic sur la connexion ;
- PUT : méthode doPut()
, cette méthode permet d'ajouter une ressource sur le serveur ;
- DELETE : méthode doDelete()
, cette méthode permet de supprimer une ressource du serveur.
Je n'ai pas inventé ces définitions, celles-ci sont tirées de Wikipédia...
Pas de panique, dans 99.99999999 % des cas, vous utiliserez des requêtes de type GET ou POST !
Attends deux minutes ! Quand doit-on utiliser tel ou tel type de requête ?
Nous reviendrons sur ce point très bientôt. Pour le moment, essayez de comprendre comment fonctionne Tomcat lorsqu'il reçoit des requêtes HTTP.
Reprenons. Dans les grandes lignes, Tomcat reçoit une requête HTTP d'un certain type, il utilise un objet
requête et un objet
réponse, il instancie la servlet correspondante à la requête et invoque la méthode adéquate.
Le contenu de ladite méthode est exécuté, Tomcat récupère les objets et nous retourne la réponse HTTP ! Voici un schéma récapitulatif :
Ensuite, le contenu de la servlet est très simple :
- response.setContentType("text/html")
: définit le type de réponse, ici, on retourne une page HTML ;
- PrintWriter out = response.getWriter()
: on récupère un objet permettant d'écrire dans la future page HTML ;
- out.println("....")
: écrit dans la page.
Les plus observateurs d'entre vous ont dû remarquer qu'une servlet n'a pas de constructeur !
Ne vous alarmez pas sur ce point pour le moment, nous aurons l'occasion d'y revenir.
D'accord, on a compris. Par contre, comment Tomcat sait quelle servlet instancier ?
Avec le dernier point à éclaircir pour le moment : le fichier
web.xml.
Vous avez compris ce qu'il se passe lorsque une requête HTTP est reçue par Tomcat.
Avant tout ceci, il se passe quelque chose de vital :
le mapping des servlets !
Au lancement du serveur Tomcat, vous pouvez voir tout plein de choses incompréhensibles dans la console d'Eclipse, en voici une partie :
Et quelque part dans tout ce charabia, il y a ceci :
Ici on voit qu'une chose obscure nommée "
contexte" a été initialisée !
Ceci est tout simplement une sorte d'annuaire pour Tomcat : la définition des applications sur le serveur ainsi que la structure de celles-ci.