Sobes.tech
Middle

Ako správa kontajner servletov životný cyklus servleta? Aké metódy sa volajú a kedy?

sobes.tech AI

Odpoveď od AI

Kontajner spravuje životný cyklus servleta pomocou sady metód: init, service, destroy.

  1. Načítanie triedy servleta: Keď kontajner dostane prvý požiadavok na servlet alebo pri spustení aplikácie (ak je nakonfigurované).

  2. Vytvorenie inštancie servleta: Kontajner vytvorí jednu inštanciu triedy servleta pre celú aplikáciu.

  3. Volanie init(): Kontajner zavolá metódu init(ServletConfig config) raz po vytvorení inštancie. V tejto metóde je možné vykonať inicializáciu, načítať zdroje a získať konfiguráciu servleta. Táto metóda by sa nemala volať znovu, kým nebude servlet zničený a znovu vytvorený.

    // java
    public void init(ServletConfig config) throws ServletException {
        // Inicializácia servleta
        this.config = config;
        // Získanie inicializačných parametrov
        String param = config.getInitParameter("someParam");
    }
    
  4. Volanie service(): Pre každý prichádzajúci požiadavok kontajner volá metódu service(ServletRequest request, ServletResponse response). Táto metóda spracováva požiadavku a generuje odpoveď. Zvyčajne presmeruje na špecifické HTTP metódy (doGet, doPost atď.) v triede HttpServlet. Metóda service je viacvláknová, kontajner ju môže volať súčasne pre viac požiadaviek.

    // java
    public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
        // Kontrola typu požiadavky a volanie príslušnej metódy
        if (request instanceof HttpServletRequest && response instanceof HttpServletResponse) {
            // Presmerovanie na HttpServlet
            super.service(request, response);
        } else {
            // Spracovanie iných typov požiadaviek
            throw new ServletException("Podporované sú iba HTTP požiadavky");
        }
    }
    
    // Príklad metódy doXXX v HttpServlet
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // Spracovanie GET požiadavky
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        out.println("<h1>Ahoj</h1>");
    }
    
  5. Volanie destroy(): Kontajner volá metódu destroy() raz pred zničením inštancie servleta. To sa deje pri zastavení aplikácie alebo pri odstránení servleta z kontajnera. V tejto metóde sa uvoľňujú zdroje (napr. zatváranie spojení s databázou alebo súborov). Po volaní destroy môže kontajner vykonať zber odpadu pre inštanciu servleta.

    // java
    public void destroy() {
        // Uvoľnenie zdrojov
        // Napríklad zatváranie spojení
    }
    

Životný cyklus možno predstaviť v tabuľke:

Metóda Volá sa Účel
init() Raz po vytvorení inštancie servleta Inicializácia, načítanie zdrojov
service() Pre každý prichádzajúci požiadavok Spracovanie požiadavky, generovanie odpovede
destroy() Raz pred zničením inštancie servleta Uvoľnenie zdrojov, ukončenie práce

Kontajner zabezpečuje, že init bude volané pred volaním service, a destroy po poslednom volaní service. Metódy service môžu byť volané paralelne.