Guia de estudio para Oracle Certified Java EE 6 Web Component Developer

49
Oracle Certified Expert, Java EE 6 Web Component Developer (1Z0-899)-Guía de estudio Oscar Vásquez Flores ([email protected] ) Guia de estudio para OCEJWCD6 “Oracle Certified Expert, Java EE 6 Web Component Developer” Fecha Cambios 2013-07-23 Primera publicación I. Informacion del examen. Duración : 140 minutos Nro. de preguntas : 57 % para aprobar : 64% Costo : $150 USD

Transcript of Guia de estudio para Oracle Certified Java EE 6 Web Component Developer

Page 1: Guia de estudio para Oracle Certified Java EE 6 Web Component Developer

Oracle Certified Expert, Java EE 6 Web Component Developer (1Z0-899)-Guía de estudio

Oscar Vásquez Flores ([email protected] )

Guia de estudio para OCEJWCD6

“Oracle Certified Expert, Java EE 6 Web Component

Developer”

Fecha Cambios

2013-07-23 Primera publicación

I. Informacion del examen.

Duración : 140 minutos

Nro. de preguntas : 57

% para aprobar : 64%

Costo : $150 USD

Page 2: Guia de estudio para Oracle Certified Java EE 6 Web Component Developer

Oracle Certified Expert, Java EE 6 Web Component Developer (1Z0-899)-Guía de estudio

Oscar Vásquez Flores ([email protected] )

II. Temas del examen

1. Introducción a los Java Servlets.

1.1. Describir a las aplicaciones Web, CGI y el rol de Java.

1.2. Describir los beneficios de la tecnología Java Servlet.

1.3. Crear un simple Java Servlet.

1.4. Definir la arquitectura de 3 capas.

1.5. Definir la arquitectura Modelo-Vista-Controlador (MVC).

2. Introducción a los Java Server Pages.

2.1. Describir porque los Servlets no son suficientes.

2.2. Describir lo principal de JSPs

2.3. Entender los fundamentos y razones para la arquitectura MVC.

3. Implementando un diseño MVC.

3.1. Programar un controlador utilizando un Servlet.

3.2. Programar una vista utilizando un JSP.

3.3. Pasar el control desde un Servlet hacia un JSP.

3.4. Entender los fundamentos de EL.

3.5. Implementar un sistema simple basado en MVC.

4. El entorno de un Servlet.

4.1. Entender los detalles del protocolo HTTP.

4.2. Entender los fundamentos de un formulario HTML.

4.3. Entender los fundamentos de un HttpServlet y las APIs relacionadas.

4.4. Escribir código que maneje sesiones de un cliente y cookies.

5. Facilidades del contenedor para Servlets JSPs.

5.1. Entender el propósito y la estructura de los descriptores de despliegue.

5.2. Controlar el Context Root y el Servlet Mapping.

5.3. Creando y utilizando parametros de inicio y de contexto.

5.4. Utilizando anotaciones para configurar Servlets.

6. Facilidades adicionales para la parte vista.

6.1. Entender los cuatro niveles de alcances de los datos.

6.2. Entender y usar EL

6.3. Entender y usar los objetos implícitos de EL.

6.4. Crear y usar expresiones aritméticas en EL.

6.5. Identificar la necesidad para iteración y selección dentro de la vista, usar

los Tags de JSTL para estas necesidades.

7. Desarrollando páginas JSP.

7.1. Entender el origen, beneficios y debilidades de los JSPs.

7.2. Describir la tecnología JSP, la conversión de JSP a Servlet y el ciclo de

vida de una JSP.

7.3. Entender los elementos de scripting de JSP, declaraciones y directivas.

7.4. Uso de las variables implícitas de los JSPs.

7.5. Entender y usar los tags estándares (jsp:) de JSP.

8. Desarrollando páginas JSP utilizando Tags personalizados.

8.1. Relacionar el JSTL a las tareas comunes de desarrollo de una aplicación

Web, y entender el uso de Tags en el desarrollo de JSPs.

8.2. Reconocer la correcta sintaxis para los Tags.

8.3. Configurar un JSP utilizando los Tags de JSTL.

8.4. Escribir código JSP utilizando diversos Tags estándares.

8.5. Listar las capacidades de los Tags de JSTL.

Page 3: Guia de estudio para Oracle Certified Java EE 6 Web Component Developer

Oracle Certified Expert, Java EE 6 Web Component Developer (1Z0-899)-Guía de estudio

Oscar Vásquez Flores ([email protected] )

9. Facilidades adicionales para la parte controlador.

9.1. Entender el ciclo de vida de un Servlet.

9.2. Describir y usar elementos avanzados adicionales del API Servlet.

9.3. Crear filtros y usarlos en aplicaciones Web.

10. Facilidades adicionales para la parte modelo.

10.1. Entender los roles de JDBC y JPA

10.2. Entender los diferentes elementos que conforman el modelo.

10.3. Entender los fundamentos de conexión a base de datos utilizando JDBC o

JPA.

11. Aplicaciones Web asíncronas.

11.1. Entender las interacciones necesarias para las páginas Web asíncronas.

11.2. Entender el rol del estilo AJAX para la programación del lado del cliente.

11.3. Implementar Servlets asíncronos utilizando las facilidades de JEE 6.

12. Seguridad de aplicaciones Web.

12.1. Entendiendo el rol del contenedor dentro de la seguridad.

12.2. Describir e implementar los cuatros modelos de autenticación.

12.3. Forzar el uso de encriptación entre una aplicación Web y el cliente

Browser.

