Kā servlet konteineris pārvalda servlet dzīves ciklu? Kādus metodes tiek izsauktas un kad?
sobes.tech AI
Atbilde no AI
Konteiners pārvalda servleta dzīves ciklu, izmantojot metožu kopu: init, service, destroy.
-
Servleta klases ielāde: Kad konteiners saņem pirmo pieprasījumu uz servlet vai sākot lietojumprogrammu (ja tas ir konfigurēts).
-
Servleta eksemplāra izveide: Konteiners izveido vienu servleta klases eksemplāru visai lietojumprogrammai.
-
init()metodes izsaukšana: Konteiners vienreiz izsaucinit(ServletConfig config)pēc eksemplāra izveides. Šajā metodē var veikt inicializāciju, ielādēt resursus un saņemt servleta konfigurāciju. Šo metodi nevajadzētu izsaukt vēlreiz, kamēr servlets nav iznīcināts un izveidots jauns.// java public void init(ServletConfig config) throws ServletException { // Servleta inicializācija this.config = config; // Inicializācijas parametri String param = config.getInitParameter("someParam"); } -
service()metodes izsaukšana: Katram ienākošajam pieprasījumam konteiners izsaucservice(ServletRequest request, ServletResponse response)metodi. Šī metode apstrādā pieprasījumu un ģenerē atbildi. Parasti tā deleģē apstrādi specifiskiem HTTP metožu (doGet,doPostu.c.) izsaukumiemHttpServlet.servicemetode ir daudzšrādu, konteiners to var izsaukt vienlaicīgi vairākām pieprasījumiem.// java public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException { // Pieprasījuma tipa pārbaude un atbilstošas metodes izsaukšana if (request instanceof HttpServletRequest && response instanceof HttpServletResponse) { // Delegācija uz HttpServlet super.service(request, response); } else { // Citi pieprasījumu tipi throw new ServletException("Atbalstīti tikai HTTP pieprasījumi"); } } // doXXX metodes piemērs HttpServlet protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // GET pieprasījuma apstrāde response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<h1>Sveiki</h1>"); } -
destroy()metodes izsaukšana: Konteiners vienu reizi izsaucdestroy()metodi pirms servleta eksemplāra iznīcināšanas. Tas notiek, apturot lietojumprogrammu vai noņemot servletu no konteinera. Šajā metodē atbrīvo resursus (piemēram, aizver savienojumus ar datu bāzi vai failus). Pēcdestroyizsaukšanas konteiners var veikt atkritumu savākšanu servleta eksemplāram.// java public void destroy() { // Resursu atbrīvošana // Piemēram, savienojumu aizvēršana }
Dzīves ciklu var attēlot tabulā:
| Metode | Izsaukts | Mērķis |
|---|---|---|
init() |
Vienu reizi pēc servleta eksemplāra izveides | Inicializācija, resursu ielāde |
service() |
Katram ienākošajam pieprasījumam | Pieprasījuma apstrāde, atbildes ģenerēšana |
destroy() |
Vienu reizi pirms servleta eksemplāra iznīcināšanas | Resursu atbrīvošana, darba pabeigšana |
Konteiners garantē, ka init tiks izsaukts pirms service, bet destroy - pēc pēdējā service izsaukuma. service metodes var tikt izsauktas paralēli.