SlideShare una empresa de Scribd logo
1 de 38
Descargar para leer sin conexión
Eric Gustavo Coronel Castillo
gcoronelc.blogspot.com
gcoronelc@Gmail.com
JAVA WEB DEVELOPER
2
TEMA: JSTL
3
Índice
• Objetivo
• Introducción
• Expression Language (EL)
• Funciones
• Etiquetas Core
Objetivo
4
Utilizar JSTL en la construcción de aplicaciones web
utilizando tecnología Java.
<%@taglib uri="http://java.sun.com/jsp/jstl/core"
prefix="c" %>
<html>
<head>
<title>Demo 01 – demo01.jsp</title>
</head>
<body>
<c:forEach items="${param}" var="item">
<p>${item}</p>
</c:forEach>
</body>
</html>
5
Introducción
¿Qué es JSTL?
JSTL es un conjunto de librerías de etiquetas simples y estándares que
encapsulan la funcionalidad principal que es usada comúnmente para
escribir páginas JSP.
<body>
<c:set var="mensaje" value="${requestScope.mensaje}" />
<c:set var="empleadoTO" value="${requestScope.empleadoTO}" />
<c:out value="${mensaje}"/>
<c:if test="${empleadoTO != null}">
<p>Nombre: ${empleadoTO.nombre}</p>
<p>Paterno: ${empleadoTO.paterno}</p>
<p>Materno: ${empleadoTO.materno}</p>
</c:if>
<c:if test="${empleadoTO == null}">
<p>No existe el usuario.</p>
</c:if>
</body>
Introducción
¿Cuál es el problema con los scriptlets JSP?
– El código Java embebido en scriptlets es desordenado.
– -El código Java dentro de scriptlets JSP no pueden ser reutilizados
por otros JSP, por lo tanto la lógica común termina siendo re-
implementada en múltiples páginas.
– La recuperación de objetos fuera del HTTP request y session es
complicada. Es necesario hacer el Casting de objetos y esto
ocasiona que tengamos que importar más Clases en los JSP.
6
7
Introducción
¿Como mejoran esta situación la librería JSTL?
– Debido a que las etiquetas JSTL son XML, estas etiquetas se integran limpia y
uniformemente a las etiquetas HTML.
– JSTL incluyen la mayoría de funcionalidad que será necesaria en una página
JSP.
– Las etiquetas JSTL pueden referenciar objetos que se encuentren en el alcance
request y session sin conocer el tipo del objeto y sin necesidad de hacer el
Casting.
– Los JSP Expression Language (EL) facilitan las llamadas a los métodos Get y
Set en los objetos Java. EL es usado extensamente en la librería JSTL.
8
Introducción
Las Librerías JSTL
Descripción Prefijo URI por Defecto
Core c http://java.sun.com/jsp/jstl/core
XML Processing x http://java.sun.com/jsp/jstl/xml
I18N fmt http://java.sun.com/jsp/jstl/fmt
Database Access sql http://java.sun.com/jsp/jstl/sql
Function fn http://java.sun.com/jsp/jstl/functions
9
Introducción
• Instalación de JSTL
– Si estamos utilizando NetBeans con GlassFish solo debemos importar las
librerías, por ejemplo, si la librería que queremos utilizar es el core la instrucción
para importarla es:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
– Pero si vamos a utilizar un contenedor JEE que no implementa por defecto
JSTL tendríamos 3 alternativas, deberíamos optar por una de ellas:
1. Habilitar en el IDE las librerías JSTL.
2. Implementar manualmente JSTL en nuestro proyecto web.
3. Instalar en el contenedor JEE las librerías JSTL.
Expression Language (EL)
Introducción
– Además de las librerías de etiquetas, JSTL define un lenguaje de expresiones,
que facilita enormemente el tratamiento de información. JSP usa Java para
referenciar atributos dinámicos. Con JSTL ya no es necesario.
– Comparemos por ejemplo la lectura de un parámetro:
• Con JSP
<%= request.getParameter("nombre") %>
• Con JSTL
${param.nombre}
10
11
Expression Language (EL)
Introducción
– Para acceder al campo de un bean, o a un elemento de una colección (array, o Map), se usa el operador punto, o
el operador corchete:
${bean.propiedad}
${map.elemento}
${header['User-Agent']}
Si un campo de un bean es otro bean, podemos encadenar puntos para acceder a una propiedad del segundo
bean:
${bean1.bean2.propiedad}
– Las expresiones pueden aparecer como parte del valor de un atributo de una etiqueta:
<c:out value="${15*4}"/>
<c:out value="${nombre}"/>
<c:if test="${tabla.indice % 2 == 0}">es par</c:if>
O independientemente junto a texto estático como el HTML:
<input type="text" name="usuario" value="${requestScope.empleado.nombre}"/>
12
Expression Language (EL)
Operadores
– Además de los operadores punto (.) y [ ], EL provee los siguientes operadores:
• Aritméticos: +, - (binario), *, / y div, % y mod, - (unario)
• Lógicos: and, &&, or, ||, not, !
• Relacionales: ==, eq, !=, ne, <, lt, >, gt, <=, ge, >=, le.
Las comparaciones se pueden hacer contra otros valores, o contra literales de tipo boolean,
string, integer, o de punto flotante
• Empty: El operador empty puede ser usado para determinar si un valor es nulo o
vacío.
• Condicional: A ? B : C.
Evalúa B o C, dependiendo del resultado de la evaluación de A.
13
Expression Language (EL)
Palabras Reservadas
and eq gt true
Instanceof or ne le
false empty not lt
ge null div mod
Expression Language (EL)
14
Objetos implícitos
Objetos implícitos contiene
pageScope Variables de ámbito página.
requestScope Variables de ámbito request.
sessionScope Variables de ámbito session.
applicationScope Variables de ámbito application.
param Parámetros del request como cadenas.
paramValues Parámetros del request como arreglo de cadenas.
header Cabeceras del request HTTP como cadenas.
headerValues Cabeceras del request HTTP como arreglo de cadenas.
cookie Valores de las cookies recibidas en el request.
initParam Parámetros de inicialización de la aplicación Web.
pageContext El objeto PageContext de la página actual.
Expression Language (EL)
Objetos implícitos
– Acceso a Todos los Elementos
<c:forEach items="${header}" var="item">
<c:out value="${item}"/><br/>
</c:forEach>
– Acceso por Nombre Utilizando Punto: objeto.propiedad
Host: <c:out value="${header.Host}"/> <br/>
– Acceso por Nombre con Corchetes:
objeto['propiedad']
– Usar este formato evita que se interprete el nombre como una expresión. Por ejemplo: queremos
la propiedad "Accept-Language" no una resta entre las variables Accept y Language.
Host: <c:out value="${header['Host']}"/> <br/>
Accept-Language: <c:out value="${header['Accept-Language']}"/> <br/>
15
Expression Language (EL)
Expresión Descripción Ejemplo
${pageContext.exception.message} Devuelve una descripción del error cuando la página en
curso es una página de error JSP.
"Algo ha ido mal"
${pageContext.errorData} Información de un error JSP.
${pageContext.request.authType} Tipo de autentificación usado en la página. BASIC
${pageContext.request.remoteUser} Identificador del usuario (cuando esta en uso la
autentificación del contenedor).
gustavo
${pageContext.request.contextPath} Nombre (también llamado contexto) de la aplicación. /cap18
${pageContext.request.cookies} Array de cookies.
${pageContext.request.method} Método HTTP usado para acceder a la página. GET
${pageContext.request.queryString} Query de la página (el texto de la URL que viene después
del PATH)
p1=valor&p2=valor
${pageContext.request.requestURL} URL usada para acceder a la página. http://localhost/app/pagecontext.jsp
${pageContext.session.new} Contiene true si la sesión es nueva, false si no lo es. true
${pageContext.servletContext.serverInfo} Información sobre el contenedor JSP. Sun Java System Application Server 9.1_02
16
• Objeto: pageContext
Expression Language (EL)
• Objeto: pageContext.errorData
– Cuando se produce un error la excepción ocurrida se adjunta al
contexto de la página, información adicional en forma de bean con
nombre errorData. Este bean tiene las siguientes propiedades:
17
Propiedad Tipo Java Descripción
requestURI String URI de la petición fallida.
servletName String Nombre de la página o servlet que lanzó la excepción.
statusCode int Código HTTP del fallo.
throwable Throwable La excepción que produjo el fallo.
Expression Language (EL)
• Objeto: pageContext.errorData
– Para declarar una página de error JSP que responda a un código o excepción, podemos usar el
web.xml:
<error-page>
<exception-type>java.lang.Throwable</exception-type>
<location>/errorPage.jsp</location>
</error-page>
– O una declaración para una página concreta:
<%@page errorPage="errorPage.jsp" %>
– En la página de error debemos incluir:
<%@page isErrorPage="true" %>
18
Expression Language (EL)
• Objeto: pageContext.errorData
– Un ejemplo de la codificación de la página de error:
<body>
<p>URI del requerimiento fallido:
${pageContext.errorData.requestURI}</p>
<p>Quien lanzo el error:
${pageContext.errorData.servletName}</p>
<p>Código de error: ${pageContext.errorData.statusCode}</p>
<p>Excepción: ${pageContext.errorData.throwable.class}</p>
<p>Mensaje: ${pageContext.errorData.throwable.message}</p>
</body>
19
20
Funciones
• Las funciones representan un modo de extender la funcionalidad del lenguaje de expresiones. Se usan dentro de cualquier
expresión EL, ejemplo:
Mi nombre de usuario tiene ${fn:length(username)} letras.
• A continuación tenemos la lista de funciones disponibles:
– contains(string, substring) -> boolean
– containsIgnoreCase(string, substring) -> boolean
– endsWith(string, suffix) -> boolean
– escapeXml(string) -> String
– indexOf(string, substring) -> int
– join(collection, separator) -> String
– length(collection) -> int
– replace(inputString, beforeSubstring, afterSubstring) -> String
– split(string, separator) -> String[]
– startsWith(string, prefix) -> boolean
– substring(string, beginIndex, endIndex) -> String
– substringAfter(string, substring) -> String
– substringBefore(string, substring) -> String
– toLowerCase(string) -> String
– toUpperCase(string) -> String
– trim(string) -> String
Etiquetas Core
• c:out
– Muestra el resultado de una expresión. Su funcionalidad es
equivalente a la de <%= %>.
21
Atributo Descripción Requerido Por defecto
value información a mostrar sí ninguno
default información a mostrar por defecto no cuerpo
escapeXml true si debe convertir caracteres especiales a sus
correspondientes entidades (por ejemplo, &gt; para <).
no true
Etiquetas Core
• c:set
• c:remove
22
Atributo Descripción Requerido Por defecto
value Información a grabar. no cuerpo
target Nombre de un bean cuya propiedad será modificada no ninguno
property Propiedad a modificar no ninguna
var Nombre de la variable en la que guardar. no ninguno
scope Ámbito de la variable en la que grabar la información
(page, request, session, o application)
no page
Atributo Descripción Requerido Por defecto
var Nombre de la variable a quitar sí --
scope Ámbito de la variable a quitar. no todos los ámbitos
23
Etiquetas Core
• c:if
– En el cuerpo es posible colocar otras etiquetas, incluyendo otras <c:if>. Es útil guardar el
resultado de evaluar la condición para evitar repetir los cálculos.
<c:if test="${cadena == null}">
La cadena es nula o no definida.
</c:if>
Atributo Descripción Requerido Por defecto
test Condición a evaluar. Solo procesa el cuerpo
si es true.
sí --
var Nombre de la variable para la valor resultante
de la evaluación de la condición. El tipo de la
variable es booleano.
no ninguno
scope Ámbito de la variable. no page
24
Etiquetas Core
• c:choose, c:when, c:otherwise
– <c:choose> no tiene atributos. Acepta como hijos uno o más <c:when>.
– <c:when> tiene un único atributo:
– <c:otherwise> no tiene atributos.
Atributo Descripción Requerido Por defecto
Test Condición a evaluar. sí --
25
Etiquetas Core
• c:choose, c:when, c:otherwise
<body>
<c:set var="nota" value="${param.nota}"/>
Nota:<c:out value="${nota}"/><br>
Condición:
<c:choose>
<c:when test="${nota >= 14}">Aprobado</c:when>
<c:when test="${nota >= 11}">Asistente</c:when>
<c:when test="${nota >= 0}">Desaprobado</c:when>
<c:otherwise>Nota Fuera de Rango</c:otherwise>
</c:choose>
</body>
26
Etiquetas Core
• c:forEach
Sintaxis 1:
<c:forEach [var=”nombreVariable”] items=”colección”
[varStatus=”variableEstado”]
[begin=”inicio”] [end=”fin”] [step=”paso”]>
Contenido del Cuerpo
</c:forEach>
Sintaxis 2:
<c:forEach [var=”nombreVariable”] [varStatus=”variableEstado”]
begin=”inicio” end=”fin” [step=”paso”]>
Contenido del Cuerpo
</c:forEach>
27
Etiquetas Core
• c:forEach
Atributo Descripción Requerido Por defecto
items Colección sobre la que se itera. no ninguno
begin Elemento con el que empezar (0=primero). no 0
end Elemento con el que terminar (0=primero). no último
step Procesa solo cada step elementos. no 1 (todos)
var Nombre del atributo con el que exponer el elemento
actual.
no ninguno
varStatus Nombre de la variable con la que exponer el estado
de la iteración.
no ninguno
28
Etiquetas Core
• c:forEach
– La variable varStatus tiene propiedades que describen el estado de la iteración:
Atributo Tipo Requerido
begin número El valor del atributo begin.
current número El elemento actual.
end número El valor del atributo end.
index número Índice del elemento actual dentro de la colección.
count número Número de iteración (empezando en 1).
first boolean Indica si estamos en la primera iteración.
last boolean Indica si estamos en la última iteración.
step número El valor del atributo step.
Etiquetas Core
• c:forEach
– Muestra el mensaje "Alianza Campeón" 10 veces.
<c:forEach var="n" begin="1" end="10">
<p>${n} Alianza Campeón</p>
</c:forEach>
– Imprime el nombre y apellido paterno de una lista de empleados.
<c:set var="mensaje" value="${requestScope.mensaje}" />
<c:set var="lista" value="${requestScope.lista}" />
<c:out value="${mensaje}"/><br>
<c:if test="${fn:length(lista) == 0}">
<c:out value="No hay elementos."/><br>
</c:if>
<c:forEach items="${lista}" var="item">
${item.nombre} ${item.paterno}<br>
</c:forEach>
29
Etiquetas core
• Etiqueta: param
Sintaxis:
– El valor del parámetro se especifica en el atributo “value”.
<c:param name=”nombreParámetro” value=”valorParámetro”/>
– El valor del parámetro se especifica en el contenido del cuerpo.
<c:param name=”nombreParámetro”>
valorParámetro
</c:param>
30
Etiquetas core
• Etiqueta: redirect
Sintaxis:
– Sin contenido en el cuerpo.
<c:redirect url=”recurso” [context=”contexto”]/>
– Con contenido en el cuerpo para especificar el valor de los parámetros.
<c:redirect url=”recurso” [context=”contexto”]>
Etiquetas c:param
</c:redirect>
31
Etiquetas core
• Etiqueta: url
Sintaxis:
– Sin contenido en el cuerpo.
<c:url value=”valor” [context=”contexto”]
[var=”nombreVariable”] [scope=”{page|request|session|application}”]/>
– Con contenido en el cuerpo para especificar los parámetros.
<c:url value=”valor” [context=”contexto”]
[var=”nombreVariable”] [scope=”{page|request|session|application}”]>
Etiquetas <c:param>
</c:url>
32
Etiquetas core
• Etiqueta: url
A continuación tenemos un ejemplo ilustrativo:
<c:url value="demo05.jsp" var="destino">
<c:param name="nota" value="15"/>
</c:url>
<a href="${destino}">Enlace</a>
33
Etiquetas core
• Etiqueta: catch
Sintaxis:
<c:catch [var=”nombreVariable”]>
Acciones Anidadas.
</c:catch>
34
Etiquetas core
• Etiqueta: catch
A continuación tenemos un ejemplo ilustrativo.
<c:catch var="error1">
<fmt:parseNumber var="total" value="ABCD"/>
Importe: ${dato.total}<br>
</c:catch>
<c:if test="${not empty error1}">
Lo sentimos, no existe el dato solicitado.<br>
Error: ${error1}
</c:if>
35
Proyectos
Proyecto 1
Desarrollar un proyecto que permita generar la tabla de multiplicar de
un número.
El usuario es quien ingresa el número del que quiere la tabla de
multiplicar.
36
Proyectos
Proyecto 2
Desarrollar un proyecto que permita al usuario ingresar dos puntos del
plano cartesiano.
La aplicación luego debe reportar lo siguiente:
• De cada punto debe reportar en que cuadrante se encuentra.
• La distancia entre los dos puntos.
37
38
CURSOS VIERTUALES DE PROGRAMACIÓN