12.4. Entender el rol de JAAS dentro de una autenticación pluggable/extensible

para aplicaciones Web.

Page 4: Guia de estudio para Oracle Certified Java EE 6 Web Component Developer

Oracle Certified Expert, Java EE 6 Web Component Developer (1Z0-899)-Guía de estudio

Oscar Vásquez Flores ([email protected] )

III. Desarrollo de temas

1. Introducción a los Java Servlets.

1.1. Describir a las aplicaciones Web, CGI y el rol de Java.

* CGI= Common Gateway Interface.

* Un CGI extiende las funcionalidades de un servidor web.

* Características de un CGI:

- Puede ser desarrollado en diversos lenguajes de programacion(C++, Visual

Basic, Perl, etc.), incluso en Java.

- Cada solicitud es un proceso en el servidor.

1.2. Describir los beneficios de la tecnología Java Servlet.

* Proceso único, es más rápido que los CGI.

* Más escalables que los CGI.

* Utilizan lenguaje de programación Java.

* Facilidades de la plataforma Java para el control de logs, seguridad y gestión de

errores.

Page 5: Guia de estudio para Oracle Certified Java EE 6 Web Component Developer

Oracle Certified Expert, Java EE 6 Web Component Developer (1Z0-899)-Guía de estudio

Oscar Vásquez Flores ([email protected] )

1.3. Crear un simple Java Servlet.

* Ejemplo de Servlet:

1.4. Definir la arquitectura de 3 capas.

* El diseño de las aplicaciones se pueden separa en base a capas o

responsabilidades, usualmente se dividen en 3 partes:

Presentación-Negocio-Datos.

1.5. Definir la arquitectura Modelo-Vista-Controlador (MVC).

* El MVC es un patrón de diseño de aplicaciones.

* El modelo representa a las entidades y lógica de negocio.

* La vista representa los elementos con los que el usuario va a interactuar.

* El controlador representa el flujo necesario para relacionar las vistas con el

modelo.

Page 6: Guia de estudio para Oracle Certified Java EE 6 Web Component Developer

Oracle Certified Expert, Java EE 6 Web Component Developer (1Z0-899)-Guía de estudio

Oscar Vásquez Flores ([email protected] )

2. Introducción a los Java Server Pages. 2.1. Describir porque los Servlets no son suficientes.

* Editar código HTML dentro de los Servlet es muy complicado.

* Los editores de páginas HTML (WYSIWYG) no trabajan con Servlets.

2.2. Describir lo principal de JSPs

* Editar código HTML dentro de los Servlet es muy complicado.

2.3. Entender los fundamentos y razones para la arquitectura MVC.

Page 7: Guia de estudio para Oracle Certified Java EE 6 Web Component Developer

Oracle Certified Expert, Java EE 6 Web Component Developer (1Z0-899)-Guía de estudio

Oscar Vásquez Flores ([email protected] )

3. Implementando un diseño MVC 3.1. Programar un controlador utilizando un Servlet.

* Controlador:

- Contenedor de los puntos de contacto.

- Selecciona y enlaza el modelo y la vista.

* Un Servlet controlador:

* El modelo:

Page 8: Guia de estudio para Oracle Certified Java EE 6 Web Component Developer

Oracle Certified Expert, Java EE 6 Web Component Developer (1Z0-899)-Guía de estudio

Oscar Vásquez Flores ([email protected] )

3.2. Programar una vista utilizando un JSP.

3.3. Pasar el control desde un Servlet hacia un JSP.

RequestDispatcher rd = request.getRequestDispatcher("view.jsp");

rd.forward(request, response);

3.4. Entender los fundamentos de EL.

3.5. Implementar un sistema simple basado en MVC.

Page 9: Guia de estudio para Oracle Certified Java EE 6 Web Component Developer

Oracle Certified Expert, Java EE 6 Web Component Developer (1Z0-899)-Guía de estudio

Oscar Vásquez Flores ([email protected] )

4. El entorno de un Servlet. 4.1. Entender los detalles del protocolo HTTP.

* Métodos del protocolo HTTP

Método

HTTP

Descripción

GET Pide una representación del recurso especificado. Por seguridad no

debería ser usado por aplicaciones que causen efectos ya que

transmite información a través de la URI agregando parámetros a

la URL.

Ejemplo:

GET /images/logo.png HTTP/1.1

obtiene un recurso llamado logo.png

Ejemplo con parámetros:

/index.php?page=main&lang=es

HEAD Pide una respuesta idéntica a la que correspondería a una petición

GET, pero sin el cuerpo de la respuesta. Esto es útil para la

recuperación de meta-información escrita en los encabezados de

respuesta, sin tener que transportar todo el contenido.

POST Somete los datos a que sean procesados para el recurso

identificado. Los datos se incluirán en el cuerpo de la petición. Esto

puede resultar en la creación de un nuevo recurso o de las

actualizaciones de los recursos existentes o ambas cosas.

PUT Sube, carga o realiza un upload de un recurso especificado

(archivo), es el camino más eficiente para subir archivos a un

servidor, esto es porque en POST utiliza un mensaje multiparte y

el mensaje es decodificado por el servidor. En contraste, el método

PUT te permite escribir un archivo en una conexión socket

establecida con el servidor. La desventaja del método PUT es que

los servidores de hosting compartido no lo tienen habilitado.

Ejemplo:

PUT /path/filename.html HTTP/1.1

DELETE Borra el recurso especificado.

TRACE Este método solicita al servidor que envíe de vuelta en un mensaje

de respuesta, en la sección del cuerpo de entidad, toda la data que

