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

8.420 visualizaciones

Publicado el

0 comentarios
7 recomendaciones
Estadísticas
Notas
  • Sé el primero en comentar

Sin descargas
Visualizaciones
Visualizaciones totales
8.420
En SlideShare
0
De insertados
0
Número de insertados
14
Acciones
Compartido
0
Descargas
475
Comentarios
0
Recomendaciones
7
Insertados 0
No insertados

No hay notas en la diapositiva.

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

  1. 1. Oracle Certified Expert, Java EE 6 Web Component Developer (1Z0-899)-Guía de estudio Oscar Vásquez Flores (eoscarvf@gmail.com ) 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
  2. 2. Oracle Certified Expert, Java EE 6 Web Component Developer (1Z0-899)-Guía de estudio Oscar Vásquez Flores (eoscarvf@gmail.com ) 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.
  3. 3. Oracle Certified Expert, Java EE 6 Web Component Developer (1Z0-899)-Guía de estudio Oscar Vásquez Flores (eoscarvf@gmail.com ) 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.
  4. 4. Oracle Certified Expert, Java EE 6 Web Component Developer (1Z0-899)-Guía de estudio Oscar Vásquez Flores (eoscarvf@gmail.com ) 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.
  5. 5. Oracle Certified Expert, Java EE 6 Web Component Developer (1Z0-899)-Guía de estudio Oscar Vásquez Flores (eoscarvf@gmail.com ) 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.
  6. 6. Oracle Certified Expert, Java EE 6 Web Component Developer (1Z0-899)-Guía de estudio Oscar Vásquez Flores (eoscarvf@gmail.com ) 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.
  7. 7. Oracle Certified Expert, Java EE 6 Web Component Developer (1Z0-899)-Guía de estudio Oscar Vásquez Flores (eoscarvf@gmail.com ) 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:
  8. 8. Oracle Certified Expert, Java EE 6 Web Component Developer (1Z0-899)-Guía de estudio Oscar Vásquez Flores (eoscarvf@gmail.com ) 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.
  9. 9. Oracle Certified Expert, Java EE 6 Web Component Developer (1Z0-899)-Guía de estudio Oscar Vásquez Flores (eoscarvf@gmail.com ) 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.
  10. 10. Oracle Certified Expert, Java EE 6 Web Component Developer (1Z0-899)-Guía de estudio Oscar Vásquez Flores (eoscarvf@gmail.com ) HTTP request. HTTP Header del request. HTTP response
  11. 11. Oracle Certified Expert, Java EE 6 Web Component Developer (1Z0-899)-Guía de estudio Oscar Vásquez Flores (eoscarvf@gmail.com ) 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
  12. 12. Oracle Certified Expert, Java EE 6 Web Component Developer (1Z0-899)-Guía de estudio Oscar Vásquez Flores (eoscarvf@gmail.com )
  13. 13. Oracle Certified Expert, Java EE 6 Web Component Developer (1Z0-899)-Guía de estudio Oscar Vásquez Flores (eoscarvf@gmail.com ) * HttpServletRequest
  14. 14. Oracle Certified Expert, Java EE 6 Web Component Developer (1Z0-899)-Guía de estudio Oscar Vásquez Flores (eoscarvf@gmail.com ) 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.
  15. 15. Oracle Certified Expert, Java EE 6 Web Component Developer (1Z0-899)-Guía de estudio Oscar Vásquez Flores (eoscarvf@gmail.com ) 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.
  16. 16. Oracle Certified Expert, Java EE 6 Web Component Developer (1Z0-899)-Guía de estudio Oscar Vásquez Flores (eoscarvf@gmail.com ) 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.
  17. 17. Oracle Certified Expert, Java EE 6 Web Component Developer (1Z0-899)-Guía de estudio Oscar Vásquez Flores (eoscarvf@gmail.com ) 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:
  18. 18. Oracle Certified Expert, Java EE 6 Web Component Developer (1Z0-899)-Guía de estudio Oscar Vásquez Flores (eoscarvf@gmail.com ) * 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>
  19. 19. Oracle Certified Expert, Java EE 6 Web Component Developer (1Z0-899)-Guía de estudio Oscar Vásquez Flores (eoscarvf@gmail.com ) <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.
  20. 20. Oracle Certified Expert, Java EE 6 Web Component Developer (1Z0-899)-Guía de estudio Oscar Vásquez Flores (eoscarvf@gmail.com ) 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
  21. 21. Oracle Certified Expert, Java EE 6 Web Component Developer (1Z0-899)-Guía de estudio Oscar Vásquez Flores (eoscarvf@gmail.com ) * La colleccion puede ser: - Collection - Iterator - Map - Enumeration - Array - Cadenas de texto separados por coma.
  22. 22. Oracle Certified Expert, Java EE 6 Web Component Developer (1Z0-899)-Guía de estudio Oscar Vásquez Flores (eoscarvf@gmail.com ) 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>
  23. 23. Oracle Certified Expert, Java EE 6 Web Component Developer (1Z0-899)-Guía de estudio Oscar Vásquez Flores (eoscarvf@gmail.com ) @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.
  24. 24. Oracle Certified Expert, Java EE 6 Web Component Developer (1Z0-899)-Guía de estudio Oscar Vásquez Flores (eoscarvf@gmail.com ) * Sobre escribiendo métodos: * El código Scriptlet se colocará por defecto dentro del método _jspService() , este metodo no se puede sobre escribir.
  25. 25. Oracle Certified Expert, Java EE 6 Web Component Developer (1Z0-899)-Guía de estudio Oscar Vásquez Flores (eoscarvf@gmail.com ) 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
  26. 26. Oracle Certified Expert, Java EE 6 Web Component Developer (1Z0-899)-Guía de estudio Oscar Vásquez Flores (eoscarvf@gmail.com ) - 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
  27. 27. Oracle Certified Expert, Java EE 6 Web Component Developer (1Z0-899)-Guía de estudio Oscar Vásquez Flores (eoscarvf@gmail.com ) * Otros Tags * jsp:param Tiene los atributos obligatorios: name y value.
  28. 28. Oracle Certified Expert, Java EE 6 Web Component Developer (1Z0-899)-Guía de estudio Oscar Vásquez Flores (eoscarvf@gmail.com ) 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" %>
  29. 29. Oracle Certified Expert, Java EE 6 Web Component Developer (1Z0-899)-Guía de estudio Oscar Vásquez Flores (eoscarvf@gmail.com ) - 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:
  30. 30. Oracle Certified Expert, Java EE 6 Web Component Developer (1Z0-899)-Guía de estudio Oscar Vásquez Flores (eoscarvf@gmail.com ) 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.
  31. 31. Oracle Certified Expert, Java EE 6 Web Component Developer (1Z0-899)-Guía de estudio Oscar Vásquez Flores (eoscarvf@gmail.com ) * 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:
  32. 32. Oracle Certified Expert, Java EE 6 Web Component Developer (1Z0-899)-Guía de estudio Oscar Vásquez Flores (eoscarvf@gmail.com ) * 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
  33. 33. Oracle Certified Expert, Java EE 6 Web Component Developer (1Z0-899)-Guía de estudio Oscar Vásquez Flores (eoscarvf@gmail.com ) 8.5. Listar las capacidades de los Tags de JSTL. Lista de tags JSTL
  34. 34. Oracle Certified Expert, Java EE 6 Web Component Developer (1Z0-899)-Guía de estudio Oscar Vásquez Flores (eoscarvf@gmail.com ) 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
  35. 35. Oracle Certified Expert, Java EE 6 Web Component Developer (1Z0-899)-Guía de estudio Oscar Vásquez Flores (eoscarvf@gmail.com ) 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
  36. 36. Oracle Certified Expert, Java EE 6 Web Component Developer (1Z0-899)-Guía de estudio Oscar Vásquez Flores (eoscarvf@gmail.com ) 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.
  37. 37. Oracle Certified Expert, Java EE 6 Web Component Developer (1Z0-899)-Guía de estudio Oscar Vásquez Flores (eoscarvf@gmail.com ) 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.
  38. 38. Oracle Certified Expert, Java EE 6 Web Component Developer (1Z0-899)-Guía de estudio Oscar Vásquez Flores (eoscarvf@gmail.com ) 9.3. Crear filtros y usarlos en aplicaciones Web. El API Filter * Configurando un filtro utilizando anotaciones. * Configurando un filtro utilizando DD.
  39. 39. Oracle Certified Expert, Java EE 6 Web Component Developer (1Z0-899)-Guía de estudio Oscar Vásquez Flores (eoscarvf@gmail.com ) 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().
  40. 40. Oracle Certified Expert, Java EE 6 Web Component Developer (1Z0-899)-Guía de estudio Oscar Vásquez Flores (eoscarvf@gmail.com ) Servlet que cambia el valor del parámetro
  41. 41. Oracle Certified Expert, Java EE 6 Web Component Developer (1Z0-899)-Guía de estudio Oscar Vásquez Flores (eoscarvf@gmail.com ) A este Servlet ya llega el parámetro cambiado. Valor mostrado en el Browser:
  42. 42. Oracle Certified Expert, Java EE 6 Web Component Developer (1Z0-899)-Guía de estudio Oscar Vásquez Flores (eoscarvf@gmail.com ) 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.
  43. 43. Oracle Certified Expert, Java EE 6 Web Component Developer (1Z0-899)-Guía de estudio Oscar Vásquez Flores (eoscarvf@gmail.com ) 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:
  44. 44. Oracle Certified Expert, Java EE 6 Web Component Developer (1Z0-899)-Guía de estudio Oscar Vásquez Flores (eoscarvf@gmail.com ) 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.
  45. 45. Oracle Certified Expert, Java EE 6 Web Component Developer (1Z0-899)-Guía de estudio Oscar Vásquez Flores (eoscarvf@gmail.com ) 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>
  46. 46. Oracle Certified Expert, Java EE 6 Web Component Developer (1Z0-899)-Guía de estudio Oscar Vásquez Flores (eoscarvf@gmail.com ) El Handler de control: Listeners: AsyncListener:
  47. 47. Oracle Certified Expert, Java EE 6 Web Component Developer (1Z0-899)-Guía de estudio Oscar Vásquez Flores (eoscarvf@gmail.com )
  48. 48. Oracle Certified Expert, Java EE 6 Web Component Developer (1Z0-899)-Guía de estudio Oscar Vásquez Flores (eoscarvf@gmail.com ) 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>
  49. 49. Oracle Certified Expert, Java EE 6 Web Component Developer (1Z0-899)-Guía de estudio Oscar Vásquez Flores (eoscarvf@gmail.com ) 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))

×