Sobes.tech
Middle

Jak je zpracovávána HTTP žádost ve třídě HttpServlet?

sobes.tech AI

Odpověď od AI

Zpracování HTTP požadavku ve třídě HttpServlet se provádí přepsáním jedné z metod doGet, doPost, doPut, doDelete, doHead, doOptions, doTrace nebo service.

Životní cyklus zpracování požadavku:

  1. Kontejner servletů (například Tomcat) obdrží HTTP požadavek.
  2. Kontejner určí odpovídající servlet na základě URL požadavku.
  3. Pokud servlet ještě není načten, kontejner jej vytvoří, zavolá metodu init() (jednou během životnosti servletu) a umístí jej do puli.
  4. Kontejner vytvoří objekty HttpServletRequest a HttpServletResponse, které obsahují data požadavku a poskytují metody pro tvorbu odpovědi.
  5. Kontejner zavolá metodu service(HttpServletRequest req, HttpServletResponse resp) servletu.
  6. Výchozí implementace service určí typ HTTP metody (GET, POST atd.) a deleguje zpracování na odpovídající metodu do<Method> (doGet, doPost atd.), předávající objekty požadavku a odpovědi.
  7. Vývojář přepisuje požadovanou metodu do<Method> pro implementaci specifické logiky zpracování požadavku.
  8. Metoda do<Method> vytvoří odpověď zapisováním dat do HttpServletResponse.
  9. Po dokončení práce metody service kontejner odešle vytvořenou odpověď klientovi.
  10. Když se kontejner rozhodne servlet odstavit (například při zastavení aplikace), zavolá metodu destroy() pro uvolnění zdrojů.

Příklad přepsání 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 {
        // Nastavení typu obsahu a kódování odpovědi
        response.setContentType("text/html;charset=UTF-8");

        // Získání PrintWriter pro zápis odpovědi
        try (PrintWriter out = response.getWriter()) {
            // Zápis HTML značek do odpovědi
            out.println("<!DOCTYPE html>");
            out.println("<html>");
            out.println("<head>");
            out.println("<title>Vítání</title>");
            out.println("</head>");
            out.println("<body>");
            out.println("<h1>Ahoj z mého servlety!</h1>");
            out.println("</body>");
            out.println("</html>");
        }
    }
}

Tabulka hlavních metod do<Method> a jejich účelů:

Metoda Účel
doGet Zpracování GET požadavků (získání dat, idempotentní operace).
doPost Zpracování POST požadavků (odeslání dat ke zpracování, vytváření zdrojů).
doPut Zpracování PUT požadavků (aktualizace zdrojů).
doDelete Zpracování DELETE požadavků (odstranění zdrojů).
doHead Zpracování HEAD požadavků (získání pouze hlaviček odpovědi).
doOptions Zpracování OPTIONS požadavků (získání informací o dostupných metodách).
doTrace Zpracování TRACE požadavků (ladění, echo požadavku).

Přepsání metody service umožňuje úplné přepsání logiky směrování požadavků, ale obvykle se přepisují specifické do<Method> metody.