Más contenido relacionado

La actualidad más candente

Fundamentos de Ingenieria de Software - Unidad 1 modelo de negocios
Fundamentos de Ingenieria de Software - Unidad 1 modelo de negociosFundamentos de Ingenieria de Software - Unidad 1 modelo de negocios
Fundamentos de Ingenieria de Software - Unidad 1 modelo de negociosJosé Antonio Sandoval Acosta
 
Requerimientos de usuario y del sistema
Requerimientos de usuario y del sistemaRequerimientos de usuario y del sistema
Requerimientos de usuario y del sistemaIsrael Rey
 
Introducción a HTML y CSS
Introducción a HTML y CSSIntroducción a HTML y CSS
Introducción a HTML y CSSAdriana Tienda
 
Ejercicios resueltos diagramas de claseaula (1)
Ejercicios resueltos diagramas de claseaula (1)Ejercicios resueltos diagramas de claseaula (1)
Ejercicios resueltos diagramas de claseaula (1)William Lozano
 
medolos tradicionales de desarrollo de software ( cascada - espiral)
medolos tradicionales de desarrollo de software ( cascada - espiral)medolos tradicionales de desarrollo de software ( cascada - espiral)
medolos tradicionales de desarrollo de software ( cascada - espiral)Cristhian Aguilar
 
