Jak kontener serwletów zarządza cyklem życia serwletu? Jakie metody są wywoływane i w jakich momentach?
Odpowiedź od AI
sobes.tech AI
Kontener zarządza cyklem życia serwletu za pomocą zestawu metod: init, service, destroy.
-
Ładowanie klasy serwletu: Gdy kontener otrzymuje pierwszy żądanie do serwletu lub podczas uruchamiania aplikacji (jeśli jest skonfigurowane).
-
Tworzenie instancji serwletu: Kontener tworzy pojedynczą instancję klasy serwletu dla całej aplikacji.
-
Wywołanie
init(): Kontener wywołuje metodęinit(ServletConfig config)tylko raz po utworzeniu instancji. W tej metodzie można wykonać inicjalizację, załadować zasoby i uzyskać konfigurację serwletu. Metoda nie powinna być wywoływana ponownie, dopóki serwlet nie zostanie zniszczony i odtworzony.// java public void init(ServletConfig config) throws ServletException { // Inicjalizacja serwletu this.config = config; // Pobieranie parametrów inicjalizacji String param = config.getInitParameter("someParam"); } -
Wywołanie
service(): Dla każdego nadchodzącego żądania, kontener wywołuje metodęservice(ServletRequest request, ServletResponse response). Ta metoda obsługuje żądanie i generuje odpowiedź. Zazwyczaj deleguje obsługę do specyficznych metod HTTP (doGet,doPostitd.) w potomkach klasyHttpServlet. Metodaservicejest wielowątkowa, kontener może wywołać ją jednocześnie dla wielu żądań.// java public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException { // Sprawdzenie typu żądania i wywołanie odpowiedniej metody if (request instanceof HttpServletRequest && response instanceof HttpServletResponse) { // Delegacja do HttpServlet super.service(request, response); } else { // Obsługa innych typów żądań throw new ServletException("Obsługiwane są tylko żądania HTTP"); } } // Przykład metody doXXX w HttpServlet protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // Obsługa żądania GET response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<h1>Cześć</h1>"); } -
Wywołanie
destroy(): Kontener wywołuje metodędestroy()tylko raz przed zniszczeniem instancji serwletu. Dzieje się to podczas zatrzymania aplikacji lub usunięcia serwletu z kontenera. W tej metodzie zwalniane są zasoby (np. zamknięcie połączeń z bazą danych lub plików). Po wywołaniudestroy, kontener może wykonać zbieranie śmieci dla instancji serwletu.// java public void destroy() { // Zwolnienie zasobów // Na przykład zamknięcie połączeń }
Cykl życia można przedstawić w formie tabeli:
| Metoda | Wywoływana | Cel |
|---|---|---|
init() |
Raz po utworzeniu instancji serwletu | Inicjalizacja, ładowanie zasobów |
service() |
Dla każdego nadchodzącego żądania | Obsługa żądania, generowanie odpowiedzi |
destroy() |
Raz przed zniszczeniem instancji serwletu | Zwolnienie zasobów, zakończenie pracy |
Kontener gwarantuje, że init zostanie wywołane przed service, a destroy po ostatnim wywołaniu service. Metody service mogą być wywoływane równolegle.