reciba del mensaje de solicitud. Se utiliza con fines de

comprobación y diagnostico.

OPTIONS Devuelve los métodos HTTP que el servidor soporta para un URL

específica. Esto puede ser utilizado para comprobar la

funcionalidad de un servidor web mediante petición en lugar de un

recurso especifico.

CONNECT Se utiliza para saber si se tiene acceso a un host, no

necesariamente la petición llega al servidor, este metodo se utiliza

principalmente para saber si un proxy nos da acceso a un host

bajo condiciones especiales, como por ejemplo "corrientes" de

datos bidireccionales encriptadas (como lo requiere SSL).

* Existe un método doXXX en Servlet para todos los métodos del HTTP excepto

para el CONNECT.

Page 10: Guia de estudio para Oracle Certified Java EE 6 Web Component Developer

Oracle Certified Expert, Java EE 6 Web Component Developer (1Z0-899)-Guía de estudio

Oscar Vásquez Flores ([email protected] )

HTTP request.

HTTP Header del request.

HTTP response

Page 11: Guia de estudio para Oracle Certified Java EE 6 Web Component Developer

Oracle Certified Expert, Java EE 6 Web Component Developer (1Z0-899)-Guía de estudio

Oscar Vásquez Flores ([email protected] )

HTTP Header del response

4.2. Entender los fundamentos de un formulario HTML.

4.3. Entender los fundamentos de un HttpServlet y las APIs relacionadas.

* ServletRequest

Page 12: Guia de estudio para Oracle Certified Java EE 6 Web Component Developer

Oracle Certified Expert, Java EE 6 Web Component Developer (1Z0-899)-Guía de estudio

Oscar Vásquez Flores ([email protected] )

Page 13: Guia de estudio para Oracle Certified Java EE 6 Web Component Developer

Oracle Certified Expert, Java EE 6 Web Component Developer (1Z0-899)-Guía de estudio

Oscar Vásquez Flores ([email protected] )

* HttpServletRequest

Page 14: Guia de estudio para Oracle Certified Java EE 6 Web Component Developer

Oracle Certified Expert, Java EE 6 Web Component Developer (1Z0-899)-Guía de estudio

Oscar Vásquez Flores ([email protected] )

4.4. Escribir código que maneje sesiones de un cliente y cookies.

HttpSession

Cookies:

* Son pares de key-dato almacenados en un archivo de texto.

Page 15: Guia de estudio para Oracle Certified Java EE 6 Web Component Developer

Oracle Certified Expert, Java EE 6 Web Component Developer (1Z0-899)-Guía de estudio

Oscar Vásquez Flores ([email protected] )

5. Facilidades del contenedor para Servlets y JSPs. 5.1. Entender el propósito y la estructura de los descriptores de

despliegue.

* Un WAR es JAR para aplicaciones Web.

* El context root es la URL base de la aplicación.

http://servidor:8080/modulo1/inicio.html

modulo1 es el context root.

* El context root por defecto es el nombre del WAR.

* Los recursos pueden ser colocados en el directorio META-INF/resources de los JAR

que se colocan en WEB-INF/lib.

* Estructura basica de un WAR

* La información de despliegue de un WAR puede ir en:

- web.xml dentro del directorio WEB-INF del WAR.

- web-fragment.xml dentro del directorio META-INF del JAR que se coloca en el

directorio WEB-INF/lib del WAR.

- Anotaciones en los archivos fuente.

5.2. Controlar el Context Root y el Servlet Mapping.

* Los archivos XML sobre escriben lo indicado por las anotaciones.

* Se pueden usar los Tags <metadata-completed>, <absolute-ordering>,

<ordering> y <tag> para prevenir los conflictos en el DD.

Page 16: Guia de estudio para Oracle Certified Java EE 6 Web Component Developer

Oracle Certified Expert, Java EE 6 Web Component Developer (1Z0-899)-Guía de estudio

Oscar Vásquez Flores ([email protected] )

Servlet Mapping.

5.3. Creando y utilizando parametros de inicio y de contexto.

Parametros de contexto.

Parametros de inicio de un Servlet.

5.4. Utilizando anotaciones para configurar Servlets.

Mapeo de un Servlet.

Parametros de inicio de un Servlet.

Page 17: Guia de estudio para Oracle Certified Java EE 6 Web Component Developer

Oracle Certified Expert, Java EE 6 Web Component Developer (1Z0-899)-Guía de estudio

Oscar Vásquez Flores ([email protected] )

6. Facilidades adicionales para la parte vista.

6.1. Entender los cuatro niveles de alcances de los datos.

6.2. Entender y usar EL

* Activando o desactivando Scripting y EL:

* Utilizando el carácter de escape \ la expresión no se evalúa:

\${expresión}

* Operadores de comparación:

Page 18: Guia de estudio para Oracle Certified Java EE 6 Web Component Developer

Oracle Certified Expert, Java EE 6 Web Component Developer (1Z0-899)-Guía de estudio

Oscar Vásquez Flores ([email protected] )

* Operadores lógicos

* empty se utiliza para evaluar null, String vacío o array/Collection/Map sin

elementos.

* Si utilizamos una variable que es null o que no existe, no se genera excepción y

se retorna una cadena vacía o una valor según el contexto de la operación donde se

encuentre.

* Si utilizamos un atributo que no existe de una variable que si existe, por ejemplo

${existe.noencuentra} entonces se genera una excepción.

* Se puede obtener un elemento de un array (Java arrays o implementaciones de

List) utilizando índices, por ejemplo: ${paramValues.nombre[2]}