ASP.NET Web API
ASP.NET Web APIASP.NET Web API
ASP.NET Web APIhabib_786
 
Herencia y Polimorfismo
Herencia y PolimorfismoHerencia y Polimorfismo
Herencia y Polimorfismonestor_moren
 
Desarrollo Web: HTML + Bootstrap
Desarrollo Web: HTML + BootstrapDesarrollo Web: HTML + Bootstrap
Desarrollo Web: HTML + BootstrapWorkshop Digital
 
PDO: Capa de abstracción de base de datos con PHP
PDO: Capa de abstracción de base de datos con PHPPDO: Capa de abstracción de base de datos con PHP
PDO: Capa de abstracción de base de datos con PHPArsys
 
Conectando visual basic 6.0 a bases de datos
Conectando visual basic 6.0 a bases de datosConectando visual basic 6.0 a bases de datos
Conectando visual basic 6.0 a bases de datosRafaelAponte16
 
Guia BD conexión Mysql con Java usando Netbeans
Guia BD conexión Mysql con Java usando NetbeansGuia BD conexión Mysql con Java usando Netbeans
Guia BD conexión Mysql con Java usando NetbeansEmerson Garay
 
Sql DML Lenguaje de manipulación de datos
Sql DML Lenguaje de manipulación de datos Sql DML Lenguaje de manipulación de datos
Sql DML Lenguaje de manipulación de datos josecuartas
 
