Guia de estudio para Oracle Certified Java EE 6 Web Component Developer
-
Upload
oscar-vasquez-flores -
Category
Documents
-
view
6.524 -
download
2
Transcript of 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
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.
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.
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.
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.
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.
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:
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.
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.
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
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
Oracle Certified Expert, Java EE 6 Web Component Developer (1Z0-899)-Guía de estudio
Oscar Vásquez Flores ([email protected] )
Oracle Certified Expert, Java EE 6 Web Component Developer (1Z0-899)-Guía de estudio
Oscar Vásquez Flores ([email protected] )
* HttpServletRequest
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.
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.
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.
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:
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>
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.
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
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.
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>
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.
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.
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
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
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.
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" %>
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:
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.
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:
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: <
default Value: Si value es null se escribe lo indicado en default.
- No se puede especificar el default como atributo y como cuerpo
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
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
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
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.
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.
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.
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().
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
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:
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.
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:
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.
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>
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:
Oracle Certified Expert, Java EE 6 Web Component Developer (1Z0-899)-Guía de estudio
Oscar Vásquez Flores ([email protected] )
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>
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))