Tym razem postaram się dokładniej opisać cykl życia serwletu.

Section 1: The Servlet Technology Model

  • Describe the purpose and event sequence of the servlet life cycle: (1) servlet class loading, (2) servlet instantiation, (3) call the init method, (4) call the service method, and (5) call destroy method.

Serwletem jest obiekt, który implementuje interfejs Servlet. W większości przypadków osiągamy to dzięki dziedziczeniu po klasie HttpServlet. Serwlet mapowany jest na url w pliku web.xml. Zgodnie ze specyfikacją dopuszczalna jest jedynie jedna instancja serwletu (pomijamy środowiska klastrowane) na aplikację. Instancja ta ma ściśle określony cykl życia:

  • servlet class loading - kontener serwletów podczas podnoszenia aplikacji (ważny element load-on-startup) ładuje klasę serwletu. Szuka jej w jasno określonych miejscach (WEB-INF/classes, WEB-INF/lib),
  • servlet instantion - dla wczytanej klasy wywoływany jest domyślny konstruktor tworzący właściwy obiekt serwletu, zaleca się aby nie definiować konstruktora - zostawić ten wygenerowany przez kompilator (inicjalizacja następuje później),
  • call the init method - kontener na stworzonym wcześniej obiekcie serwletu wywołuje metodę void init(ServletConfig), która ustawia property serwletConfig oraz wywoluje metodę init(), metodę tą możemy przeciążyć - to jest właściwe miejsce na inicjalizację obiektu,
  • call the service method - większość czasu życia serwletu to metoda service, to ona wywołuje doGet czy doPost na obiekcie serwletu (wywolania w osobnych wątkach). Jest to jedyny stan, w którym serwlet ma możliwość “serwowania” czegokolwiek klientowi,
  • call the destroy method - swoisty “destruktor” dla serwletu pozwalający na zwolnienie używanych zasobów.