Transformar modelo entidad relacion a modelo logico
Transformar modelo entidad relacion a modelo logicoTransformar modelo entidad relacion a modelo logico
Transformar modelo entidad relacion a modelo logicojosecuartas
 

La actualidad más candente (20)

Fundamentos de Ingenieria de Software - Unidad 1 modelo de negocios
Fundamentos de Ingenieria de Software - Unidad 1 modelo de negociosFundamentos de Ingenieria de Software - Unidad 1 modelo de negocios
Fundamentos de Ingenieria de Software - Unidad 1 modelo de negocios
 
Requerimientos de usuario y del sistema
Requerimientos de usuario y del sistemaRequerimientos de usuario y del sistema
Requerimientos de usuario y del sistema
 
Casos de uso
Casos de usoCasos de uso
Casos de uso
 
Clase math.java
Clase math.javaClase math.java
Clase math.java
 
Introducción a HTML y CSS
Introducción a HTML y CSSIntroducción a HTML y CSS
Introducción a HTML y CSS
 
Ejercicios resueltos diagramas de claseaula (1)
Ejercicios resueltos diagramas de claseaula (1)Ejercicios resueltos diagramas de claseaula (1)
Ejercicios resueltos diagramas de claseaula (1)
 
3. Modelo ER - Relacional
3. Modelo ER - Relacional3. Modelo ER - Relacional
3. Modelo ER - Relacional
 
medolos tradicionales de desarrollo de software ( cascada - espiral)
medolos tradicionales de desarrollo de software ( cascada - espiral)medolos tradicionales de desarrollo de software ( cascada - espiral)
medolos tradicionales de desarrollo de software ( cascada - espiral)
 
ASP.NET Web API
ASP.NET Web APIASP.NET Web API
ASP.NET Web API
 
Herencia y Polimorfismo
Herencia y PolimorfismoHerencia y Polimorfismo
Herencia y Polimorfismo
 
Semana 5 Java Swing
Semana 5   Java SwingSemana 5   Java Swing
Semana 5 Java Swing
 
Desarrollo Web: HTML + Bootstrap
Desarrollo Web: HTML + BootstrapDesarrollo Web: HTML + Bootstrap
Desarrollo Web: HTML + Bootstrap
 
PDO: Capa de abstracción de base de datos con PHP
PDO: Capa de abstracción de base de datos con PHPPDO: Capa de abstracción de base de datos con PHP
PDO: Capa de abstracción de base de datos con PHP
 
Conectando visual basic 6.0 a bases de datos
Conectando visual basic 6.0 a bases de datosConectando visual basic 6.0 a bases de datos
Conectando visual basic 6.0 a bases de datos
 
Guia BD conexión Mysql con Java usando Netbeans
Guia BD conexión Mysql con Java usando NetbeansGuia BD conexión Mysql con Java usando Netbeans
Guia BD conexión Mysql con Java usando Netbeans
 
Sql DML Lenguaje de manipulación de datos
Sql DML Lenguaje de manipulación de datos Sql DML Lenguaje de manipulación de datos
Sql DML Lenguaje de manipulación de datos
 
Metodología CommonKADS
Metodología CommonKADSMetodología CommonKADS
Metodología CommonKADS
 
7 Curso de POO en java - diagrama de clases
7 Curso de POO en java - diagrama de clases7 Curso de POO en java - diagrama de clases
7 Curso de POO en java - diagrama de clases
 
Transformar modelo entidad relacion a modelo logico
Transformar modelo entidad relacion a modelo logicoTransformar modelo entidad relacion a modelo logico
Transformar modelo entidad relacion a modelo logico
 
Servicios web
Servicios webServicios web
Servicios web
 

Destacado (15)

Java Web 00 - Contexto
Java Web 00 - ContextoJava Web 00 - Contexto
Java Web 00 - Contexto
 
Java Fundamentos 01 - Introducción
Java Fundamentos 01 - IntroducciónJava Fundamentos 01 - Introducción
Java Fundamentos 01 - Introducción
 
PROGRAMACIÓN ORIENTADA A OBJETOS
PROGRAMACIÓN ORIENTADA A OBJETOSPROGRAMACIÓN ORIENTADA A OBJETOS
PROGRAMACIÓN ORIENTADA A OBJETOS
 
Java Fundamentos - Programación Orientada a Servicios
Java Fundamentos - Programación Orientada a ServiciosJava Fundamentos - Programación Orientada a Servicios
Java Fundamentos - Programación Orientada a Servicios
 
Git y GitHub
Git y GitHubGit y GitHub
Git y GitHub
 
Manual de Open Shift
Manual de Open ShiftManual de Open Shift
Manual de Open Shift
 
Java web 01 - servlets
Java web 01 - servletsJava web 01 - servlets
Java web 01 - servlets
 
JAVA SERVER FACES - LECCION 01 - PRIMEROS PASOS
JAVA SERVER FACES - LECCION 01 - PRIMEROS PASOSJAVA SERVER FACES - LECCION 01 - PRIMEROS PASOS
JAVA SERVER FACES - LECCION 01 - PRIMEROS PASOS
 
Java Web Lección 02 - JSP
Java Web Lección 02 - JSPJava Web Lección 02 - JSP
Java Web Lección 02 - JSP
 
Java Web Lección 03 - MVC
Java Web Lección 03 - MVCJava Web Lección 03 - MVC
Java Web Lección 03 - MVC
 