El índice puede ser un String que se puede parsear a entero, lo siguiente es valido:

${paramValues.nombre[“2.0”]}

El índice puede ser una expresión que retorne algún valor correcto.

* Podemos utilizar índices de array de forma directa en métodos (De JavaBeans)

que retornen un array, por ejemplo una empresa puede tener varios clientes (Se

obtiene el array de clientes con el metodo getClientes()) y un cliente tiene el

atributo fechaNacimiento, entonces:

${requestScope.empresa.clientes[0].fechaNacimiento}

Obtiene la fecha de nacimiento del primer cliente.

* Podemos buscar los atribuçtos de un objeto como si fueran elementos de un

array, por ejemplo:

${requestScope[“empresa”].propietario[“nombre”]}

Busca el valor del atributo nombre de un propietario de la empresa.

* Cuando utilizamos ${variable} el parser utilizara PageContext.findAttribute()

para buscar la variable desde el scope page hasta application.

EL Function.

Ejemplo: ${xx:randomColor()}

Se requiere:

1. Crear una clase que tenga la definición del método (función) a invocar.

package foo;

public class RandomColorGenerator{

public static String pickRandomColor(){

///código.

}

}

2. Descripción en el TLD:

<taglib>

Page 19: Guia de estudio para Oracle Certified Java EE 6 Web Component Developer

Oracle Certified Expert, Java EE 6 Web Component Developer (1Z0-899)-Guía de estudio

Oscar Vásquez Flores ([email protected] )

<function>

<name>randomColor</name>

<function-class>foo.RandomColorGenerator</function-class>

<function-signature>String pickRamdomColor()</function-signature >

</function>

</taglib>

6.3. Entender y usar los objetos implícitos de EL.

* initParam obtiene los parametros de contexto y no del Servlet.

Page 20: Guia de estudio para Oracle Certified Java EE 6 Web Component Developer

Oracle Certified Expert, Java EE 6 Web Component Developer (1Z0-899)-Guía de estudio

Oscar Vásquez Flores ([email protected] )

6.4. Crear y usar expresiones aritméticas en EL.

* Observar la siguiente expresión:

${param.miles * 1.69}

Si miles es null o no existe entonces param.miles retornara 0, en caso de ser una

cadena y se pueda convertir a numérico se realizara.

* ${0 * false} retornara un error de compilación, false no se puede transformar a

un numérico.

6.5. Identificar la necesidad para iteración y selección dentro de la vista,

usar los Tags de JSTL para estas necesidades.

* Tag if

* Tag forEach

Page 21: Guia de estudio para Oracle Certified Java EE 6 Web Component Developer

Oracle Certified Expert, Java EE 6 Web Component Developer (1Z0-899)-Guía de estudio

Oscar Vásquez Flores ([email protected] )

* La colleccion puede ser:

- Collection

- Iterator

- Map

- Enumeration

- Array

- Cadenas de texto separados por coma.

Page 22: Guia de estudio para Oracle Certified Java EE 6 Web Component Developer

Oracle Certified Expert, Java EE 6 Web Component Developer (1Z0-899)-Guía de estudio

Oscar Vásquez Flores ([email protected] )

7. Desarrollando páginas JSP.

7.1. Entender el origen, beneficios y debilidades de los JSPs.

* El mantenimiento de HTML en los Servlets es muy complicado.

* JSP es básicamente código HTML con código Java embebido.

* Se puede utilizar cualquier herramienta de construcción de páginas HTML para

construir páginas JSPs.

7.2. Describir la tecnología JSP, la conversión de JSP a Servlet y el ciclo

de vida de una JSP.

Ciclo de vida del JSP

7.3. Entender los elementos de scripting de JSP, declaraciones y

directivas.

Elementos de

scripting

Sintaxis estándar Sintaxis XML

Comentario <%-- comentario --%> <!-- comentario -->

Directiva <%@ directiva %> <jsp:directive.include .. />

<jsp:directive.page .. />

Declaración <%! declaración %> <jsp:declaration> ..

</jsp:declaration >

Scriptlet <% código %> <jsp:scriptlet> ..

</jsp:scriptlet>

Expresión <%= expresión %> <jsp:expression> ..

</jsp:expression>

Page 23: Guia de estudio para Oracle Certified Java EE 6 Web Component Developer

Oracle Certified Expert, Java EE 6 Web Component Developer (1Z0-899)-Guía de estudio

Oscar Vásquez Flores ([email protected] )

@page

* Tipos de comentarios en JSP

* Las declaraciones se utilizan para especificar miembros (atributos, métodos, inner

Class) al Servlet generado. La programacion en la declaración debe seguir la

sintaxis Java.

Page 24: Guia de estudio para Oracle Certified Java EE 6 Web Component Developer

Oracle Certified Expert, Java EE 6 Web Component Developer (1Z0-899)-Guía de estudio

Oscar Vásquez Flores ([email protected] )

* Sobre escribiendo métodos:

* El código Scriptlet se colocará por defecto dentro del método _jspService() , este

metodo no se puede sobre escribir.

Page 25: Guia de estudio para Oracle Certified Java EE 6 Web Component Developer

Oracle Certified Expert, Java EE 6 Web Component Developer (1Z0-899)-Guía de estudio

Oscar Vásquez Flores ([email protected] )

7.4. Uso de las variables implícitas de los JSPs.

Variables implícitas en JSP:

Nombre de

variable

Descripción

request Un objeto de HttpServletRequest asociado con el request.

response Un objeto de HttpServletResponse asociado con el

response.

out Un objeto JspWrite asociado con enviar un stream en el

