Sobes.tech
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 :

  1. Le conteneur de servlets (par exemple, Tomcat) reçoit la requête HTTP.
  2. Le conteneur détermine le servlet correspondant en fonction de l'URL de la requête.
  3. 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.
  4. Le conteneur crée les objets HttpServletRequest et HttpServletResponse, qui encapsulent les données de la requête et offrent des méthodes pour construire la réponse.
  5. Le conteneur appelle la méthode service(HttpServletRequest req, HttpServletResponse resp) du servlet.
  6. L'implémentation par défaut de service détermine le type de méthode HTTP (GET, POST, etc.) et délègue le traitement à la méthode correspondante do<Method> (doGet, doPost, etc.), en leur passant les objets de requête et de réponse.
  7. Le développeur surcharge la méthode do<Method> nécessaire pour implémenter la logique spécifique de traitement.
  8. La méthode do<Method> construit la réponse en écrivant dans HttpServletResponse.
  9. Après l'exécution de service, le conteneur envoie la réponse au client.
  10. 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>.