Sobes.tech
Middle
158

Servlet konteyneri servletin həyat dövrünü necə idarə edir? Hansı metodlar çağırılır və hansı vaxtlarda?

AI-dan cavab

sobes.tech Süni İntellekt

Konteyner servletin həyat dövrünü aşağıdakı metodlar dəstəsi ilə idarə edir: init, service, destroy.

  1. Servlet sinifinin yüklənməsi: Konteyner ilk sorğu alanda və ya tətbiq başladığında (əgər konfiqurasiya edilibsə).

  2. Servlet nümunəsinin yaradılması: Konteyner bütün tətbiq üçün bir nümunə yaradır.

  3. init() metodunun çağırılması: Nümunə yaradıldıqdan sonra init(ServletConfig config) metodu bir dəfə çağırılır. Bu metodda konfiqurasiya edilə bilər, resurslar yüklənə və servlet konfiqurasiyası alınabilir. Bu metod yenidən çağırılmamalıdır, servlet məhv edilənə və yenidən yaradılana qədər.

    // java
    public void init(ServletConfig config) throws ServletException {
        // Servletin ilkinləşdirilməsi
        this.config = config;
        // İlkin parametrlərin alınması
        String param = config.getInitParameter("someParam");
    }
    
  4. service() metodunun çağırılması: Hər daxil olan sorğu üçün konteyner service(ServletRequest request, ServletResponse response) metodunu çağırır. Bu metod sorğunu emal edir və cavab yaradır. Adətən, o, HttpServlet sinifindəki doGet, doPost və s. kimi HTTP-ə xüsusi metodlara yönləndirir. service metodu çoxmərhələli, konteyner onun bir neçə sorğu üçün eyni zamanda çağırılmasına imkan verir.

    // java
    public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
        // Sorğunun növünü yoxlama və müvafiq metodu çağırma
        if (request instanceof HttpServletRequest && response instanceof HttpServletResponse) {
            // HttpServlet-ə yönləndirmə
            super.service(request, response);
        } else {
            // Digər növ sorğuların emalı
            throw new ServletException("Yalnız HTTP sorğuları dəstəklənir");
        }
    }
    
    // HttpServlet-də doXXX metodunun nümunəsi
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // GET sorğusunun emalı
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        out.println("<h1>Salaam</h1>");
    }
    
  5. destroy() metodunun çağırılması: Konteyner destroy() metodunu bir dəfə çağırır, servlet nümunəsi məhv edilənə qədər. Bu, tətbiq dayandırıldıqda və ya servlet konteynerdən silindikdə baş verir. Bu metodda resurslar azad edilir (məsələn, bazaya bağlantılar bağlanır və ya fayllar bağlanır). destroy çağırıldıqdan sonra konteyner servlet nümunəsi üçün çöp toplayıcıyı işə sala bilər.

    // java
    public void destroy() {
        // Resursların azad edilməsi
        // Məsələn, bağlantıların bağlanması
    }
    

Həyat dövrü aşağıdakı cədvəldə təqdim oluna bilər:

Metod Çağırılır Təyinatı
init() Bir dəfə servlet nümunəsi yaradıldıqdan sonra İlkinləşdirmə, resursların yüklənməsi
service() Hər daxil olan sorğu üçün Sorğunun emalı, cavabın yaradılması
destroy() Bir dəfə servlet nümunəsi məhv edilənə qədər Resursların azad edilməsi, işin tamamlanması

Konteyner təmin edir ki, init service çağırılmadan əvvəl, destroy isə son service çağırışından sonra çağırılacaq. service metodları paralel şəkildə çağırıla bilər.