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:
- A servlet konténer (pl. Tomcat) megkapja az HTTP kérést.
- A konténer a kérés URL-je alapján meghatározza a megfelelő servletet.
- 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. - A konténer létrehozza az
HttpServletRequestésHttpServletResponseobjektumokat, amelyek a kérés adatait tartalmazzák és módszereket biztosítanak a válasz kialakításához. - A konténer meghívja a servlet
service(HttpServletRequest req, HttpServletResponse resp)metódusát. - Az alapértelmezett
servicemeghatá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. - 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. - A
do<Method>metódus kialakítja a választ, írva adatokat aHttpServletResponse-ba. - A
servicemetódus befejezése után a konténer elküldi a kialakított választ a kliensnek. - 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.