Sobes.tech
Middle

Kā tiek apstrādāta HTTP pieprasījums HttpServlet klasē?

sobes.tech AI

Atbilde no AI

HTTP pieprasījuma apstrāde HttpServlet klasē tiek veikta, pārrakstot vienu no doGet, doPost, doPut, doDelete, doHead, doOptions, doTrace vai service metodiem.

Pieprasījuma apstrādes cikls:

  1. Servleta konteineris (piemēram, Tomcat) saņem HTTP pieprasījumu.
  2. Konteineris nosaka atbilstošo servletu pēc pieprasījuma URL.
  3. Ja servlets vēl nav ielādēts, tas tiek izveidots, izsaucot init() metodi (vienu reizi visas servleta dzīves laikā) un ievieto to pīlā.
  4. Konteineris izveido HttpServletRequest un HttpServletResponse objektus, kas ietver pieprasījuma datus un nodrošina metodes atbildes veidošanai.
  5. Konteineris izsauc servleta service(HttpServletRequest req, HttpServletResponse resp) metodi.
  6. Pēc noklusējuma, service nosaka HTTP metodes tipu (GET, POST utt.) un nosūta apstrādi atbilstošajam do<Method> metodei (doGet, doPost utt.), nododot pieprasījuma un atbildes objektus.
  7. Izstrādātājs pārraksta nepieciešamo do<Method> metodi, lai realizētu specifisku pieprasījuma apstrādes loģiku.
  8. do<Method> metode veido atbildi, ierakstot datus HttpServletResponse.
  9. Pēc service metodes pabeigšanas, konteineris nosūta izveidoto atbildi klientam.
  10. Kad konteineris nolemj izkraut servletu (piemēram, pārtraucot lietojumprogrammu), tas izsauc destroy() metodi resursu atbrīvošanai.

doGet pārrakstīšanas piemērs:

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 {
        // Iestatīt satura tipu un kodējumu
        response.setContentType("text/html;charset=UTF-8");

        // Iegūt PrintWriter objektu atbildei rakstīt
        try (PrintWriter out = response.getWriter()) {
            // Rakstīt HTML marķējumu atbildē
            out.println("<!DOCTYPE html>");
            out.println("<html>");
            out.println("<head>");
            out.println("<title>Sveiciens</title>");
            out.println("</head>");
            out.println("<body>");
            out.println("<h1>Sveiki no mana servleta!</h1>");
            out.println("</body>");
            out.println("</html>");
        }
    }
}

Galvenie do<Method> metodi un to mērķis tabulā:

Metode Mērķis
doGet GET pieprasījumu apstrāde (datu saņemšana, idempotentās operācijas).
doPost POST pieprasījumu apstrāde (datu sūtīšana apstrādei, resursu izveide).
doPut PUT pieprasījumu apstrāde (resursu atjaunināšana).
doDelete DELETE pieprasījumu apstrāde (resursu dzēšana).
doHead HEAD pieprasījumu apstrāde (tikai atbildes galvenes).
doOptions OPTIONS pieprasījumu apstrāde (pieejamo metožu informācijas saņemšana).
doTrace TRACE pieprasījumu apstrāde (atkļūdošana, pieprasījuma atbilde).

service metodes pārrakstīšana ļauj pilnībā pārveidot pieprasījumu maršrutizācijas loģiku, bet parasti pārraksta specifiskos do<Method> metodes.