Sobes.tech
Middle

HttpServlet sinifində HTTP sorğusu necə işlənir?

sobes.tech Süni İntellekt

AI-dan cavab

HttpServlet sinifində HTTP sorğusunun işlənməsi doGet, doPost, doPut, doDelete, doHead, doOptions və ya service metodlarından birinin yenidən yazılması ilə həyata keçirilir.

Sorğu işləmə həyat dövrü:

  1. Servlet konteyneri (məsələn, Tomcat) HTTP sorğusunu alır.
  2. Konteyner sorğu URL-ə əsasən müvafiq servlet-i müəyyən edir.
  3. Əgər servlet hələ yüklənməyibsə, konteyner onun nümunəsini yaradır, init() metodunu çağırır (servlet-in bütün həyat dövrü boyunca bir dəfə) və onu havuzda saxlayır.
  4. Konteyner HttpServletRequestHttpServletResponse obyektlərini yaradır, sorğu məlumatlarını inkapsulyasiya edir və cavabın formalaşdırılması üçün metodlar təqdim edir.
  5. Konteyner servlet-in service(HttpServletRequest req, HttpServletResponse resp) metodunu çağırır.
  6. Əsasən service metodunda HTTP metodunun (GET, POST və s.) növü müəyyən edilir və müvafiq do<Method> metoduna (doGet, doPost və s.) sorğu və cavab obyektləri ilə ötürülür.
  7. Tərtibçi do<Method> metodunu yenidən yazır və sorğuya xüsusi işləmə loqikasını həyata keçirir.
  8. do<Method> metodu cavabı formalaşdırır və HttpServletResponse-ə məlumat yazır.
  9. service metodunun işləməsi bitdikdən sonra konteyner formalaşdırılmış cavabı müştəriyə göndərir.
  10. Konteyner servlet-i yükləməkdən imtina etdikdə (məsələn, tətbiq dayandırıldıqda), o, resursların azad olunması üçün destroy() metodunu çağırır.

doGet metodunun yenidən yazılması nümunəsi:

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 {
        // Cavabın məzmun tipi və kodlaşdırmasını təyin et
        response.setContentType("text/html;charset=UTF-8");

        // Cavaba yazmaq üçün PrintWriter əldə et
        try (PrintWriter out = response.getWriter()) {
            // HTML kodunu cavaba yaz
            out.println("<!DOCTYPE html>");
            out.println("<html>");
            out.println("<head>");
            out.println("<title>Xoş gəlmisiniz</title>");
            out.println("</head>");
            out.println("<body>");
            out.println("<h1>Servletimdən salam!</h1>");
            out.println("</body>");
            out.println("</html>");
        }
    }
}

do<Method> metodlarının əsas funksiyalarını və məqsədlərini göstərən cədvəl:

Metod Təyinatı
doGet GET sorğularını işləyir (məlumatların alınması, idempotent əməliyyatlar).
doPost POST sorğularını işləyir (məlumatların göndərilməsi və emalı, resursların yaradılması).
doPut PUT sorğularını işləyir (resursların yenilənməsi).
doDelete DELETE sorğularını işləyir (resursların silinməsi).
doHead HEAD sorğularını işləyir (yalnız cavab başlıqlarını alma).
doOptions OPTIONS sorğularını işləyir (mövcud metodlar haqqında məlumat alma).
doTrace TRACE sorğularını işləyir (dəstək və sorğu ekosunu yoxlama).

service metodunun yenidən yazılması sorğu yönləndirmə loqikasını tamamilə dəyişməyə imkan verir, lakin adətən do<Method> metodları yenidən yazılır.