JavaServer Pages (JSP) es una tecnología estándar de Java que le permite escribir páginas dinámicas basadas en datos para sus aplicaciones Web Java. JSP está construido sobre la especificación Java Servlet. Las dos tecnologías suelen trabajar juntas, especialmente en aplicaciones Web Java más antiguas., Desde una perspectiva de codificación, la diferencia más obvia entre ellos es que con servlets escribes código Java y luego incrustas marcas del lado del cliente (como HTML) en ese código, mientras que con JSP comienzas con el script o marcado del lado del cliente, luego incrustas etiquetas JSP para conectar tu página al backend de Java.
JSP también está estrechamente relacionado con JSF (JavaServer Faces), una especificación Java para crear aplicaciones web MVC (model-view-controller). JSP es una tecnología relativamente más simple y antigua que JSF, que es el estándar para marcos Web Java como Eclipse Mojarra, MyFaces y PrimeFaces., Si bien no es raro ver JSP utilizado como el frontend para aplicaciones JSF más antiguas, Facelets es la tecnología de vista preferida para implementaciones JSF modernas.
Si bien JSP puede no ser su primera opción para crear páginas web dinámicas, es una tecnología Web Java Central. Las páginas JSP son relativamente rápidas y fáciles de construir, e interactúan sin problemas con servlets Java en un contenedor de servlet como Tomcat. Encontrará JSP en aplicaciones Web Java más antiguas, y de vez en cuando puede encontrarlo útil para crear páginas web Java simples y dinámicas., Como desarrollador de Java, al menos deberías estar familiarizado con JSP.
Este artículo será una introducción rápida a las páginas de JavaServer, incluida la Biblioteca de etiquetas estándar JSP (JSTL). Los ejemplos muestran cómo escribir una página HTML simple, Incrustar etiquetas JSP para conectarse a un servlet Java y ejecutar la página en un contenedor de servlet.
consulte los artículos anteriores de esta serie para obtener más información sobre los servlets Java y las caras de JavaServer.
escribir páginas JSP
una página JSP simple (.jsp) consiste en marcado HTML incrustado con etiquetas JSP., Cuando el archivo se procesa en el servidor, el HTML se representa como la vista de la aplicación, una página web. Las etiquetas JSP incrustadas se utilizarán para llamar a código y datos del lado del servidor. El diagrama de la Figura 1 muestra la interacción entre HTML, JSP y el servidor de aplicaciones web.
El listado 1 muestra una página JSP simple.
Listado 1., Una página JSP simple
<html> <body> <p>${2 * 2} should equal 4</p> </body></html>
en el listado 1, verá un bloque de HTML que incluye una expresión JSP, que es una instrucción para el servidor Java escrita usando Expression Language (el). En la expresión «${2 * 2}
«, el»${}
» es la sintaxis JSP para interpolar código en HTML. Cuando se ejecuta, el JSP mostrará los resultados de ejecutar lo que esté dentro de la expresión. En este caso, la salida será el número 4.
JSP en el contenedor de servlet
las páginas JSP deben desplegarse dentro de un contenedor de Servlet Java., Para implementar una aplicación Web Java basada en JSP y servlets, empaquetará su .archivos jsp, código Java y metadatos de aplicaciones en a .archivo de guerra, que es un simple .archivo zip con una estructura convencional para aplicaciones web.
una vez que haya cargado el JSP en su contenedor de servlet, se compilará en un servlet. Los servlets JSP y Java comparten características similares, incluida la capacidad de acceder y responder a los objetos de solicitud. Apache Tomcat 9x es la implementación de referencia para las especificaciones Servlet 4.0 y JSP 2.3. (Tenga en cuenta que las actualizaciones entre JSP 2.,2 y 2.3 son relativamente menores.)
aplicación de ejemplo para JSP
usaremos una aplicación de ejemplo en Tomcat para comenzar con las páginas de JavaServer. Si aún no tiene Tomcat instalado, vaya a la página de descarga de Tomcat y seleccione la instalación de Tomcat para su sistema operativo. Al momento de escribir este artículo, Tomcat 9 es la versión actual, compatible con Servlet 4.0 y JSP 2.3.
Puede instalar Tomcat como un servicio de Windows, o ejecutarlo desde la línea de comandos con /bin/catalina.sh start
o /bin/catalina.bat
., De cualquier manera, inicie Tomcat y luego vaya a localhost:8080
para ver la página de bienvenida de Tomcat que se muestra en la Figura 2.
objetos implícitos en Tomcat
en la página de bienvenida de Tomcat, haga clic en el enlace ejemplos y, a continuación, haga clic en ejemplos JSP.
a continuación, abra los objetos implícitos Ejecutar aplicación web. La figura 3 muestra la salida para esta aplicación. Tómese un minuto para estudiar esta salida.
parámetros de solicitud
los objetos implícitos son objetos incorporados accesibles a través de una página JSP. Como desarrollador de páginas web, utilizará estos objetos para crear acceso a cosas como parámetros de solicitud, que son los datos enviados desde el navegador al emitir una solicitud HTTP. Considere la URL del navegador para objetos implícitos:
This example is a very simple introduction to using JSP tags to access server-side request parameters. In this case, the JSP page uses the built-in (implicit) object called param
to access the web application’s request parameters. The param
object is available inside the JSP expression syntax that you saw in Listing 1.
In that example, we used an expression to do some math: ${2 * 2}
, which output 4
.
In this example, the expression is used to access an object and a field on that object: ${param.foo}
.
JSP in a web application
On the Implicit Objects page, click the back arrow, followed by the Source link. This will lead you to the JSP code for the Implicit Objects web app, which is shown in Listing 2.
Listing 2. JSP code for the Implicit Objects web app
JSP functions
A JSP function encapsulates a chunk of reusable functionality. In this case, the functionality is to escape XML. JSP offers a variety of functions, and you can also create functions yourself. To use a function, you import its library into your JSP page, then call the function.
In Listing 2, the escapeXML
function is included with the line:
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
la sintaxis es bastante clara: importa las funciones requeridas y les asigna un prefijo (en este caso» fn») que se puede usar en todas las expresiones siguientes.,
the JSP Standard Tag Library (JSTL)
The import
line in Listing 2 calls taglib
, que es la abreviatura de tag library, o (en este caso) JSP Standard Tag Library (JSTL). Las bibliotecas de etiquetas definen bits reutilizables de funcionalidad para JSP. JSTL es la biblioteca de etiquetas estándar, que contiene una colección de taglibs que se envían con cada implementación de servlet y JSP, incluido Tomcat.
la biblioteca «functions» es solo uno de los taglibs incluidos con JSTL., Otro taglib común es la biblioteca core
, que se importa llamando a:
<%@ taglib uri = "http://java.sun.com/jsp/jstl/core" prefix = "c" %>
Al igual que «fn», la designación «c» es convencional, y la verá en la mayoría de las páginas JSP.
Securing JSP pages
una etiqueta de ejemplo de la biblioteca principal es
<c:out value = "${'<div>'}"/>
que produce la etiqueta <div>
con el XML ya escapado. Esta función es importante porque enviar contenido directamente a una página web a través de ${variable}
abre la puerta a los ataques de inyección de script., Esta sencilla función se utiliza para proteger las páginas web de este tipo de ataques.
la biblioteca principal también incluye varias etiquetas para la iteración y el control de flujo (como el manejo IF/ELSE).
llamando a taglibs en páginas JSP
ahora que tienes un control sobre los conceptos básicos de JSP, vamos a hacer un cambio en la aplicación de ejemplo. Para comenzar, localice la aplicación Implicit Object en su instalación de Tomcat. La ruta es: apache-tomcat-8.5.33/webapps/examples/jsp/jsp2/el
.,
abra este archivo y ubique el functions
include:
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
justo debajo de esta línea, agregue una nueva línea:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
Hit Return y agregue otra nueva línea:
<c:out value = "${'This is a test of the JSTL Core Library'}"/>
ahora vuelve a cargar la página en http://localhost:8080/examples/jsp/jsp2/el/implicit-objects.jsp?foo=bar.
debería ver sus actualizaciones reflejadas en la salida.
diseño de una aplicación web JSP
Tomcat sigue el diseño estándar para las páginas Java servlet y JSP., La estructura general es una carpeta con el nombre de la aplicación, que se implementa dentro del directorio /webapps
de Tomcat.
en la aplicación Implicit Objects, la aplicación es /examples
. Abrir esa carpeta revela tres hijos importantes: el directorio /WEB-INF
, el archivo index.html
y un conjunto de otros directorios.
el directorio WEB-INF
contiene metadatos que informan a Tomcat sobre cómo ejecutar la aplicación.
El resto del contenido, incluyendo el índice.,html, es directamente accesible, al igual que lo sería en un servidor web típico. Del mismo modo, el implicit-objects.jsp
está disponible para ver, y se maneja automáticamente como una página JSP (no una página HTML) por el servidor.
arquitectura de solicitud-respuesta
en una aplicación servlets/JSP típica, los servlets reciben solicitudes e interactúan con Componentes y servicios del lado del servidor (como la base de datos) para cumplirlas. Una vez manejado, el resultado de la solicitud se reenvía a una página JSP, que presenta la respuesta.,
un servlet utiliza la siguiente sintaxis al enviar una respuesta de solicitud a una página JSP:
request.getRequestDispatcher("path/to/jsp.jsp").forward(req,res);
cualquier dato que el servlet haya insertado en los diversos ámbitos JSP será accesible para JSP. Un alcance es simplemente un rango de vida para un objeto dado. Los objetos Request y response tienen un ámbito de solicitud, lo que significa que viven durante la duración de la solicitud. Otros ámbitos incluyen el ámbito de página (que permanece tanto como lo hace la página JSP) y el ámbito de sesión (que termina cuando el usuario termina la sesión dada).,
conclusión
JavaServer Pages es una tecnología muy conocida y versátil para desarrollar vistas de aplicaciones Web Java. En combinación con servlets, las páginas JSP son muy potentes y proporcionan acceso a toda la gama de capacidades de Java. Si bien JSP puede no ser su primera opción para desarrollar una aplicación Web Java moderna, encontrará páginas JSP en aplicaciones heredadas. También es una buena opción para aplicaciones más simples, donde desea conectar rápidamente su interfaz HTML al código Java del lado del servidor., Las etiquetas JSTL son capaces de manejar la mayoría de los requisitos de aplicaciones web, y las bibliotecas de terceros amplían esa funcionalidad para tecnologías y casos de uso específicos.