Ciclo de vida de JSP: Fases y diagrama explicados
⚡ Resumen inteligente
El ciclo de vida de JSP describe cómo un contenedor traduce una página a un servlet, la compila, carga la clase, crea una instancia, la inicializa, atiende todas las solicitudes a través del método de servicio generado y, finalmente, la destruye.

¿Qué es el ciclo de vida de JSP?
Ciclo de vida JSP Se define como la traducción de una página JSP a un servlet, ya que una página JSP debe convertirse en un servlet antes de poder procesar solicitudes de servicio. El ciclo de vida comienza con la creación de la página JSP y finaliza con la destrucción de la instancia de servlet generada a partir de ella.
Debido a que la clase generada es un servlet ordinario, todo lo que ya sabes sobre el servlet se aplica.tract sigue vigente. El Java El código que escribe el contenedor es el que realmente se ejecuta; el archivo JSP es solo el código fuente que usted mantiene.
Diferentes fases del ciclo de vida de JSP
Cuando el navegador solicita una página JSP, el motor JSP primero comprueba si necesita compilarla. Si la página JSP nunca se ha compilado o si se ha modificado desde la última compilación, el motor JSP la compila.
El proceso de compilación de una página JSP consta de tres pasos:
- Análisis de JSP
- Convertir JSP en servlet
- Compilando el servlet
Diagrama del ciclo de vida JSP
El ciclo de vida de JSP se muestra en el diagrama a continuación, que traces una sola página desde el archivo fuente hasta la clase que ejecuta el contenedor.
Los siguientes pasos explican el ciclo de vida de JSP:
- Traducción de página JSP
- Compilación de la página JSP (compilación de la página JSP en _jsp.java)
- Carga de clases (_jsp.java se convierte en el archivo de clase _jsp.class)
- Instanciación (se crea un objeto del servlet generado)
- Inicialización (el contenedor invoca el método jspInit())
- Procesamiento de la solicitud (el contenedor invoca el método _jspService()).
- Destruir (el método jspDestroy() es invocado por el contenedor)
Explicación de las fases del ciclo de vida de JSP
Analicemos cada uno de los puntos anteriores con más detalle.
1) Traducción de la página JSP:
A Java El archivo servlet se genera a partir de un archivo fuente JSP. Este es el primer paso del ciclo de vida de JSP. En la fase de traducción, el contenedor valida la corrección sintáctica de la página JSP y los archivos de etiquetas.
- El contenedor JSP interpreta las directivas y acciones estándar, y las acciones personalizadas que hacen referencia a las bibliotecas de etiquetas (todas forman parte de la página JSP y están cubiertas en el elementos JSP tutorial) utilizado en esta página JSP.
- En la descripción gráfica anterior, demo.jsp se traduce a demo_jsp.java en el primer paso.
Veamos un ejemplo de “demo.jsp”, como se muestra a continuación:
Demostración.jsp
<html>
<head>
<title>Demo JSP</title>
</head>
<%
int demvar=0;%>
<body>
Count is:
<% Out.println(demovar++); %>
<body>
</html>
Nota sobre el listado anterior: Se reproduce exactamente como se publicó para que coincida con la captura de pantalla del servlet generado que sigue. Dos errores ortográficos no compilarán si se copian textualmente: la variable se declara como demvar pero impreso como demovary el objeto de salida implícito es out en minúsculas, no OutCorrige ambos errores antes de ejecutar la página tú mismo.
Code Explicación de Demo.jsp
Code Línea 1: etiqueta de inicio html
Code Línea 2: Etiqueta de cabecera
Code Líneas 3-4: Etiqueta de título, por ejemplo Demo JSP, y etiqueta de cierre de encabezado.
Code Líneas 5-6: Etiqueta de scriptlet donde se inicializa la variable demo.
Code Líneas 7-8: En la etiqueta body, un texto que se imprimirá en la salida (Count es: )
Code Línea 9: Etiqueta Scriptlet donde intentamos imprimir la variable demovar con su valor incrementado.
Code Líneas 10-11: Se cierran las etiquetas Body y HTML.
La página JSP de demostración se convierte en el servlet demo_jsp que se muestra en el código a continuación.
Code Explicación para Demo_jsp.java
Code Línea 1: La clase servlet demo_jsp extiende la clase padre HttpServlet.
Code Líneas 2-3: Sobrescribiendo el método de servicio de la JSP, es decir, _jspService, que tiene como parámetros los objetos HttpServletRequest y HttpServletResponse.
Code Línea 4: Método de apertura
Code Línea 5: Llamando al método getWriter() del objeto de respuesta para obtener una impresiónWriter objeto (imprime una representación formateada de los objetos en un flujo de salida de texto)
Code Línea 6: Llamada al método setContentType del objeto de respuesta para establecer el tipo de contenido.
Code Línea 7: Usando el método write() de PrintWriter objeto para analizar html
Code Línea 8: Inicializando la variable demovar a 0
Code Línea 9: Llamando al método write() de PrintWriter objeto para analizar el texto
Code Línea 10: Llamada al método print() de la función PrintWriter objeto para incrementar la variable demovar de 0 + 1 = 1. Por lo tanto, la salida será 1.
Code Línea 11: Usando el método write() de PrintWriter objeto para analizar html
Salida:
A continuación, el navegador muestra el contador, tal y como se puede ver en la captura de pantalla que aparece más abajo.
- Aquí puedes ver que en la captura de pantalla la salida es 1, porque demvar se inicializa a 0 y luego se incrementa a 0 + 1 = 1.
En el ejemplo anterior,
- demo.jsp es una página JSP donde se inicializa e incrementa una variable. Esta página JSP se convierte en un servlet (demo_jsp.class), donde el motor JSP carga la página y la convierte en contenido de servlet.
- Cuando se produce la conversión, todo el texto de la plantilla se convierte en instrucciones println() y todos los elementos JSP se convierten en Java código.
Así es como se traduce una página JSP simple en una clase de servlet.
2) Compilación de la página JSP
- El generado Java El archivo servlet se compila en un Java clase servlet
- La traducción de la Java La conversión de la página de origen a su clase de implementación puede ocurrir en cualquier momento entre el despliegue de la página JSP en el contenedor y el procesamiento de la página JSP.
- En la descripción gráfica anterior, demo_jsp.java se compila en un archivo de clase llamado demo_jsp.class.
- En Apache Tomcat ambos artefactos se escriben en el directorio de trabajo del servidor, en
work/Catalina/localhost/<app>/org/apache/jsp, que es el primer lugar donde buscar cuando hay que diagnosticar un error de traducción
3) Carga de clases
- La clase servlet que se ha generado a partir del código fuente JSP ahora se carga en el contenedor.
4) Creación de instancias
- En este paso se genera el objeto, es decir, la instancia de la clase.
- El contenedor gestiona una o más instancias de esta clase en respuesta a solicitudes y otros eventos. Normalmente, un contenedor JSP se construye utilizando un contenedor de servlets. Un contenedor JSP es una extensión de un contenedor de servlets, ya que ambos admiten JSP y servlets.
- La interfaz JspPage, proporcionada por el contenedor, declara los métodos jspInit() y jspDestroy().
- Existe una interfaz HttpJspPage que gestiona las solicitudes HTTP y que también contiene el método de servicio. Su firma depende del protocolo, por lo que el contenedor genera dicho método en lugar de solicitar al autor de la página que lo declare.
5) Inicialización
public void jspInit() { //initializing the code }
- El método jspInit() inicializa la instancia del servlet que se generó a partir del JSP y es invocado por el contenedor en esta fase.
- Una vez creada la instancia, el método init se invoca inmediatamente después.
- Se llama solo una vez durante el ciclo de vida de una JSP, y el método para la inicialización se declara como se muestra arriba.
6) Procesamiento de solicitudes
void _jspservice(HttpServletRequest request HttpServletResponse response) { //handling all request and responses }
- El método _jspService() es invocado por el contenedor para todas las solicitudes generadas por la página JSP durante su ciclo de vida.
- Para esta fase, la página debe pasar por todas las fases anteriores, y solo entonces se podrá invocar el método de servicio.
- Pasa los objetos de solicitud y respuesta.
- Este método no se puede sobrescribir, ya que el contenedor lo escribe durante la traducción.
- El método se muestra arriba. Es responsable de gestionar todos los métodos HTTP, es decir, GET, POST y los demás.
7) Destruir
public void _jspdestroy() { //all clean up code }
- El método jspDestroy() también es invocado por el contenedor.
- Este método se llama cuando el contenedor decide que ya no necesita la instancia del servlet para atender las solicitudes.
- Una vez realizada la llamada al método destroy, el servlet está listo para la recolección de basura.
- Este es el final del ciclo de vida.
- Podemos sobrescribir jspDestroy() cuando realizamos cualquier tarea de limpieza, como liberar conexiones a la base de datos o cerrar archivos abiertos.
Una nota importante a tener en cuenta: desde Jakarta EE 9 en adelante, estos tipos viven en el jakarta.servlet.jsp paquete en lugar de javax.servlet.jspPor lo tanto, las importaciones antiguas deben actualizarse cuando una aplicación se traslada a un servidor actual.



