Hogyan kezeli a servlet konténer a servlet életciklusát? Milyen módszerek hívódnak meg, és mikor?
sobes.tech MI
Válasz az MI-től
A konténer kezeli a servlet életciklusát egy módszersorozaton keresztül: init, service, destroy.
-
Servlet osztály betöltése: Amikor a konténer megkapja az első kérést a servlethez vagy az alkalmazás indításakor (ha be van állítva).
-
Servlet példány létrehozása: A konténer létrehoz egy példányt a servlet osztályból az egész alkalmazás számára.
-
Az
init()hívása: A konténer egyszer hívja meg ainit(ServletConfig config)metódust a példány létrehozása után. Ebben a módszerben inicializálás, erőforrások betöltése és a servlet konfigurálása történhet. Ez a módszer nem hívódik meg újra, amíg a servlet nem kerül megsemmisítésre és újra létrehozásra.// java public void init(ServletConfig config) throws ServletException { // Servlet inicializálása this.config = config; // Inicializációs paraméterek lekérése String param = config.getInitParameter("someParam"); } -
A
service()hívása: Minden bejövő kérés esetén a konténer meghívja aservice(ServletRequest request, ServletResponse response)metódust. Ez a metódus feldolgozza a kérést és választ generál. Általában átirányítja aHttpServlet-ben lévődoGet,doPoststb. módszerekhez.// java public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException { // A kérés típusának ellenőrzése és a megfelelő metódus hívása if (request instanceof HttpServletRequest && response instanceof HttpServletResponse) { // Átirányítás HttpServlet-re super.service(request, response); } else { // Egyéb típusú kérések kezelése throw new ServletException("Csak HTTP kéréseket támogatunk"); } } // Példa doXXX metódusra az HttpServlet-ben protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // GET kérés kezelése response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<h1>Szia</h1>"); } -
A
destroy()hívása: A konténer egyszer hívja meg adestroy()metódust a servlet példányának megsemmisítése előtt. Ez akkor történik, amikor az alkalmazás leáll vagy a servlet eltávolításra kerül a konténerből. Ebben a módszerben felszabadíthatók az erőforrások (pl. adatbázis-kapcsolatok vagy fájlok bezárása). Adestroyhívása után a konténer a szemétgyűjtést is végrehajthatja a servlet példányán.// java public void destroy() { // Erőforrások felszabadítása // Pl. kapcsolatok bezárása }
A életciklus az alábbi táblázatban ábrázolható:
| Metódus | Meghívás | Célja |
|---|---|---|
init() |
Egyszer a példány létrehozása után | Inicializálás, erőforrások betöltése |
service() |
Minden bejövő kérés esetén | Kérés feldolgozása, válasz generálása |
destroy() |
Egyszer a példány megsemmisítése előtt | Erőforrások felszabadítása, munka befejezése |
A konténer garantálja, hogy az init a service hívás előtt, a destroy pedig az utolsó service hívás után történik. A service metódusok párhuzamosan is hívhatók.