Sobes.tech
Middle

HttpServlet sınıfında HTTP isteği nasıl işlenir?

sobes.tech yapay zeka

AI'dan gelen yanıt

HttpServlet sınıfında HTTP isteği işleme, doGet, doPost, doPut, doDelete, doHead, doOptions, doTrace veya service metodlarından birini geçersiz kılmak suretiyle gerçekleştirilir.

İstek işleme yaşam döngüsü:

  1. Servlet konteyneri (örneğin, Tomcat) HTTP isteğini alır.
  2. Konteyner, isteğin URL'sine göre uygun servlet'i belirler.
  3. Eğer servlet henüz yüklenmemişse, konteyner bir örneğini oluşturur, init() metodunu çağırır (tüm servlet ömrü boyunca sadece bir kez) ve havuza ekler.
  4. Konteyner, isteği ve yanıtı kapsülleyen HttpServletRequest ve HttpServletResponse nesnelerini oluşturur ve yanıtı şekillendirmek için metodlar sağlar.
  5. Konteyner, servlet'in service(HttpServletRequest req, HttpServletResponse resp) metodunu çağırır.
  6. Varsayılan service uygulaması, HTTP metodunun türünü (GET, POST vb.) belirler ve uygun do<Method> metoduna (doGet, doPost vb.) devreder, isteği ve yanıt nesnelerini geçirir.
  7. Geliştirici, isteğin belirli mantığını uygulamak için gerekli do<Method> metodunu geçersiz kılar.
  8. do<Method> metodu, yanıtı oluşturarak HttpServletResponse içine veri yazar.
  9. service metodunun tamamlanmasının ardından, konteyner oluşturulan yanıtı istemciye gönderir.
  10. Konteyner, servlet'i boşaltmaya karar verdiğinde (örneğin, uygulama durdurulurken), kaynakları serbest bırakmak için destroy() metodunu çağırır.

doGet metodunun geçersiz kılınmasına örnek:

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 {
        // Yanıtın içerik tipi ve kodlamasını ayarla
        response.setContentType("text/html;charset=UTF-8");

        // Yanıtı yazmak için PrintWriter al
        try (PrintWriter out = response.getWriter()) {
            // HTML içeriği yaz
            out.println("<!DOCTYPE html>");
            out.println("<html>");
            out.println("<head>");
            out.println("<title>Selam</title>");
            out.println("</head>");
            out.println("<body>");
            out.println("<h1>Servlet'imden merhaba!</h1>");
            out.println("</body>");
            out.println("</html>");
        }
    }
}

Ana do<Method> metodları ve amaçları tablosu:

Metod Amaç
doGet GET isteklerini işleme (veri alma, idempotent işlemler).
doPost POST isteklerini işleme (veri gönderme, kaynak oluşturma).
doPut PUT isteklerini işleme (kaynakları güncelleme).
doDelete DELETE isteklerini işleme (kaynakları silme).
doHead HEAD isteklerini işleme (yanıt başlıklarını alma).
doOptions OPTIONS isteklerini işleme (mevcut metodlar hakkında bilgi alma).
doTrace TRACE isteklerini işleme (hata ayıklama, isteğin yankısı).

service metodunun geçersiz kılınması, isteklerin yönlendirilme mantığını tamamen yeniden tanımlamaya olanak tanır, ancak genellikle belirli do<Method> metodları geçersiz kılınır.