Jakarta Server Pages ( JSP ; anteriormente JavaServer Pages ) [ 1 ] es un conjunto de tecnologías que ayuda a los desarrolladores de software a crear páginas web generadas dinámicamente basadas en HTML , XML , SOAP u otros tipos de documentos. Lanzado en 1999 por Sun Microsystems , [ 2 ] JSP es similar a PHP y ASP , pero utiliza el lenguaje de programación Java .
Para desplegar y ejecutar Jakarta Server Pages, se requiere un servidor web compatible con un contenedor de servlets , como Apache Tomcat o Jetty .
Descripción general

Desde el punto de vista arquitectónico, JSP puede considerarse una abstracción de alto nivel de los servlets de Jakarta . Los JSP se traducen a servlets en tiempo de ejecución; por lo tanto, JSP es un servlet. Cada servlet JSP se almacena en caché y se reutiliza hasta que se modifica el JSP original. [ 3 ]
Las Jakarta Server Pages se pueden usar de forma independiente o como componente de vista de un diseño modelo-vista-controlador del lado del servidor, normalmente con JavaBeans como modelo y servlets Java (o un framework como Apache Struts ) como controlador. Este es un tipo de arquitectura Modelo 2. [ 4 ]
JSP permite intercalar código Java y ciertas acciones predefinidas con contenido de marcado web estático, como HTML. La página resultante se compila y ejecuta en el servidor para entregar un documento. Las páginas compiladas, así como las bibliotecas Java dependientes, contienen bytecode Java en lugar de código máquina . Al igual que cualquier otro programa .jar o Java, el código debe ejecutarse dentro de una máquina virtual Java (JVM) que interactúa con el sistema operativo del servidor para proporcionar un entorno abstracto e independiente de la plataforma.
Las JSP se suelen utilizar para entregar documentos HTML y XML, pero mediante el uso de OutputStream, también pueden entregar otros tipos de datos. [ 5 ]
El contenedor web crea objetos implícitos de JSP como request, response, session, application, config, page, pageContext, out y exception. El motor JSP crea estos objetos durante la fase de traducción.
Sintaxis
Declaración de directivas, scripts y expresiones
Las JSP utilizan varios delimitadores para las funciones de scripting . El más básico es , que encierra un scriptlet de JSP. Un scriptlet es un fragmento de código Java [ 6 ] que se ejecuta cuando el usuario solicita la página. <% ... %>
Otros delimitadores comunes incluyen expresiones , donde el scriptlet y los delimitadores se reemplazan con el resultado de evaluar la expresión, y directivas , denotadas con . [ 6 ] [ 7 ] <%= ... %><%@ ... %>
El código Java no tiene por qué estar completo ni contenido en un único bloque de script. Puede intercalarse con el contenido de marcado, siempre que la página en su conjunto sea sintácticamente correcta. Por ejemplo, cualquier bloque `if/for/while` de Java abierto en un script debe cerrarse correctamente en un script posterior para que la página compile correctamente. Esto permite que el código se mezcle y puede dar lugar a malas prácticas de programación.
El contenido que se encuentra dentro de un bloque dividido de código Java (que abarca varios scriptlets) está sujeto a dicho código. El contenido dentro de un bloque if solo aparecerá en la salida cuando la condición if se evalúe como verdadera. Del mismo modo, el contenido dentro de una estructura de bucle puede aparecer varias veces en la salida, dependiendo de cuántas veces se ejecute el cuerpo del bucle.
Ejemplo
Etiquetas JSP estándar
La etiqueta useBean
La etiqueta JSP useBeanpermite al desarrollador acceder y crear un Javabean. [ 8 ] Aunque el uso de la useBeanetiqueta se parece a una etiqueta HTML, todas las etiquetas JSP para JavaBeans utilizan sintaxis XML. Por lo tanto, el código que contiene la useBeanetiqueta distingue entre mayúsculas y minúsculas. [ 9 ]
La useBeanetiqueta contiene varios atributos. El idatributo declara el nombre que se utiliza para acceder al bean. El classatributo declara el paquete y la clase del bean. El scopedeclara el objeto responsable de almacenar el bean. El valor del ámbito define la duración durante la cual el bean está disponible para que el resto de la aplicación Java lo utilice. El ámbito puede ser uno de los siguientes cuatro valores: [ 9 ]
- El
pageámbito implica que el bean se encuentra en elPageContextobjeto definido implícitamente y solo está disponible para la página actual. Por defecto, todos los beans tienen un ámbito depage. - El
requestámbito implica que el bean se encuentra dentro delHttpServletRequestobjeto. Este bean puede ser accedido por todos los demás JSPs y servlets que tengan acceso al objeto de solicitud actual. - El
sessionámbito implica que el bean se encuentra dentro delHttpSessionobjeto. Este bean puede ser accedido por todos los demás JSPs y servlets que tengan acceso alHttpSessionobjeto especificado. - El
applicationámbito implica que el bean se encuentra dentro delServletContextobjeto. Este bean puede ser accedido por todos los demás JSPs y servlets que tengan acceso alServletContextobjeto especificado.
Las etiquetas getProperty y setProperty
Después de crear un bean usando la useBeanetiqueta, las etiquetas getPropertyy setPropertyse pueden usar para obtener y establecer las propiedades del bean. El JSP getPropertyse usa para obtener la propiedad del bean creado. La setPropertyetiqueta JSP se usa para establecer las propiedades de un bean. Para las etiquetas getProperty y setProperty, el atributo name se usa para especificar el nombre del bean. Por lo tanto, el atributo name debe coincidir con el atributo id proporcionado por la useBeanetiqueta. [ 10 ]
Lenguaje de expresión
La versión 2.0 de la especificación JSP añadió soporte para el Lenguaje de Expresiones (EL), utilizado para acceder a datos y funciones en objetos Java. En JSP 2.1, se integró en el Lenguaje de Expresiones Unificado , que también se utiliza en JavaServer Faces . [ 11 ]
El lenguaje de expresiones JSP utiliza una sintaxis compacta que permite al desarrollador obtener atributos y propiedades de JavaBean a partir de un objeto de solicitud dado. Al usar EL, se debe agregar un signo de dólar ("$") al principio del código. El símbolo de dólar va seguido de una llave de apertura ("{") y una llave de cierre ("}"). El código se escribe entre las llaves de apertura y cierre. [ 12 ]
Ejemplo
El siguiente es un ejemplo de sintaxis EL :
El valor variabledel objeto javabeanes ${javabean.variable}.
Etiquetas adicionales
La sintaxis JSP añade etiquetas adicionales, llamadas acciones JSP, para invocar funcionalidades integradas. [ 7 ] Además, la tecnología permite la creación de bibliotecas de etiquetas JSP personalizadas que actúan como extensiones de la sintaxis JSP estándar. [ 13 ] Una de estas bibliotecas es JSTL . [ 14 ]
Biblioteca de etiquetas estándar de Yakarta
La biblioteca de etiquetas estándar de Jakarta (JSTL) admite tareas comunes que deben realizarse en JSPs. [ 15 ] Algunos ejemplos incluyen iteración y condicionales (el equivalente a las sentencias "for" e "if" en Java). [ 14 ]
De todas las bibliotecas de JSTL, la biblioteca principal de JSTL es la más utilizada. Se debe usar una directiva taglib para especificar la URI de la biblioteca principal de JSTL mediante un prefijo. Aunque existen muchas opciones diferentes para el prefijo, el prefijo "c" es el más utilizado para esta biblioteca. [ 16 ]
JSP compatible con XML
Las páginas JSP también pueden escribirse en sintaxis XML totalmente válida. [ 17 ] Estos archivos JSP suelen usar la .jspxextensión de archivo alternativa, lo que normalmente hace que el servidor de aplicaciones valide la sintaxis XML.
Dado que la sintaxis habitual de JSP no es válida en XML, un desarrollador debe usar etiquetas alternativas proporcionadas por JSP. Por ejemplo, la directiva común puede escribirse como una etiqueta, y las bibliotecas de etiquetas se importan usando espacios de nombres XML , en lugar de la etiqueta habitual.<% ... %><%@ page .. %><jsp:directive.page .. /><%@ taglib .. %>
Compilador
Un compilador de JavaServer Pages es un programa que analiza las JSP y las transforma en Java Servlets ejecutables . Un programa de este tipo suele estar integrado en el servidor de aplicaciones y se ejecuta automáticamente la primera vez que se accede a una JSP, pero las páginas también pueden precompilarse para un mejor rendimiento o compilarse como parte del proceso de compilación para detectar errores. [ 18 ]
Algunos contenedores JSP permiten configurar la frecuencia con la que el contenedor comprueba las marcas de tiempo de los archivos JSP para ver si la página ha cambiado. Normalmente, esta marca de tiempo se establece en un intervalo corto (quizás segundos) durante el desarrollo del software y en un intervalo más largo (quizás minutos, o incluso nunca) para una aplicación web desplegada . [ 19 ]
Crítica
Según Joel Murach y Michael Urban, autores del libro "Murach's Java Servlets and JSP", incrustar código Java en JSP es generalmente una mala práctica. [ 20 ] Un mejor enfoque sería migrar la lógica de back-end incrustada en el JSP al código Java en el Servlet. [ 20 ] En este escenario, Servletes responsable del procesamiento y el JSP es responsable de mostrar el HTML, [ 20 ] manteniendo una clara separación de responsabilidades .
En 2000, Jason Hunter, autor de "Java Servlet Programming", describió varios "problemas" con JavaServer Pages. [ 21 ] Sin embargo, escribió que si bien JSP podría no ser la "mejor solución para la plataforma Java", era la "solución Java más parecida a la solución no Java", refiriéndose así a Active Server Pages de Microsoft . Más tarde, añadió una nota a su sitio web indicando que JSP había mejorado desde 2000, pero también citó a sus competidores, Apache Velocity y Tea (lenguaje de plantillas). [ 21 ] Hoy en día, varias alternativas y un número considerable de páginas orientadas a JSP en aplicaciones web de mayor tamaño se consideran deuda técnica.
Véase también
Contenedores de servlets
Alternativas de plantillas basadas en Java
Referencias
- ↑ Matthew Tyson (9 de septiembre de 2022). "¿Qué es JSP? Introducción a Jakarta Server Pages" . InfoWorld . Consultado el 30 de mayo de 2024 .
- ↑ "ForRK Archive: Sun JSP 1.0 *no* disponible" . www.xent.com .
- ↑ El ciclo de vida de una página JSP (documentación de Sun)
- ↑ Seshadri, Govind (29 de diciembre de 1999). "Understanding JavaServer Pages Model 2 architecture" . JavaWorld . Consultado el 17 de julio de 2020 .
- ↑ "OutputStream ya obtenido (foro JSP en Coderanch)" . coderanch.com .
- 1 2 Referencia de sintaxis de JSP 1.2
- ↑ Murach & Urban 2014 , págs. 198, §2 Habilidades esenciales de servlet y JSP - Resumen.
- 1 2 Murach & Urban 2014 , pp. 186–187, §2 Habilidades esenciales de servlet y JSP: cómo codificar la etiqueta useBean.
- ↑ El lenguaje de expresiones unificado (Red de desarrolladores de Sun)
- ↑ Murach & Urban 2014 , pp. 176–177, §2 Habilidades esenciales de servlet y JSP: cómo usar EL para obtener atributos y propiedades de JavaBean.
- ↑ Tutorial sobre bibliotecas de etiquetas: ¿Qué es una biblioteca de etiquetas? (Dom) Archivado el 19 de abril de 2012 en Wayback Machine .
- 1 2 "Biblioteca de etiquetas estándar de JavaServer Pages - El tutorial de Java EE 5" . docs.oracle.com .
- ↑ Murach & Urban 2014 , pp. 270–273, §2 Habilidades esenciales de servlets y JSP: una introducción a JSTL.
- ↑ Murach & Urban 2014 , págs. 178, §2 Habilidades esenciales de servlet y JSP: cómo habilitar la biblioteca JSTL principal.
- ↑ "Tutorial de Java EE 5, Capítulo 6 Documentos de JavaServer Pages" . oracle.com . Consultado el 27 de julio de 2022 .
- ↑ "Documentación de IBM" . www.ibm.com .
- ↑ "SyBooks Online" . infocenter.sybase.com .
- 1 2 3 Murach & Urban 2014 , pp. 46–47, §1 Comience bien: el JSP para la segunda página.
- 1 2 Los problemas con JSP (25 de enero de 2000)
Obras citadas
- Murach, Joel; Urban, Michael (2014). Servlets Java y JSP de Murach . Mike Murach & Associates. ISBN 978-1-890774-78-3.
Lecturas adicionales
- Bergsten, Hans (2003). Páginas de JavaServer (3ª ed.). Medios O'Reilly . ISBN 978-0-596-00563-4.
- Brown, Simon; Dalton, Sam; Jepp, Daniel; Johnson, Dave; Li, Sing; Raible, Matt. Pro JSP 2. Apress . ISBN 1-59059-513-0.
- Hanna, Phil (2003). JSP 2.0 - La referencia completa . McGraw-Hill Osborne Media . ISBN 978-0-07-222437-5.
- Sierra, Kathy; Bates, Bert; Basham, Bryan. Head First Servlets & JSP . O'Reilly Media . ISBN 978-0-596-00540-5.
Enlaces externos
- Plataforma empresarial Java
- Solicitudes de especificación de Java
- Motores de plantillas