Middle
Comment le traitement d'une requête HTTP est-il effectué dans la classe HttpServlet?
sobes.tech IA
Réponse de l'IA
Le traitement des requêtes HTTP dans la classe HttpServlet se fait en surchargeant l'une des méthodes doGet, doPost, doPut, doDelete, doHead, doOptions, doTrace ou service.
Cycle de vie du traitement de la requête :
- Le conteneur de servlets (par exemple, Tomcat) reçoit la requête HTTP.
- Le conteneur détermine le servlet correspondant en fonction de l'URL de la requête.
- Si le servlet n'est pas encore chargé, le conteneur crée une instance, appelle la méthode
init()(une seule fois durant toute la vie du servlet) et la met en pool. - Le conteneur crée les objets
HttpServletRequestetHttpServletResponse, qui encapsulent les données de la requête et offrent des méthodes pour construire la réponse. - Le conteneur appelle la méthode
service(HttpServletRequest req, HttpServletResponse resp)du servlet. - L'implémentation par défaut de
servicedétermine le type de méthode HTTP (GET, POST, etc.) et délègue le traitement à la méthode correspondantedo<Method>(doGet,doPost, etc.), en leur passant les objets de requête et de réponse. - Le développeur surcharge la méthode
do<Method>nécessaire pour implémenter la logique spécifique de traitement. - La méthode
do<Method>construit la réponse en écrivant dansHttpServletResponse. - Après l'exécution de
service, le conteneur envoie la réponse au client. - Lorsqu'il décide de décharger le servlet (par exemple, lors de l'arrêt de l'application), il appelle la méthode
destroy()pour libérer les ressources.
Exemple de surcharge de doGet :
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
public class MyServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// Définir le type de contenu et l'encodage de la réponse
response.setContentType("text/html;charset=UTF-8");
// Obtenir le PrintWriter pour écrire la réponse
try (PrintWriter out = response.getWriter()) {
// Écrire le HTML dans la réponse
out.println("<!DOCTYPE html>");
out.println("<html>");
out.println("<head>");
out.println("<title>Salutation</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>Bonjour depuis mon servlet !</h1>");
out.println("</body>");
out.println("</html>");
}
}
}
Tableau des méthodes principales do<Method> et leur but :
| Méthode | But |
|---|---|
doGet |
Traitement des requêtes GET (récupération de données, opérations idempotentes). |
doPost |
Traitement des requêtes POST (envoi de données pour traitement, création de ressources). |
doPut |
Traitement des requêtes PUT (mise à jour de ressources). |
doDelete |
Traitement des requêtes DELETE (suppression de ressources). |
doHead |
Traitement des requêtes HEAD (récupération uniquement des en-têtes de réponse). |
doOptions |
Traitement des requêtes OPTIONS (obtenir des informations sur les méthodes disponibles). |
doTrace |
Traitement des requêtes TRACE (débogage, écho de la requête). |
La surcharge de la méthode service permet de redéfinir entièrement la logique de routage des requêtes, mais en général, on surcharge les méthodes spécifiques do<Method>.