response.

session Un objeto HttpSession asociado con la sesión de usuario.

Esta variable no existe si el JSP no participa dentro de una

sesión.

application Un objeto ServletContext para la aplicación Web.

config Un objeto ServletConfig asociado con el Servlet para el JSP.

pageContext Un objeto PageContext que encapsula el entorno de un

request para el JSP.

Page Es equivalente a la palabra reservada this en programación

Java.

exception Un objeto Throwable que fue lanzado por una otro JSP.

La variable esta disponible únicamente si el JSP es de tipo

error.

Miembros importantes de PageContext

* Object findAttribute(String name), busca el atributo según el siguiente orden de

scope: page, request, session, application.

* Object getAttribute(String name), busca el atributo en el scope page.

* Object getAttribute(String name, int scope)

* void fordward(String relativeUrl)

* JspWriter getOut()

* Object getPage()

* ServletRequest getRequest()

* ServletResponse getResponse()

* ServletConfig getServletConfig()

* ServletContext getServletContext()

* HttpSession getSession()

7.5. Entender y usar los tags estándares (jsp:) de JSP.

* Tag useBean

Page 26: Guia de estudio para Oracle Certified Java EE 6 Web Component Developer

Oracle Certified Expert, Java EE 6 Web Component Developer (1Z0-899)-Guía de estudio

Oscar Vásquez Flores ([email protected] )

- Si el bean existe lo referencia, en caso contrario lo crea.

- El tag puede tener cuerpo.

- type se utiliza para hacer un cast al JavaBean.

- beanName, se utiliza Beans.instantiate() para la creación del JavaBean.

- El contenido del cuerpo es ejecutado únicamente si el bean es creado.

- El JavaBean deberá tener un constructor sin argumentos.

- El JavaBean no deberá tener atributos public.

- El JavaBean deberá implementar java.io.Serializable.

* Tag setProperty

* <jsp:setProperty name=”cust” property=”email”>

Es equivalente a:

cust.setEmail(request.getParameter(“email”));

* En value se puede indicar una expresión:

<jsp:setProperty name=”cust” property=”email” value=’<%=getEMailExtra()%>’>

* Tag getProperty

Page 27: Guia de estudio para Oracle Certified Java EE 6 Web Component Developer

Oracle Certified Expert, Java EE 6 Web Component Developer (1Z0-899)-Guía de estudio

Oscar Vásquez Flores ([email protected] )

* Otros Tags

* jsp:param

Tiene los atributos obligatorios: name y value.

Page 28: Guia de estudio para Oracle Certified Java EE 6 Web Component Developer

Oracle Certified Expert, Java EE 6 Web Component Developer (1Z0-899)-Guía de estudio

Oscar Vásquez Flores ([email protected] )

8. Desarrollando páginas JSP utilizando Tags personalizados. 8.1. Relacionar el JSTL a las tareas comunes de desarrollo de una

aplicación Web, y entender el uso de Tags en el desarrollo de JSPs.

* JSTL: JSP Standard Tag Library.

*

8.2. Reconocer la correcta sintaxis para los Tags.

8.3. Configurar un JSP utilizando los Tags de JSTL.

A. Tag personalizado clásico

* La librería de tags tienen un jar y un descriptor de la librería (TLD), con extensión

.tld.

* TLD debe iniciar con el tag taglib y requiere que se especifique la versión de JSP.

<taglib xmlns="http://java.sun.com/xml/ns/j2ee"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"

version="2.0">

* Sintaxis para utilizar la librería de tags:

<%@ taglib ( uri="tagLibraryURI" | tagdir="tagDir" )

prefix="tagPrefix" %>

Page 29: Guia de estudio para Oracle Certified Java EE 6 Web Component Developer

Oracle Certified Expert, Java EE 6 Web Component Developer (1Z0-899)-Guía de estudio

Oscar Vásquez Flores ([email protected] )

- prefix: Estos prefijos están reservados:

jsp:, jspx:, java:, javax:, servlet:, sun:, and sunw:

- tagdir: Se utiliza para ubicar a los tag file en el directorio /WEB-INF/tags/ o algún

sub directorio.

* Ejemplos de declaración:

* El jar se debe colocar en /WEB-INF/lib

* El TLD se puede colocar en /WEB-INF, algún subdirectorio de este, en el

directorio o subdirectorio /META-INF/ dentro del jar.

* Configuración en web.xml.

Declarando Tags en el TLD

Elementos del elemento <tag>

Ejemplo:

Page 30: Guia de estudio para Oracle Certified Java EE 6 Web Component Developer

Oracle Certified Expert, Java EE 6 Web Component Developer (1Z0-899)-Guía de estudio

Oscar Vásquez Flores ([email protected] )

Elementos del elemento <attribute>

Elementos del elemento <variable>

Alcance de la variable:

Programando un Tag

Ejemplo Tag simple:

<tt:basic/>

Handler: import javax.servlet.jsp.tagext.*;

public class HelloWorldSimpleTag extends SimpleTagSupport {

public void doTag() throws JspException, IOException {

getJspContext().getOut().write("Hello, world.");

}

}

Ejemplo de Tag con atributo: <c:if test="${Clear}">

Handler:

public void setTest(boolean test) {

this.test = test;

}

B. Tag file

* Los tag file es un alternativa para crear tags personalizados, se programan

únicamente con sintaxis JSP, es decir no requieren compilación, el archivo TLD es

opcional.

* El Web Container genera de forma automática un TLD en /WEB-INF/tags/.

* Se deben colocar únicamente en /WEB-INF/tags/ o algún subdirectorio.

