Samuel Marrero Lorenzo -
smarlor@iespana.es 1
J2EE – Java Server Pages
JSP
2
Introducción Servlets - JSP
En los servltes vistos anteriormente:
el texto generado para el aspecto (vista) de la interf...
3
Introducción Servlets – JSP
(2)
Situación a la que queremos llegar
Separación de roles
Personas que realizan el aspecto ...
4
JSP
¿ Qué es JSP ?
A modo de ejemplo, una página JSP que genera HTML
Tiene el aspecto de una página HTML
Puede incluir s...
5
JSP (2)
¿ Qué ocurre cuando se accede a una página
JSP ?
Si es la primera vez, el servidor de aplicaciones
genera un ser...
6
Primer ejemplo de JSP
<%@page language="java"%> directiva
<HTML> HTML
<HEAD>
<TITLE>Primer ejemplo JSP</TITLE>
</HEAD>
<...
7
Servlet generado por el servidor
Tomcat a partir del código JSP
package org.apache.jsp;
import javax.servlet.*;
import j...
8
Servlet generado por el servidor
Tomcat a partir del código JSP
_jspx_page_context = pageContext;
application = pageCont...
9
Expresiones
Expresión JSP: <%= expression %>
La expresión es evaluada y situada en la salida.
<%=request.getParameter(“n...
10
Scriptlets
Scriptlet JSP: <% código Java %>
El código se inserta en el método
service del servlet generado
El equivalen...
11
JSP1-HolaMundo
Scriptlets
<%if(request.getParameter("nombre")==null)
{
out.println(“<H1>Hola Mundo</H1>”);
}else {
out....
12
Declaraciones
Declaración JSP: <%! Código Java %>
El código se inserta en el cuerpo de la
clase del servlet generado, f...
13
Ejemplo de declaración
El siguiente ejemplo implementa un
contador de visitas a una página
<%! private int accesos = 0;...
14
Directiva page
Directiva page JSP: <%@ page atributo=“valor" %>
Dirige al motor servlet sobre la configuración general....
15
La directiva page (2)
import="paquete.clase1,...,paquete.claseN".
Por ejemplo: <%@ page import="java.util.*" %> El atri...
16
La directiva page (3)
session="true|false". Un valor de true (por defecto) indica que la
variable predefinida session (...
17
La directiva page (4)
extends="paquete.superclase". Esto indica la superclase del servlet
que se va a generar. Debemos ...
18
Ejemplo JSP2 - TablaHTML
En el siguiente ejemplo se muestra la
construcción en JSP de una tabla de los
valores trigonom...
19
Directiva include
Directiva include JSP:
<%@ include file="url" %>
Un fichero del sistema local se incluirá cuando
se t...
20
Comentarios
Comentario JSP: <%-- comment --%>
Comentario ignorado cuando se traduce
la página JSP en un servlet.
Si que...
21
Objetos implícitos en páginas
JSP
Objeto application Se corresponde con el ServletContext
obtenido mediante getServletC...
22
Convenciones en JSP
Surge la siguiente cuestión:
"¿Cómo estructuramos el código JSP
para que sea fácil de leer, de escr...
23
Ficheros y su localización
Tipo de Fichero Extensión Localización Recomendada
JSP .jsp <contexto>/<subsystem path>/
Fra...
24
Acceso a base de datos desde
JSP
JSP utiliza JDBC para acceder a base de
datos.
No necesita etiquetas especiales para
a...
25
JSP con el código de acceso a
BD incrustado
Uso de scritplets que utilizan JDBC para
acceder a la BD.
No es necesaria l...
26
Ejemplo JSP4-JDBC
Esta aplicación crea una conexión con la base
de datos ‘agenda’ y lista todos los contactos
de la tab...
27
Optimización del diseño de las
aplicaciones
Objetivo: separar en capas la lógica de las
aplicaciones
Vista: en páginas ...
28
Modelo 1: Acceso a través de
Beans
Una forma habitual de utilizar BD con JSP es utilizar
componentes JavaBean de apoyo....
29
Introducción a JavaBeans
¿Qué es un JavaBean?
Un JavaBean es una clase Java
Representa un objeto del modelo, por
ejempl...
30
Proceso para recuperar datos
a través de un JavaBean
El Bean se encarga de conectar con la BD y
ejecutar la sentencia d...
31
Acción jsp:useBean
Acción jsp:useBean
<jsp:useBean at1=val1 at2=val2 …/>
<jsp:useBean atri=val*> ... </jsp:useBean>
Enc...
32
Acción jsp:setProperty
Acción jsp:setProperty:
<jsp:setProperty atrib=val …/>
Modifica las propiedades del bean, bien
d...
33
Acción jsp:getProperty
Acción jsp:getProperty:
<jsp:getProperty
name=“nombrePropiedad" value="valor"/>
Recupera y saca ...
34
Ejemplo de utilización de
<jsp:useBean>
Ejemplo de uso:
<jsp:useBean id="pool" scope="application"
class="Clientes.Pool...
35
Estructura del JavaBean para
acceso a BD
Constructor del JavaBean:
conexión con la base de datos.
realización de la con...
36
Ejemplo Modelo 1.
JSP5-JDBC-CliPool
Este ejemplo de aplicación web utiliza un
JavaBean y clases Java que permiten
recup...
37
Ejemplo Modelo 1.
JSP5-JDBC-CliPool (2)
Clase BDClientes, métodos estáticos:
obtenerClientes(): hace la consulta sobre ...
38
Ejemplo Modelo 1.
JSP5-JDBC-CliPool (3)
Clase Cliente, JavaBean:
Contiene las propiedades de un cliente y los
métodos g...
39
Ejemplo JSP5-JDBC-CliPool
Modelo
Modelo: código de las clases Java:
Clase BDClientes: c:javaJSP5-JDBC-
CliPoolCliPoolWE...
40
Ejemplo JSP5-JDBC-CliPool
Vistas (2)
Vista: código de las páginas JSP
index.jsp: c:javaJSP5-JDBC-CliPoolCliPoolindex.js...
41
Ejemplo JSP5-JDBC-CliPool
Ficheros de configuración
web.xml: c:javaJSP5-JDBC-CliPoolCliPoolWEB-INFweb.xml
Fragmento de ...
42
Ejemplo JSP5-JDBC-CliPool
Ficheros de configuración (2)
Parámetros de conexión en server.xml
<parameter>
<name>username...
43
Limitaciones del Modelo 1
Tiene cierta separación entre contenido y
presentación, por lo que es buena para pequeñas
apl...
44
Arquitectura del Modelo 2
45
Componentes en el Modelo 2
Se implementa al igual que en el Modelo 1,
la vista con páginas JSP
el modelo con clases Jav...
46
Misión del servlet Controlador
Aquí el servlet actúa como el
Controlador y está al cargo
del procesamiento de las petic...
47
Pasos en el Modelo 2
Los siguientes pasos son ejecutados cuando el usuario envía
una solicitud:
1. El servlet Controlad...
48
Ejemplo de Modelo 2
Esta pequeña aplicación ejemplifica el
uso del Modelo 2
Descripción:
Tienda en Internet de venta de...
49
Ejemplo de Modelo 2
Componentes
Los componentes son:
Modelo: un JavaBean que representa el
objeto del negocio CD.java
C...
50
Ejemplo JSP8-Modelo2
Modelo: CD.java
Es una clase java que representa un CD de
música con las propiedades siguientes:
A...
51
Ejemplo JSP8-Modelo2
Controlador: ServletCompra.java
Comprueba la acción a realizar
Realiza la acción insertando los va...
52
Ejemplo JSP8-Modelo2
Funcionamiento del controlador
ServletCompra.java:
Acción ‘Agregar’: Añade el cd seleccionado a la...
53
Ejemplo JSP8-Modelo2
Vistas: son las páginas JSP
Tienda.jsp: página de entrada, muestra el
catálogo de CD’s disponibles...
54
Ventajas del Modelo 2
Como no hay lógica de presentación en el
JSP, no hay necesidad de demasiados
scriptlets.
Se puede...
55
Acción jsp:include
Acción jsp:include:
<jsp:include page="relative URL" flush="true"/>
Incluye un fichero en el momento...
56
Acción jsp:forward
Acción jsp:forward
<jsp:forward page="URL relativa"/>
Reenvía la petición a otra página.
57
Acción jsp:plugin
Acción jsp:plugin:
<jsp:plugin attribute="value"*> ...
</jsp:plugin>
Genera etiquetas OBJECT o EMBED,...
58
Tags personalizadas
En las páginas JSP se usa código HTML, XML, Java e
incluso se usan etiquetas que encapsulan parte d...
59
Tipos de etiquetas
Hay dos tipos principales de etiquetas,
etiquetas que no tienen cuerpo. Ejemplo:
<img src=“canteras....
60
Etiquetas personalizadas JSP
JSP sigue una sintáxis XML por lo tanto
Etiquetas sin cuerpo: <jsp:etiqueta/>
Etiquetas co...
61
Clase TagSupport
Las clase TagSupport suministra una serie de
métodos que sobreescribiremos para crear
una etiqueta. Es...
62
Primer ejemplo JSP6-
HolaMundoTag
Diseñaremos una etiqueta sin cuerpo que
escribirá el mensaje “Hola Mundo” en el
clien...
63
JSP6-HolaMundoTag
Ficheros de configuración:
Definir el descriptor de librería de etiquetas
(Tag Library Descriptor) o ...
64
Tag Library Descriptor (TLD)
JSP6.tld
Este fichero de configuración, situado en
<contexto>/WEB-INF, describe el formato...
65
JSP6-HolaMundo
web.xml
El descriptor de despliegue de la aplicación
JSP6-HolaMundo: web.xml
Asigna un uri a la localiza...
66
JSP6-HolaMundo
HolaMundo.jsp
HolaMundo.jsp: c:javaJSP6-
HolaMundoTagHolaMundo.jsp
<!-- HolaMundo.jsp -->
<%@ taglib uri...
67
Página HolaMundo.jsp
Directiva taglib
Una directiva taglib declara las librerías de etiquetas
usadas por el JSP. Un dir...
68
Constantes de las etiquetas
personalizadas
SKIP_BODY : indica en el método que la
etiqueta no tiene cuerpo o que no qui...
69
Etiquetas personalizadas con
parámetros
Vamos a ver una etiqueta con parámetros del
tipo
<JSP6:suma num1=2 num2=3/>, qu...
70
SumaTag.java
Esta etiqueta no tiene cuerpo por lo que será
igual que la anterior excepto que se añaden
los métodos set
...
71
Modificación del Tag Library
Descriptor (TLD)
JSP6.tld: c:javaJSP6-HolaMundoTagWEB-
INFJSP6.tld
Uso de etiquetas para d...
72
Etiquetas personalizadas con
cuerpo
Vamos a crear una etiqueta con cuerpo
y parámetro que realice un bucle.
<JSP7:bucle...
73
Ejemplo JSP7-BucleTag
BucleTag.java :c:javaJSP7-BucleTagWEB-
INFsrcejemplosBucleTag.java
JSP7.tld: c:javaJSP7-BucleTagW...
Upcoming SlideShare
Loading in...5
×

4. Curso Java JSP (Java Server Pages) - Curso 2005-2006

659
-1

Published on

Resumen de Tutorial o Curso de Java JSP impartido durante el curso 2005-2006, sobre los principios de este lenguaje orientado a objetos.

Published in: Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
659
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
40
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

4. Curso Java JSP (Java Server Pages) - Curso 2005-2006

  1. 1. Samuel Marrero Lorenzo - smarlor@iespana.es 1 J2EE – Java Server Pages JSP
  2. 2. 2 Introducción Servlets - JSP En los servltes vistos anteriormente: el texto generado para el aspecto (vista) de la interfaz gráfica (HTML,WML, etc.) está mezclado con código Java No es posible usar herramientas de generación de HTML, etc. directamente La generación del texto necesita ser escrita por una persona con conocimientos de Java => económicamente muy costoso Cambios al aspecto de la interfaz gráfica requieren recompilación, creación de un nuevo fichero .war y rearranque del servidor En una aplicación web, especialmente en Internet, los cambios a la interfaz gráfica son muy frecuentes
  3. 3. 3 Introducción Servlets – JSP (2) Situación a la que queremos llegar Separación de roles Personas que realizan el aspecto gráfico => diseñadores gráficos o similares Conocimientos de diseño gráfico y herramientas para generación de HTML y WML Personas que implementan el controlador y el modelo =>programadores Conocimientos de diseño e implementación Se deberían poder usar directamente las herramientas de diseño de páginas web Las actualizaciones al aspecto gráfico no deben provocar un re-arranque del servidor
  4. 4. 4 JSP ¿ Qué es JSP ? A modo de ejemplo, una página JSP que genera HTML Tiene el aspecto de una página HTML Puede incluir scriptlets (scripts) para generar HTML dinámicamente Típicamente los scriptlets se escriben en Java En realidad, una página JSP es un tipo especial de servlet (javax.servlet.jsp y javax.servlet.jsp.tagext) orientado a generar el texto de la interfaz gráfica Invocables por GET y POST <<interface>>javax.servlet.Servlet <<interface>> javax.servlet.jsp.JspPage <<interface>>javax.servlet.jsp.HttpJspPage + _jspService(request : HttpServletRequest, response : HttpServletResponse) : void
  5. 5. 5 JSP (2) ¿ Qué ocurre cuando se accede a una página JSP ? Si es la primera vez, el servidor de aplicaciones genera un servlet (que implementa javax.servlet.jsp.HttpJspPage) a partir de la página JSP, lo compila y lo carga en memoria Si no es la primera vez, le pasa la petición al servlet (ya compilado y creado en memoria) Si la página se ha modificado desde la última compilación, el servidor se da cuenta, genera el nuevo servlet, lo compila y lo carga de nuevo
  6. 6. 6 Primer ejemplo de JSP <%@page language="java"%> directiva <HTML> HTML <HEAD> <TITLE>Primer ejemplo JSP</TITLE> </HEAD> <BODY> <%if(request.getParameter("nombre")==null){%> scriptlet <H1>Hola Mundo</H1> <%}else {%> <H1>Hola <%=request.getParameter("nombre")%></H1> <%}%> Expresión </BODY> </HTML> Código: c:javaJSP1-HolaMundoHolaMundoHolaMundo.jsp
  7. 7. 7 Servlet generado por el servidor Tomcat a partir del código JSP package org.apache.jsp; import javax.servlet.*; import javax.servlet.http.*; import javax.servlet.jsp.*; public final class HolaMundo_jsp extends org.apache.jasper.runtime.HttpJspBase implements org.apache.jasper.runtime.JspSourceDependent { private static java.util.Vector _jspx_dependants; public java.util.List getDependants() { return _jspx_dependants; } public void _jspService(HttpServletRequest request, HttpServletResponse response) throws java.io.IOException, ServletException { JspFactory _jspxFactory = null; PageContext pageContext = null; HttpSession session = null; ServletContext application = null; ServletConfig config = null; JspWriter out = null; Object page = this; JspWriter _jspx_out = null; PageContext _jspx_page_context = null; try { _jspxFactory = JspFactory.getDefaultFactory(); response.setContentType("text/html"); pageContext = _jspxFactory.getPageContext(this, request, response,true, 8192, true);
  8. 8. 8 Servlet generado por el servidor Tomcat a partir del código JSP _jspx_page_context = pageContext; application = pageContext.getServletContext(); config = pageContext.getServletConfig(); session = pageContext.getSession(); out = pageContext.getOut(); _jspx_out = out; out.write("rn"); out.write("rn"); out.write("<HTML>rn"); out.write("<HEAD>rn"); out.write("<TITLE>Primer ejemplo JSP</TITLE>rn"); out.write("</HEAD>rn"); out.write("<BODY>rn"); out.write("rn"); if(request.getParameter("nombre")==null){ out.write("rn"); out.write("rn"); out.write("t<H1>Hola Mundo</H1>rn"); out.write("rn"); }else { out.write("rn"); out.write("rn"); out.write("t<H1>Hola "); out.print(request.getParameter("nombre")); out.write("</H1>rn"); out.write("rn"); } out.write("rn"); out.write(" trn"); out.write("</BODY>rn"); out.write("</HTML>"); } catch (Throwable t) { if (!(t instanceof SkipPageException)){ out = _jspx_out; if (out != null && out.getBufferSize() != 0) out.clearBuffer(); if (_jspx_page_context != null) _jspx_page_context.handlePageException(t); } } finally { if (_jspxFactory != null) _jspxFactory.releasePageContext(_jspx_page_context); } } }
  9. 9. 9 Expresiones Expresión JSP: <%= expression %> La expresión es evaluada y situada en la salida. <%=request.getParameter(“nombre”)%> Escribe en la salida el parámetro ‘nombre’ del objeto petición ‘request’ El equivalente XML es <jsp:expression> expression </jsp:expression>. Las variables predefinidas son request, response, out, session, application, config, y pageContext.
  10. 10. 10 Scriptlets Scriptlet JSP: <% código Java %> El código se inserta en el método service del servlet generado El equivalente XML es: <jsp:scriptlet>código</jsp:scriptlet>
  11. 11. 11 JSP1-HolaMundo Scriptlets <%if(request.getParameter("nombre")==null) { out.println(“<H1>Hola Mundo</H1>”); }else { out.println(“<H1>Hola”+ request.getParameter("nombre")+”</H1>”); } %> Fíjate que aquí se utiliza en objeto out para escribir la salida, equivalente al PrintWriter usado en servlets El código está disponible en el directorio JSP1-HolaMundo c:javaJSP1-HolaMundoHolaMundoHolaMundo.jsp
  12. 12. 12 Declaraciones Declaración JSP: <%! Código Java %> El código se inserta en el cuerpo de la clase del servlet generado, fuera del método service, como un atributo de la clase servlet. El equivalente XML es: <jsp:declaration>código</jsp:declaration>
  13. 13. 13 Ejemplo de declaración El siguiente ejemplo implementa un contador de visitas a una página <%! private int accesos = 0; %> Visitas a la página desde el arranque del servidor <%= ++accesos %>
  14. 14. 14 Directiva page Directiva page JSP: <%@ page atributo=“valor" %> Dirige al motor servlet sobre la configuración general. El equivalente XML es: <jsp:directive.page language=“java">. Los atributos legales son (con los valores por defecto en negrita): import="package.class" contentType="MIME-Type" isThreadSafe="true|false" session="true|false" buffer="sizekb|none" autoflush="true|false" extends="package.class" info="message" errorPage="url" isErrorPage="true|false" language="java"
  15. 15. 15 La directiva page (2) import="paquete.clase1,...,paquete.claseN". Por ejemplo: <%@ page import="java.util.*" %> El atributo import es el único que puede aparecer múltiples veces. contentType="MIME-Type; charset=Character-Set" Esto especifica el tipo MIME de la salida. El valor por defecto es text/html. Por ejemplo, la directiva: <%@ page contentType="text/plain" %> tiene el mismo valor que el scriptlet <% response.setContentType("text/plain"); %> isThreadSafe="true|false". Un valor de true (por defecto) indica un procesamiento del servlet normal, donde múltiples peticiones pueden procesarse simultáneamente con un sólo ejemplar del servlet. Un valor de false indica que el servlet debería implementar SingleThreadModel, con peticiones enviadas serialmente.
  16. 16. 16 La directiva page (3) session="true|false". Un valor de true (por defecto) indica que la variable predefinida session (del tipo HttpSession) es la sesión si existe, si no existe, se crea una nueva sesión. Un valor de false indica que no se usarán sesiones, y los intentos de acceder a la variable session resultarán en errores en el momento en que la página JSP sea traducida a un servlet. buffer="sizekb|none". Esto especifica el tamaño del buffer para el JspWriter out. El valor por defecto es específico del servidor, debería ser de al menos 8kb. autoflush="true|false". Un valor de true (por defecto) indica que el buffer debería descargase cuando esté lleno. Un valor de false, raramente utilizado, indica que se debe lanzar una excepción cuando el buffer se sobrecargue. Un valor de false es ilegal cuando usamos buffer="none".
  17. 17. 17 La directiva page (4) extends="paquete.superclase". Esto indica la superclase del servlet que se va a generar. Debemos usarla con extrema precaución, ya que el servidor podría utilizar una superclase personalizada. info="message". Define un string que puede usarse para ser recuperado mediante el método getServletInfo. errorPage="url". Especifica una página JSP que se debería procesar si se lanzará cualquier Throwable pero no fuera capturado en la página actual. isErrorPage="true|false". Indica si la página actual actúa o no como página de error de otra página JSP. El valor por defecto es false. language="java". En algunos momentos, esto está pensado para especificar el lenguaje a utilizar. Por ahora, no debemos precuparnos por él ya que java es tanto el valor por defecto como la única opción legal.
  18. 18. 18 Ejemplo JSP2 - TablaHTML En el siguiente ejemplo se muestra la construcción en JSP de una tabla de los valores trigonométricos Código TablaHTML.jsp: c:javaJSP2- TablaHTMLTablaHTMLTablaHTML.jsp Claves: <%@ page import="java.io.*,java.text.*,java.util.*" %> <%! private static final DecimalFormat FMT1 = new DecimalFormat("#0");%> <% for (double gdo = 0; gdo <= 45; gdo += 1.0) { %> …
  19. 19. 19 Directiva include Directiva include JSP: <%@ include file="url" %> Un fichero del sistema local se incluirá cuando se traduce de JSP a servlet. El equivalente XML es: <jsp:directive.include file="url">. La URL debe ser relativa. Usamos la acción jsp:include para incluir un fichero en el momento de la petición en vez del momento de la tradución.
  20. 20. 20 Comentarios Comentario JSP: <%-- comment --%> Comentario ignorado cuando se traduce la página JSP en un servlet. Si queremos un comentario en el HTML resultante, usamos la síntaxis de comentario normal del HTML <-- comment -->.
  21. 21. 21 Objetos implícitos en páginas JSP Objeto application Se corresponde con el ServletContext obtenido mediante getServletConfig().getContext(). Objeto request HttpServletRequest, objeto proveniente de la petición del cliente o de una redirección Objeto response HttpServletResponse, objeto que representa la respuesta Objeto session HttpSession asociado con el request (si existe una sesión) Objeto out el PrintWriter (una versión con buffer del tipo JspWriter) usada para envíar la salida al cliente (navegador).
  22. 22. 22 Convenciones en JSP Surge la siguiente cuestión: "¿Cómo estructuramos el código JSP para que sea fácil de leer, de escribir y de mantener? “
  23. 23. 23 Ficheros y su localización Tipo de Fichero Extensión Localización Recomendada JSP .jsp <contexto>/<subsystem path>/ Fragmento JSP .jsp <contexto>/<subsystem path>/ Fragmento JSP .jspf <contexto>/WEB-INF/jspf/<subsystem path>/ CCS .css <contexto>/css/ javascript .js <contexto>/js/ página HTML .html <contexto>/<ruta>/ fuente web .gif, .jpg, etc. <contexto>/images/ TLD .tld <contexto>/WEB-INF/tld/
  24. 24. 24 Acceso a base de datos desde JSP JSP utiliza JDBC para acceder a base de datos. No necesita etiquetas especiales para acceder a base de datos.
  25. 25. 25 JSP con el código de acceso a BD incrustado Uso de scritplets que utilizan JDBC para acceder a la BD. No es necesaria la captura de excepciones, JSP hace el trabajo automáticamente. Cuando recuperamos resultados de una consulta aparecerá código HTML dentro del bucle para ir mostrando cada fila.
  26. 26. 26 Ejemplo JSP4-JDBC Esta aplicación crea una conexión con la base de datos ‘agenda’ y lista todos los contactos de la tabla ‘Contactos’ MostrarTodos.jsp: Código: c:javaJSP4-JDBCMostrarTodos.jsp El driver JDBC de la base de datos tiene que estar incluído en el directorio <contexto>/WEB-INF/lib Los scriptlets de Java en este ejemplo están mezclados con el código HTML haciendo difícil el manejo y mantenimiento de esta aplicación
  27. 27. 27 Optimización del diseño de las aplicaciones Objetivo: separar en capas la lógica de las aplicaciones Vista: en páginas JSP Modelo: para el modelo y la lógica de negocio se van a utilizar JavaBeans y clases Java A este modelo se le conoce como Modelo 1, y es el primer paso para llegar al modelo MVC Más adelante veremos el Modelo 2 que además proporciona el control de la aplicación de forma separada. En ocasiones también denominado MVC
  28. 28. 28 Modelo 1: Acceso a través de Beans Una forma habitual de utilizar BD con JSP es utilizar componentes JavaBean de apoyo. De esta forma mantenemos independiente la presentación y el acceso a datos, esto es fundamental para facilitar el mantenimiento de la aplicación.
  29. 29. 29 Introducción a JavaBeans ¿Qué es un JavaBean? Un JavaBean es una clase Java Representa un objeto del modelo, por ejemplo un cliente Proporciona métodos para leer y modificar sus variables o atributos <tipo> getAtributo () {…} void setAtributo (<tipo> valor) {...}
  30. 30. 30 Proceso para recuperar datos a través de un JavaBean El Bean se encarga de conectar con la BD y ejecutar la sentencia deseada. El bean proporciona métodos para posicionarse en cada fila de la consulta. A través de las propiedades del JavaBean podemos acceder a los valores de cada uno de los campos. Las propiedades de un JavaBean se representan muy fácilmente en una página JSP.
  31. 31. 31 Acción jsp:useBean Acción jsp:useBean <jsp:useBean at1=val1 at2=val2 …/> <jsp:useBean atri=val*> ... </jsp:useBean> Encuentra o construye un Java Bean. Los posibles atributos son: id="name" scope="page|request|session|application" class="package.class" type="package.class" beanName="package.class"
  32. 32. 32 Acción jsp:setProperty Acción jsp:setProperty: <jsp:setProperty atrib=val …/> Modifica las propiedades del bean, bien directamente o designando el valor que viene desde un parámetro de la petición. Los atributos legales son: name=“nombre del bean" property=“propiedad del bean|*" param=“nombre del parámetro" value=“valor"
  33. 33. 33 Acción jsp:getProperty Acción jsp:getProperty: <jsp:getProperty name=“nombrePropiedad" value="valor"/> Recupera y saca las propiedades del Bean.
  34. 34. 34 Ejemplo de utilización de <jsp:useBean> Ejemplo de uso: <jsp:useBean id="pool" scope="application" class="Clientes.Pool"/> En este ejemplo se obtiene o crea el objeto ‘pool’, con ámbito de aplicación y a partir del JavaBean Pool del paquete Clientes
  35. 35. 35 Estructura del JavaBean para acceso a BD Constructor del JavaBean: conexión con la base de datos. realización de la consulta. Guardar resultados en una estructura local al Bean. establecer los valores de las propiedades. cerrar la conexión. Método para recorrer los resultados. Recargando las propiedades cada vez que cambie. Propiedades se corresponden con los campos de la tabla.
  36. 36. 36 Ejemplo Modelo 1. JSP5-JDBC-CliPool Este ejemplo de aplicación web utiliza un JavaBean y clases Java que permiten recuperar resultados de una BD, usando un pool de conexiones. Vista: varias páginas JSP Modelo: clases Java BDClientes: realiza las consultas y acciones en la BD Cliente: JavaBean que representa el objeto Cliente del modelo Pool: Es el objeto que conecta con la base de datos y permite obtener la conexión cuando sea solicitada
  37. 37. 37 Ejemplo Modelo 1. JSP5-JDBC-CliPool (2) Clase BDClientes, métodos estáticos: obtenerClientes(): hace la consulta sobre la BD y guarda resultados en un vector interno, para visualizar en JSP. obtenerCliente(): crea un objeto cliente a partir de su identificador para pasarlo a la página JSP. insertarCliente(): inserta un nuevo cliente dado por el usuario en una página JSP. eliminarCliente(): elimina un cliente dado por el usuario en una página JSP.
  38. 38. 38 Ejemplo Modelo 1. JSP5-JDBC-CliPool (3) Clase Cliente, JavaBean: Contiene las propiedades de un cliente y los métodos getProp y setProp Clase Pool, JavaBean: Constructor: crea un objeto DataSource para la conexión con la BD ‘agenda’ getConnection: obtiene una conexión a partir de la asociación de conexiones freeConnection: cierra la conexión, devolviéndola a la asociación de conexiones
  39. 39. 39 Ejemplo JSP5-JDBC-CliPool Modelo Modelo: código de las clases Java: Clase BDClientes: c:javaJSP5-JDBC- CliPoolCliPoolWEB- INFsrcClientesBDClientes.java Clase Cliente: c:javaJSP5-JDBC- CliPoolCliPoolWEB-INFsrcClientesCliente.java Clase Pool: c:javaJSP5-JDBC- CliPoolCliPoolWEB-INFsrcClientesPool.java
  40. 40. 40 Ejemplo JSP5-JDBC-CliPool Vistas (2) Vista: código de las páginas JSP index.jsp: c:javaJSP5-JDBC-CliPoolCliPoolindex.jsp, presenta el formulario para agregar un contacto de cliente InsertarCliente.jsp: c:javaJSP5-JDBC- CliPoolCliPoolInsertarCliente.jsp, inserta un cliente EliminarCliente.jsp: c:javaJSP5-JDBC- CliPoolCliPoolEliminarCliente.jsp, elimina un cliente MostrarClientes.jsp: c:javaJSP5-JDBC- CliPoolCliPoolMostrarClientes.jsp, muestra los clientes VerCliente.jsp: c:javaJSP5-JDBC- CliPoolCliPoolVerCliente.jsp, visualiza un cliente
  41. 41. 41 Ejemplo JSP5-JDBC-CliPool Ficheros de configuración web.xml: c:javaJSP5-JDBC-CliPoolCliPoolWEB-INFweb.xml Fragmento de código a insertar en server.xml, entre las etiquetas <Host> <Context path="/JSP5-JDBC-CliPool" docBase="/JSP5-JDBC- CliPool/CliPool" debug="0" reloadable="true" crossContext="true"> <Resource name="jdbc/dsAgenda" auth="Container" type="javax.sql.DataSource"/> <ResourceParams name="jdbc/dsAgenda"> …Parametros… </Context>
  42. 42. 42 Ejemplo JSP5-JDBC-CliPool Ficheros de configuración (2) Parámetros de conexión en server.xml <parameter> <name>username</name> <value>curso_java</value> </parameter> <parameter> <name>password</name> <value>curso_java</value> </parameter> <parameter> <name>driverClassName</name> <value>oracle.jdbc.driver.OracleDriver</value> </parameter> <parameter> <name>url</name> <value>jdbc:oracle:thin:@10.1.1.36:1521:DESA</value> </parameter> </ResourceParams>
  43. 43. 43 Limitaciones del Modelo 1 Tiene cierta separación entre contenido y presentación, por lo que es buena para pequeñas aplicaciones Web. El hecho que la lógica de presentación normalmente conduzca a una considerable cantidad de código Java embebido en el JSP en el formato de scriptlets, hace que sea una pesadilla para los desarrolladores Java experimentados el mantenimiento de estos sistemas. Fíjate que en el Modelo 1, JSP es responsable de: Procesar la petición y la respuesta al cliente (lógica de presentación) Problema sobretodo para los diseñadores de páginas JSP que no programan código en Java
  44. 44. 44 Arquitectura del Modelo 2
  45. 45. 45 Componentes en el Modelo 2 Se implementa al igual que en el Modelo 1, la vista con páginas JSP el modelo con clases Java o JavaBeans En el Modelo 2 además se implementa un sistema de controladores (MVC) En éste modelo, un controlador maneja las solicitudes del usuario, en lugar de lidiar con otro JSP. El controlador o “controller” es implementado como un servlet.
  46. 46. 46 Misión del servlet Controlador Aquí el servlet actúa como el Controlador y está al cargo del procesamiento de las peticiones de la creación de cualquier JavaBean u objeto usado por el JSP así como, dependiendo de las acciones del usuario, a qué página JSP redirigir la petición
  47. 47. 47 Pasos en el Modelo 2 Los siguientes pasos son ejecutados cuando el usuario envía una solicitud: 1. El servlet Controlador atiende la solicitud. 2. El servlet Controlador instancia el JavaBeans apropiado, basado en los parámetros de la solicitud. 3. El JavaBeans se comunica con la base de datos para retirar los datos requeridos. 4. El Controlador ajusta el JavaBeans resultante, en uno de los siguientes contextos: request, session o aplicación. 5. El Controlador entonces despacha la solicitud a la siguiente vista basado en la URL solicitante. 6. La vista usa el JavaBeans del paso 3, para desplegar los datos.
  48. 48. 48 Ejemplo de Modelo 2 Esta pequeña aplicación ejemplifica el uso del Modelo 2 Descripción: Tienda en Internet de venta de cd’s El usuario dispone de un carrito de compra donde se almacenan, usando una sesión, los cd’s que este compra
  49. 49. 49 Ejemplo de Modelo 2 Componentes Los componentes son: Modelo: un JavaBean que representa el objeto del negocio CD.java Controlador: un servlet ServletCompra.java que realiza las redirecciones a las vistas y la creación de los Beans necesarios Vista: varios ficheros .jsp que permiten al usuario interactuar con la aplicación
  50. 50. 50 Ejemplo JSP8-Modelo2 Modelo: CD.java Es una clase java que representa un CD de música con las propiedades siguientes: Album, artista, país, precio, cantidad Métodos: como en todo JavaBean se proporcionan los métodos getXXX y setXXX Código: c:javaJSP8-Modelo2WEB- INFsrcshoppingcd.java
  51. 51. 51 Ejemplo JSP8-Modelo2 Controlador: ServletCompra.java Comprueba la acción a realizar Realiza la acción insertando los valores necesarios en la sesión, si existe Redirige la salida a la vista adecuada
  52. 52. 52 Ejemplo JSP8-Modelo2 Funcionamiento del controlador ServletCompra.java: Acción ‘Agregar’: Añade el cd seleccionado a la sesión y redirige la salida a Tienda.jsp Acción ‘Borrar’: Borra el cd seleccionado de la sesión y redirige a Tienda.jsp Acción ‘Comprar’: Calcula el total y redirige a Comprar.jsp Código: c:javaJSP8-Modelo2WEB- INFsrcServletCompra.java
  53. 53. 53 Ejemplo JSP8-Modelo2 Vistas: son las páginas JSP Tienda.jsp: página de entrada, muestra el catálogo de CD’s disponibles c:javaJSP8-Modelo2Tienda.jsp Carrito.jsp: esta página se incluye en la anterior y muestra los cd’s que el usuario ha ido metiendo en el carrito c:javaJSP8-Modelo2Carrito.jsp Comprar.jsp: muestra el contenido del carrito y el total a pagar cerrando la sesión
  54. 54. 54 Ventajas del Modelo 2 Como no hay lógica de presentación en el JSP, no hay necesidad de demasiados scriptlets. Se pueden tener múltiples controladores en la aplicación Web, aunque normalmente, se suele usar 1 solo. Las aplicaciones Web son más sencillas de mantener y extender, ya que las vistas no refieren unas a otras, y no hay lógica de presentación en ellas.
  55. 55. 55 Acción jsp:include Acción jsp:include: <jsp:include page="relative URL" flush="true"/> Incluye un fichero en el momento en que la página es solicitada. Aviso: en algunos servidores, el fichero incluido debe ser un fichero HTML o JSP, según determine el servidor (normalmente basado en la extensión del fichero).
  56. 56. 56 Acción jsp:forward Acción jsp:forward <jsp:forward page="URL relativa"/> Reenvía la petición a otra página.
  57. 57. 57 Acción jsp:plugin Acción jsp:plugin: <jsp:plugin attribute="value"*> ... </jsp:plugin> Genera etiquetas OBJECT o EMBED, apropiadas al tipo de navegador, pidiendo que se ejecute un applet usando el Java Plugin.
  58. 58. 58 Tags personalizadas En las páginas JSP se usa código HTML, XML, Java e incluso se usan etiquetas que encapsulan parte de la lógica. El uso de la etiqueta <jsp:useBean> en conjunción con los JavaBeans hace que podamos separar la lógica de presentación de la de proceso y consigue unos archivos JSP mas claros, y lo que es mas importante, el que escribe la JSP, no tiene por que tener unos conocimientos avanzados de programación para crear páginas JSP de funcionalidades avanzadas.
  59. 59. 59 Tipos de etiquetas Hay dos tipos principales de etiquetas, etiquetas que no tienen cuerpo. Ejemplo: <img src=“canteras.gif”> etiquetas que si lo tienen. Ejemplo: <title>Las Canteras</title> que tiene cuerpo y etiqueta de final. Estos son dos tipos de etiquetas que podemos crear en Java
  60. 60. 60 Etiquetas personalizadas JSP JSP sigue una sintáxis XML por lo tanto Etiquetas sin cuerpo: <jsp:etiqueta/> Etiquetas con cuerpo: <jsp:etiqueta> … </jsp:etiqueta> Para crear etiquetas a medida debemos implementar o heredar de otras clases Interface Tag  interface general Clase TagSupport  creación de etiquetas sin cuerpo Clase BodyTagSupport  creación de etiquetas con cuerpo En los ejemplos siguientes trabajaremos extendiendo la clase TagSupport y BodyTagSupport que son simplificaciones del interface Tag
  61. 61. 61 Clase TagSupport Las clase TagSupport suministra una serie de métodos que sobreescribiremos para crear una etiqueta. Estos son algunos: doStartTag(): se invoca cuando se encuentra la etiqueta de apertura doEndTag(): se invoca cuando se encuentra la etiqueta de cierre doAfterBody(): se invoca una vez se ha obtenido el contenido del cuerpo, cuando éste existe
  62. 62. 62 Primer ejemplo JSP6- HolaMundoTag Diseñaremos una etiqueta sin cuerpo que escribirá el mensaje “Hola Mundo” en el cliente: <JSP6:holamundo/> Siguiendo la sintáxis XML, de documentos bien formateados Código y configuración: Clase de la etiqueta: c:javaJSP6- HolaMundoTagWEB- INFsrcejemplosHolaMundoTag.java
  63. 63. 63 JSP6-HolaMundoTag Ficheros de configuración: Definir el descriptor de librería de etiquetas (Tag Library Descriptor) o TLD, en este caso JSP6.tld: c:javaJSP6- HolaMundoTagWEB-INFJSP6.tld web.xml: c:javaJSP6- HolaMundoTagWEB-INFweb.xml
  64. 64. 64 Tag Library Descriptor (TLD) JSP6.tld Este fichero de configuración, situado en <contexto>/WEB-INF, describe el formato del conjunto de las etiquetas una librería. En este caso la librería recibe el nombre de ‘JSP6’ y describe una etiqueta de nombre ‘holamundo’ <tag> <name>holamundo</name> <tagclass>HolaMundoTag</tagclass> <bodycontent>empty</bodycontent> <info>Saludo</info> </tag>
  65. 65. 65 JSP6-HolaMundo web.xml El descriptor de despliegue de la aplicación JSP6-HolaMundo: web.xml Asigna un uri a la localización de la librería, para poder referirnos a ella en las páginas JSP, en este caso mediante el uri = ‘/JSP6’ <taglib> <taglib-uri>/JSP6</taglib-uri> <taglib-location>/WEB-INF/JSP6.tld </taglib-location> </taglib>
  66. 66. 66 JSP6-HolaMundo HolaMundo.jsp HolaMundo.jsp: c:javaJSP6- HolaMundoTagHolaMundo.jsp <!-- HolaMundo.jsp --> <%@ taglib uri="/JSP6" prefix="JSP6" %> <HTML> <HEAD> <TITLE>Tag Hola Mundo</TITLE> </HEAD> <JSP6:holamundo/> </BODY> </HTML>
  67. 67. 67 Página HolaMundo.jsp Directiva taglib Una directiva taglib declara las librerías de etiquetas usadas por el JSP. Un directiva corta se declara en una sola línea. Si tenemos varias directivas taglib se deben almacenar juntas en la misma localización dentro del cuerpo JSP: <%@ taglib uri=“/JSP6" prefix=“JSP6" %>, en este ejemplo Sólo deberíamos importar librerías de etiquetas que realmente se van a utilizar en la página JSP. Desde JSP 1.2, esta altamente recomendado utilizar la JSP Standard Tag Library en nuestra aplicación web para reducir la necesidad de scriptlets JSP en nuestras páginas. Las páginas que usan JSTL son, en general, más fáciles de leer y de mantener.
  68. 68. 68 Constantes de las etiquetas personalizadas SKIP_BODY : indica en el método que la etiqueta no tiene cuerpo o que no quiere seguir evaluándolo EVAL_PAGE : indica en el método doEndTag() que se procede a evaluar el resto de la página JSP SKIP_PAGE : indica que no se siga evaluando la página JSP EVAL_BODY_AGAIN: indica que se vuelva a evaluar el cuerpo, en caso de bucles
  69. 69. 69 Etiquetas personalizadas con parámetros Vamos a ver una etiqueta con parámetros del tipo <JSP6:suma num1=2 num2=3/>, que suma los números 2+3 Por cada parámetro que queremos que soporte la etiqueta, se proporciona un método set como en un javabean El código de la clase SumaTag lo veremos a continuación
  70. 70. 70 SumaTag.java Esta etiqueta no tiene cuerpo por lo que será igual que la anterior excepto que se añaden los métodos set Código: c:javaJSP6-HolaMundoTagWEB- INFsrcejemplosSumaTag.java Mediante los métodos set los valores de los parámetros son cargados automáticamente en la clase
  71. 71. 71 Modificación del Tag Library Descriptor (TLD) JSP6.tld: c:javaJSP6-HolaMundoTagWEB- INFJSP6.tld Uso de etiquetas para describir parámetros: <attribute> <name>num1</name> <required>true</required> <rtexprvalue>false</rtexprvalue> </attribute> </attribute> <rtextprvalue> indica si tiene o no que ser evaluada en tiempo de ejecución
  72. 72. 72 Etiquetas personalizadas con cuerpo Vamos a crear una etiqueta con cuerpo y parámetro que realice un bucle. <JSP7:bucle veces=“7”> <JSP7:holamundo/> cuerpo </JSP7:bucle> La clase BucleTag extenderá la clase BodyTagSupport
  73. 73. 73 Ejemplo JSP7-BucleTag BucleTag.java :c:javaJSP7-BucleTagWEB- INFsrcejemplosBucleTag.java JSP7.tld: c:javaJSP7-BucleTagWEB- INFJSP7.tld <bodycontent>JSP</bodycontent> Indica que el contenido del cuerpo puede ser HTML, texto o etiquetas JSP Bucle.jsp: c:javaJSP7-BucleTagBucle.jsp web.xml: c:javaJSP7-BucleTagWEB- INFweb.xml
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×