Java Lambda
Java LambdaJava Lambda
Java Lambda
 
Buenas Practicas en el Desarrollo de Software
Buenas Practicas en el Desarrollo de SoftwareBuenas Practicas en el Desarrollo de Software
Buenas Practicas en el Desarrollo de Software
 
SEMINARIO: ACCESO A BASE DE DATOS CON JDBC
SEMINARIO: ACCESO A BASE DE DATOS CON JDBCSEMINARIO: ACCESO A BASE DE DATOS CON JDBC
SEMINARIO: ACCESO A BASE DE DATOS CON JDBC
 
Modelos de software ventajas y desventajas
Modelos de software ventajas y desventajasModelos de software ventajas y desventajas
Modelos de software ventajas y desventajas
 
DESARROLLADOR DE APLICACIONES DE ESCRITORIO CON JDBC
DESARROLLADOR DE APLICACIONES DE ESCRITORIO CON JDBCDESARROLLADOR DE APLICACIONES DE ESCRITORIO CON JDBC
DESARROLLADOR DE APLICACIONES DE ESCRITORIO CON JDBC
 

Similar a Java web Lección 04 - JSTL (20)

Java Web JSTL
Java Web JSTLJava Web JSTL
Java Web JSTL
 
Jsp
JspJsp
Jsp
 
Curso Jsp
Curso JspCurso Jsp
Curso Jsp
 
Java Web - JSP
Java Web - JSPJava Web - JSP
Java Web - JSP
 
Tema2a Jsp
Tema2a JspTema2a Jsp
Tema2a Jsp
 
JSP
JSPJSP
JSP
 
4. Curso Java JSP (Java Server Pages) - Curso 2005-2006
4. Curso Java JSP (Java Server Pages) - Curso 2005-20064. Curso Java JSP (Java Server Pages) - Curso 2005-2006
4. Curso Java JSP (Java Server Pages) - Curso 2005-2006
 
Curso Jsp Mas
Curso Jsp MasCurso Jsp Mas
Curso Jsp Mas
 
Curso Java Avanzado 3 Js Ps
Curso Java Avanzado   3 Js PsCurso Java Avanzado   3 Js Ps
Curso Java Avanzado 3 Js Ps
 
Jsp
JspJsp
Jsp
 
JSP
JSPJSP
JSP
 
Sesion06 apuntes
Sesion06 apuntesSesion06 apuntes
Sesion06 apuntes
 
Jsp directiva page
Jsp directiva pageJsp directiva page
Jsp directiva page
 
Directivas
DirectivasDirectivas
Directivas
 
Jsp Paginacion
Jsp PaginacionJsp Paginacion
Jsp Paginacion
 
01 Ext Js Introduccion
01 Ext Js   Introduccion01 Ext Js   Introduccion
01 Ext Js Introduccion
 
Introjsp
IntrojspIntrojsp
Introjsp
 
TEMA Nº 3: ELEMENTOS DE JSP
TEMA Nº 3: ELEMENTOS DE JSPTEMA Nº 3: ELEMENTOS DE JSP
TEMA Nº 3: ELEMENTOS DE JSP
 
JavaServer Page
JavaServer PageJavaServer Page
JavaServer Page
 
Practica jsp
Practica jspPractica jsp
Practica jsp
 

Más de Eric Gustavo Coronel Castillo

EL MODELO DIRECTO DE DELL: TODO LO QUE HAY SOBRE LA INFORMACION
EL MODELO DIRECTO DE DELL: TODO LO QUE HAY SOBRE LA INFORMACIONEL MODELO DIRECTO DE DELL: TODO LO QUE HAY SOBRE LA INFORMACION
EL MODELO DIRECTO DE DELL: TODO LO QUE HAY SOBRE LA INFORMACIONEric Gustavo Coronel Castillo
 

Más de Eric Gustavo Coronel Castillo (20)

Model View Controller - MVC
Model View Controller - MVCModel View Controller - MVC
Model View Controller - MVC
 
Java Web: Servlets
Java Web: ServletsJava Web: Servlets
Java Web: Servlets
 
Java Web - Presentación
Java Web - PresentaciónJava Web - Presentación
Java Web - Presentación
 
JAVA ORIENTADO A OBJETOS - EXCEPCIONES
JAVA ORIENTADO A OBJETOS - EXCEPCIONESJAVA ORIENTADO A OBJETOS - EXCEPCIONES
JAVA ORIENTADO A OBJETOS - EXCEPCIONES
 
JAVA ORIENTADO A OBJETOS - COLECCIONES
JAVA ORIENTADO A OBJETOS - COLECCIONESJAVA ORIENTADO A OBJETOS - COLECCIONES
JAVA ORIENTADO A OBJETOS - COLECCIONES
 
JAVA ORIENTADO A OBJETOS - ARREGLOS
JAVA ORIENTADO A OBJETOS - ARREGLOSJAVA ORIENTADO A OBJETOS - ARREGLOS
JAVA ORIENTADO A OBJETOS - ARREGLOS
 
JAVA ORIENTADO A OBJETOS - INTERFACES
JAVA ORIENTADO A OBJETOS - INTERFACESJAVA ORIENTADO A OBJETOS - INTERFACES
JAVA ORIENTADO A OBJETOS - INTERFACES
 
JAVA ORIENTADO A OBJETOS - HERENCIA
JAVA ORIENTADO A OBJETOS - HERENCIAJAVA ORIENTADO A OBJETOS - HERENCIA
JAVA ORIENTADO A OBJETOS - HERENCIA
 
JAVA ORIENTADO A OBJETOS - ALCANCE DE CLASE
JAVA ORIENTADO A OBJETOS - ALCANCE DE CLASEJAVA ORIENTADO A OBJETOS - ALCANCE DE CLASE
JAVA ORIENTADO A OBJETOS - ALCANCE DE CLASE
 
JAVA ORIENTADO A OBJETOS - SOBRECARGA
JAVA ORIENTADO A OBJETOS - SOBRECARGAJAVA ORIENTADO A OBJETOS - SOBRECARGA
JAVA ORIENTADO A OBJETOS - SOBRECARGA
 
JAVA ORIENTADO A OBJETOS - MIEMBROS DE CLASE
JAVA ORIENTADO A OBJETOS - MIEMBROS DE CLASEJAVA ORIENTADO A OBJETOS - MIEMBROS DE CLASE
JAVA ORIENTADO A OBJETOS - MIEMBROS DE CLASE
 