* Se definen el tag file en un archivo con extensión .tag, .tagx o .tagf, el nombre

del archivo se utilizara como nombre del tag.

Page 31: Guia de estudio para Oracle Certified Java EE 6 Web Component Developer

Oracle Certified Expert, Java EE 6 Web Component Developer (1Z0-899)-Guía de estudio

Oscar Vásquez Flores ([email protected] )

* Tag file puede ser empaquetado en un jar, se deben colocar los tag file en /META-

INF/tags/ o algún subdirectorio.

* Si el Tag file es empaquetado se debe proporcionar un TLD.

Ejemplo 1: Tag simple

<%-- WEB-INF/tags/myExample.tag --%>

<% out.println("Hello, World !"); %>

<%@ taglib prefix="simpleTag" tagdir="/WEB-INF/tags" %>

<simpleTag:myExample />

Ejemplo 2: Utilizando atributos

<%-- WEB-INF/tags/myExample2.tag --%>

<%@ attribute name="someAttribute" %>

<% someAttribute = someAttribute.toUpperCase();

out.println(someAttribute);%>

<%@ taglib prefix="simpleTag" tagdir="/WEB-INF/tags" %>

<simpleTag:myExample2 someAttribute="hello" />

Ejemplo 3: Utilizando JSTL

<%-- WEB-INF/tags/myExample3.tag --%>

<%@ variable name-given="myVar" scope="AT_BEGIN" %>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<c:set var="myVar" value="3"/>

After: ${myVar}

<jsp:doBody/>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<%@ taglib prefix="sampleTag" tagdir="/WEB-INF/tags" %>

<c:set var="myVar" value="1"/>

Before: ${myVar} <br>

<simpleTag:myExample3/>

8.4. Escribir código JSP utilizando diversos Tags estándares.

* El Tag set:

Page 32: Guia de estudio para Oracle Certified Java EE 6 Web Component Developer

Oracle Certified Expert, Java EE 6 Web Component Developer (1Z0-899)-Guía de estudio

Oscar Vásquez Flores ([email protected] )

* El Tag url:

* El Tag out

value: Es lo que se escribirá.

escapeXml: Por defecto es true e indica que los caracteres <, >, &, ‘ y “ se

transformaran a su correspondiente carácter de entidad XML, por ejemplo el < se

transformara a: &lt;

default Value: Si value es null se escribe lo indicado en default.

- No se puede especificar el default como atributo y como cuerpo

Page 33: Guia de estudio para Oracle Certified Java EE 6 Web Component Developer

Oracle Certified Expert, Java EE 6 Web Component Developer (1Z0-899)-Guía de estudio

Oscar Vásquez Flores ([email protected] )

8.5. Listar las capacidades de los Tags de JSTL.

Lista de tags JSTL

Page 34: Guia de estudio para Oracle Certified Java EE 6 Web Component Developer

Oracle Certified Expert, Java EE 6 Web Component Developer (1Z0-899)-Guía de estudio

Oscar Vásquez Flores ([email protected] )

9. Facilidades adicionales para la parte controlador. 9.1. Entender el ciclo de vida de un Servlet.

*Ciclo de vida del Servlet.

* En un contenedor Web solo puede existir una instancia de Servlet por definición

de Servlet.

* SingleThreadModel esta deprecado.

* UnavailableException significa que se debe intentar mas tarde.

* ServletConfig

Page 35: Guia de estudio para Oracle Certified Java EE 6 Web Component Developer

Oracle Certified Expert, Java EE 6 Web Component Developer (1Z0-899)-Guía de estudio

Oscar Vásquez Flores ([email protected] )

9.2. Describir y usar elementos avanzados adicionales del API Servlet.

a. Upload de archivos.

* Manejando formularios de uploads

* Servlet para recibir el upload:

* Formulario de upload:

b. Listeners de eventos.

Tipos de eventos:

Categoría Descripción Interface

Cambios en el ciclo de

vida del contexto

* Creación del contexto.

* Bajada del contexto.

javax.servlet.

ServletContextListener

Cambios en los

atributos del contexto

* Agregar un atributo

de contexto.

* Remover un atributo

javax.servlet.

ServletContextAttributeListener

Page 36: Guia de estudio para Oracle Certified Java EE 6 Web Component Developer

Oracle Certified Expert, Java EE 6 Web Component Developer (1Z0-899)-Guía de estudio

Oscar Vásquez Flores ([email protected] )

de contexto.

* Remplazar un atributo

de contexto.

Cambios en el ciclo de

vida de la sesión

* Creación de la sesión.

* Eliminación de la

sesión.

* Timeout de la sesión.

javax.servlet.http.

HttpSessionListener

Cambios en los

atributos de la sesión.

* Agregar un atributo

de sesión.

* Remover un atributo

de sesión.

* Remplazar un atributo

de sesión.

javax.servlet.http.

HttpSessionAttributeListener

Cambios en el request Interface for receiving

notification events about

requests coming into and

going out of scope of a

web application.

A ServletRequest is

defined as coming into

scope of a web

application when it is

about to enter the first

servlet or filter of the

web application, and as

going out of scope as it

exits the last servlet or

the first filter in the

chain.

ServletRequestListener

Cambios en los

atributos del request.

Interface for receiving

notification events

about ServletRequest

attribute changes.

Notifications will be

generated while the

request is within the

scope of the web

application. A

ServletRequest is

defined as coming into

scope of a web

application when it is

about to enter the first

servlet or filter of the

web application, and as

going out of scope when

it exits the last servlet

or the first filter in the

chain.

