Servlets - Ciclo de vida

El ciclo de vida de un servlet se puede definir como el proceso completo desde su creación hasta su destrucción. Las siguientes son las rutas seguidas por un servlet.

  • El servlet se inicializa llamando al init() método.

  • El servlet llama service() método para procesar la solicitud de un cliente.

  • El servlet se termina llamando al destroy() método.

  • Finalmente, el servlet es basura recolectada por el recolector de basura de la JVM.

Ahora analicemos los métodos del ciclo de vida en detalle.

El método init ()

El método init se llama solo una vez. Se llama solo cuando se crea el servlet y no se llama para solicitudes de usuario posteriormente. Por lo tanto, se usa para inicializaciones únicas, al igual que con el método init de los subprogramas.

El servlet normalmente se crea cuando un usuario invoca por primera vez una URL correspondiente al servlet, pero también puede especificar que el servlet se cargue cuando el servidor se inicia por primera vez.

Cuando un usuario invoca un servlet, se crea una única instancia de cada servlet, y cada solicitud de usuario da como resultado un nuevo hilo que se pasa a doGet o doPost según corresponda. El método init () simplemente crea o carga algunos datos que se utilizarán durante la vida útil del servlet.

La definición del método init se ve así:

public void init() throws ServletException {
   // Initialization code...
}

El método service ()

El método service () es el método principal para realizar la tarea real. El contenedor de servlets (es decir, el servidor web) llama al método service () para manejar las solicitudes provenientes del cliente (navegadores) y para escribir la respuesta formateada al cliente.

Cada vez que el servidor recibe una solicitud de un servlet, el servidor genera un nuevo hilo y llama al servicio. El método service () verifica el tipo de solicitud HTTP (GET, POST, PUT, DELETE, etc.) y llama a los métodos doGet, doPost, doPut, doDelete, etc., según corresponda.

Aquí está la firma de este método:

public void service(ServletRequest request, ServletResponse response) 
   throws ServletException, IOException {
}

El método service () es llamado por el contenedor y el método service invoca los métodos doGet, doPost, doPut, doDelete, etc., según corresponda. Por lo tanto, no tiene nada que ver con el método service (), pero anula doGet () o doPost () según el tipo de solicitud que reciba del cliente.

DoGet () y doPost () son los métodos más utilizados en cada solicitud de servicio. Aquí está la firma de estos dos métodos.

El método doGet ()

Una solicitud GET es el resultado de una solicitud normal de una URL o de un formulario HTML que no tiene METHOD especificado y debe ser manejado por el método doGet ().

public void doGet(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
   // Servlet code
}

El método doPost ()

Una solicitud POST resulta de un formulario HTML que enumera específicamente POST como METHOD y debe ser manejado por el método doPost ().

public void doPost(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
   // Servlet code
}

El método destroy ()

El método destroy () se llama solo una vez al final del ciclo de vida de un servlet. Este método le da a su servlet la oportunidad de cerrar conexiones de base de datos, detener subprocesos en segundo plano, escribir listas de cookies o conteos de visitas al disco y realizar otras actividades de limpieza.

Después de que se llama al método destroy (), el objeto servlet se marca para la recolección de basura. La definición del método de destrucción se ve así:

public void destroy() {
   // Finalization code...
}

Diagrama de arquitectura

La siguiente figura muestra un escenario típico del ciclo de vida de un servlet.

  • Primero, las solicitudes HTTP que llegan al servidor se delegan al contenedor de servlets.

  • El contenedor de servlet carga el servlet antes de invocar el método service ().

  • Luego, el contenedor de servlets maneja múltiples solicitudes generando múltiples subprocesos, cada subproceso ejecuta el método service () de una sola instancia del servlet.