Sobes.tech
Middle

Hogyan történik a HTTP-kérés feldolgozása a HttpServlet osztályban?

sobes.tech MI

Válasz az MI-től

Az HttpServlet osztályban az HTTP kérés feldolgozása az egyik doGet, doPost, doPut, doDelete, doHead, doOptions, doTrace vagy service metódus felülírásával történik.

A kérés feldolgozásának életciklusa:

  1. A servlet konténer (pl. Tomcat) megkapja az HTTP kérést.
  2. A konténer a kérés URL-je alapján meghatározza a megfelelő servletet.
  3. Ha a servlet még nincs betöltve, a konténer létrehozza példányát, meghívja az init() metódust (egyszer az életciklusa során) és betölti a pufferbe.
  4. A konténer létrehozza az HttpServletRequest és HttpServletResponse objektumokat, amelyek a kérés adatait tartalmazzák és módszereket biztosítanak a válasz kialakításához.
  5. A konténer meghívja a servlet service(HttpServletRequest req, HttpServletResponse resp) metódusát.
  6. Az alapértelmezett service meghatározza az HTTP módszer típusát (GET, POST stb.) és a megfelelő do<Method> metódusnak (pl. doGet, doPost) adja át a kérés és válasz objektumokat.
  7. A fejlesztő felülírja a do<Method> metódust a kérés specifikus feldolgozási logikájának megvalósításához.
  8. A do<Method> metódus kialakítja a választ, írva adatokat a HttpServletResponse-ba.
  9. A service metódus befejezése után a konténer elküldi a kialakított választ a kliensnek.
  10. Amikor a konténer úgy dönt, hogy leállítja a servletet (pl. alkalmazás leállításakor), meghívja a destroy() metódust az erőforrások felszabadítására.

A doGet metódus felülírásának példája:

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 {
        // A válasz tartalomtípusának és kódolásának beállítása
        response.setContentType("text/html;charset=UTF-8");

        // PrintWriter beszerzése a válasz írásához
        try (PrintWriter out = response.getWriter()) {
            // HTML kód írása a válaszba
            out.println("<!DOCTYPE html>");
            out.println("<html>");
            out.println("<head>");
            out.println("<title>Üdvözlet</title>");
            out.println("</head>");
            out.println("<body>");
            out.println("<h1>Üdvözöl a servletem!</h1>");
            out.println("</body>");
            out.println("</html>");
        }
    }
}

A do<Method> metódusok fő funkcióit és célját mutató táblázat:

Metódus Célja
doGet GET kérések feldolgozása (adatok lekérése, idempotens műveletek).
doPost POST kérések feldolgozása (adatok küldése feldolgozásra, erőforrások létrehozása).
doPut PUT kérések feldolgozása (erőforrások frissítése).
doDelete DELETE kérések feldolgozása (erőforrások törlése).
doHead HEAD kérések feldolgozása (csak a válasz fejlécének lekérése).
doOptions OPTIONS kérések feldolgozása (elérhető módszerek információinak lekérése).
doTrace TRACE kérések feldolgozása (hibaelhárítás, kérés visszhangja).

A service metódus felülírása lehetővé teszi a kéréskezelési logika teljes átírását, de általában a specifikus do<Method> metódusokat szokták felülírni.