ServletRequestAttributeListener

* La anotación con @WebListener o su equivalente en DD solo aplica para los

listener anteriores.

Page 37: Guia de estudio para Oracle Certified Java EE 6 Web Component Developer

Oracle Certified Expert, Java EE 6 Web Component Developer (1Z0-899)-Guía de estudio

Oscar Vásquez Flores ([email protected] )

Clases:

ServletContextListener

ServletContextAttributeListener

HttpSessionListener

HttpSessionAttributeListener

HttpSessionBindingListener

Permite notificar a un objeto cuando es colocado o retirado de una sesión.

HttpSessionActivationListener

Permite notificar a un objeto en sesión cuando se activa o pasiva.

Page 38: Guia de estudio para Oracle Certified Java EE 6 Web Component Developer

Oracle Certified Expert, Java EE 6 Web Component Developer (1Z0-899)-Guía de estudio

Oscar Vásquez Flores ([email protected] )

9.3. Crear filtros y usarlos en aplicaciones Web.

El API Filter

* Configurando un filtro utilizando anotaciones.

* Configurando un filtro utilizando DD.

Page 39: Guia de estudio para Oracle Certified Java EE 6 Web Component Developer

Oracle Certified Expert, Java EE 6 Web Component Developer (1Z0-899)-Guía de estudio

Oscar Vásquez Flores ([email protected] )

Para un Servlet especifico también se puede utilizar:

* El API Wrapping

- Permiten modificar el request y response.

- Se aplican en filtros o en cualquier lugar donde se requiera.

- Implementan el patrón de diseño Decorator o Wrapper

Clases disponibles:

ServletRequestWrapper

HttpServletRequestWrapper

ServletResponseWrapper

HttpServletResponseWrapper.

Ejemplo:

Deseamos cambiar el valor del parámetro nombre que llega al Servlet.

Creamos una clase que extienda HttpServletRequestWrapper y sobre escribimos

el metodo getParameter().

Page 40: Guia de estudio para Oracle Certified Java EE 6 Web Component Developer

Oracle Certified Expert, Java EE 6 Web Component Developer (1Z0-899)-Guía de estudio

Oscar Vásquez Flores ([email protected] )

Servlet que cambia el valor del parámetro

Page 41: Guia de estudio para Oracle Certified Java EE 6 Web Component Developer

Oracle Certified Expert, Java EE 6 Web Component Developer (1Z0-899)-Guía de estudio

Oscar Vásquez Flores ([email protected] )

A este Servlet ya llega el parámetro cambiado.

Valor mostrado en el Browser:

Page 42: Guia de estudio para Oracle Certified Java EE 6 Web Component Developer

Oracle Certified Expert, Java EE 6 Web Component Developer (1Z0-899)-Guía de estudio

Oscar Vásquez Flores ([email protected] )

10. Facilidades adicionales para la parte modelo.

10.1. Entender los roles de JDBC y JPA

API JDBC:

* Un pool de conexión es soportado desde JDBC v2.

* El paquete principal para JDBC es java.sql.*

* El metodo DriverManager.getConnection() obtiene una conexión exclusiva a la

base de datos.

* javax.sql.DataSource simplifica el trabajo con pools de conexiones y es portable a

través de los servidores de aplicaciones.

* Un objeto de javax.sql.DataSource se obtiene por medio de JNDI:

Context ctx = new InitialContext();

ds = (DataSource)ctx.lookup(“java:comp/env/jdbc/leagueDB”);

* DataSource usualmente retorna una conexión a la base de datos desde el pool de

conexiones, cuando se cierra la conexión, esta retorna al pool.

JPA:

* An entity, defined by the programmer

* Mappings from entity to the database

* Annotations or default rules

* persistence.xml specifying the DataSource

* JNDI lookup service

* A DataSource connected to a connection pool

* A connection pool connected to the database

* The database with appropriate tables

10.2. Entender los diferentes elementos que conforman el modelo.

Page 43: Guia de estudio para Oracle Certified Java EE 6 Web Component Developer

Oracle Certified Expert, Java EE 6 Web Component Developer (1Z0-899)-Guía de estudio

Oscar Vásquez Flores ([email protected] )

ds = (DataSource)ctx.lookup(“java:comp/env/jdbc/leagueDB”);

if ( ds == null ) {

throw new RuntimeException(“DataSource not found.”);

}

connection = ds.getConnection();

stmt = connection.prepareStatement(

“SELECT * FROM LEAGUE_TABLE WHERE ‘year’=?1 and ‘season’=?2”);

stmt.setInt(1, year);

stmt.setString(2, season);

results = stmt.executeQuery();

while ( results.next() ) {

int objectID = results.getInt(“LID”);

num_of_rows++;

if ( num_of_rows > 1 ) {

throw new SQLException(“Too many rows.”);

}

int theYear = results.getInt(“year”),

String theSeason = results.getString(“season”),

}

10.3. Entender los fundamentos de conexión a base de datos utilizando

JDBC o JPA.

JPA:

* Obtener un EM

@PersistenceContext private EntityManager em;

* EM se suele utilizar en aplicaciones JEE

* Obtener un PU

@PersistenceUnit(unitName="EmployeeService")

private EntityManagerFactory factory;

EntityManager createdManager = factory.createEntityManager();

* PU se suele utilizar en aplicaciones JSE.

JDBC:

Page 44: Guia de estudio para Oracle Certified Java EE 6 Web Component Developer

Oracle Certified Expert, Java EE 6 Web Component Developer (1Z0-899)-Guía de estudio

Oscar Vásquez Flores ([email protected] )

