Permite combinar código HTML
estático con código generado en un mismo fichero.
Ventajas:
- Separación de datos estáticos/dinámicos
- Independencia de formato/plataforma
- Separación entre desarrolladores y diseñadores de
contenidos.
JSP vs ASP. Respuesta de Sun a ASP.
JSP vs Servlet. Los JSP son interpretados en Servlet. JSP es una
extensión
de los servlets.
JSP 1.1
java.servlet.jsp
Java.servlet.jsp.tagext
A los archivos generados le damos extensión .jsp.
JSP representa un nivel mayor de abstracción que JSP.
Los JSP nos permiten separar la parte dinámica de nuestras
páginas Web del HTML estático. Simplemente escribimos el
HTML regular de la forma normal y encerramos el código de las
partes dinámicas en unas etiquetas especiales, la mayoría
de las cuales empiezan con "<%" y terminan con "%>".
Aunque el código parezca más bien HTML, el servidor lo
traduce a
un servlet en la primera petición.
Una página JSP contiene:
- Código procesado por el contenedor
- Código ignorado por el contenedor
- Cualquier directorio
¿Si Servlet maneja contenido dinámico porque usar JSP?
- Nuevamente, separa contenido dinámico/estático
- Código más limpio
- Separación de presentación e implementación
- División de trabajos
- Compilación dinámica
- Manejo de modificación de código
Ejecución de las páginas
JSP
Todo se inicia con la URL en un navegador Web. El servidor reconoce la
extensión JSP y de inmediato la consulta es traspasada al
contenedor JSP. El servidor Web debe tener acceso a un contenedor de
páginas JSP pero no necesariamente estar integrada en el
servidor (Jakarta Tomcat).
Una vez identificada la página JSP se procede a traducirla a un
servlet equivalente. Ya generado el servlet equivalente el contenedor
JSP lo invoca para que se ejcute y devuelva al cliente la respuesta
correspondiente. El proceso de traducción tiene lugar la primera
vez que se invoca a la página JSP o cuando esta sufre
algún cambio.
Una vez que se ha ejecutado una página JSP su servlet permanece
cargado en memoria (mayor rendimiento). Todo el proceso de
traducción y compilación es completamente transparente al
usuario navegador Web. La traducción de una página JSP lo
lleva a cabo un servlet especial que se encuentra en el contenedor JSP,
y recibe el nombre de page compiler. Todo código HTML
estático se traduce en cadenas(Objetos String) de Java, que se
escribirán en el flujo de salida del servlet sin realizar
ninguna modificación. Una vez terminado el proceso de
compilación, el page compiler llama al compilador de java para
que compile el código fuente del servlet generado. Luego se
ejecuta el .class generado y devuelve la respuesta correspondiente al
usuario.
En la Figura 4 se muestra el esquema de ejecución de una pagina
JSP. En la Figura 5 se muestra la estructura del contenedor Tomcat.
Figura 4: Esquema de ejecución
de una página JSP
Figura 5: Estructura del contenedor
Tomcat
Detección de una página
JSP actualizada
Cuando el compilador de páginas detecta una petición de
una página JSP comprueba la fecha y hora de modificación
de la página y la compara con el servlet equivalente para
verificar si se ha producida una modificación en la
página. Si no se encuentra el servlet equivalente es porque la
página ha sido ejecutada por primera vez. Pero si el servlet si
existe pero la hora y fecha no coinciden entonces es porque la
página JSP ha sido modificada.
Elementos dinámicos de JSP
Directivas
Establecen valores globales. No muestran salida a cliente.
Permiten incluir código java en la página como declarar
objetos, instanciarlos, declarar métodos,etc.
Sintaxís:
<%@nombreDirectiva atributo1=”valor1”...atributon=”valorn”%>
Directivas
- include. Ej: <%@ include file="cabecera.html"%>
- taglib. Ej: <%@taglib uri="tlds/libreriaEtiquetas.tld"
prefix="libreria"%>
Declaraciones
Código java utilizados para declarar variables y
métodos propios dentro de la página <%! %>.
Ej: <%! private Integer edad=new Integer("0");
private String nombre;
private String domicilio;%>
Scriptlets
Código ejecutado cuando se efectua una
petición. <% %> (mismo que ASP). Pueden usar cualquier
código java válido
Ej: <%Date fecha=new Date();
out.println("La fecha actual y hora es: "+fecha);%>
otro:
<%Calendar fecha = Calendar.getInstance();
int hora=fecha.get(Calendar.HOUR_OF_DAY);
if (hora==0) hora=24;
if (hora<=14){%>
<h1>Buenos días</h1>
<%}else if(hora>14&&hora<21){%>
<h1>Buenas tardes</h1>
<%}else{%>
<%}%>
Expresiones
Notación especial para scriptlet que devuelve un
resultado a la respuesta al usuario. <%= %> (mismo ASP)
Ej: La fecha y hora actual es: <i><b><%=new
Date()%></b></i>
Comentarios
<%-- --%>
Acciones
Etiquetas especificas de JSP que afectan el comportamiento de la
página y la respuesta enviada al usuario
Son acciones estándar que todo contenedor JSP debe proveer
<jsp: accion>
Objetos implícitos o
integrados
Se suelen utilizar en scriptlets o expresiones, no necesitan ser
declarados o instanciados.
Similar a servlets.
Implementan interfaz como HttpServletRequest o HttpServletResponse.
Ejemplos JSP
Primer Ejemplo: |
Comparando con el Servlet que
produciría el mismo resultado |
<%@
page language="Java"%>
<html>
<head>
<title>Hola mundo con
JSP</title>
</head>
<body>
<%--Esto es un
comentario--%>
<div align="center">
<b><%out.println("Hola Mundo");%></b>
</div>
</body>
</html> |
import
java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class ServletHolaMundo extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse
response)
throws IOException, ServletException{
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<html>"+
"<head><title>Hola Mundo con un
servlet</title></head>"+
"<body><div align='center'><b>Hola Mundo
</b></div>"+
"</body></html>"
);
}
public void doPost(HttpServletRequest request,
HttpServletResponse
response)
throws IOException, ServletException{
doGet(request,response);
}
} |
Otro Ejemplo:
<%@ page language="Java“ import="java.util.*"%>
<html>
<head>
<title>Hola mundo con
JSP</title>
</head>
<%--Esto es un comentario--%>
<body>
<div align="center">
<b>
<%!String
nombre;%>
<%nombre=request.getParameter("nombre");
if
(nombre!=null)
out.println("Hola "+nombre);
else
out.println("Hola Mundo");%>
<br>La
fecha y hora actuales son:</b><i><%=new
Date()%></i>
</div>
</body>
</html>
Los ejemplos realizados en NetBeans se pueden descargar en el siguiente
enlace ->
Descargar
Paquete javax.servlet.jsp
HttpJspPage
Este es el interfaz que una clase generada por el procesador de
páginas JSP debe implementar si se trata de utilizar el
protocolo http. Este interfaz posee solamente el método
_jspService(), que será generado de forma automática por
el contenedor de servlets a la hora de generar el servlet
correspondiente a una página JSP.
JspPage
Este interfaz es el interfaz padre de HttpJspPage, y también
debe ser implementado por la clase generada a partir de una
página JSP. Este interfaz posee los métodos jspInit(),
para realizar procesos de inicialización, y jspDestroy() para
realizar labores de limpieza y liberación de recursos. Estos dos
métodos puede ser implementados por el desarrollador de
páginas JSP, sin embargo el método jspService() del
interfaz hijo nunca debe ser implementado por el desarrollador (o
diseñador) de páginas JSP, sólo puede encontrarse
en el servlet generado de forma automática.
JspEngineInfo
Se trata de una clase abstracta que ofrece información relativa
al contenedor de páginas JSP que se está utilizando.
Posee un único método llamado getSpecificationVersion(),
que devuelve el número de especificación del API
JavaServer Pages implementado por el contenedor de páginas JSP.
JspFactory
Clase abstracta que define una serie de métodos disponibles para
una página JSP en tiempo de ejecución, que permiten crear
instancias de varios interfaces y clases utilizadas para soportar la
especificación JSP.
JspWriter
Clase abstracta que emula parte de la funcionalidad ofrecida por las
clases java.io.BufferedWriter y java.io.PrintWriter. Se
utilizará para enviar contenido a la respuesta del cliente. Esta
clase hereda de la clase java.io.Writer.
PageContext
Una instancia de esta clase ofrece acceso a todos los contenidos
asociados con una página JSP, ofrece acceso a ciertos atributos
de la página, así como una capa de abstracción
sobre los detalles de implementación.
JspException
Una excepción genérica que será lanzada por el
contenedor de páginas JSP.
JspTagException
Excepción que será lanzada por un manejador de etiquetas
para indicar un error. El manejador o gestor de etiquetas es una clase
especial que se utiliza dentro del mecanismo de etiquetas
personalizadas de JSP, que se verá con más detalle en el
momento oportuno.
Referencias
Contacto
Para dudas o cualquier cosa enviar correo a: dgonza [@] elo.utfsm.cl
ó