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.
-
Načítanie triedy servleta: Keď kontajner dostane prvý požiadavok na servlet alebo pri spustení aplikácie (ak je nakonfigurované).
-
Vytvorenie inštancie servleta: Kontajner vytvorí jednu inštanciu triedy servleta pre celú aplikáciu.
-
Volanie
init(): Kontajner zavolá metóduinit(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"); } -
Volanie
service(): Pre každý prichádzajúci požiadavok kontajner volá metóduservice(ServletRequest request, ServletResponse response). Táto metóda spracováva požiadavku a generuje odpoveď. Zvyčajne presmeruje na špecifické HTTP metódy (doGet,doPostatď.) v triedeHttpServlet. Metódaserviceje 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>"); } -
Volanie
destroy(): Kontajner volá metódudestroy()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ídestroymôž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.