11. Aplicaciones Web asíncronas.

11.1. Entender las interacciones necesarias para las páginas Web

asíncronas.

* Servlets asíncronos se agregaron en JEE 6.

* Evita que la thread del Servlet quede bloqueada por la espera en alguna

condición externa.

* Permite que la respuesta HTTP sea generada por una thread cualquiera.

* Aunque es distinto de AJAX, se puede usar en conjunto con esa tecnología para

mejorar la experiencia del usuario.

11.1. Entender el rol del estilo AJAX para la programación del lado del

cliente.

* AJAX permite que una página genere request a un servidor web de forma

asíncrona.

* Las páginas se actualizaran de forma dinámica.

* Proceso de atención con AJAX:

- Cliente solicita una página al servidor.

- Servidor responde, la página utiliza JavaScript.

- El cliente invoca a algún metodo de JavaScript.

- JavaScript invoca a algún servicio del servidor de forma asíncrona.

- El servidor responde actualizando el DOM (XML)/JavaScript (JSON) del cliente.

* Una mejora de HTTP 1.1 vs HTTP 1.0 es la persistencia de la conexión TCP, de

esta forma la misma conexión se utiliza para request sucesivos.

Ejemplo de página JSP que utiliza AJAX.

Page 45: Guia de estudio para Oracle Certified Java EE 6 Web Component Developer

Oracle Certified Expert, Java EE 6 Web Component Developer (1Z0-899)-Guía de estudio

Oscar Vásquez Flores ([email protected] )

update.jsp

11.3. Implementar Servlets asíncronos utilizando las facilidades de JEE 6.

* No se puede hacer un dispatching desde un Servlet síncrono hacia un Servlet

asíncrono.

Código del Servlet asíncrono:

En XML <async-supported>true</async-supported>

Page 46: Guia de estudio para Oracle Certified Java EE 6 Web Component Developer

Oracle Certified Expert, Java EE 6 Web Component Developer (1Z0-899)-Guía de estudio

Oscar Vásquez Flores ([email protected] )

El Handler de control:

Listeners:

AsyncListener:

Page 47: Guia de estudio para Oracle Certified Java EE 6 Web Component Developer

Oracle Certified Expert, Java EE 6 Web Component Developer (1Z0-899)-Guía de estudio

Oscar Vásquez Flores ([email protected] )

Page 48: Guia de estudio para Oracle Certified Java EE 6 Web Component Developer

Oracle Certified Expert, Java EE 6 Web Component Developer (1Z0-899)-Guía de estudio

Oscar Vásquez Flores ([email protected] )

12. Seguridad de aplicaciones Web. 12.1. Entendiendo el rol del contenedor dentro de la seguridad.

El contenedor proporciona todos los mecanismos de seguridad.

12.2. Describir e implementar los cuatros modelos de autenticación.

* Modelos de autenticación:

Basic

Autenticación basica HTTP, se basa en un usario/clave que va como parte del

header de HTTP, no es posible un mecanismo de logout y la interface grafica para

pedir los datos de usuario/clave deben del browser. Se utiliza poco este

mecanismo.

Requiere HTTPS para proteger la clave.

Digest

Es similar al Basic, pero transporta el usuario/clave de forma encriptada, el browser

sigue contralando la interface de solicitud de usuario/clave. Se utiliza poco este

mecanismo. Algunos Contenedores pueden no soportarlo.

Form

Es el mecanismo más popular, se puede diseñar un formulario personalizado para

solicitar el usuario/clave, se debe usar HTTPS para proteger los datos.

Client Certificate.

El cliente requiere tener un certificado digital y este debe estar almacenado (La

llave publica) en el servidor, de esa forma se autentica al cliente. Es un mecanismo

muy seguro.

* Especificaciones en el DD

login-config?:

auth-method?: BASIC, DIGEST, CLIENT-CERT, FORM

realm-name?: Nombre del repositorio de usuarios/grupos.

form-login-config?: Para el caso de un formulario personalizado.

form-login-page?: Página que contiene el login deben iniciar con “/”

form-error-page?: Página que contiene el error deben iniciar con “/”

* Formulario personalizado:

<form method='post' action='j_security_check'>

<input type='text' name='j_username'> <input type='password' name='j_password'>

</form>

Page 49: Guia de estudio para Oracle Certified Java EE 6 Web Component Developer

Oracle Certified Expert, Java EE 6 Web Component Developer (1Z0-899)-Guía de estudio

Oscar Vásquez Flores ([email protected] )

12.3. Forzar el uso de encriptación entre una aplicación Web y el cliente

Browser.

Como anotación transport-guarantee:

NONE: No hay restricciones respecto al transporte.

INTEGRAL: La data enviada entre el cliente y el servidor no debe ser cambiada en

el camino.

CONFIDENTIAL: La data no debe ser observada por terceros.

Tanto INTEGRAL como CONFIDENTIAL requieren por lo menos el uso de un

certificado SSL en el lado del servidor.

12.4. Entender el rol de JAAS dentro de una autenticación

pluggable/extensible para aplicaciones Web.

JAAS me permite tener independencia del repositorio para la autenticación y

autorización, este puede ser una simple base de datos o una LDAP, mi aplicación

Web no se afecta por el tipo de repositorio.

<security-constraint>

. . .

<user-data-constraint>

<description/>

<transport-guarantee>CONFIDENTIAL</transport-guarantee>

</user-data-constraint>

</security-constraint>

@ServletSecurity(@HttpConstraint(transportGuarantee

= TransportGuarantee.CONFIDENTIAL))