Documentos de Académico
Documentos de Profesional
Documentos de Cultura
javaserver pages
AGENDA
JSP COMO PARTE DE JAVA EE
INTRODUCCIÓN A JSP
CICLO DE VIDA DE LAS PÁGINAS JSP
TÉCNICAS DE GENERACIÓN DE CONTEN. DIN. EN JSP
INVOCAR CÓDIGO JAVA USANDO ELEMENTOS DE SCRIPTING
JAVABEANS PARA JSP
MANEJO DE ERRORES
JSP como parte de Java EE
●
Arquitectura de Java EE
JSP como parte de Java EE
●
¿Qué significa Contenido Estático y Dinámico?
− Contenido estático
●
Generalmente página HTML estática.
●
Misma visualización para todos.
− Contenido dinámico
●
El contenido se genera dinámicamente en base a condiciones.
●
Las condiciones pueden ser
− Identificación de usuario.
− Hora del día.
− El usuario ingresó valores en base a formularios y selecciones.
JSP como parte de Java EE
●
JSP y Servlets como componentes Web
¿Qué es una página JSP?
●
Un documento basado en texto capaz de retornar tanto
contenido estático como dinámico a un browser cliente.
●
El contenido estático y dinámico puede estar
entremezclado.
●
Contenido estático
− HTML, XML, Texto.
¿Qué es una página JSP?
●
Contenido dinámico
− Código Java.
− Mostrar propiedades de JavaBeans.
− Invocar lógica del negocio definida en etiquetas
personalizadas.
JSP como parte de Java EE
●
Una página JSP simple
<html>
<body>
Hello World!
<br>
Current time is <%= new java.util.Date() %>
</body>
</html>
JSP como parte de Java EE
●
Beneficios de JSP
− La lógica de contenido y la de visualización están separadas.
− Simplifican el desarrollo de aplicaciones web con JSP,
JavaBeans y etiquetas personalizadas.
− Desarrollo automático
● Se recompila automáticamente cuando se hacen cambios a las
páginas JSP.
●
Facilitan la creación de páginas web.
●
Independientes de la plataforma.
JSP como parte de Java EE
●
¿Porqué JSP sobre Servlet?
− Servlets puede hacer muchas cosas, pero es engorroso:
●
Usar sentencias println() para generar páginas HTML.
●
Mantener dichas páginas HTML.
− No hay necesidad de compilar. Empaquetar, configurar
CLASSPATH.
JSP como parte de Java EE
●
¿Se tiene que hacer uso de JSP sobre Servlet o
viceversa?
− Se puede usar ambas aprovechando las fortalezas de cada
tecnología.
●
La fortaleza de los Servlets es “controlar y despachar”.
●
La fortaleza de los JSP es “visualizar”.
JSP como parte de Java EE
− En un ambiente de producción típico, tanto los Servlets como
los JSP se usan en un patrón muy conocido llamado MVC
(Model-View-Controller).
●
Los Servlets manejan la parte de controlador.
●
Los JSP manejan la parte de vista.
Arquitectura de JSP
Arquitectura de JSP
●
Arquitectura
Ciclo de Vida de una Página JSP
●
¿Cómo trabajan los JSP?
Ciclo de Vida de una Página JSP
●
Fases del ciclo de vida de un JSP
− Fase de Traducción
− Fase de Compilación
− Fase de Ejecución
Ciclo de Vida de una Página JSP
●
Fase de Traducción/Compilación
− Los archivos JSP se traducen a código de Servlets, el cual
luego se compila.
− Efectuado automáticamente por el contenedor.
− La primera vez que se accede a la página JSP después que
se despliega (o modifica y re-despliega).
Ciclo de Vida de una Página JSP
− Para una página JSP “pageName” el código reside en
●
<JWSDP_HOME>/work/StandardEngine/localhost/context_root/
pageName$jsp.java
●
<JWSDP_HOME>/work/StandardEngine/localhost/date/index
$jsp.java
Ciclo de Vida de una Página JSP
●
Fase de Traducción/Compilación
− Los datos de la Plantilla estática se transforman en código
que emitirá datos en el destino.
− Los elementos del JSP se tratan de manera diferente
●
Las directivas se usan para controlar como el Web container
traduce y ejecuta la página JSP.
● Los elementos de scripting se insertan en la clase Servlet de la
página JSP.
●
Los elementos de la forma <jsp:xxx…> se convierten en llamadas a
métodos para los componentes JavaBeans.
Ciclo de Vida de una Página JSP
●
Ciclo de vida de un JSP durante la Fase de Ejecución
Ciclo de Vida de una Página JSP
●
Inicialización de una página JSP
− Declare métodos para realizar las siguientes tareas usando el
mecanismo de declaración de JSP.
●
Leer datos de configuración persistente.
●
Inicializar recursos.
●
Realizar cualquier otra actividad a ejecutar una vez
sobreescribiendo el método jspInit() de la interfaz JspPage.
Ciclo de Vida de una Página JSP
●
Finalización de una página JSP
− Declare métodos para realizar las siguientes tareas usando el
mecanismo de declaración de JSP.
●
Leer datos de configuración persistente.
●
Liberar recursos.
●
Realizar cualquier otra actividad de limpieza a ejecutar una vez
sobreescribiendo el método jspDestroy() de la interfaz JspPage.
Ciclo de Vida de una Página JSP
●
Ejemplo: initdestroy.jsp
<%@ page import="database.*" %>
<%@ page errorPage="errorpage.jsp" %>
<%-- Declare initialization and finalization methods --%>
<%-- using JSP declaration --%>
<%!
private BookDBAO bookDBAO;
public void jspInit() {
// retrieve database access object,
//which was set once per web application
bookDBAO =
(BookDBAO)getServletContext().getAttribute("bookDB");
if (bookDBAO == null)
System.out.println("Couldn't get database.");
}
public void jspDestroy() {
bookDBAO = null;
}
} %>
Técnicas para generación de contenido
dinámico en JSP
●
Se pueden seleccionar varias técnicas dependiendo de
los siguientes factores
− Tamaño y complejidad del proyecto.
− Requisitos, necesidad de reusabilidad del código,
mantenimiento, grado de solidez.
●
Técnicas disponibles para incrementar gradualmente la
complejidad.
Técnicas para generación de contenido
dinámico en JSP
●
Llamar al código de Java directamente dentro del JSP.
●
Llamar al código de Java indirectamente dentro del JSP.
●
Usar JavaBeans dentro del JSP.
●
Desarrollar y usar sus etiquetas personalizadas.
Técnicas para generación de contenido
dinámico en JSP
●
Hacer uso de etiquetas personalizadas JSTL (JSP
Standard Tag Library).
●
Seguir el patrón de diseño MVC.
●
Hacer uso de frameworks Model2.
Técnicas para generación de contenido
dinámico en JSP
●
Llamar al código de Java directamente dentro del JSP.
− Colocar todo el código de Java dentro de la página JSP.
− Adecuada sólo para una aplicación web muy simple.
●
Difícil de mantener.
●
Difícil para reutilizar el código.
●
Difícil de entender para los autores de páginas web.
Técnicas para generación de contenido
dinámico en JSP
− No recomendada para aplicaciones Web relativamente
sofisticadas.
●
Separación débil entre el contenido y la presentación.
Técnicas para generación de contenido
dinámico en JSP
●
Llamar al código de Java indirectamente.
− Desarrollar clases utilitarias separadas.
− Insertar en el JSP sólo el código necesario para invocar a las
clases utilitarias.
− Mejor separación entre la generación del contenido y la
lógica de presentación del método anterior.
− Mejor posibilidad de reutilización y mantenimiento que el
método anterior.
− Aun tiene una separación débil entre el contenido y la
presentación.
Técnicas para generación de contenido
dinámico en JSP
●
Usar Java Beans
− Desarrollar clases utilitarias en forma de JavaBeans.
− Aprovechar la facilidad incorporada de los JSP para crear
instancias de JavaBeans, establecer y obtener propiedades
de los JavaBeans.
● Use los elementos de sintaxis de JSP.
− Más fácil de utilizar por los autores de páginas web.
− Mejor facilidad de reutilización y mantenimiento que el
método anterior.
Técnicas para generación de contenido
dinámico en JSP
●
Desarrollar y usar Etiquetas personalizadas
− Desarrolle componentes sofisticados llamados etiquetas
personalizadas.
●
Las etiquetas personalizadas están diseñadas específicamente
para JSP.
− Más potentes que los componentes JavaBeans.
● Son más que métodos get y set.
− Capacidad de reutilización, mantenimiento, robustez.
Técnicas para generación de contenido
dinámico en JSP
●
Usar Etiquetas personalizadas de terceros o JSTL
− Hay muchas etiquetas personalizadas de código abierto y
comerciales.
●
Apache Struts.
− JSTL (JSP Standard Tag Library) estandariza el conjunto de
etiquetas personalizadas que debería estar disponibles como
mínimo sobre la plataforma Java EE.
Técnicas para generación de contenido
dinámico en JSP
●
Usar el patrón de diseño MVC
− Seguir el patrón de diseño MVC.
− O utilizar frameworks Model2 de código abierto o
comerciales.
●
Apache Struts.
●
Java Server Faces.
● Oracle ADF.
●
Otros frameworks
Invocar Código de Java con Elementos de
Script de JSP
●
Permite insertar código de Java en el Servlet que se
generará a partir de la página JSP.
●
Minimizar el uso de elementos de scripting en la página
JSP de ser posible.
●
Hay tres formas
− Expresiones: <%= Expresiones %>
− Scriplets: <% Código %>
− Declaraciones: <%! Declaraciones %>
Invocar Código de Java con Elementos de
Scripting de JSP
●
Expresiones
− Durante la fase de ejecución
●
La expresión se evalúa y se convierte en una cadena
●
La Cadena se inserta luego en el stream de salida del Servlet.
●
Se transforma en algo como out.println(expression)
● Puede usar variables predefinidas (objetos implícitos) dentro de la
expresión.
Invocar Código de Java con Elementos de
Scripting de JSP
− Formato:
●
<%= Expression %> ó
●
<jsp:expression>Expression</jsp:expression>
●
El punto y coma no está permitido en las expresiones
Invocar Código de Java con Elementos de
Scripting de JSP
●
Ejemplo: Expresiones
− Mostrar la fecha actual usando la clase Date
●
Fecha actual: <%= new java.util.Date() %>
− Mostrar un número aleatorio usando la clase Math
●
Número aleatorio: <%= Math.random() %>
Invocar Código de Java con Elementos de
Scripting de JSP
− Usar objetos implícitos
●
Nombre del host: <%= request.getRemoteHost() %>
●
Su parámetro: <%= request. getParameter(“yourParameter”) %>
●
Servidor: <%= application.getServerInfo() %>
● ID de Sesión: <%= session.getId() %>
Invocar Código de Java con Elementos de
Scripting de JSP
●
Scriplets
− Usado para insertar de manera arbitraria código de Java en el
método jspService() del Servlet.
− Puede hacer mas de lo que permiten las expresiones solas
●
Configurar encabezados de Response y códigos de estado.
●
Escribir a un log de Servlet.
● Actualizar la base de datos.
●
Ejecutar código que contiene ciclos repetitivos, condicionales.
Invocar Código de Java con Elementos de
Scripting de JSP
− Puede usar variables predefinidas (objetos implícitos).
− Formato:
●
<% Código de Java %> ó
●
<jsp:scriptlet> Código de Java</jsp:scriptlet>
Invocar Código de Java con Elementos de
Scripting de JSP
●
Ejemplo: Scriplets
− Mostrar una cadena de caracteres
●
<%
●
String queryData = request.getQueryString();
●
out.println(“Attached GET data: “ + queryData);
● %>
− Colocar el tipo de response
●
<% response.setContentType(“text/plain”); %>
Invocar Código de Java con Elementos de
Scripting de JSP
●
Ejemplo: Scriplet con repetición
<%
Iterator i = cart.getItems().iterator();
while (i.hasNext()) {
ShoppingCartItem item =(ShoppingCartItem)i.next();
BookDetails bd = (BookDetails)item.getItem();
%>
<tr>
<td align="right" bgcolor="#ffffff"><%=item.getQuantity()
%></td>
<td bgcolor="#ffffaa">
<strong>
<a href="<%=request.getContextPath()%>/bookdetails?
bookId=
<%=bd.getBookId()%>"><%=bd.getTitle()%></a></strong>
</td>
...
<%
// End of while
}
%>
Invocar Código de Java con Elementos de
Scripting de JSP
●
Se usa para definir variables o métodos que se insertan
en el cuerpo principal de la clase Servlet.
− Fuera del método _jspService()
− Los Objetos implícitos no son accesibles en las
declaraciones.
●
Usualmente se usan con las Expresiones o Scriplets.
Invocar Código de Java con Elementos de
Scripting de JSP
●
Para la inicialización y limpieza en las páginas JSP, use
las declaraciones para sobreescribir los métodos
jspInit() y jspDestroy().
●
Formato:
− <%! Código de declaración de variable o método %>
− <jsp:declaration> Código de declaración de variable o método
</jsp:declaration>
Invocar Código de Java con Elementos de
Scripting de JSP
●
Ejemplo: Fragmento de página JSP
<H1>Some heading</H1>
<%!
private String randomHeading() {
return(“<H2>” + Math.random() + “</H2>”);
}
%>
<%= randomHeading() %>
Invocar Código de Java con Elementos de
Scripting de JSP
● Ejemplo: Código de Servlet resultante
public class xxxx implements HttpJSPPage {
private String randomHeading() {
return(“<H2>” + Math.random() + “</H2>”);
}
public void _jspService(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
response.setContentType(“text/html”);
HttpSession session = request.getSession(true);
JSPWriter out = response.getWriter();
out.println(“<H1>Some heading</H1>”);
out.println(randomHeading());
...
}
...
}
Incluir y derivar a otro Recurso Web
● Incluir contenidos en una página JSP
− Dos mecanismos para incluir otro recurso Web en una
página JSP
●
Directiva include
●
jsp:include elemento
Incluir y derivar a otro Recurso Web
●
Directiva Include
− Se procesa cuando la página JSP se traduce en una clase
Servlet.
− El efecto de la directiva es insertar el texto contenido en otro
archivo (texto estático u otra página JSP) en la página JSP
que incluye.
− Se usa para incluir contenido de banner, información de
copyright, o cualquier contenido que se desea reutilizar en
otra página.
Incluir y derivar a otro Recurso Web
●
Directiva Include
− Sintaxis y ejemplo:
●
<%@ include file="filename" %>
●
<%@ include file="banner.jsp" %>
Incluir y derivar a otro Recurso Web
●
jsp:include Elemento
− Se procesa cuando se ejecuta una página JSP
− Le permite incluir un recurso estático o dinámico en una
página JSP.
− Estático: Su contenido se inserta en el JSP que lo llama.
− Dinámico: El requerimiento se envia al recurso incluido, la
página incluida se ejecuta y luego el resultado se incluye en
el response de la página JSP que lo llamó.
Incluir y derivar a otro Recurso Web
●
jsp:include Elemento
− Sintaxis y ejemplo
●
<jsp:include page="includedPage" />
●
<jsp:include page="date.jsp"/>
Incluir y derivar a otro Recurso Web
●
¿Cuál usar?
− Use la directiva si el archivo cambia esporádicamente.
●
Es más rápida que jsp:include.
− Use jsp:include cuando el contenido varía a menudo.
− Use jsp:include cuando el cuál página incluir no se decide
hasta que la página principal es requerida.
Incluir y derivar a otro Recurso Web
● Derivar a otro componente Web
− El mismo mecanismo que en los Servlets
− Sintaxis
●
<jsp:forward page="/main.jsp" />
− El request original es proporcionado al destino vía
jsp:parameter elemento
●
<jsp:forward page="..." >
●
<jsp:param name="param1" value="value1"/>
●
</jsp:forward>
Directivas
●
Las directivas son mensajes al contenedor JSP para
afectar la estructura general del Servlet.
●
No producen salida en el stream de salida actual.
●
Sintaxis
− <%@ directive {attr=value}* %>
Directivas
● Tres tipos de directivas
− page: Comunica atributos dependientes de la página y los
comunican al contenedor JSP.
● <%@ page import="java.util.* %>
− include: Usada para incluir texto y/o código al momento de la
traducción de la página JSP
●
<%@ include file="header.html" %>
− Taglib: Indica una biblioteca de etiquetas que el JSP debería
interpretar
● <%@ taglib uri="mytags" prefix=“mtg" %>
Directivas
●
Directivas de Página
− Dan información de alto nivel sobre el Servlet que resulta de
la página Web.
Directivas
● Directivas de Página
− Controla
● Qué clases se importan
− <%@ page import="java.util.* %>
● Qué tipo MIME se genera
− <%@ page contentType="MIME-Type" %>
● Cómo se maneja el multithreading
− <%@ page isThreadSafe="true" %> <%!--Default --%>
− <%@ page isThreadSafe="false" %>
● Qué página maneja los errores inesperados
− <%@ page errorPage="errorpage.jsp" %>
Objetos de Ámbito
●
Objetos implícitos
− Una página JSP tiene acceso a ciertos objetos implícitos que
siempre están disponibles, sin ser declarados.
●
Creados por el contenedor.
●
Corresponden a clases definidas en el Servlet.
Objetos de Ámbito
● Objetos implícitos
− Objetos implícitos
● request (HttpServletRequest)
● response (HttpServletRepsonse)
● session (HttpSession)
● application(ServletContext)
● out (de tipo JspWriter)
● config (ServletConfig)
● pageContext
Objetos de Ámbito
● Diferente ámbito Objetos accesibles desde páginas
que pertenecen a la misma
aplicación.
Más visible Application
Objetos accesibles desde páginas
en la misma sesión donde fueron
Session creadas.