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:
- Kontejner servletů (například Tomcat) obdrží HTTP požadavek.
- Kontejner určí odpovídající servlet na základě URL požadavku.
- Pokud servlet ještě není načten, kontejner jej vytvoří, zavolá metodu
init()(jednou během životnosti servletu) a umístí jej do puli. - Kontejner vytvoří objekty
HttpServletRequestaHttpServletResponse, které obsahují data požadavku a poskytují metody pro tvorbu odpovědi. - Kontejner zavolá metodu
service(HttpServletRequest req, HttpServletResponse resp)servletu. - Výchozí implementace
serviceurčí typ HTTP metody (GET, POST atd.) a deleguje zpracování na odpovídající metodudo<Method>(doGet,doPostatd.), předávající objekty požadavku a odpovědi. - Vývojář přepisuje požadovanou metodu
do<Method>pro implementaci specifické logiky zpracování požadavku. - Metoda
do<Method>vytvoří odpověď zapisováním dat doHttpServletResponse. - Po dokončení práce metody
servicekontejner odešle vytvořenou odpověď klientovi. - 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.