JAVA ORIENTADO A OBJETOS - CLASES Y OBJETOS
JAVA ORIENTADO A OBJETOS - CLASES Y OBJETOSJAVA ORIENTADO A OBJETOS - CLASES Y OBJETOS
JAVA ORIENTADO A OBJETOS - CLASES Y OBJETOS
 
Cursos Virtuales con Gustavo Coronel en UDEMY
Cursos Virtuales con Gustavo Coronel en UDEMYCursos Virtuales con Gustavo Coronel en UDEMY
Cursos Virtuales con Gustavo Coronel en UDEMY
 
JAVA ORIENTADO A OBJETOS - INTRODUCCIÓN
JAVA ORIENTADO A OBJETOS - INTRODUCCIÓNJAVA ORIENTADO A OBJETOS - INTRODUCCIÓN
JAVA ORIENTADO A OBJETOS - INTRODUCCIÓN
 
Buenas practicas para el Desarrollo de Software
Buenas practicas para el Desarrollo de SoftwareBuenas practicas para el Desarrollo de Software
Buenas practicas para el Desarrollo de Software
 
JAVA OO - TEMA 08 - COLECCIONES
JAVA OO - TEMA 08 - COLECCIONESJAVA OO - TEMA 08 - COLECCIONES
JAVA OO - TEMA 08 - COLECCIONES
 
EL MODELO DIRECTO DE DELL: TODO LO QUE HAY SOBRE LA INFORMACION
EL MODELO DIRECTO DE DELL: TODO LO QUE HAY SOBRE LA INFORMACIONEL MODELO DIRECTO DE DELL: TODO LO QUE HAY SOBRE LA INFORMACION
EL MODELO DIRECTO DE DELL: TODO LO QUE HAY SOBRE LA INFORMACION
 
ORACLE SQL
ORACLE SQLORACLE SQL
ORACLE SQL
 
CONSULTAS BASICAS
CONSULTAS BASICASCONSULTAS BASICAS
CONSULTAS BASICAS
 
ORACLE SQL
ORACLE SQLORACLE SQL
ORACLE SQL
 

Java web Lección 04 - JSTL

  • 1. Eric Gustavo Coronel Castillo gcoronelc.blogspot.com gcoronelc@Gmail.com JAVA WEB DEVELOPER
  • 3. 3 Índice • Objetivo • Introducción • Expression Language (EL) • Funciones • Etiquetas Core
  • 4. Objetivo 4 Utilizar JSTL en la construcción de aplicaciones web utilizando tecnología Java. <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <html> <head> <title>Demo 01 – demo01.jsp</title> </head> <body> <c:forEach items="${param}" var="item"> <p>${item}</p> </c:forEach> </body> </html>
  • 5. 5 Introducción ¿Qué es JSTL? JSTL es un conjunto de librerías de etiquetas simples y estándares que encapsulan la funcionalidad principal que es usada comúnmente para escribir páginas JSP. <body> <c:set var="mensaje" value="${requestScope.mensaje}" /> <c:set var="empleadoTO" value="${requestScope.empleadoTO}" /> <c:out value="${mensaje}"/> <c:if test="${empleadoTO != null}"> <p>Nombre: ${empleadoTO.nombre}</p> <p>Paterno: ${empleadoTO.paterno}</p> <p>Materno: ${empleadoTO.materno}</p> </c:if> <c:if test="${empleadoTO == null}"> <p>No existe el usuario.</p> </c:if> </body>
  • 6. Introducción ¿Cuál es el problema con los scriptlets JSP? – El código Java embebido en scriptlets es desordenado. – -El código Java dentro de scriptlets JSP no pueden ser reutilizados por otros JSP, por lo tanto la lógica común termina siendo re- implementada en múltiples páginas. – La recuperación de objetos fuera del HTTP request y session es complicada. Es necesario hacer el Casting de objetos y esto ocasiona que tengamos que importar más Clases en los JSP. 6
  • 7. 7 Introducción ¿Como mejoran esta situación la librería JSTL? – Debido a que las etiquetas JSTL son XML, estas etiquetas se integran limpia y uniformemente a las etiquetas HTML. – JSTL incluyen la mayoría de funcionalidad que será necesaria en una página JSP. – Las etiquetas JSTL pueden referenciar objetos que se encuentren en el alcance request y session sin conocer el tipo del objeto y sin necesidad de hacer el Casting. – Los JSP Expression Language (EL) facilitan las llamadas a los métodos Get y Set en los objetos Java. EL es usado extensamente en la librería JSTL.
  • 8. 8 Introducción Las Librerías JSTL Descripción Prefijo URI por Defecto Core c http://java.sun.com/jsp/jstl/core XML Processing x http://java.sun.com/jsp/jstl/xml I18N fmt http://java.sun.com/jsp/jstl/fmt Database Access sql http://java.sun.com/jsp/jstl/sql Function fn http://java.sun.com/jsp/jstl/functions
  • 9. 9 Introducción • Instalación de JSTL – Si estamos utilizando NetBeans con GlassFish solo debemos importar las librerías, por ejemplo, si la librería que queremos utilizar es el core la instrucción para importarla es: <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> – Pero si vamos a utilizar un contenedor JEE que no implementa por defecto JSTL tendríamos 3 alternativas, deberíamos optar por una de ellas: 1. Habilitar en el IDE las librerías JSTL. 2. Implementar manualmente JSTL en nuestro proyecto web. 3. Instalar en el contenedor JEE las librerías JSTL.
  • 10. Expression Language (EL) Introducción – Además de las librerías de etiquetas, JSTL define un lenguaje de expresiones, que facilita enormemente el tratamiento de información. JSP usa Java para referenciar atributos dinámicos. Con JSTL ya no es necesario. – Comparemos por ejemplo la lectura de un parámetro: • Con JSP <%= request.getParameter("nombre") %> • Con JSTL ${param.nombre} 10
  • 11. 11 Expression Language (EL) Introducción – Para acceder al campo de un bean, o a un elemento de una colección (array, o Map), se usa el operador punto, o el operador corchete: ${bean.propiedad} ${map.elemento} ${header['User-Agent']} Si un campo de un bean es otro bean, podemos encadenar puntos para acceder a una propiedad del segundo bean: ${bean1.bean2.propiedad} – Las expresiones pueden aparecer como parte del valor de un atributo de una etiqueta: <c:out value="${15*4}"/> <c:out value="${nombre}"/> <c:if test="${tabla.indice % 2 == 0}">es par</c:if> O independientemente junto a texto estático como el HTML: <input type="text" name="usuario" value="${requestScope.empleado.nombre}"/>
  • 12. 12 Expression Language (EL) Operadores – Además de los operadores punto (.) y [ ], EL provee los siguientes operadores: • Aritméticos: +, - (binario), *, / y div, % y mod, - (unario) • Lógicos: and, &&, or, ||, not, ! • Relacionales: ==, eq, !=, ne, <, lt, >, gt, <=, ge, >=, le. Las comparaciones se pueden hacer contra otros valores, o contra literales de tipo boolean, string, integer, o de punto flotante • Empty: El operador empty puede ser usado para determinar si un valor es nulo o vacío. • Condicional: A ? B : C. Evalúa B o C, dependiendo del resultado de la evaluación de A.
  • 13. 13 Expression Language (EL) Palabras Reservadas and eq gt true Instanceof or ne le false empty not lt ge null div mod
  • 14. Expression Language (EL) 14 Objetos implícitos Objetos implícitos contiene pageScope Variables de ámbito página. requestScope Variables de ámbito request. sessionScope Variables de ámbito session. applicationScope Variables de ámbito application. param Parámetros del request como cadenas. paramValues Parámetros del request como arreglo de cadenas. header Cabeceras del request HTTP como cadenas. headerValues Cabeceras del request HTTP como arreglo de cadenas. cookie Valores de las cookies recibidas en el request. initParam Parámetros de inicialización de la aplicación Web. pageContext El objeto PageContext de la página actual.
  • 15. Expression Language (EL) Objetos implícitos – Acceso a Todos los Elementos <c:forEach items="${header}" var="item"> <c:out value="${item}"/><br/> </c:forEach> – Acceso por Nombre Utilizando Punto: objeto.propiedad Host: <c:out value="${header.Host}"/> <br/> – Acceso por Nombre con Corchetes: objeto['propiedad'] – Usar este formato evita que se interprete el nombre como una expresión. Por ejemplo: queremos la propiedad "Accept-Language" no una resta entre las variables Accept y Language. Host: <c:out value="${header['Host']}"/> <br/> Accept-Language: <c:out value="${header['Accept-Language']}"/> <br/> 15
  • 16. Expression Language (EL) Expresión Descripción Ejemplo ${pageContext.exception.message} Devuelve una descripción del error cuando la página en curso es una página de error JSP. "Algo ha ido mal" ${pageContext.errorData} Información de un error JSP. ${pageContext.request.authType} Tipo de autentificación usado en la página. BASIC ${pageContext.request.remoteUser} Identificador del usuario (cuando esta en uso la autentificación del contenedor). gustavo ${pageContext.request.contextPath} Nombre (también llamado contexto) de la aplicación. /cap18 ${pageContext.request.cookies} Array de cookies. ${pageContext.request.method} Método HTTP usado para acceder a la página. GET ${pageContext.request.queryString} Query de la página (el texto de la URL que viene después del PATH) p1=valor&p2=valor ${pageContext.request.requestURL} URL usada para acceder a la página. http://localhost/app/pagecontext.jsp ${pageContext.session.new} Contiene true si la sesión es nueva, false si no lo es. true ${pageContext.servletContext.serverInfo} Información sobre el contenedor JSP. Sun Java System Application Server 9.1_02 16 • Objeto: pageContext
  • 17. Expression Language (EL) • Objeto: pageContext.errorData – Cuando se produce un error la excepción ocurrida se adjunta al contexto de la página, información adicional en forma de bean con nombre errorData. Este bean tiene las siguientes propiedades: 17 Propiedad Tipo Java Descripción requestURI String URI de la petición fallida. servletName String Nombre de la página o servlet que lanzó la excepción. statusCode int Código HTTP del fallo. throwable Throwable La excepción que produjo el fallo.
  • 18. Expression Language (EL) • Objeto: pageContext.errorData – Para declarar una página de error JSP que responda a un código o excepción, podemos usar el web.xml: <error-page> <exception-type>java.lang.Throwable</exception-type> <location>/errorPage.jsp</location> </error-page> – O una declaración para una página concreta: <%@page errorPage="errorPage.jsp" %> – En la página de error debemos incluir: <%@page isErrorPage="true" %> 18
  • 19. Expression Language (EL) • Objeto: pageContext.errorData – Un ejemplo de la codificación de la página de error: <body> <p>URI del requerimiento fallido: ${pageContext.errorData.requestURI}</p> <p>Quien lanzo el error: ${pageContext.errorData.servletName}</p> <p>Código de error: ${pageContext.errorData.statusCode}</p> <p>Excepción: ${pageContext.errorData.throwable.class}</p> <p>Mensaje: ${pageContext.errorData.throwable.message}</p> </body> 19
  • 20. 20 Funciones • Las funciones representan un modo de extender la funcionalidad del lenguaje de expresiones. Se usan dentro de cualquier expresión EL, ejemplo: Mi nombre de usuario tiene ${fn:length(username)} letras. • A continuación tenemos la lista de funciones disponibles: – contains(string, substring) -> boolean – containsIgnoreCase(string, substring) -> boolean – endsWith(string, suffix) -> boolean – escapeXml(string) -> String – indexOf(string, substring) -> int – join(collection, separator) -> String – length(collection) -> int – replace(inputString, beforeSubstring, afterSubstring) -> String – split(string, separator) -> String[] – startsWith(string, prefix) -> boolean – substring(string, beginIndex, endIndex) -> String – substringAfter(string, substring) -> String – substringBefore(string, substring) -> String – toLowerCase(string) -> String – toUpperCase(string) -> String – trim(string) -> String
  • 21. Etiquetas Core • c:out – Muestra el resultado de una expresión. Su funcionalidad es equivalente a la de <%= %>. 21 Atributo Descripción Requerido Por defecto value información a mostrar sí ninguno default información a mostrar por defecto no cuerpo escapeXml true si debe convertir caracteres especiales a sus correspondientes entidades (por ejemplo, &gt; para <). no true
  • 22. Etiquetas Core • c:set • c:remove 22 Atributo Descripción Requerido Por defecto value Información a grabar. no cuerpo target Nombre de un bean cuya propiedad será modificada no ninguno property Propiedad a modificar no ninguna var Nombre de la variable en la que guardar. no ninguno scope Ámbito de la variable en la que grabar la información (page, request, session, o application) no page Atributo Descripción Requerido Por defecto var Nombre de la variable a quitar sí -- scope Ámbito de la variable a quitar. no todos los ámbitos
  • 23. 23 Etiquetas Core • c:if – En el cuerpo es posible colocar otras etiquetas, incluyendo otras <c:if>. Es útil guardar el resultado de evaluar la condición para evitar repetir los cálculos. <c:if test="${cadena == null}"> La cadena es nula o no definida. </c:if> Atributo Descripción Requerido Por defecto test Condición a evaluar. Solo procesa el cuerpo si es true. sí -- var Nombre de la variable para la valor resultante de la evaluación de la condición. El tipo de la variable es booleano. no ninguno scope Ámbito de la variable. no page
  • 24. 24 Etiquetas Core • c:choose, c:when, c:otherwise – <c:choose> no tiene atributos. Acepta como hijos uno o más <c:when>. – <c:when> tiene un único atributo: – <c:otherwise> no tiene atributos. Atributo Descripción Requerido Por defecto Test Condición a evaluar. sí --
  • 25. 25 Etiquetas Core • c:choose, c:when, c:otherwise <body> <c:set var="nota" value="${param.nota}"/> Nota:<c:out value="${nota}"/><br> Condición: <c:choose> <c:when test="${nota >= 14}">Aprobado</c:when> <c:when test="${nota >= 11}">Asistente</c:when> <c:when test="${nota >= 0}">Desaprobado</c:when> <c:otherwise>Nota Fuera de Rango</c:otherwise> </c:choose> </body>
  • 26. 26 Etiquetas Core • c:forEach Sintaxis 1: <c:forEach [var=”nombreVariable”] items=”colección” [varStatus=”variableEstado”] [begin=”inicio”] [end=”fin”] [step=”paso”]> Contenido del Cuerpo </c:forEach> Sintaxis 2: <c:forEach [var=”nombreVariable”] [varStatus=”variableEstado”] begin=”inicio” end=”fin” [step=”paso”]> Contenido del Cuerpo </c:forEach>
  • 27. 27 Etiquetas Core • c:forEach Atributo Descripción Requerido Por defecto items Colección sobre la que se itera. no ninguno begin Elemento con el que empezar (0=primero). no 0 end Elemento con el que terminar (0=primero). no último step Procesa solo cada step elementos. no 1 (todos) var Nombre del atributo con el que exponer el elemento actual. no ninguno varStatus Nombre de la variable con la que exponer el estado de la iteración. no ninguno
  • 28. 28 Etiquetas Core • c:forEach – La variable varStatus tiene propiedades que describen el estado de la iteración: Atributo Tipo Requerido begin número El valor del atributo begin. current número El elemento actual. end número El valor del atributo end. index número Índice del elemento actual dentro de la colección. count número Número de iteración (empezando en 1). first boolean Indica si estamos en la primera iteración. last boolean Indica si estamos en la última iteración. step número El valor del atributo step.
  • 29. Etiquetas Core • c:forEach – Muestra el mensaje "Alianza Campeón" 10 veces. <c:forEach var="n" begin="1" end="10"> <p>${n} Alianza Campeón</p> </c:forEach> – Imprime el nombre y apellido paterno de una lista de empleados. <c:set var="mensaje" value="${requestScope.mensaje}" /> <c:set var="lista" value="${requestScope.lista}" /> <c:out value="${mensaje}"/><br> <c:if test="${fn:length(lista) == 0}"> <c:out value="No hay elementos."/><br> </c:if> <c:forEach items="${lista}" var="item"> ${item.nombre} ${item.paterno}<br> </c:forEach> 29
  • 30. Etiquetas core • Etiqueta: param Sintaxis: – El valor del parámetro se especifica en el atributo “value”. <c:param name=”nombreParámetro” value=”valorParámetro”/> – El valor del parámetro se especifica en el contenido del cuerpo. <c:param name=”nombreParámetro”> valorParámetro </c:param> 30
  • 31. Etiquetas core • Etiqueta: redirect Sintaxis: – Sin contenido en el cuerpo. <c:redirect url=”recurso” [context=”contexto”]/> – Con contenido en el cuerpo para especificar el valor de los parámetros. <c:redirect url=”recurso” [context=”contexto”]> Etiquetas c:param </c:redirect> 31
  • 32. Etiquetas core • Etiqueta: url Sintaxis: – Sin contenido en el cuerpo. <c:url value=”valor” [context=”contexto”] [var=”nombreVariable”] [scope=”{page|request|session|application}”]/> – Con contenido en el cuerpo para especificar los parámetros. <c:url value=”valor” [context=”contexto”] [var=”nombreVariable”] [scope=”{page|request|session|application}”]> Etiquetas <c:param> </c:url> 32
  • 33. Etiquetas core • Etiqueta: url A continuación tenemos un ejemplo ilustrativo: <c:url value="demo05.jsp" var="destino"> <c:param name="nota" value="15"/> </c:url> <a href="${destino}">Enlace</a> 33
  • 34. Etiquetas core • Etiqueta: catch Sintaxis: <c:catch [var=”nombreVariable”]> Acciones Anidadas. </c:catch> 34
  • 35. Etiquetas core • Etiqueta: catch A continuación tenemos un ejemplo ilustrativo. <c:catch var="error1"> <fmt:parseNumber var="total" value="ABCD"/> Importe: ${dato.total}<br> </c:catch> <c:if test="${not empty error1}"> Lo sentimos, no existe el dato solicitado.<br> Error: ${error1} </c:if> 35
  • 36. Proyectos Proyecto 1 Desarrollar un proyecto que permita generar la tabla de multiplicar de un número. El usuario es quien ingresa el número del que quiere la tabla de multiplicar. 36
  • 37. Proyectos Proyecto 2 Desarrollar un proyecto que permita al usuario ingresar dos puntos del plano cartesiano. La aplicación luego debe reportar lo siguiente: • De cada punto debe reportar en que cuadrante se encuentra. • La distancia entre los dos puntos. 37
  • 38. 38 CURSOS VIERTUALES DE PROGRAMACIÓN