desarrollo java

881
Copyright Formación y Soluciones Informáticas EFIBS S.A. 1 Desarrollo de Aplicaciones Empresariales Formación y Soluciones Informáticas EFIBS S.A Derechos Reservados - 2007.

Upload: jose-anton-napa

Post on 25-Jul-2015

222 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 1

Desarrollo de Aplicaciones Empresariales

Formación y Soluciones Informáticas EFIBS S.A

Derechos Reservados - 2007.

Page 2: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 2

11IntroducciIntroduccióón a Javan a Java

Page 3: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 3

2. Entorno de Desarrollo Integrado2. Entorno de Desarrollo Integrado

3. El Lenguaje Java3. El Lenguaje Java

4. Tipos de Datos y Operadores4. Tipos de Datos y Operadores

5. Control de Flujo5. Control de Flujo

1. Introducción a Java1. Introducción a Java

6. Conceptos Básicos en Java6. Conceptos Básicos en Java

7. Trabajando con Clases7. Trabajando con Clases

1. Introducción a Java

Page 4: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 4

8. Utilización de Interfaces8. Utilización de Interfaces

9. Estándares de Desarrollo9. Estándares de Desarrollo

10. Manejo de Excepciones10. Manejo de Excepciones

1. Introducción a Java

11. Utilizando Cadenas, Arreglos y Colecciones11. Utilizando Cadenas, Arreglos y Colecciones

12. Clases en Java12. Clases en Java

13. Swing13. Swing

AnexoAnexo

Page 5: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 5

Objetivos

Introducir al estudiante en el lenguaje de programación Java.

Implementar ejemplos por capítulo, que le permita al estudiante reafirmar susconocimientos.

Page 6: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 6

1. Introducción

El siguiente curso, pretende introducir al estudiante en el manejo del lenguaje Java.

Con el fin de poder dar un seguimiento completo, se tomará como base el siguiente diagrama. Por lo tanto, los ejercicios de cada uno de los capítulos subyacentes estarán basados en el mismo.

Page 7: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 7

1.1 Introducción a Java

Java es un lenguaje de programación creado en 1995 por los ingenieros de SUN Microsystems.

Fue creado en sus inicios para el desarrollo de componentes electrónicos, especialmente en equipos domésticos.

Es un lenguaje Orientado a Objetos.

Mejora la velocidad de desarrollo de las aplicaciones por su facilidad de uso.

Page 8: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 8

1.1 … Introducción a Java

Contiene un conjunto de clases predefinidas (APIs).

No tiene punteros.

No es dependiente de la plataforma en que trabaja, lo cual lo hace ser portable.

Está orientado al desarrollo de aplicaciones cliente-servidor, Web, dispositivos inalámbricos, etc.

Page 9: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 9

1.2 Características

Sencillo: Elimina muchas características de otros lenguajes para reducir a un 50% los errores más comunes:

Aritmética de punteros.No existen referencias.Registros (structs).Definición de tipos (typedef).Macros (#define).Necesidad de Liberar memoria (free).

Page 10: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 10

1.2 … Características

Orientado a Objetos:

Java trabaja bajo el paradigma orientado a objetos por lo que sebasa en el manejo de clases, objetos e interfaces a esos objetos.

Soporta tres de las características esenciales del paradigma orientado a objetos:

Herencia.Polimorfismo.Encapsulamiento.

Page 11: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 11

1.2 … Características

Distribuido:

Es un lenguaje orientado a Web, con grandes capacidades de interconexión TCP/IP.

Se puede, a través de librerías acceder a protocolos http y ftp.

El lenguaje, por sí solo no es distribuido, sino que proporciona las herramientas para que los programas lo puedan ser.

Page 12: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 12

1.2 … Características

Robusto:

Lleva a cabo chequeos de tipos, tanto en tiempo de compilación como ejecución.

Obliga a la declaración explícita de métodos, reduciendo así las posibilidades de error.

Administra la memoria, eliminando la preocupación del programador en tener que liberar la misma.

Page 13: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 13

1.2 … Características

Portable:

Debido a que compila su código en un fichero objeto con formato independiente al sistema operativo al que se está ejecutando la aplicación.

Multitarea:

Al ser multitarea o multihilo, permite realizar muchas tareas simultáneas en un programa.

Los Miltithread son pequeños procesos o piezas independientes de un gran proceso.

Page 14: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 14

1.2 … Características

Seguro:

El código Java, pasa por muchas validaciones antes de ejecutarse en una estación.

Elimina el acceso ilegal a la memoria.

Tiene un cargador de clases que se encarga de buscar las clases localmente y posteriormente a lo externo.

Page 15: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 15

1.2 … Características

Dinámico:

Java es un lenguaje totalmente Orientado a Objetos. Por lo queconstruye los objetos y la conexión entre ellos en el momento en quese va a ejecutar la aplicación.

Page 16: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 16

1.3 Orientación a Objetos

Es un paradigma que busca como representar la realidad a través de objetos. El objeto es considerado la unidad elemental del paradigma.

Los objetos en realidad, pueden ser definidos como entes que poseen identidad, comportamiento y estado (Grady Booch).

Es el principal paradigma en el desarrollo de software. Se caracteriza por la reutilización de código, portabilidad, facilidad de desarrollo y mantenimiento.

Page 17: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 17

1.4 Máquina Virtual Java(JVM).

Tiene la responsabilidad de la independencia entre el hardware y el sistema operativo.

Tiene la capacidad de proteger a los programas de todo aquel software malicioso.

Se asemeja a una computadora abstracta, por lo que tiene un sistema de instrucciones y manipula varias áreas de memoria en tiempo de ejecución.

Page 18: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 18

1.4 … Máquina Virtual Java(JVM).

Contiene un conjunto de clases predefinidas llamadas J2SE(Java 2Standard Edition)

Versión 5.0“Tiger Proyect”

Versión 1.4

Page 19: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 19

Java Runtime Environment (JRE) es el entorno mínimo para ejecutar programas Java 2. Incluye la JVM y la API.

Está incluida en la J2SE, aunque puede instalarse y ejecutarse separadamente.

Incluye el Java Plug-in, que es el añadido que necesitan los navegadores (Explorer, Netscape, etc).

Instalando el JRE, se tiene soporte completo Java 2, tanto en aplicaciones de escritorio como de Web.

1.5 Qué es el JRE?

Page 20: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 20

El código fuente Java es almacenado en un archivo con la extensión *.java

El archivo .java es compilado y se convierte en un archivo con la extensión *.class

1.6 Plataforma Independiente?

Page 21: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 21

Los Bytecodes son interpretados por el runtime.

El archivo .class se convierte en un código ejecutable.

1.6 … Plataforma Independiente?

Page 22: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 22

El class loader carga todas las clases necesarias, utilizando elclasspath para ubicarlas.

La JVM, verifica si existe bytecode ilegal, haciendo uso de la tecnología JIT(Just in Time).

El manejador de memoria regresa toda la memoria al sistema operativo.

Finalmente, se realiza el proceso de administración de memoria GC (Garbage Collection).

1.7 Cómo trabaja la JVM?

Page 23: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 23

1.7 … Cómo trabaja la JVM?

Page 24: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 24

Comparación con otras tecnologías:

Java es portable, confiable, seguro y de fácil aprendizaje.

Java es independiente tanto del hardware como del software.

Es de libre acceso (código abierto)

Presenta una mayor seguridad frente a virus informáticos que otros lenguajes.

1.8 Comparaciones

Page 25: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 25

El instructor realizará una explicación detallada del ejercicio arealizar.

Instalación del Java Software Development Kit(Java SDK).

Doble click en el archivo llamado jdk-1_5_0_08-windows-i586-p.Acepte los términos de la licencia.Instale los siguientes componentes.

Development Tools.Demos.Source Code.Public Java Runtime Environment.

Verifique la instalación manualmente donde se instaló la JVM(C:\ jdk-1_5_0_08-windows-i586-p).

1.9 Ejercicio Práctico

Page 26: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 26

Modificar variables de ambiente:Inicio-> Panel de Control- Sistema-Variables de ambiente o entorno.

1.9 … Ejercicio Práctico

Ubicar las variables de

entorno ó de sistema

Page 27: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 27

Modificar variables de ambiente (continuación):Cree las variables: JAVA_HOME=<ruta jdk> y JRE_HOME=<ruta jdk/jre>Una vez, que haya creado las variables de “OK” a todos los cambios realizados. Recuerde cerrar las ventanas DOS.

1.9 … Ejercicio Práctico

Page 28: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 28

Probando la instalación y configuración del ambiente para el JDK:Abra una ventana MS-DOS y digite la siguiente instrucción:

java –version.

1.9 … Ejercicio Práctico

Page 29: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 29

Compilación y Ejecución

Con un editor de notas, digite el siguiente código Java, con el fin de poder llevar a cabo una compilación y ejecución de la misma.

1.9 … Ejercicio Práctico

Notas: 1. El método main es el punto de inicio de una clase principal en Java.2. La instrucción System.out.println(“…”) se utiliza para desplegar en

consola lo que se encuentre entre comillas dobles.

Page 30: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 30

Una vez que se ha escrito el código en el editor de texto, debe salvar con el mismo nombre de la clase y con la extensión *.java

En el caso del ejemplo sería: Principal.java

1.9 … Ejercicio Práctico

Compila

Ejecuta

Page 31: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 31

22EntornoEntorno de de DesarrolloDesarrollo

IntegradoIntegrado

Page 32: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 32

2. Entorno de Desarrollo Integrado2. Entorno de Desarrollo Integrado

3. El Lenguaje Java3. El Lenguaje Java

4. Tipos de Datos y Operadores4. Tipos de Datos y Operadores

5. Control de Flujo5. Control de Flujo

1. Introducción a Java1. Introducción a Java

6. Conceptos Básicos en Java6. Conceptos Básicos en Java

7. Trabajando con Clases7. Trabajando con Clases

2. Entorno de DesarrolloIntegrado

Page 33: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 33

8. Utilización de Interfaces8. Utilización de Interfaces

9. Estándares de Desarrollo9. Estándares de Desarrollo

10. Manejo de Excepciones10. Manejo de Excepciones

11. Utilizando Cadenas, Arreglos y Colecciones11. Utilizando Cadenas, Arreglos y Colecciones

12. Clases en Java12. Clases en Java

13. Swing13. Swing

AnexoAnexo

2. Entorno de DesarrolloIntegrado

Page 34: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 34

Objetivos

Explicar que es un Entorno de Desarrollo Integrado (IDE).

Listar ejemplos de IDE’s actuales.

Explicar un IDE en específico, con el fin de que los estudiantes aprendan a crear proyectos empresariales bajo la tecnología java.

Page 35: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 35

2. Qué es un IDE?

Los IDE’s, son herramientas con las cuales el programador podrállevar a cabo la implementación de proyectos en tiempos realmente cortos.

Se caracterizan por facilitar las labores de implementación ya que ofrecen una serie de herramientas que hacen el trabajo más fácil y sencillo.

Page 36: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 36

2.1 Entornos de Desarrollo Integrado

Entre los IDE’s, destacan los siguientes:

NetBeans.Sun Java Studio Enterprise.Eclipse.Oracle JDeveloper.Visual Age.Pramatic.

Para efectos de este curso, se utilizará la versión deNetBeans 5.0.

Page 37: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 37

2.2 NetBeans versión 5.0

Netbeans es una herramienta de Desarrollo Integrado, para que los programadores puedan compilar, corregir errores y ejecutar programas así como desarrollar y ensamblar soluciones empresariales.

El IDE proporciona un sistema completo de herramientas integrado en un solo ambiente.

Es el IDE más utilizado por la comunidad de programadores Java, dada la necesidad de los mismos de ser más y más productivos.

Page 38: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 38

2.2 … NetBeans versión 5.0

El NetBeans versión 5.0 incluye:

Soporte de escritorio (AWT/Swing).Soporte Web (Servlets/JSP/JSF/Struts). Desarrollo para Java 2 Enterprise Edition (EJB y Web Services).Servidor de Aplicaciones

Java EE Application Server.

Integración de otros Servidores de Aplicaciones.

Page 39: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 39

2.3 Requerimientos NetBeans

Requerimientos de Hardware:

Microsoft Windows:

Procesador: Intel Pentium III , 780 MHz.

Memoria: 1 GB.

Espacio en disco: 150MB libres.

Linux:

Procesador: Intel Pentium III , 800 MHz.

Memoria: 512 MB.

Espacio en disco: 125MB libres.

http://www.netbeans.org/community/releases/50/relnotes.html#system_requirements

Page 40: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 40

2.3 … Requerimientos NetBeans

Requerimientos de Software:

Corre sobre las plataformas J2SE 1.4.2 y 1.5.0.

En el caso de aplicaciones para J2EE, se puede utilizar el Sun Java System Application Server o algunos otros servidores son: JBoss 4.0.x CPU 400MHz, RAM 512MB , JDK 1.4 (recomendado 1.4.2) , WebLogic 9.0 y WebSphere 6.0 RAM 512MB.

http://www.netbeans.org/community/releases/50/relnotes.html#system_requirements

Page 41: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 41

2.4 Presentación NetBeans

Presentación del IDE:

El IDE presenta muchas partes que trabajan juntas que ayudan a desarrollar sus aplicaciones.

En las siguientes secciones, se llevará a cabo una descripción de estas partes, las cuales se utilizarán durante todo el desarrollo este curso.

Cuando se ejecute el IDE, se presentará:Una ventana con área de trabajo denominada workspace.Una ventana principal.Una ventana de explorador y sus propiedades.

http://www.netbeans.org/community/releases/50/relnotes.html#system_requirements

Page 42: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 42

2.4 … Presentación NetBeansCada vez que ingrese al IDE, la siguiente pantalla se presentará:

Page 43: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 43

2.5 Componentes NetBeans

Componentes del IDE:

El IDE cuenta con una serie de componentes para colaborar en el desarrollo rápido de aplicaciones Java.Entre estos componentes se encuentran:

Page 44: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 44

2.6 Tipos de Aplicaciones NetBeans

Tipo de aplicaciones del IDE:Los tipos de aplicaciones que se pueden crear son: General, Empresarial y Web:

Tipos de proyectos

Page 45: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 45

2.7 Secciones NetBeans

Secciones del IDE:Dentro de las secciones del IDE, se encuentran las siguientes: Proyectos, Archivos, Runtime, Navegator y Salida

Área para escribir el código fuente

Área de Navegación

Salida correspondiente.

Page 46: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 46

2.7 … Secciones NetBeans

Secciones del IDE (continuación):Proyecto:

Pueden existir uno o varios proyectos.

Nombre del paqueteDentro de los paquetes tenemos las clases que vamos aUtilizar.

Page 47: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 47

2.7 … Secciones NetBeans

Secciones del IDE (continuación):Archivos:

Pueden existir uno o varios proyectos Activos.

La carpeta scres donde se almacenan los proyectos que se van creando

Estructura de la clase conjuntamente con atributos, métodos y constructores.

Archivos propios del IDE

.

Page 48: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 48

2.7 … Secciones NetBeans

Secciones del IDE (continuación):Runtime:

Se pueden encontrar los Procesos Activos, Servidores Activos, así como Drivers entre otros.

Corresponde a todas las estructuras propiasdel IDE.

Page 49: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 49

2.7 … Secciones NetBeans

Secciones del IDE:Welcome:

Se puede seleccionar el tipo de proyecto que se desea crear.

Dentro de los proyectos que se pueden crear están: Los generales, web y los empresariales.

Page 50: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 50

2.7 … Secciones NetBeans

Secciones de clases:Conforme se van creando las clases se irán agregando alentorno de desarrollo como se aprecia a continuación:

Área para digitar el código fuente

Page 51: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 51

2.8 Proyectos en NetBeans

Creación de proyectos:Para crear un proyecto haga clic sobre la opciónNew Project. Sí ya existe, debe hacer clic en Open Project.

Creación de proyectos

Apertura de proyectos

Page 52: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 52

2.8 … Proyectos en NetBeans

Antes de crear un proyecto se debe tener claroque tipo de proyecto es el que se desea crear:

Se pueden crear aplicaciones de tipo: General, Web y empresarial. Para efectos delcurso sería General.

Page 53: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 53

2.8 … Proyectos en NetBeans

Creación de proyectos:Para crear un proyecto siga los siguientes pasos:

Se escribe el nombre del proyecto que se desea crear, en este caso MiPrimerPrograma

Se selecciona la ubicación en disco dónde estará el proyecto

Se selecciona el fólder, dónde se pretende guardar el proyecto

Una vez que está todo configurado se procede a digitar el botón de finalizar

Page 54: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 54

Estandarización de proyectos:Es la forma en como se debería crear un proyecto a nivel de clases.

La jerarquía que se conforme dependerá del proyecto y los fuentes estarán en el último nivel de la misma.

La modularidad nos conduce a tener mayor orden y claridad de la ubicación de nuestros archivos fuentes.

2.8 … Proyectos en NetBeans

Page 55: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 55

Construcción del Proyecto:Genera toda la estructura del proyecto, en lo querespecta a fuentes y demás archivos propios delproyecto.

Se puede hacer, por medio del menú Buildó por medio de la tecla F11.

Opción que se aplica, cuando el proyecto ya existe y se desea construir uno haciendo una limpiezadel anterior.

2.8 … Proyectos en NetBeans

Page 56: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 56

2.9 Compilación-Ejecución-Edición

Compilación :Consiste en la revisión sintácticadel código fuente. Si hay errores se marcan cuales

son y la línea donde se produjo.

Código con errores.

Código sin errores.

Page 57: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 57

Ejecución del Proyecto: Se ve el programa en ejecución:

Para ejecutar el proyecto que ha sido construido se hace de la siguiente manera

Una vez ejecutado se podrá apreciar la salida como se observa arriba

2.9 … Compilación-Ejecución-Edición

Page 58: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 58

Edición de Código Fuente:

El editor de código se utiliza para visualizar, crear y editar código fuente Java.

Con el editor, el programador podrá fácilmente escribir cada una de las líneas del programa que ocupe implementar.

El editor permite además de poder escribir el código fuente y poder depurar el mismo, presentar los errores.

Se debe considerar a la hora de escribir el código fuente, una indentación adecuada para facilitar la lectura del código y por ende la facilidad de poder detectar errores de una forma más rápida y sencilla.

2.9 … Compilación-Ejecución-Edición

Page 59: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 59

Editor de Texto: Presenta una serie de botonesque facilitan la escritura del código fuente:

Dentro de los botones se pueden encontrar: debuger, comentarios, retroceso de líneas escritas, etc.

Permite hacer una abreviación de los métodosespecíficamente en la sección del ámbito.Lo anterior, facilita la búsqueda de errores en el código.

2.9 … Compilación-Ejecución-Edición

Page 60: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 60

2.10 Otras Opciones de NetBeans

Opciones: Las opciones del IDE se encuentranubicadas en el menú Tools. A continuación unaimagen de la pestaña general:

La pestaña que está activa es la general, donde sepuede entre otras cosas cambiar información

referente a: paquetes java, proxy y actualizaciones.

Page 61: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 61

Opciones: A continuación unaimagen de la pestaña editor:

La pestaña del editor, representa configuraciones relacionadas al mismo, tales como: import, métodos,clases internas, javadoc, etc.

2.10 … Otras Opciones de NetBeans

Page 62: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 62

Opciones: A continuación unaimagen de la pestaña fuentes y colores:

Dentro de los botones se pueden encontrar: debuger, comentarios, retroceso de líneas escritas, etc

2.10 … Otras Opciones de NetBeans

Page 63: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 63

Opciones: A continuación unaimagen de la pestaña keymap, donde se tienen las teclasabreviadas:

La pestaña de keymap contienen una serie de carpetas propias del IDE.

2.10 … Otras Opciones de NetBeans

Page 64: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 64

Opciones: A continuación unaimagen de la pestaña Misceláneo:

Dentro de ésta pestaña, se puede encontrar la herramienta ANT de java y un administrador del classpath.

2.10 … Otras Opciones de NetBeans

Page 65: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 65

Opciones Avanzadas: mediante el botón de opciones avanzadas se puede visualizar la siguiente pantalla.

Se encuentra: el Editor, configuración del IDE, look and Feel, barra de menú y demás mecanismosy opciones soportada por NetBeans 5.0.

2.10 … Otras Opciones de NetBeans

Page 66: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 66

Opciones Avanzadas: mediante el botón de opciones avanzadas se puede visualizar la siguiente pantalla.

La sección de la Edición, presenta asuntos relacionados con la publicación del proyecto.

2.10 … Otras Opciones de NetBeans

Page 67: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 67

Opciones Avanzadas: mediante el botón de opciones avanzadas se puede visualizar la siguiente pantalla.

La sección de la Edición, presenta asuntos Relacionados con la publicación del proyecto.

2.10 … Otras Opciones de NetBeans

Page 68: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 68

Debug: El NetBeans 5.0, permite debugear paso a paso el código.

Con las teclas F8 y F7, se puede llevar a cabo un Debugeo a nivel interno o externo, entrando a los métodos o bien sin entrar a ellos.

2.10 … Otras Opciones de NetBeans

Page 69: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 69

Paso de Argumentos: Para poder pasar argumentos a la clase principal, se le debe dar click derecho sobre el proyecto en que se está trabajando y poner los argumentos que va a recibir

Click derecho sobre el proyecto y específicamente en RUN

Pantalla de salida de los argumentos que se están utilizando

Implementación en el Editor

2.10 … Otras Opciones de NetBeans

Page 70: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 70

2.11 Ejercicio Práctico

El instructor realizará una explicación detallada delejercicio a realizar.

Crear una estructura de carpetas tal y como se aprecia a continuación:

Integrar la clase que fue elaborada en la práctica anterior dentro de la jerarquía.

Compile utilizando el IDE y ejecute.

Page 71: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 71

Lleve a cabo una navegación sobre los diferentes tabs del menú, específicamente en Tool Options para ver todas las opciones posibles que hay en él, específicamente la que se muestra a continuación:

2.11 … Ejercicio Práctico

Page 72: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 72

Una vez cumplido con los puntos anteriores, a la clase llamada Principal.java se le deben de enviar tres parámetros cualesquiera utilizando el IDE e imprimir en consola.

Por último, debe suministrar un nombre al proyecto sobre el cual ha realizado todos los cambios anteriores.

2.11 … Ejercicio Práctico

Page 73: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 73

33El Lenguaje JavaEl Lenguaje Java

Page 74: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 74

2. Entorno de Desarrollo Integrado2. Entorno de Desarrollo Integrado

3. El Lenguaje Java3. El Lenguaje Java

4. Tipos de Datos y Operadores4. Tipos de Datos y Operadores

5. Control de Flujo5. Control de Flujo

1. Introducción a Java1. Introducción a Java

6. Conceptos Básicos en Java6. Conceptos Básicos en Java

7. Trabajando con Clases7. Trabajando con Clases

3. El Lenguaje Java

Page 75: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 75

8. Utilización de Interfaces8. Utilización de Interfaces

9. Estándares de Desarrollo9. Estándares de Desarrollo

10. Manejo de Excepciones10. Manejo de Excepciones

11. Utilizando Cadenas, Arreglos y Colecciones11. Utilizando Cadenas, Arreglos y Colecciones

12. Clases en Java12. Clases en Java

13. Swing13. Swing

AnexoAnexo

3. El Lenguaje Java

Page 76: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 76

Objetivos

Estudiar los diferentes tipos de datos y operadores que proporciona el lenguaje con el fin de que el participante tenga sólidos conocimientos en sintaxis.

Ejemplificar cada uno de los tipos de datos.

Page 77: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 77

3.1 Comentarios

Existen tres tipos de comentarios:

Comentarios de una sola línea: Semejante a otros lenguajes.

Comentarios de una o más líneas: Semejante a otros lenguajes.

Comentarios de documentación, de una o más líneas: Este comentario será colocado en la documentación que se genera automáticamente cuando se utiliza la herramienta Java, javadoc, la cual no se encuentra disponible en otros lenguajes de programación.

Page 78: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 78

3.1 … Comentarios

Ejemplos:

// comentarios para una sola línea

/* comentarios de una o más líneas

*/

/** * Comentario para documentación (JavaDoc), * de una o más líneas

*/

Page 79: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 79

3.2 Identificadores Los identificadores se utilizan para identificar variables, funciones, clases y objetos; cualquier cosa que el programador necesite identificar o usar.

En Java, un identificador comienza con:

La forma básica de una declaración de una variable, por ejemplo, seríaTipo identificadoridentificador [ = valor] [, identificadoridentificador [ = valor] ....];

int contadorPrincipal;char listaDeFicheros;float precioProducto;

p nom_Persona

nomPersona _nomPersona

nom$Persona nomPersona2

nom#Cost nom-Persona

nom*Cost abstract

2nomPersona

Page 80: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 80

Los separadores definen la forma y función del código. Los separadores admitidos en Java son:

() – Paréntesis: Para contener listas de parámetros en la definición y llamada a métodos. También se utilizan para definir precedencia en expresiones, contener expresiones para control de flujo y rodear las conversiones de tipos.

{} – Llaves: Para contener los valores de matrices inicializadas automáticamente. También utilizadas para definir un bloque de código, para clases, métodos y ámbitos locales.

[] – Corchetes: Para declarar y referenciar tipos de matriz.

; - Punto y Coma: Separa sentencias.

, - Coma: Separa identificadores consecutivos en una declaración de variables o encadenar sentencias entre bucles (for)

. – Punto: Para separar nombre de paquete de subpaquetes y clases.

3.3 Separadores

Page 81: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 81

Las variables se utilizan en la programación Java para almacenar datos que varían durante la ejecución del programa.

Para utilizar una variable, se debe de indicar al compilador el tipo y nombre de la variable, lo que se conoce como declaración de la variable.

El tipo de la variable determinará el conjunto de valores que se podrán almacenar en la variable y el tipo de operaciones que se podrán realizar.

int i; // Declaración de un entero

char letra; // Declaración de un carácter

boolean flag; // Declaración de un booleano

3.4 Variables

Page 82: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 82

Java proporciona un conjunto de operadores para poder realizar acciones sobre uno o dos operandos.

Un operador que actúa sobre un operando es un operador unario.

Un operador que actúa sobre dos operandos es un operador binario.

En la siguiente tabla aparecen los operadores que se utilizan en Java, por orden de precedencia:

3.5 Operadores

Page 83: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 83

Una expresión es una determinada combinación de operadores y operandos que se evalúan para obtener un resultado en particular.

Los operandos pueden ser variables, constantes o llamadas a métodos.

Java soporta constantes con nombre y para crearlas es de la siguiente manera:

Al igual que otros lenguajes de programación, en Java se puede controlar el orden de evaluación de las expresiones mediante el uso de paréntesis. En caso de no proporcionarse estos paréntesis, el orden estará determinado por la precedencia de operadores.

final float NOMBRE_CONSTANTE = 3.14159

3.6 Expresiones

Page 84: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 84

Una cadena o String se considera a toda secuencia de caracteres almacenados en memoria y accesibles como una unidad.

Java implementa cadenas a través de la clase String y StringBuffer, a las cuales se dedicará un amplio estudio más adelante.

3.7 Cadenas

1. String cadena = “Variable cadena”;

2. int longitud = cadena.length();

3. cadena.toUpperCase();

4. cadena.toLowerCase();

Page 85: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 85

Java cuenta con un tipo de datos verdadero de posiciones secuenciales, array, que dispone de comprobaciones exhaustivas para su correcta manipulación (sobrepasar el límite definido para el arreglo).

Al igual que los demás objetos en Java, la declaración de un array no localiza, o reserva memoria para contener los datos. En su lugar, simplemente localiza la memoria para almacenar una referencia alarray.

3.8 Arreglos

Char s[];

int Array ;

int tabla[][] = new int[4][5];

String nombres[] = {“Juan”, “Pepe”, “Pedro”};

System.out.println(nombres[1]); // Imprime Pepe

Page 86: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 86

El instructor realizará una explicación detallada del ejercicio a realizar:

Dentro del método main de la clase Principal, realice los siguientes

puntos:

Crear una variable de tipo entera (int) denominada contador.Crear una constante de tipo entera asignándole un valor de 5.Asignarle el valor de la constante a la variable entera contador.Imprimir en consola el valor de la variable contador.Crear un arreglo de Strings llamado personas, con los siguientes valores: Pedro, Juan, Carlos, Mary, Pablo, Jaime

3.9 Ejercicio Práctico

Page 87: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 87

Imprimir en consola el contenido de la variable personas que se encuentre en la posición “contador” y luego, asigne este valor a una nueva variable de tipo String.

Este valor, se debe desplegar en consola en mayúscula, minúscula y además obtener su tamaño.

Finalmente realice los procesos de compilación y ejecución de la aplicación.

Recuerde documentar aquel código que no esté utilizando.

3.9 … Ejercicio Práctico

Page 88: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 88

44Tipos de Datos y Tipos de Datos y

OperadoresOperadores

Page 89: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 89

2. Entorno de Desarrollo Integrado2. Entorno de Desarrollo Integrado

3. El Lenguaje Java3. El Lenguaje Java

4. Tipos de Datos y Operadores4. Tipos de Datos y Operadores

5. Control de Flujo5. Control de Flujo

1. Introducción a Java1. Introducción a Java

6. Conceptos Básicos en Java6. Conceptos Básicos en Java

7. Trabajando con Clases7. Trabajando con Clases

4. Tipos de Datos y Operadores

Page 90: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 90

8. Utilización de Interfaces8. Utilización de Interfaces

9. Estándares de Desarrollo9. Estándares de Desarrollo

10. Manejo de Excepciones10. Manejo de Excepciones

11. Utilizando Cadenas, Arreglos y Colecciones11. Utilizando Cadenas, Arreglos y Colecciones

12. Clases en Java12. Clases en Java

13. Swing13. Swing

AnexoAnexo

4. Tipos de Datos y Operadores

Page 91: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 91

Objetivos

Estudiar los diferentes tipos de datos y operadores que proporciona el lenguaje con el fin de que el estudiante tenga sólidos conocimientos en sintaxis.

Ejemplificar cada uno de los tipos de datos, para adquirir mayor dominio del tema.

Page 92: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 92

4.1 Tipos de Variables

Todas las variables en el lenguaje Java, deben tener un tipo de dato asociado. El tipo de la variable determina los posibles valores que pueden llegar a tener esa variable.

Existen dos categorías de datos principales en el lenguaje Java:

Los Tipos primitivos o atómicos

Lógico: booleanTextual: char.Integral: byte,short,int,long. Punto Flotante: double, float. Enum: Enumeraciones (versión 5.0).

Los Tipos compuestos.

Page 93: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 93

4.1 … Tipos de Variables

Ejemplo de tipo de datos primitivos: int,char,float,etc.

int a;char c;float b;

En el caso de los tipos compuestos serían:elEstudiante;elProfesor;elLibro;

Page 94: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 94

4.1.1 Tipo Booleano

Presenta dos literales: true ó false.

En Java no es lo mismo 1 para referirse a true ó 0 para referirse a false.

Ejemplo:

boolean verdadero = true;

boolean falso = false;

Page 95: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 95

4.1.2 Tipo Textual

Se tiene tanto char como String.

En el caso del char es un tipo simple o atómico, mientras que el String es un tipo compuesto.

Page 96: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 96

4.1.2 … Tipo Textual

char primerLetra = ‘a’; //La Letra a

char ch1, ch2; //Declaración de dos variables char

\n: Salto de línea

\t: Tabulador

\b: Backspace.

\r: Retorno de carro

\uxxx: Donde xxxx es el código Unicode del carácter. Por ejemplo \u0027 es el apostrofe (')

char:Representa a 16-bits un solo carácter.Requiere estar entre comillas simples (‘ ’).Utiliza la siguiente notación:

Page 97: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 97

4.1.2 … Tipo Textual

String cadena = “Ejemplar de una Declaración y asignación”;

String cadena = “Cambio de Línea !! \n”;

String str1, str2; // Declaración de dos variables String

String:No es un tipo de dato primitivo, es una claseRequiere estar entre comillas dobles (“”)Utiliza la siguiente notación:

Page 98: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 98

4.1.3 Tipo Integral

Un tipo de datos Integral tiene los siguientes rangos:

-263 a 263-164-bit complemento a 2

long

-231 a 231-132-bit complemento a 2

int

-215 a 215-116-bit complemento a 2

short

-27 a 27-18-bit complemento a 2byte

RangoTamañoNombre o Tipo

Page 99: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 99

4.1.4 Tipo FlotanteFlotante:

Los datos de punto flotante son por defecto double

Se puede declarar un literal de tipo float agregándole una F o f al valor

Además:E ó e Agregar un valor exponencialF ó f (Float)D ó d (Double)

64 bitsdouble

32 bitsfloat

TamañoNombre o Tipo

Page 100: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 100

4.2 Operadores

Java proporciona un conjunto de operadores para poder realizar acciones sobre uno o varios operandos.

Un operador que actúa sobre un operando es un operador unario.

Un operador que actúa sobre dos operandos es un operador binario.

Page 101: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 101

4.2 … Operadores

Los operadores se pueden categorizar de la siguiente manera:

Aritméticos.Relaciónales y condicionales.Lógicos.De desplazamiento.De Asignación.

Page 102: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 102

4.2 … OperadoresAritméticos:

Son aquellos con los que podemos hacer operaciones aritméticas: como sumas, restas, multiplicaciones, divisiones, etc. El + puede ser utilizado como operador sobre cargado para concatenar y el + y – como signo positivo o negativo.

Divide op1 y op2op1 / op2/

Obtiene el resto de dividir op1 por op2

op1 % op2%

Multiplica op1 y op2op1 * op2*

Resta op1 y op2op1 – op2-

Suma op1 y op2op1 + op2+

DescripciónUsoOperador

Page 103: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 103

4.2 … OperadoresAritméticos:

Existen formas abreviadas para incrementar y decrementar:

Decrementa op en 1; evalúa el valor después de decrementar

-- op1--

Decrementa op en 1; evalúa el valor antes de decrementar

op1 ----

Incrementa op en 1; evalúa el valor después de incrementar

++ op1++

Incrementa op en 1; evalúa el valor antes de incrementar

op1 ++++

DescripciónUsoOperador

Page 104: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 104

4.2 … OperadoresAritméticos:

Ejemplos:

int a, b, c, d;

a = 2 + 2; // Suma

b = a * 3; // Multiplicación

c = b - 2; // Resta

d = b / 2; // división

e = b % 2; // devuelve el residuo de la división.

Incremento

int var1 = 3;var1++; // var1 es igual a 4

int var1 = 3, var2 = 0;var2 = ++var1; var2 = var1++;

Page 105: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 105

4.2 … OperadoresRelacionales:

Son aquellos donde se procede a una comparación entre dos operandos y ésta, produce un resultado verdadero o falso.

op1 es menor o igual que op2op1 <= op2<=

op1 es menor que op2op1 < op2<

op1 es mayor o igual que op2op1 >= op2>=

op1 es mayor que op2op1 > op2>

op1 y op2 son distintosop1 != op2!=

op1 y op2 son igualesop1 == op2==

DescripciónUsoOperador

Page 106: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 106

4.2 … OperadoresCondicionales:

Son aquellos donde se procede a una evaluación que produce un valor de verdad o de falsedad basado en las tablas de verdad.

NEGACION

OR

AND

op1 es falso! op1!

uno de los dos es verdaderoop1 || op2||

op1 y op2 son verdaderosop1 && op2&&

DescripciónUsoOperador

Page 107: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 107

4.2 … OperadoresCondicionales:

Ejemplos:

int var1 = 7, var2 = 13;

boolean res = true;

res = (var1 == var2); // res ahora es igual a false

res = (var2 > var1); // res ahora es igual a true

Page 108: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 108

4.2 … OperadoresCondicionales:

Otro tipo de operador condicional que se puede utilizar en Java es el ( ? : )

Este operador es utilizado como una alternativa de uno de los controles de flujo (if...else)

boolean_expr ? expr1 : expr2

int val1 = 120;int val2 = 0;int resultado;

resultado = (val1 > val2) ? 100 : 200;

System.out.println(“El Resultado es " + resultado);

Page 109: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 109

4.2 … OperadoresAsignación:

Se asigna un valor a otro a través del =, recuerde que el == es para comprar, mientras que el = es para asignar.

Ejemplos:

op1 % op2op1 %= op2%=

op1 / op2op1 /= op2/=

op1 * op2op1 *= op2*=

op1 - op2op1 -= op2-=

op1 = op1 + op2op1 += op2+=

Equivale a:AsignaciónOperador

Page 110: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 110

4.3 Resumen Operadores

+ (unario, positivo), - (unario, negativo), + (suma) , - (resta) , * (multiplicación), / (división), % (resto), ++ (incremento), --(decremento)

Operadores numéricos, que devuelven un valor float o double

+ (unario, positivo), - (unario, negativo), + (suma) , - (resta) , * (multiplicación), / (división), % (resto), ++ (incremento), --(decremento), <<, >>, >>> (rotación) , ~ (complemento a nivel de bits), & (AND a nivel de bits), | (OR a nivel de bits) ^(XOR a nivel de bits)

Operadores numéricos, que devuelven un valor int o long

== (igual), != (distinto), ! (complemento), & (AND), | (OR), ^ (XOR), && (AND condicional), || (OR condicional)

Operadores booleanosBooleanos

< (menor) , <= (menor o igual) , > (mayor), >= (mayor o igual), == (igual), != (distinto)

Operadores de comparación que devuelven un valor boolean

Punto Flotante

< (menor) , <= (menor o igual) , > (mayor), >= (mayor o igual), == (igual), != (distinto)

Operadores de comparación que devuelven un valor boolean

Enteros

OperadoresGrupos de OperadoresTipos

Page 111: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 111

4.4 Valores de Precedencia

Operadores

++ -- + - ~ !(type)* / %+ - +<< >> >>>< > <= >=

instanceof== !=&^|&&||?:= op=

Descripción

Unary operatorsMultiply, divide, remainderAdd, subtract, add stringShift (>>> is zero-fill shift)Relational, type compare

EqualityBit/logical ANDBit/logical exclusive ORBit/logical inclusive ORLogical ANDLogical ORConditional operatorAssignment operators

Orden

1

2345

67 89

10111213

Assoc.

R

LLLL

LLLLLLRR

Page 112: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 112

4.4 … Valores de Precendencia

int var1 = 0;

var1 = 2 + 3 * 4; // var1 ahora es igual a 14

int var1 = 0;

var1 = 12 - 6 + 3; // var1 ahora es igual a 9

Precedencia: Ejemplos:

Page 113: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 113

4.5 Palabras Reservadas

abstractfinalnativeprivateprotectedpublicstaticsynchronizedtransientvolatilestrictfp

breakcasecatchcontinuedefaultdoelsefinallyforifreturnswitchthrowtrywhile

booleanbytechardoublefloatintlongshortvoidenum

true falsenull

classextendsimplementsinterfacethrows

instanceofnewsuperthis

importpackage

Page 114: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 114

4.6 ExpresionesUna expresión es una determinada combinación de operadores y operandos que se evalúan para obtener un resultado en particular.

Los operandos pueden ser variables, constantes o llamadas a métodos.

Java soporta constantes con nombre y para crearlas es de la siguiente manera:

Al igual que otros lenguajes de programación, en Java se puede controlar el orden de evaluación de las expresiones mediante el uso de paréntesis. En caso de no proporcionarse estos paréntesis, el orden estará determinado por la precedencia de operadores.

final float NOMBRE_CONSTANTE = 3.14159

Page 115: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 115

4.7 Conversiones y CastingConversión y Casting:

Es pasar de un tipo de dato a otro. Por ejemplo pasar de un int a un float o viceversa es un casting o conversión.

Ejemplo: int a = 3,14; float b = 5;

byte shortint

long

byte longintshort

Page 116: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 116

4.8 Concatenación

Concatenación:Es la acción de unir dos o más hileras tal y como se ve a continuación:

String nombre = “José ";

String apellido = "Díaz";

String nomCompleto;

nombre = nombre + apellido ; // Ahora nombre es igual a “José Díaz”

nombre += apellido; // otra forma para obtener el mismo resultado

nomCompleto = nombre ;

Page 117: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 117

4.9 Ejercicio Práctico

El instructor realizará una explicación detallada del ejercicio a realizar.

En el método main() de Principal. java, envié dos parámetros cuyos valores serán almacenados en dos variables String llamadas nombre y apellido.

Utilizando el operador condicional, verifique que si ambas variables son igual a nulo, se les asigne un valor de vació, de los contrario mantendrán el valor recibido por parámetro:

nombre = (nombre == null) ? “” : nombre;apellido = (apellido == null) ? “” : apellido;

Concatene ambas variables y asígnelas a una nueva variable llamada nombreCompleto. Esta variable contendrá el nombre completo del cliente y deberá ser impreso en consola.

Page 118: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 118

4.9 … Ejercicio Práctico

Declare e inicialice dos variables que almacenen el costo para el alquiler de ítems. El valor de estos dos ítems pueden ser 26.95 y 376.87

Utilizando el método System.out.println() imprima el valor de ambas variables de la siguiente manera:

Item 1 : Precio 26.95 (Utilice el operador +)

Declare otra variable que almacene el costo total de ambos ítems utilizando un operador aritmético correspondiente e imprima su resultado en consola.

Page 119: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 119

4.9 … Ejercicio Práctico

En base al resultado obtenido, aplique un descuento de un 3% y luego calcule el impuesto de venta (13%) que se le aplicará a la orden.

Tanto el descuento como el impuesto de ventas se deben imprimir.

Ahora calcule el Total a Pagar de dicha orden e imprima su resultado.

Utilizando el operador condicional si el Total a Pagar es mayor a 400, imprima “Orden Alta”, de lo contrario despliegue “Orden Baja”.

Recuerde documentar aquel código que no esté utilizando.

Page 120: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 120

55Control de FlujoControl de Flujo

Page 121: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 121

2. Entorno de Desarrollo Integrado2. Entorno de Desarrollo Integrado

3. El Lenguaje Java3. El Lenguaje Java

4. Tipos de Datos y Operadores4. Tipos de Datos y Operadores

5. Control de Flujo5. Control de Flujo

1. Introducción a Java1. Introducción a Java

6. Conceptos Básicos en Java6. Conceptos Básicos en Java

7. Trabajando con Clases7. Trabajando con Clases

5. Control de Flujo

Page 122: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 122

8. Utilización de Interfaces8. Utilización de Interfaces

9. Estándares de Desarrollo9. Estándares de Desarrollo

10. Manejo de Excepciones10. Manejo de Excepciones

11. Utilizando Cadenas, Arreglos y Colecciones11. Utilizando Cadenas, Arreglos y Colecciones

12. Clases en Java12. Clases en Java

13. Swing13. Swing

AnexoAnexo

5. Control de Flujo

Page 123: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 123

Objetivos

Profundizar en el manejo del control de flujo del lenguaje, con el fin de que el estudiante adquiera conocimientos sólidos en manejo de instrucciones de control y repetición.

Ejemplificar el uso de cada una de las estructuras de control de flujo propuestas en el objetivo anterior.

Page 124: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 124

5. Estructuras de Control y Repetitivas

Secuencial

Transferencia

Selección

Iteración

Copyright Formación y Soluciones Informáticas EFIBS S.A. 124

Page 125: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 125

5.1 Control de Flujo

El condicional simple es aquel que solamente lleva if{}.

El condicional doble es aquel que a parte de if también tiene el, if-else {}.

El if evalua una expresión, la cual puede ser falsa o verdadera.

Copyright Formación y Soluciones Informáticas EFIBS S.A. 125

Page 126: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 126

5.1 … Control de Flujo

Ejemplo de condicional simple y compuesto son los siguientes:

if (expresión_booleana) {sentencia1;…

sentencia N;} else {

sentencia1;…

sentencia N;. . .

}

if (expresión_booleana){sentencia1

…sentencia N;

}

Si se cumple la expresión se lleva a

cabo el bloque del if

Si no se cumple la expresión se lleva a cabo el bloque del else

Copyright Formación y Soluciones Informáticas EFIBS S.A. 126

Page 127: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 127

5.1 … Control de Flujo

Otro tipo de condicional es el switch, el cual evalúa que la expresión se asocie con algún valor correspondiente a los casos a analizar.

No poner un break, puede ocasionar

que se entre a casos no deseados

switch ( expresión_entera ) {case valor_entero:

sentencia;break;

case valor_entero:sentencia;break;. . .

default:sentencia;

}El default es cuando no se pudo cumplir

ninguno de los casos anteriores

La expresión deberácorresponder alguno

de los casos

Copyright Formación y Soluciones Informáticas EFIBS S.A. 127

Page 128: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 128

5.2 Consideraciones del Switch

Cuidado: en el switch la expresión que se evalúa no es una expresión booleana como en el if-else, sino una expresión entera.

Cada sentencia case debe ser única y el valor proporcionado a cada sentencia case debe ser del mismo tipo que el tipo de dato devuelto por la expresión proporcionada a la sentencia switch.

Otro punto de interés en la sentencia switch son las sentencias break después de cada case.

Page 129: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 129

5.2 … Consideraciones del Switch

La sentencia break hace que el control salga de la sentencia switch y continúe con la siguiente línea.

La sentencia break es necesaria porque las sentencias case se siguen ejecutando hacia abajo. Esto es, sin un break explícito, el flujo de control seguiría secuencialmente a través de las sentencias case siguientes.

Finalmente, puede utilizar la sentencia default al final de la sentencia switch para manejar los valores que no se han manejadoexplícitamente por una de las sentencias case.

Copyright Formación y Soluciones Informáticas EFIBS S.A. 129

Page 130: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 130

5.3 Ejemplo Switch

int mes;switch (mes) {

case 1: System.out.println("Enero"); break;case 2: System.out.println("Febrero"); break;case 3: System.out.println("Marzo"); break;case 4: System.out.println("Abril"); break;case 5: System.out.println("May0"); break;case 6: System.out.println("Junio"); break;case 7: System.out.println("Julio"); break;

}

La variable mes, deberá contener alguno de los posibles estados mes={Enero, Febrero…}.

De no ser así, no se ejecutará ninguna acción según el ejemplo:

Copyright Formación y Soluciones Informáticas EFIBS S.A. 130

Page 131: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 131

5.4 Sentencias de Repetición

Los tres tipos básicos en java son:Whiledo-whileForfor each(ver 5.0).

Los tres primeros tienen tres partes: Condición de iniciaciónCuerpoCondiciónIniciaciónTerminación

Copyright Formación y Soluciones Informáticas EFIBS S.A. 131

Page 132: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 132

5.4.1 Sentencia while

Se caracteriza por evaluar primero la condición y luego ejecutar el bloque de instrucciones del ámbito. el ciclo while se ejecuta cuando no se conoce la cantidad exacta de iteraciones que se desea hacer.

También se utilizan cuando cabe la posibilidad de que me pueda salir del ciclo por medio de alguna expresión booleana. while (expresión){

sentencia1;…

sentencia N;}

Copyright Formación y Soluciones Informáticas EFIBS S.A. 132

Page 133: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 133

5.4.1 … Sentencia while

El siguiente es un ejemplo de su uso, que nos permite ver como además de incrementar un contador, también se desea imprimir el contador cada vez que se genera un carácter.

. . .int cont=0;while (cont<10) {

System.out.println(“Valor Contador = " + cont);cont++;

}

Variación

TérminoIniciación

Copyright Formación y Soluciones Informáticas EFIBS S.A. 133

Page 134: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 134

5.4.2 Sentencia for

Se utiliza este bucle cuando se conoce los límites del bucle (su instrucción de inicialización, su criterio de terminación y su instrucción de incremento).

Inicialización es la sentencia que inicializa el bucle -- se ejecuta una vez al iniciar el bucle.

Terminación es una sentencia que determina cuando se termina el bucle. Esta expresión se evalúa al principio de cada iteración en el bucle. Cuando la expresión se evalúa a false el bucle se termina.

Finalmente, Incremento es una expresión que se invoca en cada interacción del bucle. Cualquiera (o todos) de estos componentes pueden ser una sentencia vacía (un punto y coma).

Copyright Formación y Soluciones Informáticas EFIBS S.A. 134

Page 135: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 135

5.4.2 … Sentencia for

La estructura del ciclo for es:

for (inicialización; terminación; incremento){sentencia 1;

…sentencia N;

}

Copyright Formación y Soluciones Informáticas EFIBS S.A. 135

Page 136: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 136

5.4.2 … Sentencia for

El siguiente es un ejemplo de su uso, se utiliza mucho sobre todo cuando se conoce la cantidad de iteraciones de que se van a emplear

VariaciónTérmino

Iniciación

// a es un array de cualquier tipo. . .int i;int length = a.length;

for (i = 0; i < length; i++) {. . .// hace algo en el elemento i del array a. . .

}

Copyright Formación y Soluciones Informáticas EFIBS S.A. 136

Page 137: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 137

5.4.3 Sentencia do-while

Se caracteriza por ejecutar al menos una vez el bloque de instrucciones del ámbito. el ciclo do-while se ejecuta cuando no se conoce la cantidad exacta de iteraciones que se desea hacer y además deseamos que las sentencias del ámbito se ejecuten al menos una vez.

En muchas oportunidades se utiliza para validaciones.

do{sentencia1;

…sentencia N;

}while (expresión);

Copyright Formación y Soluciones Informáticas EFIBS S.A. 137

Page 138: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 138

5.4.3 … Sentencia do-while

El siguiente es un ejemplo de su uso, que nos permite ver como además de incrementar un contador, también se desea imprimir el contador cada vez que se genera un carácter.

. . .int cont=0;do{

System.out.println(“Valor Contador = " + cont);cont++;

}while (cont<10)

Variación

TérminoIniciación

Copyright Formación y Soluciones Informáticas EFIBS S.A. 138

Page 139: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 139

5.5 Sentencia de Transferencia

La sentencia break, produce que las iteraciones sean terminadas y que el ciclo se termine:

while(cont<10){

if(cont==5){

break;

}

cont++;

}

for(int i=0; i<10;++i){

if(i==5){

break;

}

}

Termina el ciclo

Copyright Formación y Soluciones Informáticas EFIBS S.A. 139

Page 140: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 140

5.5 … Sentencia de Transferencia

La otra de las sentencias de transferencia es la continue que a diferencia de la sentencia break, salta una iteración pero no se sale o termina.

Finalmente, el return también es una sentencia de transferencia y se encarga de transferir el control a donde fue invocado.

while(cont<10){

if(cont==5){

continue;

}

cont++;

}

int suma(){

int a=5,b=10;

return a + b;

}

Copyright Formación y Soluciones Informáticas EFIBS S.A. 140

Page 141: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 141

5.6 Ejercicio Práctico

El instructor realizará una explicación detallada del ejercicio a realizar:

Con el objetivo de determinar el número de días de un mes, en el método main() del programa Principal.Java y utilizando la sentencia switch, realice lo siguiente:

Inicialice dos variables una con un valor de 1 a 12 para los meses del año y otra que contendrá el año.En base al mes se debe de determinar los días que tiene un mes y asígnele a una variable de tipo entera la cantidad de días que tiene el mes. Recuerde que: Setiembre, Abril, Junio y Noviembre tienen 30 días. Todos los demás tienen 31 días excepto Febrero que puede tener 28 o 29 días dependiendo si el año es bisiesto o no. (por el momento asuma 29 días).Una vez realizados los pasos anteriores se debe de desplegar la fecha de la siguiente manera:27/1/2000 y este mes tiene 31 días.

Copyright Formación y Soluciones Informáticas EFIBS S.A. 141

Page 142: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 142

5.6 … Ejercicio Práctico

Utilizando la sentencia for imprima todas las fechas que se encuentran entre la fecha resultante en el punto anterior y la cantidad de días que tiene el mes. Por ejemplo: Si el día es 27 y el mes 1 y el año 2000, el programa deberá desplegar los siguiente:

27/1/2000.28/1/2000.29/1/2000.30/1/2000.31/1/2000.

Recuerde documentar aquel código que no estéutilizando.

Copyright Formación y Soluciones Informáticas EFIBS S.A. 142

Page 143: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 143

66Conceptos BConceptos Báásicos sicos

en Javaen Java

Page 144: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 144

2. Entorno de Desarrollo Integrado2. Entorno de Desarrollo Integrado

3. El Lenguaje Java3. El Lenguaje Java

4. Tipos de Datos y Operadores4. Tipos de Datos y Operadores

5. Control de Flujo5. Control de Flujo

1. Introducción a Java1. Introducción a Java

6. Conceptos Básicos en Java6. Conceptos Básicos en Java

7. Trabajando con Clases7. Trabajando con Clases

6. Conceptos Básicos en Java

Page 145: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 145

8. Utilización de Interfaces8. Utilización de Interfaces

9. Estándares de Desarrollo9. Estándares de Desarrollo

10. Manejo de Excepciones10. Manejo de Excepciones

11. Utilizando Cadenas, Arreglos y Colecciones11. Utilizando Cadenas, Arreglos y Colecciones

12. Clases en Java12. Clases en Java

13. Swing13. Swing

AnexoAnexo

6. Conceptos Básicos en Java

Page 146: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 146

Objetivos

Explicar cuáles son las características de Java que lo hacen ser un lenguaje orientado a objetos.

Estudiar a profundidad conceptos tales como: objeto, clase, polimorfismo, encapsulamiento, sobrecarga, etc.

Page 147: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 147

6.1 Concepto de Objeto

Java es un lenguaje orientado a objetos ya que la unidad básica es el objeto.

Una posible definición de objeto es: “Es todo aquello que tiene: estado, comportamiento e identidad”(Grady Booch).

Los objetos pueden ser tangibles o intangibles.

Page 148: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 148

6.1 … Concepto de Objeto

Los objetos que son tangibles, son aquellos que podemos tocar, mirar, por ejemplo: laComputadora, elCliente, elProducto, etc.

Los objetos intangibles son aquellos que no se pueden ver, ni tocar. Por ejemplo: laTransacción, elPrestamo, laReservación, etc.

Uno de los grandes beneficios de los objetos es la encapsulación, la cual se describe como la capacidad de ocultar la implementación y dar al exterior solo lo que queremos que se muestre (la interfaz).

Page 149: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 149

6.1 … Concepto de Objeto

Los objetos son representaciones de las clases y las clases son las abstracciones de los objetos.

Así por ejemplo, si hablamos de la clase Lapicero un posible objetosería miLapicero y en el caso de la clase Cliente podemos tener elCliente.

Objeto: Lapicero

Objeto:Cliente

Page 150: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 150

6.1 … Concepto de Objeto

Los mensajes son simples llamadas a las funciones o métodos del objeto con el se quiere comunicar para decirle que haga cualquier cosa.

Para poder crear una aplicación se requieren más de un objeto, y estos objetos no pueden estar aislados unos de otros, pues bien,para comunicarse esos objetos se envían mensajes.

Objeto: Lapicero

Operación:Escribir

Page 151: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 151

6.1 … Concepto de Objeto

Entre el objeto y la clase la diferencia radica en que el objeto tiene estado y la clase NO.

La clase en general, es abstracta; es decir que solo contempla detalles comunes a los objetos que representa.

La clase se puede definir como el conjunto de objetos de un mismo tipo que comparten datos (atributos) y comportamientos (métodos) comunes.

Page 152: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 152

6.1 … Concepto de Objeto

En Java un objeto es visto como:DATOS(con estado) + OPERACIONES

dónde los datos corresponden a los atributos, pero con estado (valores).Por ejemplo el objeto cliente podría modelarse así:

getId()

Solicitante

Mensajeidnombre

direccion

setId

... getId

getNombre setNombre

Cliente

telefono

Page 153: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 153

6.2 Crear Objetos

Como ya se ha visto, un objeto es una instancia de una clase, esdecir un ejemplo específico de esa clase.

En Java, la creación de un objeto se hace de la siguiente manera:

Cliente elCliente = new Cliente(123,”Douglas”, “Alajuela”,“4445678”); // Declaración – Instanciación - Inicialización

Cliente elCliente = new Cliente(); // Declaración – Instanciación.

Cliente elCliente; // Solo declaración

Page 154: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 154

6.3 Utilizar Objetos

Los objetos, nos permiten poder acceder a los atributos y a los métodos.

Por ejemplo:

Cliente elCliente = new Cliente(123,”Juan”, “Alajuela”, “4445678”) ;

System.out.println(“ID: ”+elCliente.getId());

System.out.println(“Nombre:”+elCliente.getNombre());

Se recomienda el uso de métodos de acceso

tales como: set y get

Page 155: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 155

6.4 Eliminar Objetos

Muchos otros lenguajes orientados a objetos necesitan que se siga la pista de los objetos que se han creado y luego se destruyan cuando no se necesiten. Escribir código para manejar la memoria de esta es forma es complicado y propenso a errores.

Java permite ahorrarse esto, permitiendo crear tantos objetos como se quiera (sólo limitados por los que el sistema pueda manejar) pero nunca tienen que ser destruidos.

El entorno de ejecución Java borra los objetos cuando determina que no se van a utilizar más. Este proceso es conocido como recolector de basura (garbage collection).

Page 156: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 156

6.4 … Eliminar Objetos

Un objeto es elegible para el recolector de basura cuando no existen más referencias a ese objeto.

Las referencias que se mantienen en una variable desaparecen de forma natural cuando la variable sale de su ámbito, ó bien cuandose borra explícitamente un objeto referencia mediante la selección de un valor cuyo tipo de dato es una referencia a null.

Page 157: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 157

6.5 Recolector de Basura

El entorno de ejecución de Java tiene un recolector de basura que periódicamente libera la memoria ocupada por los objetos que no se van a necesitar más.

El recolector de basura de Java es un barredor de marcas que escanea dinámicamente la memoria de Java buscando objetos, marcando aquellos que han sido referenciados.

Page 158: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 158

6.5 … Recolector de Basura

El recolector de basura funciona en un thread (hilo) de baja prioridad y funciona tanto sincrónica como asincrónicamente dependiendo de la situación y del sistema en el que se estéejecutando el entorno Java.

El recolector de basura se ejecuta sincrónicamente cuando el sistema funciona fuera de memoria o en respuesta a una petición de un programa Java. Un programa Java le puede pedir al recolector de basura que se ejecute en cualquier momento mediante una llamada a System.gc().

Page 159: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 159

6.6 Finalización de los Objetos

Antes de que un objeto sea recolectado, el recolector de basura le da una oportunidad para limpiarse él mismo mediante la llamada al método finalize() del propio objeto. Este proceso es conocido como finalización.

Durante la finalización de un objeto se podrían liberar los recursos del sistema como son los ficheros, etc. y liberar referencias en otros objetos para hacerse elegible por la recolección de basura.

El método finalize() es un miembro de la clase java.lang.Object. Una clase debe sobrescribir el método finalize() para realizar cualquier finalización necesaria para los objetos de ese tipo.

Page 160: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 160

6.6 … Finalización de los Objetos

Ejemplo:

public class Cliente {

public void finalize(){

System.out.println(“Adios….");

}

}

Page 161: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 161

6.7 Concepto de Clase

Las Clases son las abstracciones de los objetos, son grupos de objetos que comparten características (atributos) y conductas (métodos) comunes.

La diferencia como se ha mencionado anteriormente entre la clase y el objeto, radica en que la clase, No tiene estado y el objeto Sí.

Otra analogía del concepto de clase, es que son el plano por medio del cual serán construidos los objetos.

Page 162: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 162

6.7 … Concepto de ClaseEn Java una clase es vista como:

DATOS + OPERACIONESdónde los datos corresponden a los atributos, es decir las características, mientras que las operaciones corresponden a los métodos. Por ejemplo la clase cliente podría modelarse así:

getId()

Solicitante

Mensajeidnombre

direccion

setId

... getId

getNombre setNombre

Cliente

telefono

Page 163: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 163

6.7 … Concepto de Clase

En java las clases se definen así:

Lo que está entre corchetes es opcional.

[ modificadores ] class NombredeClase [ extends NombredeSuperclase ][ implements NombredeInterface ] {

. . .// Ambito de la clase}

Page 164: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 164

6.8 Declaración de Clase

Recuerde! Para poder instanciar un objeto, antes tuvo que hacerse necesario la creación de una clase que tenga las características y conductas de ese objeto. Por ejemplo:

class Cliente {// Atributosprivate int iid;private String nombre,direccion,telefono;// Métodospublic void comprar(){…}public void consultar(){…} public void caminar(){…}public void correr(){…}

}

Es privado para mantener la encapsulación

Son parte de la interfaz Por eso son públicos

Page 165: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 165

6.9 La Instanciación

Recuerde! Para poder instanciar un objeto, antes tuvo que hacerse necesario la creación de una clase que tenga las características y conductas de ese objeto. Por ejemplo:

Cliente elCliente = new

Cliente(123,”Juan”,”Alajuela”,”4445678”);

elCliente(Referencia a la clase Cliente, la instancia)

Atributos

+

Métodos

Page 166: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 166

6.10 Convención del Nombres

Los nombres de archivosPersona.java – Mecánico.java

Los nombres de clasesPersona – Mecánico

Los nombres de los métodosgetNombrePersona(), setNombrePersona(….)

Los nombres de paquetesorg.efibs.aplicacion.*;

Los nombres de variablesnombrePersona – tipoMecanico

Los nombres de constantesCONSULTA_DE_PERSONASMAX_INTENTOS_DE_CONEXIONES

Page 167: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 167

6.11 Contenido de una Clase

Paquetes

Métodos

Objetos

Referencia a Objetos

Atributos

Contenido de una Clase

Page 168: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 168

6.12 Tipos de acceso a una Clase

privateNinguna otra clase puede crear un objeto de su clase.La clase puede contener métodos públicos y esos métodos pueden construir un objeto y devolverlo, pero nada más.

protectedSólo las subclases de la clase pueden crear instancias de ella.

publicCualquiera puede crear una instancia de la clase.

package-accessNadie externo al paquete puede construir una instancia de su clase.

Page 169: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 169

6.12 … Tipos de acceso a una Clase

private

protected

acmevideo acmetools

public public

Page 170: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 170

6.13 Atributos de una Clase

Las variables en Java en realidad son como cualquier otra variable del lenguaje. En lo que difiere es en el tipo de acceso que se use.

Se recomienda que el tipo de acceso sea privado, con el fin de asegurar el mecanismo de encapsulación.

Se tienen tres tipos de accesos para los atributos: publicprivateprotected

Page 171: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 171

6.13 … Atributos de una Clase

En el tipo de acceso public el atributo, podrá ser accesado por cualquiera desde el exterior.

En cuanto al tipo de acceso private, sólo se podrá accesar a lo interno de la clase y no desde el exterior, almenos que se haga a través de la interfaz(conjunto de métodos públicos).

El otro tipo de acceso es protected, el cual corresponde al mecanismo de la herencia y establece que solamente se podráacceder por parte de alguna clase derivada.

Page 172: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 172

6.13 … Atributos de una Clase

El siguiente, es un esquema para declaración de variables:

Recuerde, la información entre corchetes es opcional.

[especificadordeAcceso] [static] [final] [transient] [volatile] tipo nombredeVariable

Page 173: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 173

6.14 Atributos Persistentes

La mayoría de los atributos que trabajamos en Java mantienen su persistencia, sin embargo podemos quitarle ésta característica con la palabra clave transient.

Basado en este ejemplo, id sería un atributo no persistente de la clase.

class Cliente {

transient int id;

. . .

}

Page 174: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 174

6.15 Variables volátiles

Si una clase contiene una variable miembro que es modificada de forma asíncrona, mediante la ejecución de threads concurrentes, se puede utilizar la palabra clave volatile de Java para notificar esto al sistema Java.

Ejemplo:

class Cliente {

volatile String nombre;

. . .

}

Page 175: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 175

6.16 MétodosLos nombres de los métodos deben ser significativos no solo por facilidad al usuario sino al programador.Junto con el nombre del método, la declaración lleva información como el tipo de retorno del método, el número y el tipo de los argumentos necesarios, y qué otras clases y objetos pueden llamar al método.Los únicos elementos necesarios para una declaración de método son el nombre y el tipo de retorno del método. Por ejemplo, el código siguiente declara un método llamado estaVacio() en la clase Pila que devuelve un valor booleano (true o false).

class Pila {

. . .

boolean estaVacio() {

. . .

}

}

Page 176: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 176

6.16 … Métodos

La sintaxis general de un método es:

Ejemplos:

TipoDeAcceso + TipoDeRetorno + nombreDelMetodo +[parámetrosFormales]

public class Cliente{

. . .

public boolean consultar() {…}

public void esperar(){…}

public void comprar(){…}

...

}

Page 177: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 177

6.17 SobreCarga

Un método está sobrecargado, cuando cumple que tiene igual nombre pero diferente cantidad o tipos de parámetros.

Se dice que para que el método esté sobrecargado debe existir una firma única, es decir que difiera ya sea en cantidad o en tipos de los parámetros.

El compilador, se dará cuenta cual es el método a invocar por la cantidad y tipo de los parámetros.

Page 178: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 178

6.17 … SobreCarga

Un Ejemplo:

public void consultar() { . . .}public void consultar(int x) { . . .}

public int comprar() { . . .}public int comprar(int a) { . . .}

Page 179: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 179

6.18 Valor de Retorno

Los métodos retornan siempre algo, aunque sea el control con la palabra reservada void.

Los valores posibles de retorno son los tipos de datos simples o compuestos.

Por ejemplo: public class Cliente {

public boolean consultar() {

if (!preguntar)

return true;

else

return false;

}

}

Page 180: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 180

6.19 Estructura de la Clase

public class Cliente {

// Atributos ó características

int id;

String nombre, direccion , telefono;

// Métodos ó Operaciones

int getId() {

}

}

Declaración

Tipo de Acceso

Variables de la Instancia

Métodos de la Instancia

Bloques de Código

Page 181: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 181

6.20 Estructura de un método

public boolean comprar () {

// variables del método

int producto;

// cuerpo del método

if(producto>=10000 && producto<40000){

return true;

}

else{

return false;

}

}

Declaración

Retorno

Tipo de Dato RetornoTipo de Acceso

Variables del Método

Estatutos del método

Page 182: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 182

6.21 Clases-Métodos-Atributosfinal

Una variable final es una constante y no puede ser modificada.Es muy utilizada para inicializar y declarar Constantes.Un método final no se puede sobrescribir por una subclase.Una clase final no puede ser heredada.

public final class Cliente {

public final static nombre = ”José”;

}

Page 183: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 183

6.22 Resumen de Conceptos

Una Clase es una definición de un nuevo Tipo, al que se le da un nombre.

Una Clase contiene atributos y métodos que configuran el estado y las operaciones que puede realizar.

Un Objeto es la materialización (instanciación) de una clase. Puede haber tantos Objetos de una Clase como la memoria lo permita.

Page 184: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 184

6.22 … Resumen de Conceptos

Los Objetos se crean (se les asigna memoria) con el operador new.

Los Objetos se manipulan con Referencias.

Una Referencia es una Variable que apunta a un Objeto.

El acceso a los elementos de un Objeto (debe hacerse a través de su interfaz y no en forma directa, con el fin de mantener el encapsulamiento.

Page 185: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 185

6.23 Polimorfismo en Java

Es cuando existen múltiples formas de llevar a cabo una acción.

Un ejemplo sería la forma en que saluda cada cliente en particular y puede ir basado en su lenguaje Natal o país donde se hospeda.

Así por ejemplo, un Inglés podría decir:

Hello!

Mientras que un Francés, podría decir:

Cava!

Page 186: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 186

6.23 ... Polimorfismo en Java

// Inglés-Francés:// Ingles.javapublic class Ingles extends Cliente{

...public void saludar(){

System.out.println(“HELLO!”);}...

}// Frances.java}public class Frances extends Cliente{

...public void saludar(){

System.out.println(“CAVA!”);}...

}

Page 187: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 187

6.23 ... Polimorfismo en Java

// Cliente:

// Cliente.javapublic class Cliente{

...public abstract void saludar(); // se define abstract y sin

// implementación...

}

Page 188: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 188

6.23 … Polimorfismo en Java

// Clase de Prueba...public static void main(String args){

Cliente elCliente;elCliente = new Ingles();elCliente.saludar(); // despliega HELLO!

elCliente = new Frances();elCliente.saludar();// despliega CAVA!

}

Ejemplo:

Page 189: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 189

6.24 Encapsulamiento

El encapsulamiento denota ocultamiento.

Un ejemplo claro es utilizar privado los atributos de las clases, con el fin de que solo puedan ser accesados por medio de la interfaz.

El Encapsulamiento oculta la estructura interna y operaciones de los objetos detrás de una interface y aumenta el nivel de abstracción.

Page 190: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 190

6.24 Encapsulamiento

getId()

Solicitante

Mensajeidnombre

direccion

setId

... getId

getNombre setNombre

Cliente

telefono

Page 191: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 191

6.25 Ejercicio Práctico

Analice con el instructor el siguiente diagrama:

Page 192: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 192

6.25 … Ejercicio Práctico

Cree los siguientes paquetes:

org.efibs.sistemaDeOrdenes.Cliente.

org.efibs.sistemaDeOrdenes.Orden.

org.efibs.sistemaDeOrdenes.OrdenItem.

org.efibs.sistemaDeOrdenes.Producto.

En base al diagrama anterior, cree las siguientes clases con cada uno de sus atributos y métodos, aplicando el concepto de encapsulamiento para cada una de ellas:

Orden.javaCliente.javaOrdenItem.javaProducto.java

Page 193: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 193

77Trabajando con Trabajando con

ClasesClases

Page 194: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 194

2. Entorno de Desarrollo Integrado2. Entorno de Desarrollo Integrado

3. El Lenguaje Java3. El Lenguaje Java

4. Tipos de Datos y Operadores4. Tipos de Datos y Operadores

5. Control de Flujo5. Control de Flujo

1. Introducción a Java1. Introducción a Java

6. Conceptos Básicos en Java6. Conceptos Básicos en Java

7. Trabajando con Clases7. Trabajando con Clases

7. Trabajando con Clases

Page 195: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 195

8. Utilización de Interfaces8. Utilización de Interfaces

9. Estándares de Desarrollo9. Estándares de Desarrollo

10. Manejo de Excepciones10. Manejo de Excepciones

11. Utilizando Cadenas, Arreglos y Colecciones11. Utilizando Cadenas, Arreglos y Colecciones

12. Clases en Java12. Clases en Java

13. Swing13. Swing

AnexoAnexo

7. Trabajando con Clases

Page 196: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 196

Objetivos

Explicar el manejo de clases, así como la manipulación tanto de atributos como de métodos.

Estudiar el mecanismo de reutilización de código(herencia).

Page 197: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 197

7.1 Concepto de Herencia

La herencia es el mecanismo de la orientación a objetos, que permite la reutilización de código que está repetido en dos o más clases.

Por lo que todo aquello que tenga la super clase, lo tendrá también la subclase. Para referirse a la sub clase se le llama sub tipo, clase derivada y clase hija.

Se le llama superclase a la clase de la que desciende una clase.Otros nombres utilizados son: super clase, super tipo y clase padre.

Page 198: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 198

7.1 … Concepto de Herencia

Un ejemplo de herencia es el siguiente:

Individuo y compañía son tipos de Clientes

Hardware, Manual y Software son tipos de producto

Page 199: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 199

7.2 Definiciones

Una Subclase, es una clase que deciende de otra clase. Una subclase hereda el estado y comportamiento de todos sus ancestros.

El término super clase se refiere al ancestro más directo, así como a todas las clases ascendentes.

Page 200: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 200

7.2 … Definiciones

Otro ejemplo de herencia es el siguiente:

Producto

Hardware Software Manual

Page 201: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 201

7.3 Creación de subclases

Un ejemplo de herencia es el siguiente:

class Hardware extends Producto {. . .

}class Software extends Producto {

. . .}class Manual extends Producto {

. . .}

Page 202: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 202

7.4 Herencia de atributosRegla para la Herencia de atributos:

Una subclase hereda todos los atributos de su superclase que puedan ser accesibles desde la subclase (a menos que los atributos estén ocultos en la subclase).

Esto es, las subclases.

Heredan aquellos atributos declarados como public o protected.

Heredan aquellos atributos declarados sin especificador de acceso (normalmente conocidas como "Amigas") siempre que la subclase esté en el mismo paquete que la clase. No hereda los atributos de la superclase si la subclase declara una variable miembro que utiliza el mismo nombre. Los atributos de la subclase se dice que ocultan los atributos de la superclase.No hereda los atributos private.

Page 203: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 203

7.4 … Herencia de atributos

Un ejemplo de herencia es el siguiente:

elHardware

idnombre

periodoDeGarantiapublic class Hardware extends Producto{

private int periodoDeGarantia;}

public class Producto {private String id;private String nombre;

…}

Hardware elHardware = new Hardware();

Page 204: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 204

7.5 Herencia de métodos

Regla para la Herencia de Métodos:

Una subclase hereda todos los métodos de su superclase que son accesibles para la subclase (a menos que el método sea sobrescrito por la subclase).

Esto es, una Subclase.

Hereda aquellos métodos declarados como public o protected

Hereda aquellos métodos sin especificador de acceso, siempre que la subclase esté en el mismo paquete que la clase.

No Hereda un método de la superclase si la subclase declara un método que utiliza el mismo nombre.Se dice que el método de la subclase sobrescribe al método de la superclase.

No Hereda los métodos private.

Page 205: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 205

7.6 Clase Object

La clase Object está situada en la parte más alta del árbol de la herencia en el entorno de desarrollo de Java.

Todas las clases del sistema Java son descendientes (directa o indirectamente) de la clase Object.

Define los estados y comportamientos básicos que todos los objetos deben tener, como la posibilidad de:

Compararse unos con otros, De convertirse a cadenas, De esperar una condición variable, De notificar a otros objetos que la condición variable ha cambiado. Devolver la clase del objeto.

Page 206: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 206

7.7 Métodos de la clase ObjectEl método equals() se utiliza para comparar si dos objetos son iguales. Este método devuelve true si los objetos son iguales, o false si no lo son. Observe que la igualdad no significa que los objetos sean el mismo objeto. Consideremos este código que compara dos enteros.

Este código mostrará Los objetos son Iguales aunque uno y otroUno referencian a dos objetos distintos. Se les considera iguales porque su contenido es el mismo valor entero. Las clases deberían sobrescribir este método proporcionando la comprobación de igualdad apropiada. Un método equals() debería comparar el contenido de los objetos para ver si son funcionalmente iguales y devolver true si es así.

Individuo elIndividuo = new Individuo(), Individuo otroIndividuo = new Individuo();

if (elIndividuo.equals(otroIndividuo))System.out.println("Los Individuos son Iguales");

Page 207: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 207

7.8 … Métodos de la clase Object

El método getClass() es un método final (no puede sobrescribirse).

Devuelve una representación en tiempo de ejecución de la clase del objeto.

Este método devuelve un objeto Class al que se le puede pedir varia información sobre la clase, como por ejemplo:

Su nombre, El nombre de su superclase y los nombres de los interfaces que implementa.

El siguiente método obtiene y muestra el nombre de la clase de un objeto:

Page 208: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 208

7.8 … Métodos de la clase Object

Ejemplos:

void PrintClassName(Object obj) {System.out.println("La clase del Objeto es " +

elEstudiante.getClass().getName());System.out.println(“Es una hilera”+elEstudiante.toString());}

Object createNewInstanceOf(Object obj) {return obj.getClass().newInstance();

}

Page 209: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 209

Otros métodos de la clase object son:

finalize(); Anteriormente estudiadonotify();notifyAll();wait();

Los últimos tres son críticos cuando se escriben programas Java con múltiples thread.

Estos métodos ayudan a asegurarse que los thread están sincronizados.

7.8 … Métodos de la clase Object

Page 210: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 210

7.9 Clases Abstractas

Una clase abstracta es una clase que sólo puede tener subclases y no puede ser instanciada.

En la programación orientada a objetos, se podrían modelar conceptos abstractos para no querer que se creen instancias de ellos, como un mecanismo de seguridad.

Por ejemplo, La clase Persona de la se ha hecho referencia debería ser abstracta ya que no tiene sentido instanciarla, por el grado de generalidad que presenta. En su lugar, la clase Persona sólo tiene sentido como superclase de otras clases como Estudiante y Profesor que implementan números de tipos específicos. Clases como Persona, que implementan conceptos abstractos y no deben ser instanciadas, ya que son muy generales.

Page 211: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 211

7.9 … Clases Abstractas

SuperClase Abstracta

SubClases Concretas

Cliente

Compañia Individuo

El uso de clases abstractas se recomienda para poder mantener modelos generales tales como:

Page 212: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 212

7.9 … Clases Abstractas

Una clase abstracta puede contener muchos métodos abstractos, los cuales no tienen implementación.

Por lo tanto, una clase abstracta puede definir una interfaz de programación completa.

El sentido de los métodos abstractos, es poder darle la implementación respectiva en las clases derivadas.

Page 213: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 213

7.9 … Clases Abstractas

Por ejemplo, en el caso de Individuo y Compañia ambos pueden ser sub-clases de Cliente y ambos podrían compartir una conducta como calcularMonto() que se procedería a implementar de diferente manera.

Por lo tanto, en la super clase Cliente calcularMonto() no tendría implementación sino que la implementación se daría en cada una de las subclases.

El cálculo del monto varía según el cliente, por lo que la fórmula no puede ser la misma.

Page 214: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 214

7.9 … Clases Abstractas

abstract class Cliente {. . .

}

public abstract class Cliente {

protected int id;

public int getId()…

}

public class Individuo

extends Cliente{

private float descuento;

...

public class Compañia

extends Cliente {

private String numeroLic;

...

Page 215: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 215

7.9 … Clases Abstractasabstract class Cliente {

abstract float calcularMonto();

}

class Individuo extends Cliente {…float calcularMonto(){

…}

}class Administrativo extends Persona {

…float calcularMonto(){…}

}

Page 216: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 216

7.10 Ejercicio Práctico

Analice con el instructor el siguiente diagrama:

Page 217: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 217

El instructor realizará una explicación detallada del ejercicio a realizar:

En base al diagrama anterior, cree las siguientes clases con cada uno de sus atributos y métodos, aplicando el concepto de encapsulamiento para cada una de ellas:

Compannia.java (en el paquete Cliente)

Individuo.java (en el paquete Cliente)

Manual.java (en el paquete Producto)

Software.java (en el paquete Producto)

Hardware.java (en el paquete Producto)

Una vez creadas las clases, se debe de aplicar el concepto de herencia con la clase Cliente y Producto.

Debe completar los set y gets respectivos para cada una de las clases.

7.10 … Ejercicio Práctico

Page 218: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 218

Desde el método main() del programa Principal.java, cree una instancia del Cliente, Individuo y Compannia y envíele como parámetros los que requiera en el constructor sobre cargado.

Lleve a cabo lo mismo pero con: Producto, Hardware, Software y Manual.

Sobrescriba el método toString() tanto de Cliente como de Productos e imprima desde Principal.java el contenido de cada uno de los objetos creados.

7.10 … Ejercicio Práctico

Page 219: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 219

88UtilizaciUtilizacióón de n de

InterfacesInterfaces

Copyright Formación y Soluciones Informáticas EFIBS S.A. 219

Page 220: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 220

2. Entorno de Desarrollo Integrado2. Entorno de Desarrollo Integrado

3. El Lenguaje Java3. El Lenguaje Java

4. Tipos de Datos y Operadores4. Tipos de Datos y Operadores

5. Control de Flujo5. Control de Flujo

1. Introducción a Java1. Introducción a Java

6. Conceptos Básicos en Java6. Conceptos Básicos en Java

7. Trabajando con Clases7. Trabajando con Clases

8. Utilización de Interfaces

Page 221: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 221

8. Utilización de Interfaces8. Utilización de Interfaces

9. Estándares de Desarrollo9. Estándares de Desarrollo

10. Manejo de Excepciones10. Manejo de Excepciones

11. Utilizando Cadenas, Arreglos y Colecciones11. Utilizando Cadenas, Arreglos y Colecciones

12. Clases en Java12. Clases en Java

13. Swing13. Swing

AnexoAnexo

8. Utilización de Interfaces

Page 222: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 222

Objetivos

Entender la diferencia entre interfaces y clases.

Implementar ejercicios, donde se ponga en práctica el uso de las interfaces, esto con el fin de que se pueda adquirir un sólido entendimiento.

Page 223: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 223

Una posible definiciUna posible definicióón para las interfaces es la siguiente: n para las interfaces es la siguiente: ““Una Una interface es una colecciinterface es una coleccióón de definiciones de mn de definiciones de méétodos (sin todos (sin implementaciones) y de valores constantesimplementaciones) y de valores constantes””..

Las interfaces se utilizan para definir un protocolo de comportamiento que puede ser implementado por cualquier clase del árbol de clases.

8. Interfaces

Page 224: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 224

Las interfaces son útiles para:

Capturar similitudes entre clases no relacionadas sin forzar una relación entre ellas.

Declarar métodos que una o varias clases necesitan implementar.

Revelar la interface de programación de un objeto sin recelar sus clases (los objetos de este tipo son llamados objetos anónimos y pueden ser útiles cuando comparta un paquete de clases con otros desarrolladores).

8.1 Utilidades de las Interfaces

Page 225: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 225

Algunas veces se trata a las interfaces como una alternativa a la herencia múltiple en las clases. En realidad, lo que hacen es simularlas.

No se pueden heredar variables desde una interface.

No se pueden heredar implementaciones de métodos desde una interface.

La herencia de una interface es independiente de la herencia de la clase, las clases que implementan la misma interface pueden o no estar relacionadas a través del árbol de clases.

8.2 Las interfaces Vs herencia múltiple

Page 226: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 226

Para crear una Interface, se debe escribir tanto la declaración como el cuerpo de la interface.

La Declaración de Interface declara varios atributos de la interface, como su nombre o si se extiende desde otra interface.

El Cuerpo de Interface contiene las constantes y las declaraciones de métodos del Interface.

declaraciondeInterface {

cuerpodeInterface

}

8.3 Definir una Interface

Page 227: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 227

Como mínimo, una declaración de interface contiene la palabra clave interface y el nombre de la interface que se va a crear.

Nota: Por convención, los nombres de interfaces empiezan con una letra mayúscula al igual que las clases. Frecuentemente los nombres de interfaces terminan en "able" o "ible".

interface Texable {

. . .

}

8.4 Declaraciones de Interfaces

Page 228: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 228

La declaración de una interface puede tener otros dos componentes:

El especificador de acceso public.

Lista de "superinterfaces".

Una interface puede extender de otras interfaces como una clase puede extender o subclasificar otra clase.

Mientras que una clase sólo puede extender de una superclase, las interfaces pueden extender de cualquier número de interfaces.

[public] interface Nombredenterface [extends listadeSuperInterfaces] {. . .

}

8.4 … Declaración de Interfaces

Page 229: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 229

Una posible forma de definir una interface, se puede ver a través del siguiente esquema.

[public] interface NombreDeInterface [extendslistadeSuperInterfaces] {

. . .}

8.4 … Declaración de Interfaces

Page 230: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 230

El especificador de acceso public indica que la interface puede ser utilizada por todas las clases en cualquier paquete.

La cláusula extends es similar a la utilizada en la declaración de una clase, sin embargo, una interface puede extender de varias interfaces (mientras una clase sólo puede extender una), y una interface no puede extender clases.

Una interface hereda todas las constantes y métodos de sus superinterfaces a menos que la interface oculte una constante con el mismo nombre o redeclare un método con una nueva declaración.

8.5 Algunas Consideraciones

Page 231: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 231

El cuerpo de la interface contiene las declaraciones de métodos para los métodos definidos en la interface.

Además de las declaraciones de los métodos, una interface puede contener declaraciones de constantes.

Nota:

Las declaraciones de miembros en una interface no permiten el uso de algunos modificadores y desaconsejan el uso de otros. No se podrán utilizar transient, volatile, o synchronized en una declaración de miembro en una interface. Tampoco se podráutilizar los especificadores private y protected cuando se declaren miembros de un interface.

8.6 Cuerpo de la Interfaz

Page 232: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 232

Todos los valores constantes definidos en una interface son implícitamente públicos, estáticos y finales.

Todos los métodos declarados en una interface son implícitamente públicos y abstractos.

8.7 Acceso de las Interfaces

Page 233: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 233

El siguiente código define una nueva interface llamada Taxable con un método para calcular el impuesto.

interface Taxable {

Static final double porcentaje = 20.78;

public double getTax();

}

8.7 … Acceso de las Interfaces

Page 234: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 234

Para utilizar una interface se debe escribir una clase que la implemente.

Una clase declara todos las interfaces que implementa en su declaración de clase.

Para declarar que una clase implementa una o más interfaces, se utiliza la palabra clave implements seguida por una lista delimitada por comas con las interfaces implementadas por la clase.

8.8 Uso de las interfaces

Page 235: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 235

interface colección {

int MAXIMO = 500;

void añadir(Object obj);

void borrar(Object obj);

Object buscar(Object obj);

int contadorActual();

}

class PilaFIFO implements colección {

. . .

void añadir(Object obj) {

. . .

}

void borrar(Object obj) {

. . .

}

Object buscar(Object obj) {

. . .

}

int contadorActual() {

. . .

}

}

Observa que las firmas de los métodos de la interface colección implementados en la clase PilaFIFO deben corresponder exactamente con las firmas de los métodosdeclarados en la interface colección.

8.9 Ejemplo de las interfaces

Page 236: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 236

public class Cliente extends Object

public class Compañia extends Empleado

public class Individuo extends Empleado

public void ejemplo(Cliente e) {

if (e instanceof Compañia) {

// Procesa un Administador

} else if (e instanceof Individuo) {

// Procesa un Administador

} else {

// Procesa cualquier otro tipo de Cliente

}

}

8.10 Uso del instanceof

Page 237: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 237

El instructor realizará una explicación detallada del ejercicio. En base al siguiente diagrama:

8.11 Ejercicio Práctico

Page 238: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 238

Cree un paquete llamado:

org.efibs.sistemaDeOrdenes.Interfaces

Crear una interface para la clase Taxable con sus correspondientes declaraciones.

En base a lo anterior se requiere crear las clases de Hardware ySoftware y que ambas implementen a la Interfece Taxable.

Nota: Con el objetivo de probar ambas clases se requiere implementar el método getTax(...) de las clases creadas en punto 2 de ésta práctica y cree un método donde pueda procesar ambas clases utilizando el operador intanceof. Converse con el instructor y demás participantes la correcta ubicación del método que se encargue de procesar ambas clases.

8.11 ... Ejercicio Práctico

Page 239: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 239

99EstEstáándares de ndares de

DesarrolloDesarrollo

Page 240: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 240

2. Entorno de Desarrollo Integrado2. Entorno de Desarrollo Integrado

3. El Lenguaje Java3. El Lenguaje Java

4. Tipos de Datos y Operadores4. Tipos de Datos y Operadores

5. Control de Flujo5. Control de Flujo

1. Introducción a Java1. Introducción a Java

6. Conceptos Básicos en Java6. Conceptos Básicos en Java

7. Trabajando con Clases7. Trabajando con Clases

9. Estándares de Desarrollo

Page 241: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 241

8. Utilización de Interfaces8. Utilización de Interfaces

9. Estándares de Desarrollo9. Estándares de Desarrollo

10. Manejo de Excepciones10. Manejo de Excepciones

11. Utilizando Cadenas, Arreglos y Colecciones11. Utilizando Cadenas, Arreglos y Colecciones

12. Clases en Java12. Clases en Java

13. Swing13. Swing

AnexoAnexo

9. Estándares de Desarrollo

Page 242: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 242

Objetivos

Entender la importancia del uso de estándares de desarrollo.

Definir, implementar y crear ejercicios, donde se ponga en práctica el uso de estándares de desarrollo, esto con el fin de que se pueda adquirir un sólido entendimiento sobre el tema.

Page 243: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 243

El desarrollo de aplicaciones actuales requiere una estandarización a nivel de programación para poder hacer conciencia del trabajo de las distintas personas involucradas en la codificación de los distintos servicios.

El mantenimiento futuro de la aplicación es sencillo al igual que posibles cambios en el equipo de trabajo solo suponen la lectura de este documento para conocer la nomenclatura a seguir.

Estos estándares deben ser respetados durante el desarrollo de toda la aplicación.

9. Uso de Estándares

Page 244: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 244

Nombre de Nombre de atributosatributos y variablesy variables

Las variables se definirán con el nombre de la columna de la tabla del que se lee su valor. Los nombres se inician en minúscula.

Para las variables que crea el propio programador y son usadas durante el desarrollo de la aplicación, se deben definir el tipode dato al cual pertenece, el nombre del identificador y el posible valor que va a tomar el identificador.

int contador = 1;

Nombre de ClasesNombre de Clases

Inician con mayúscula.

No debe de contener espacios entre sus palabras.

Los nombres de los constructores deben ser idénticos al nombre de la clase.

9.1 Nomenclatura de la Aplicación

Page 245: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 245

Dentro de un archivo, cada una de las secciones deben estar separadas por líneas en blanco y se podrá incluir un comentario opcional identificando cada sección.

Archivos con más de 2000 líneas son muy pesados para la aplicación, se recomiendan separarlos.

Ficheros fuentes de JavaFicheros fuentes de Java

Cada archivo fuente de JAVA contiene una clase o interface pública.

Los ficheros fuente de JAVA tienen la siguiente estructura: comentarios iniciales, líneas de importación de clases y paquetes Java y declaración de clases e interfaces

9.1 … Nomenclatura de la Aplicación

Page 246: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 246

El software de Java utiliza las siguientes extensiones:

Tipo Fichero Java fuente .java

Extensión Java bytecode (compilado) .class

9.2 Nombre de Ficheros

Page 247: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 247

Comentarios inicialesComentarios iniciales

Todos los archivos fuentes deben empezar con un comentario parecido al que se utiliza en los programas desarrollados en C, el cuál, lista el nombre de la clase, la versión, la fecha y el copyrigth:

/* * Nombre de la clase

* Version

* Fecha

* Copyright

*/

9.3 Organización de los archivos

Page 248: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 248

LLííneas de importacineas de importacióón de clases y paquetes de Java n de clases y paquetes de Java

La primera línea no comentada de la mayoría de los ficheros fuentes de Java es la definición del paquete. Después de éste, le sigue la definición de los imports. Por ejemplo:

package java.awt;

import java.awt.peer.CanvasPeer;

9.3 … Organización de los archivos

Page 249: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 249

Primero las públicas, después las protegidas, después las variables a nivel del paquete (sin modificador) y después las variables privadas.

Variables instanciadas

Primero definimos las variables públicas de la clase, después las protegidas, después las variables a nivel del paquete (sin modificador) y después las variables privadas.

Variables (estáticas) de la Clase

Estos comentarios suelen contener información sobre el contexto de la clase o el interfase. Aquí definimos el alcance de la clase o interfase.

Implementación de la Clase o Interfase con comentarios (/*...*/), si es necesario

Declaración de la Clase o Interface

Comentarios en una Clase/interfase (/**...*/)

NotasPartes Ordenadas a declarar en una Clase/Interface

9.3 … Organización de los archivos

Page 250: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 250

Estos métodos deben estar agrupados por funcionalidades y no por alcance del método o accesibilidad. Por ejemplo, un método de una clase privada puede ser definida entre dos instancias de métodos públicos. La meta de este orden es hacer más legible y entendible el código.

Métodos

Constructores

NotasPartes Ordenadas a declarar en una Clase/Interface

9.3 ... Organización de los archivos

Page 251: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 251

Cuatro espacios suelen ser la unidad de indentación. La exacta construcción de una indentación (espacios con tabulador) no estáespecificada. Los tabuladores deben ser accionados cada 8 espacios (no 4).

No escribir líneas de más de 80 caracteres de longitud, pues no son bien gestionadas por muchas herramientas de software y terminales.

Nota: Los ejemplos para el uso de la documentación no suelen sobrepasar los 70 caracteres.

9.4 … Indentación

Page 252: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 252

Cuando una expresión no quepa en una línea simple, se separa acorde a los siguientes principios generales:

Separar después de una coma.

Separar después de un operador.

Separar a un nivel alto es mejor que separar a un nivel bajo.

Alinear la nueva línea con el principio de la expresión del mismo nivel de la línea anterior.

Si las reglas superiores confunden el entendimiento del código, indentar 8 espacios.

9.4 Indentación

Page 253: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 253

someMethod(longExpression1, longExpression2, longExpression3,

longExpression4, longExpression5);

var = someMethod1(longExpression1,someMethod2(longExpression2,

longExpression3));

longName1 = longName2 * (longName3 + longName4 - longName5)

+ 4 * longname6;

someMethod(int anArg, Object anotherArg, String yetAnotherArg,

Object andStillAnother) {

...

}

9.4.1 Ejemplo de Indentación

Page 254: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 254

if ((condition1 && condition2)

|| (condition3 && condition4)

||!(condition5 && condition6)) {

doSomethingAboutIt();

}

alpha = (aLongBooleanExpression) ? beta : gamma;

9.4.1 … Ejemplo de Indentación

Page 255: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 255

/*

* Bloque

*/

/*-

* Aquí esta el bloque de comentarios con formato especial

* que quiero indentar para ignorar.

*

* uno

* dos

* tres

*/

9.5 Comentarios

Page 256: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 256

if (condition) {

/* Manejar la condición. */

...

}

if (a == 2) {

return TRUE; /* caso especial */

} else {

return isPrime(a); /* cuando a es nº primo */

}

9.5 … Comentarios

Page 257: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 257

if (foo > 1) {

// Hacer un doble-flip

...

}

else {

return false; // Explicar porqué

}

9.5 … Comentarios

Page 258: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 258

int level; // nivel de indención

int size; // tamaño de la tabla

es preferible aes preferible a

int level, size;

Donde las definimosDonde las definimos

void myMethod() {

int int1 = 0; // inicio del método

if (condition) {

int int2 = 0; // inicio del bloque "if"

...

}

}

9.6 Declaración de Variables

Page 259: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 259

class Sample extends Object {int ivar1;int ivar2;

Sample(int i, int j) {ivar1 = i;ivar2 = j;

}

int emptyMethod() {}

...}

Los mLos méétodos son separados por una ltodos son separados por una líínea en blanco.nea en blanco.

9.6 … Declaración de Variables

Page 260: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 260

argv++; // Correctoargc--; // Correcto argv++; argc--; // ELIMINAR!

return;return myDisk.size();return (size ? size : defaultSize);

if (condition) {statements;

} else if (condition) {statements;

} else {statements;

}

for (inicializacion; condición; acción) {statements;

}

while (condición) {statements;

}

9.7 Estructuras

Page 261: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 261

switch (condición) {caso ABC:

statements;/* break */

caso DEF:statements;break;

caso XYZ:statements;break;

default:statements;break;

}

9.7.1 Declaración de Estructuras

Page 262: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 262

Una línea en blanco debe ser siempre usada bajo las siguientes circunstancias:

Entre métodos.

Entre variables locales en un método y su primera declaración.

Antes de un bloque o una línea simple de comentario.

Entre secciones lógicas dentro de un método que mejoran su comprensión.

9.8 Manipulación de Ejemplo

Page 263: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 263

Las líneas en blanco mejoran la lectura y entendimiento separando secciones de código que están lógicamente relacionadas.

Dos líneas en blanco se utilizan en las siguientes circunstancias

Entre secciones de un fichero fuente.

Entre definiciones de clases o interfases.

9.8 … Manipulación de Ejemplo

Page 264: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 264

Tipo de Identificador

Reglas para la Nomenclatura Ejemplos

PAQUETES

El prefijo para el nombre de un único paquete se escribe siempre en minúsculas y código ASCII y suele usar nomenclaturas como com, edu, gov, mil, net, org, o uno de los códigos ingleses de dos dígitos identificando países como se especifica en la ISO Standard 3166, 1981. Los siguientes componentes del paquete varían según la organización interna usada para la nomenclatura. Dichas convenciones deben definir conceptos como nombre del directorio, departamento, proyecto, máquina...

com.sun.eng com.apple.quicktime.v2 edu.cmu.cs.bovik.cheese

CLASES

La nomenclatura usada en las clases suelen ser nombres, con la primera letra del nombre en mayúscula. Se debe tratar de mantener definiciones de clases lo más simples y descriptibles. Usar palabras completas. Eliminar abreviaturas y siglas, a no ser que haga la definición más entendible.

class Raster; class ImageSprite;

9.9 Nomenclaturas

Page 265: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 265

Tipo de Identificador

Reglas para la Nomenclatura Ejemplos

INTERFASES La nomenclatura de interfases suele usar la letra inicial en mayúscula como la definición de clases.

interface RasterDelegate; interface Storing;

MÉTODOS

Para la nomenclatura de métodos suelen usarse verbos, con la primera letra en minúscula, y la letra inicial de la segunda palabra en mayúscula.

run(); runFast(); getBackground();

VARIABLES

Excepto para variables, todas las instancias, y las constantes son definidas con la primera letra en minúscula. Las palabras internas empiezan en mayúscula. Los nombres de variables no deberían empezar con underscore _ o con el símbolo dólar $, aunque esté permitido. Los nombres de variables deberían ser cortos para su uso. La elección del nombre suele ser mnemónico – el nombre de la variable indica para que será usada. Variables definidas con un solo carácter deben ser eliminadas excepto si es para un uso casual y relativamente corto. Nombres comunes para estas variables temporales son i, j, k, m, y n para enteros; c, d, y e para caracteres.

int i; char c; float myWidth;

CONSTANTES

Las constantes de una clase son definidas en mayúsculas con las palabras separadas por underscores ("_"). (Constantes ANSI deberían ser eliminadas, para facilitar la depuración.)

static final int MIN_WIDTH = 4; static final int MAX_WIDTH = 999; static final int GET_THE_CPU = 1;

9.9 … Nomenclaturas

Page 266: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 266

/*

* @(#)Blah.java 1.82 99/03/18

*

* Copyright (c) 1994-1999 Sun Microsystems, Inc.

* 901 San Antonio Road, Palo Alto, California, 94303, U.S.A.

* All rights reserved.

*

* Este software es confidencial y la información es propiedad de Sun

* Microsystems, Inc. ("Confidential Information").

*/

package java.blah;

import java.blah.blahdy.BlahBlah;

/**

* La descripción de la clase se situa aquí

*

* @version 1.82 18 Mar 1999

* @author Firstname Lastname

*/

9.10 Prácticas de Programación

Page 267: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 267

public class Blah extends SomeClass {/* Comentario acerca de la implementación de la clase puede ir aquí*/

/** classVar1 Comentario de documentación */public static int classVar1;

/** * classVar2 Comentario de documentación que * ocupa más de una línea*/

private static Object classVar2;

/** instanceVar1 Comentario de documentación */public Object instanceVar1;

/** instanceVar2 Comentario de documentación */protected int instanceVar2;

/** instanceVar3 Comentario de documentación */private Object[] instanceVar3;

9.10 … Prácticas de Programación

Page 268: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 268

/** * ...constructor Blah Comentario de documentación...*/

public Blah() {// ...la implementación se empieza aquí...

}

/*** ...method doSomething Comentario de documentación*/

public void doSomething() {// ... la implementación se empieza aquí...

}

/*** ...method doSomethingElse Comentario de document.* @param someParam description*/

public void doSomethingElse(Object someParam) {// ... la implementación se empieza aquí...

}}

9.10 ... Prácticas de Programación

Page 269: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 269

El instructor realizará una explicación detallada del ejercicio a realizar:

El objetivo de este ejercicio es el de revisar todos los archivos java que se han generado a lo largo de la capacitación y verificar que en cada uno de ellos se cumplan los estándares establecidos anteriormente.

9.11 Ejercicio Práctico

Page 270: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 270

1010Manejo de Manejo de

ExcepcionesExcepciones

Page 271: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 271

2. Entorno de Desarrollo Integrado2. Entorno de Desarrollo Integrado

3. El Lenguaje Java3. El Lenguaje Java

4. Tipos de Datos y Operadores4. Tipos de Datos y Operadores

5. Control de Flujo5. Control de Flujo

1. Introducción a Java1. Introducción a Java

6. Conceptos Básicos en Java6. Conceptos Básicos en Java

7. Trabajando con Clases7. Trabajando con Clases

10. Manejo de Excepciones

Page 272: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 272

8. Utilización de Interfaces8. Utilización de Interfaces

9. Estándares de Desarrollo9. Estándares de Desarrollo

10. Manejo de Excepciones10. Manejo de Excepciones

11. Utilizando Cadenas, Arreglos y Colecciones11. Utilizando Cadenas, Arreglos y Colecciones

12. Clases en Java12. Clases en Java

13. Swing13. Swing

AnexoAnexo

10. Manejo de Excepciones

Page 273: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 273

Objetivos

Entender la importancia del uso de las excepciones.

Definir, implementar y crear ejercicios, donde se ponga en práctica el uso de excepciones, esto con el fin de que se pueda adquirir un sólido entendimiento sobre el tema.

Page 274: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 274

Una excepción es un evento que ocurre durante la ejecución de un programa y detiene el flujo normal de la secuencia de instrucciones del programa.

Las excepciones en Java están destinadas para la detención y corrección de errores.

10 Excepciones en Java

Page 275: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 275

Todas las excepciones y errores extienden de la clase ThrowableThrowable

10.1 Excepciones y Errores

Throwable

Error Exception

RuntimeException

Page 276: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 276

try {// call the method

}catch (exception1) {

// handle exception1}catch (exception2) {

// handle exception2}…finally {// any final processing

}

int valor;String entrada = getQtyFromForm();try {

// Might throw NumberFormatExceptionvalor = Integer.parseInt(entrada);

}catch ( NumberFormatException e ) {

// Handle the exception}// If no exceptions were thrown, we end up here

10.2 Manejo de Excepciones

Page 277: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 277

try {// Might throw MalformedURLException URL u = new URL(str);// Might throw IOExceptionURLConnection c = u.openConnection();

}catch (MalformedURLException e) {System.err.println("Could not open URL: " + e);

}catch (IOException e) {System.err.println("Could not connect: " + e);

}

10.3 Capturando múltiples Excepciones

Page 278: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 278

void makeConnection(String url) {try {URL u = new URL(url);

} catch (MalformedURLException e) {System.out.println("Invalid URL: " + url);return;

} finally {System.out.println("Finally block");

}System.out.println("Exiting makeConnection");

}

10.4 Palabra Reservada Finally

Page 279: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 279

public int metodoDemo() throws Exception {…..

}

public String pruebaException(int contador) throws Exception {if (contador < 0) {

throw new Exception();} else {

throw new Exception(“El Contador es mayor que cero”);}…

}

10.5 Generando Exepciones - throws

Page 280: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 280

/*** Indica que se ha procucido algún tipo de incidencia al acceder a los datos.* @author EFIBS SA* @version 1.0*/public class ServiceException extends Exception {

public static final int ERROR_NO_DEFINIDO = -999;

private int codeError = 0;

public ServiceException() {super();super();codeError = ERROR_NO_DEFINIDO;

}

public ServiceException(int codeError, String message) {super(message);super(message);this.codeError = codeError;

}

/*** Obtiene el código asociado al error.* @return Código de error.*/

public int getCodeError() {return codeError;

}}

10.6 Creación de Excepciones Propias

Page 281: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 281

El instructor realizará una explicación detallada del ejercicio a realizar:

Cree un paquete llamado:

org.efibs.sistemaDeOrdenes.Exepciones

El objetivo de este ejercicio es el de crear una Excepción llamada OrderException.java. Esta excepción deberá ser lanzada en caso de que una Orden no contenga ítems y además deberá ser capturada por el método que la invoca e imprimir en consola el valor del mensaje enviado.

10.7 Ejercicio Práctico

Page 282: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 282

1111Utilizando Cadenas, Utilizando Cadenas,

Arreglos y ColeccionesArreglos y Colecciones

Page 283: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 283

2. Entorno de Desarrollo Integrado2. Entorno de Desarrollo Integrado

3. El Lenguaje Java3. El Lenguaje Java

4. Tipos de Datos y Operadores4. Tipos de Datos y Operadores

5. Control de Flujo5. Control de Flujo

1. Introducción a Java1. Introducción a Java

6. Conceptos Básicos en Java6. Conceptos Básicos en Java

7. Trabajando con Clases7. Trabajando con Clases

11. Utilizando Cadenas,Arreglosy Colecciones

Page 284: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 284

8. Utilización de Interfaces8. Utilización de Interfaces

9. Estándares de Desarrollo9. Estándares de Desarrollo

10. Manejo de Excepciones10. Manejo de Excepciones

11. Utilizando Cadenas, Arreglos y Colecciones11. Utilizando Cadenas, Arreglos y Colecciones

12. Clases en Java12. Clases en Java

13. Swing13. Swing

AnexoAnexo

11. Utilizando Cadenas,Arreglosy Colecciones

Page 285: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 285

Objetivos

Entender la importancia del uso del de los arreglos y de las cadenas o Strings.

Definir, implementar y crear ejercicios, donde se ponga en práctica el uso vectores y cadenas, esto con el fin de que se pueda adquirir un sólido entendimiento sobre el tema.

Page 286: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 286

El String es una clase de Java.

Es una secuencia de caracteres.

La clase String representa a todas las cadenas en Java.

System.out.println( “Hola Mundo..." );

String str = "Action";

11.1 Qué es un String?

Page 287: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 287

Asignado doble comilla a la variable constante del String.

Concatenando otra Cadena, utilizando el operador +

Utilizando el Constructor

String category = "Action";

String empName = firstName + " " + lastName;

String empName = new String("Joe Smith");

11.2 Creación de un String?

Page 288: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 288

La clase String proporciona varios constructores, a continuación se presentan algunos de los constructores más utilizados:

String();

String( String value );

String( char value[] );

String( char value[],int offset,int count );

String( byte bytes[],int offset,int length );

String( byte bytes[],int offset,int length,String enc );

String( byte bytes[] );

String( byte bytes[],String enc );

String( StringBuffer buffer );

11.3 Constructores de un String?

Page 289: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 289

Java utiliza el operador + para concatenar cadenas (String)

El método concat() pertenece a la clase String y es otra manera de concatenar Strings

A continuación se presenta ejemplares de códigos equivalentes:

String nombre = "Sam Wong";

String nombre = "Sam " + "Wong";

String nombre = "Sam ".concat("Wong");

11.4 Concatenación de String

Page 290: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 290

Los tipos de datos primitivos se pueden concatenar con un String.

Los tipos de datos primitivos son implícitamente convertidos a String.

Para concatenar múltiples líneas se debe de realizar de la siguiente manera:

11.4 … Concatenación de String

String concatenar =“Este ejemplo muestra como " + "\n" +“se pueden concatenar " + "\n" +“multiples Lineas en JAVA" + "\n";

Page 291: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 291

Obtener el tamaño de un String

Localizar un carácter con un índice especifico.

Retornar el substring de un String.

int length(); String str = "Comedy";int len = str.length();

char charAt(int index); String str = "Comedy";char c = str.charAt(1);

String substring(int indiceInicio,int indiceFinal);

// el IndiceFinal es igual IndiceFinal -1

String str = "Comedy";String sub =

str.substring(2,4);

11.5 Operaciones con String

Page 292: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 292

Convertir a mayúscula o minúscula:

Eliminar espacios:

Localizar el índice de un String:

String toUpperCase();String toLowerCase();

String caps = str.toUpperCase();

String trim();

// En ambos ladosString nospaces =

str.trim();

int indexOf (String str);int lastIndexOf

(String str);

// De no existir retorna -1

String str = “Comentario”;

int index = str.indexOf("me"); // 2

int index2 = str.lastIndexOf(“o"); // 9

11.5 … Operaciones con String

Page 293: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 293

Utilización del método equals()

Utilización del método equalsIgnoreCase()

String clave = “fgHPUw”;if (clave.equals("fgHPUw"))… // Las mayúsculas son Importantes

String cat = “drama”;if (cat.equalsIgnoreCase("Drama"))…

11.6 Comparar Strings

Page 294: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 294

Es un método estático de la clase String que retorna la representación de un String en un tipo Primitivo.

Cuando un primitivo es concatenado a un String, automáticamente se invoca a String.valueOf()

String nueve = String.valueOf(9);

String unoFloat = String.valueOf(1.0f);

int contador;…System.out.println(contador);

11.7 Método Value Of

Page 295: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 295

Convierte un objeto String a un entero primitivo.

String cantidadVal = campoCant.getText();

String precioVal = campoPrecio.getText();

int cantidad = Integer.parseInt(cantidadVal);

float precio = Float.parseFloat(precioVal);

17Quantity:

425.00Price:

11.8 Método Parse Int

Page 296: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 296

El siguiente ejemplo, muestra como crear un objeto String y copiar todos los caracteres al nuevo String es creado utilizando el operador +

Una forma más eficiente y elegante es reservar la cantidad de espacio utilizando la clase StringBuffer.

String cadena = “Ejemplar de ";

cadena = cadena + “concatenar cadenas";

StringBuffer cadena = new StringBuffer(30); // Reserva 30 caracterescadena.append("Ejemplar de ");cadena.append("concatenar cadenas");

11.9 StringBuffer

Page 297: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 297

A continuación se muestra un ejemplo de cómo poder concatenar en un StringBuffer una cadena de forma inversa.

Una forma más eficiente y elegante puede ser la siguiente:

public String reverseIt(String s) {StringBuffer sb = new StringBuffer();for (int i = s.length() - 1; i >= 0; i--)

sb.append(s.charAt(i));return sb.toString();

}

public String reverseIt(String s) {StringBuffer sb = new StringBuffer(s);

return sb.reverse().toString();}

11.9 … StringBuffer

Page 298: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 298

StringBuffer append( Object obj ); StringBuffer append( String str ); StringBuffer append( char str[] ); StringBuffer append( char str[],int offset,int len ); StringBuffer append( boolean b ); StringBuffer append( int i ); StringBuffer append( long l );StringBuffer append( float f );StringBuffer append( double d ); StringBuffer append( char c ); StringBuffer insert( int offset,Object obj ); StringBuffer insert( int offset,String str ); StringBuffer insert( int offset,char str[] ); StringBuffer insert( int offset,boolean b ); StringBuffer insert( int offset,int i ); StringBuffer insert( int offset,long l ); StringBuffer insert( int offset,float f ); StringBuffer insert( int offset,double d ); StringBuffer insert( int offset,char c );

11.9 … StringBuffer

Page 299: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 299

String s = new String("Friday"); if(s == "Friday")

System.out.println("Equal A");if(s.equals("Friday"))

System.out.println("Equal B");

int num = 1134567;System.out.println(String.valueOf(num).charAt(3));

11.10 Ejercicio Práctico

Pruebe los siguientes fragmentos de código:

Page 300: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 300

String s1 = "Monday";String s2 = "Tuesday";System.out.println(s1.concat(s2).substring(4,8));

String s3 = " Monday ";System.out.println(s3.indexOf("day"));System.out.println(s3.trim().indexOf("day"));

11.10 … Ejercicio Práctico

Pruebe los siguientes fragmentos de código:

Page 301: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 301

Un arreglo es una colección de variables de un mismo tipo.

Cada elemento de un arreglo puede contener solo un ítem.

Los ítems pueden ser primitivos o objetos.

Un arreglo es un objeto, por lo tanto se crea con new

La declaración de un arreglo

crea una referencia

que se referiere a él. Orden

Cliente

Producto

[0]

[1]

[2]

11.10 … Ejercicio Práctico

Page 302: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 302

Declaración: Crea la variable que se refiere al arreglo.

1. tipo[] nombre;

2. tipo nombre[]; nombre

null

1. int[] nombre;

2. float nombre[];

11.11 Creación de Arreglos

Page 303: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 303

Creación: Crea un objeto array, que requiere un tipo y un tamaño, y almacena una referencia del arreglo en una variable array

nombre = new tipo[size];

0

0

0nombre

int[] nombre;nombre = new int[3];

11.11 … Creación de Arreglos

Page 304: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 304

Todos los elementos en un nuevo arreglo de primitivos son inicializados automáticamente con sus valores por defecto, como los siguientes:

Para elementos char son seteados ‘\u0000’

byte, short, int y long son seteados en 0

Elementos boolean son seteados a false

Elementos float y double son seteados a 0.0

int[] var; // Declara una variable array

var = new int[4]; //Crea un objeto array

[0]

[1]

[2]

[3]

var

000

0

11.12 Inicialización por Defecto

Page 305: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 305

Asignando valores a elementos individualmente

Crear e inicializar elementos de un arreglo al mismo tiempo

int[] numPares = {2, 3, 5, 7};

tipo[] nomArray = {ListaValores};

numPares

[0][1]

[2]

2

3

5

7 [3]

nomArray[indice] = valor;

items[0] = 1;

items

[0][1][2]

1000 [3]

11.13 Inicializando - un arreglo

Page 306: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 306

Declarar el Arreglocategorías

categorías

Acción

Drama

Música

categorías

1. ClassName[] arrVar;

2. ClassName arrVar[];

null

null

null

nullString[] categorías;categorías = new String[3];

// Lo anterior es igual que:String[] categorías = new

String[3];

11.14 Arreglos - Objetos

Page 307: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 307

String[] arr = new String[4];

for (int i = 0; i < arr.length; i++) {

arr[i] = new String();

}

A continuación se presenta un ejemplo que crea un arreglo para

cuatro Strings vacíos

Otro ejemplo, donde se visualiza el tamaño de uno de los

elementos del arreglo de tipo String es el siguiente:

String[] personas = {“Accion”, “Comedia”, “Drama”};

System.out.println (“El tamanno es: " + categories[2].length());

11.15 Asignar valores - Arreglos

Page 308: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 308

La siguiente Excepción: java.lang.ArrayIndexOutOfBoundsException ocurre cuando un índice del arreglo es invalido:

String[] list = new String[4];

System.out.println(list[5]);

11.16 Arreglos y Excepciones

Page 309: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 309

La clase Vector se encuentra localizada en el paquete java.util el cual se debe de importar por medio de la instrucción:

import java.util.Vector;

La creación de un Vector vació se realiza de la siguiente manera:

La creación de un Vector con tamaño especifico se realiza de la siguiente manera:

Vector personas = new Vector();

Vector personas = new Vector(20);

11.17 Vectores

Page 310: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 310

Agregar un elemento al final del Vector

Agregar un elemento al Vector especificando una posición

Eliminar un elemento del Vector por medio de un índice

String nombre = “José Andres”personas.addElement(nombre);

personas.removeElementAt(0);

personas.insertElementAt(nombre, 0);

11.18 Modificando un vector

Page 311: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 311

Obtener el primer elemento del Vector

Obtener un elemento en una posición especifica

Localizar un objeto en un Vector

Obtener el tamaño de un Vector

String s = (String) personas.firstElement();

int tamanno = personas.size();

String s = (String) personas.elementAt(2);

int posicion = personas.indexOf(name);

11.19 Otros métodos de un vector

Page 312: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 312

Vector vector = new Vector();vector.add(new Integer("25"));

if (vector.firstElement() instanceof String) {

System.out.println("ES STRING");

} else if (vector.firstElement() instanceof Integer) {

System.out.println("ES ENTERO");}

Vector v = new Vector();v.add(“Accion");v.add(new Integer(1));

if (v.elementAt(0) instanceof String)

System.out.println("SI STRING");

if (v.elementAt(1) instanceof Integer)

System.out.println("SI ENTERO");

11.20 elementAt - FirstElement

Page 313: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 313

import java.util.Vector;import java.util.Enumeration;:Vector v = new Vector();

v.addElement(“Vannesa");v.addElement(“José");v.addElement(“Mary");

for (Enumeration e = v.elements(); e.hasMoreElements(); ) {String s = (String) e.nextElement();System.out.println(s.toUpperCase());

}

11.21 Recorrer un Vector

Page 314: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 314

Desde la clase admClientes.java, cree una variable de instancia denominada listaCliente de tipo Vector.

Cree los correspondientes métodos set/get para la variable listaCliente.

Cree un nuevo método sobre esta misma clase llamado cargarCliente, el cual recibirá como parámetro un Objeto de tipo Cliente.

11.22 Colecciones

Page 315: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 315

Las colecciones son una de las cosas más importantes que se han aportado a la plataforma Java desde la presentación de la versión 1.2 del JDK y ayudaron enormemente a llevar a Java a la primera línea de los lenguajes de presentación.

Una colección es un grupo de elementos individuales, siempre con alguna regla que se les pueda aplicar.

Se redimensionan automáticamente por lo que se puede colocar en ellas cualquier número de objetos

11.22 … Colecciones

Page 316: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 316

Entre las colecciones se encuentran:

Map, List, Set

Entre los métodos mas habituales se encuentran:

add(Object);

clear();

contains(Object);

isEmpty();

iterator();

size();

11.22 … Colecciones

Page 317: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 317

Los principales métodos de las colecciones son los siguientes:

11.22 … Colecciones

boolean add( Object )Asegura que la colección contiene el argumento. Devuelve false si no se puede añadir el argumento a la colección.

boolean addAll( Collection )Añade todos los elementos que se pasan en el argumento. Devuelve true si es capaz de incorporar a la colección cualquiera de los elementos del argumento.

void clear()Elimina todos los elementos que componen la colección.

Page 318: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 318

11.22 … Colecciones

boolean contains( Object )Devuelve True, si la colección contiene el argumento que se pasa como parámetro.

boolean isEmpty()Devuelve true, si la colección está vacía, no contiene elemento alguno.

Iterator iterator()Devuelve un Iterator que se puede utilizar para desplazamientos a través de los elementos que componen la colección

Page 319: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 319

11.22 … Colecciones

boolean remove( Object )Si el argumento está en la colección, se elimina una instancia de ese elemento y se devuelve true si se ha conseguido

boolean removeAll( Collection )Elimina todos los elementos que están contenidos en el argumento. Devuelve true si consigue eliminar cualquiera de ellos

boolean retainAll( Collection )Mantiene solamente los elementos que están contenidos en el argumento, es lo que sería una intersección en la teoría de conjuntos. Devuelve verdadero en caso de que se produzca algún cambio.

Page 320: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 320

11.22 … Colecciones

int size()

Devuelve el número de elementos que componen la colección

Object[] toArray()

Devuelve un array conteniendo todos los elementos que forman parte de la colección. Este es un método opcional, lo cual significa que no estáimplementado para una Collection determinada. Si no puede devolver el array, lanzará una excepción de tipo UnsupportedOperationException.

Page 321: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 321

11.22 … Colecciones

Page 322: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 322

En la versión 5.0, se ha variado la forma en que se trabajan los tipos de datos y también, la forma en que se acceden los elementos de las colecciones, por ejemplo:

11.22 … Colecciones

private void iterarColeccionIterator(List<String> lista) {Iterator iterator1 = lista.iterator();while (iterator1.hasNext()){

System.out.println(iterator1.next());}

}

private void iterarColeccionForeach(List<String> lista) {for (String str1 : lista){

System.out.println(str1);}

}Tipos Genéricos

Uso del for each

Page 323: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 323

Otros ejemplos son los siguientes:

11.22 … Colecciones

Hasta Java 1.4 para iterar por una colección o array hacíamos lo siguiente:

// numbers es una lista de númerosfor (Iterator it = numbers.iterator(); it.hasNext(); ){

Integer number = (Integer) it.next();// Hacer algo con el número...

}Lo mismo en Java 5 puede hacerse del siguiente modo:

for(Integer number: numbers){

// Se hace algo con el número...}

Page 324: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 324

11.23 Listas

List (interfaz)

La Lista incorpora una serie de métodos a la Colección que permiten la inserción y borrar de elementos en medio de la Lista.

ArrayList

Es una Lista volcada en un Array. Se debe utilizar en lugar de Vector como almacenamiento de objetos de propósito general. Permite un acceso aleatorio muy rápido a los elementos, pero realiza con bastante lentitud las operaciones de insertado y borrado de elementos en medio de la Lista.

Page 325: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 325

11.23 … Listas

LinkedList

Proporciona un óptimo acceso secuencial, permitiendo inserciones y borrado de elementos de en medio de la Lista muy rápidas. Sin embargo es bastante lento el acceso aleatorio, en comparación con el ArrayList. Dispone además de los métodos addLast(), getFirst(), getLast(), removeFirst() y removeLast(), que no están definidos en ningún interfaz o clase base y que permiten utilizar la Lista Enlazada como una Pila, una Cola o una Cola Doble.

Page 326: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 326

11.24 Sets

Set (interfaz)

Cada elemento que se añada a un Set debe ser único, ya que el otro caso no se añadirá porque el Set no permite almacenar elementos duplicados. Los elementos incorporados al Conjunto deben tener definido el método equals(), en aras de establecer comparaciones para eliminar duplicados. Set tiene la mismo interfaz que Collection, y no garantiza el orden en que se encuentren almacenados los objetos que contenga.

HashSet

Es la elección más habitual, excepto en Sets que sean muy pequeños. Debe tener definido el método hashCode().

Page 327: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 327

11.24 … Sets

ArraySet

Un Set encajonado en un Array. Esto es útil para Sets muy pequeños, especialmente aquellos que son creados y destruidos con frecuencia. Para estos pequeños Sets, la creación e iteración consume muchos menos recursos que en el caso del HashSet. Sin embargo, el rendimiento es muy malo en el caso de Sets con gran cantidad de elementos.

TreeSet

Es un Set ordenado, almacenado en un árbol balanceado. En este caso es muy fácil extraer una secuencia ordenada a partir de un Set de este tipo.

Page 328: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 328

11.25 Mapas

Map (interfaz)

Mantiene las asociaciones de pares clave-valor, de forma que se puede encontrar cualquier valor a partir de la clave correspondiente.

HashMap

Es una implementación basada en una tabla hash. Proporciona un rendimiento muy constante a la hora de insertar y localizar cualquier pareja de valores; aunque este rendimiento se puede ajustar a través de los constructores que permite fijar la capacidad y el factor de carga de la tabla hash.

ArrayMapEs un Mapa circunscrito en un Array. Proporciona un control muy preciso sobre el orden de iteración. Está diseñado para su utilización con Mapas muy pequeños, especialmente con aquellos que se crean y destruyen muy frecuentemente.

Page 329: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 329

11.25 … Mapas

TreeMap

Es una implementación basada en un árbol balanceado. Cuando se observan las claves o los valores, Se comprueba que están colocados en un orden concreto, determinado por Comparable o Comparator, que ya se verán. Lo importante de un TreeMap es que se pueden recuperar los elementos en un determinado orden.

TreeMap

Es el único mapa que define el método subMap(), que permite recuperar una parte del árbol solamente.

Page 330: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 330

El instructor realizará una explicación detallada del ejercicio a realizar:

Cree un paquete llamado:

org.efibs.sistemaDeOrdenes.AdministradorDeClientes

Cree una clase llamada AdminClientes en el paquete anterior.

En la clase AdminClientes.java, cree una variable de instancia listaClientes de tipo Vector y defínala como de tipo Cliente

Cree los correspondientes métodos set/get para la variable listaClientes.

El método set, servirá para asignar un objeto de tipo Cliente, mientras que get servirá para obtener un objeto de tipo cliente en una posición dada, la cual no podrá ser menor a CERO ni mayor a la cantidad de elementos del vector.

11.26 Ejercicio Práctico

Page 331: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 331

Desde Principal.java, invoque al método set, al menos cuatro veces, enviándole como parámetro una instancia del Cliente utilizando el constructor del mismo, de la siguiente manera:

AdminClientes losClientes = new AdminClientes();losClientes.setCliente(new Cliente(1, “Ramon Monge", "San Jose", "280-8024"));losClientes. setCliente (new Cliente(2, “Luis Díaz", "Cartago", "386-2424"));losClientes. setCliente(new Cliente(3, “Fernando Mora", "Espana", "00340001133232"));losClientes. setCliente(new Cliente(4, “Carlos Miranda", "Cartago", "320-4323"));

11.26 … Ejercicio Práctico

Page 332: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 332

Modifique o sobrescriba el método toString() de la clase Cliente utilizando la clase StringBuffer para retornar toda la información del cliente. Nota: Para los campos o variables de tipo cadena transfórmelas a mayúsculas y sin espacios en ninguno de los extremos.

Cree un método en la clase AdminClientes llamado cantidadClientes()que retorne el tamaño del Vector, puede utilizar el método size.

11.26 … Ejercicio Práctico

Page 333: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 333

Basado en los dos puntos anteriores, muestre la información con el método toString de cada uno de los Clientes existentes. Recuerde utilizar el método cantidadClientes previamente creado, para conocer el limite del Vector a recorrer.

Implemente los métodos de busqueda de un cliente en particular basado en su id, el cual retorne la posición en la que se encontró. Si no lo encontró devolver -1.

Implemente un método para eliminar un cliente (lleve a cabo las validaciones necesarias).

Pruebe cada uno de los métodos de la instancia de AdminClientes para ver que funcionen adecuadamente.

11.26 … Ejercicio Práctico

Page 334: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 334

Finalmente, en el mismo Principal.java, cree una instancia de Orden y asignele cinco ItemOrden. Utilice el constructor sobre cargado y haga uso del método toString para desplegar la información. Muestre la información de los ItemOrden de la Orden que a caba de crear.

11.26 … Ejercicio Práctico

Page 335: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 335

1212Clases JavaClases Java

Page 336: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 336

2. Entorno de Desarrollo Integrado2. Entorno de Desarrollo Integrado

3. El Lenguaje Java3. El Lenguaje Java

4. Tipos de Datos y Operadores4. Tipos de Datos y Operadores

5. Control de Flujo5. Control de Flujo

1. Introducción a Java1. Introducción a Java

6. Conceptos Básicos en Java6. Conceptos Básicos en Java

7. Trabajando con Clases7. Trabajando con Clases

12. Clases en Java

Page 337: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 337

8. Utilización de Interfaces8. Utilización de Interfaces

9. Estándares de Desarrollo9. Estándares de Desarrollo

10. Manejo de Excepciones10. Manejo de Excepciones

11. Utilizando Cadenas, Arreglos y Colecciones11. Utilizando Cadenas, Arreglos y Colecciones

12. Clases en Java12. Clases en Java

13. Swing13. Swing

AnexoAnexo

12. Clases en Java

Page 338: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 338

Objetivos

Estudiar algunas de las clases más importantes del lenguaje.

Enseñar al estudiante como obtener el máximoprovecho de los APIS.

Analizar la diferencia entre una clase Java y una clase hecha por el usuario.

Page 339: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 339

La clase Math representa la librería matemática de Java.

Las funciones que contiene son las de todos los lenguajes, parece que se han metido en una clase solamente a propósito de agrupación, por eso se encapsulan en Math, y lo mismo sucede con las demás clases que corresponden a objetos que tienen un tipo equivalente (Character, Float, etc.).

El constructor de la clase es privado, por los que no se pueden crear instancias de la clase. Sin embargo, Math es public para que se pueda llamar desde cualquier sitio y static para que no haya que inicializarla.

Se encuentra disponible en el paquete java.math

A continuación se presentan una tabla con algunas de las funcionesmatematicas de la clase Math

12.1 Clase Math

Page 340: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 340

En la versión 5.0 los siguientes son los cambios:

Se da mayor precisión en cuanto al punto flotante en la clase BigDecimal.

Tanto la biblioteca Math como StrictMath funciones con capacidades hiperbólicas (sinh, cosh, tanh), raíz cúbica y algoritmo en base 10.

Un soporte para punto flotante hexadecimal.

Métodos de precisión de punto flotante, tanto en Float como en Double.

12.1 … Clase Math

http://java.sun.com/j2se/1.5.0/docs/relnotes/features.html#math

Page 341: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 341

devuelve el número completo más pequeño mayor o igual que a

Math.ceil( double a )

devuelve la raíz cuadrada de xMath.sqrt( double x )

devuelve el logaritmo natural de xMath.log( double x )

devuelve e elevado a xMath.exp( double x )

devuelve el ángulo cuya tangente es a/b Math.atan2(double a,double b)

devuelve el ángulo cuya tangente es rMath.atan( double r )

devuelve el ángulo cuyo coseno es rMath.acos( double r )

devuelve el ángulo cuyo seno es rMath.asin( double r )

devuelve la tangente del ángulo a en radianesMath.tan( double a )

devuelve el coseno del ángulo a en radianesMath.cos( double a )

devuelve el seno del ángulo a en radianesMath.sin( double a )

para int, long, float y doubleMath.abs( x )

12.2 Funciones de la Clase Math

Page 342: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 342

para PI, aproximadamente 3.12Math.PI

para la base exponencial, aproximadamente 2.72Math.E

para int, long, float y doubleMath.min( a,b )

para int, long, float y doubleMath.max( a,b )

devuelve un doubleMath.random()

para double y floatMath.round( x )

devuelve y elevado a xMath.pow( double x,double y )

devuelve el valor double truncado de aMath.rint( double a )

devuelve el número completo más grande menor o igual que a

Math.floor( double a )

12.2 … Funciones de la Clase Math

Page 343: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 343

Devuelve el valor hiperbólico del cos de x Math. cosh(double x)

Devuelve el valor hiperbólico del tan de x Math. tanh(double x)

Retorna sqrt(x2 +y2), sin overflow. Math.hypot(double x, double y)

retorna el valor de (ex -1)Math.expm1(double x)

Retorna el logaritmo natural de la suma del argumento y 1.

Math.log1p(double x)

Devuelve el valor hiperbólico del seno de x Math. sinh(double x)

Devuelve el logaritmo en base 10 de aMath. log10(double a)

Devuelve la raíz cúbica de aMath. cbrt(double a)

12.2 … La Clase Math(ver 5.0)

Page 344: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 344

Retorna el tamaño de un ulp del argumento.Math.ulp(float f)

Retorna la función signum del argumento f.Math.signum(float f)

12.2 … La Clase Math(ver 5.0)

Page 345: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 345

public class Funciones { public static void main( String args[] ) {

int x; double rand,y,z; float max; rand = Math.random();

x = Math.abs( -123 ); y = Math.round( 123.567 ); z = Math.pow( 2,4 ); max = Math.max( (float)1e10,(float)3e9 );

System.out.println( rand ); System.out.println( x ); System.out.println( y ); System.out.println( z ); System.out.println( max );

}}

12.3 Funciones de la clase Math

Page 346: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 346

La inclusión de la conectividad con bases de datos SQL , obligó a definir en Java una nueva forma de trabajar con datos SQL de tipo NUMERIC y DECIMAL , que requieren precisión absoluta.

Como resultado surgieron las clases BigDecimal y BigInteger, que permiten trabajar con precisión arbitraria, para representar datos que son habituales de las Bases de Datos.

La clase BigInteger también resulta útil cuando los tipos primitivos de Java (byte, int, long) no proporcionan sificiente precisión.

Por ejemplo, cuando se está construyendo una clave pública para encriptación que involucra operaciones exponenciales muy grandes y a manipular números primos de cientos de bits, esta clase es ideal para estas acciones

12.4 Precisión Arbitraria

Page 347: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 347

El constructor más sencillo es el que construye un BigDecimal a partir de su representación como cadena:

Aunque la cadena no puede contener ningún signo no numérico, ni siquiera espacios en blanco, ya que de lo contrario se produce una excepción de tipo NumberFormatException.

Un método interesante es el que permite fijar la precisión que se desea tener, es decir, el número de dígitos significativos que hay después de la coma decimal, y el tipo de redondeo que se va a utilizar:

BigDecimal( String s );

setScale( int precision,int redondeo );

12.5 Métodos de la clase BigDecimal

http://java.sun.com/j2se/1.5.0/docs/api/java/math/BigDecimal.html

Page 348: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 348

Los operadores que se utilizan con estas clases no son los clásicos, sino que están disponibles métodos especiales para sumar, restar, multiplicar dividir y para desplazar la coma decimal un número determinado de posiciones a derecha o izquierda:

add( BigDecimal a );

substract( BigDecimal a );

multiply( BigDecimal a );

divide( BigDecimal a,int modo_redondeo );

movePointRight( int posiciones );

movePointLeft( int posiciones );

12.6 Operadores - Clase BigDecimal

Page 349: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 349

Al trabajar con caracteres se necesitan muchas funciones de comprobación y traslación. Estas funciones están empleadas en la clase Character.

De esta clase sí que se pueden crear instancias, al contrario que sucede con la clase Math, ya que ésta última es estática.

Se encuentra disponible en el paquete java.lang

Declaración:

Ejemplos:

char c; Character C;

La primera sentencia creará una variable carácter y lasegunda un objeto Character

C = new Character( 'J' );

char c = C.charValue();

String s = C.toString();

12.7 La Clase Character

Page 350: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 350

12.8 Métodos(ver 5.0)

Page 351: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 351

12.8 … Métodos(ver 5.0)

Page 352: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 352

12.8 … Métodos(ver 5.0)

Page 353: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 353

12.8 … Métodos(ver 5.0)

Page 354: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 354

12.8 … Métodos(ver 5.0)

Page 355: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 355

12.8 … Métodos(ver 5.0)

Page 356: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 356

En este caso, si contáramos un objeto Character C , no se podría hacer C.isLowerCase(), porque no se ha hecho un new de Character.

Estas funciones requieren de que se cree un objeto antes de usarse.

devuelve true para espacios en blancoCharacter.isSpace( char )

devuelve true para caracteres numéricos Character.isDigit( char )

devuelve true si el carácter es una letra mayúsculaCharacter.isUpperCase( char )

devuelve true si el carácter es una letra minúsculaCharacter.isLowerCase( char )

12.9 Comprobaciones Booleanas

Page 357: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 357

Traslaciones de Caracteres.

Traslaciones de carácter/digito.

convierte entre minúscula y mayúscula

Character.toUpperCase( char )

convierte entre mayúscula y minúscula

Character.toLowerCase( char )

int i = Character.digit( c, base10 );

char c = Character.forDigit( i, base10 );

12.10 Traslaciones

Page 358: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 358

Cada tipo numérico tiene su propia clase de objetos.

Así el tipo float tiene el objeto Float.

De la misma forma que con la clase Character, se han codificado muchas funciones útiles dentro de los métodos de la clase Float.

Declaración:

Valores de Float:

float f; Float F;

La primera sentencia creará una variable float y lasegunda un objeto Float

Float.POSITIVE_INFINITY Float.NEGATIVE_INFINITY Float.NaN Float.MAX_VALUE Float.MIN_VALUEFloat SIZE(ver 5.0).Float TYPE(ver 5.0).

12.11 Float

Page 359: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 359

Conversiones Clase / Cadena

Comprobaciones

String s = Float.toString( f );

f = Float.valueOf( "3.12" );

boolean b = Float.isNaN( f ); // El método isNaN()comprueba

si f es un No-Número

boolean b = Float.isInfinite( f );

12.12 Conversiones y comprobaciones

Page 360: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 360

12.13 Métodos(ver 5.0)

Page 361: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 361

Cada tipo numérico tiene su propia clase de objetos.

Así el tipo double tiene el objeto Double.

La clase Double tiene un constructor para inicializarla con un valor double o, lo que es muy práctico, con una representación tipo String del valor.

Declaración:

Valores de Double:

double d; Double D;

La primera sentencia creará una variable double y lasegunda un objeto Double

Double.POSITIVE_INFINITY Double.NEGATIVE_INFINITY Double.NaN Double.MAX_VALUE Double.MIN_VALUESIZE(ver 5.0)TYPE(ver 5.0)

12.14 Clase Double

Page 362: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 362

12.15 Métodos(ver 5.0)

Page 363: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 363

Cada tipo numérico tiene su propia clase de objetos.

Así el tipo int tiene el objeto Integer.

Declaración:

Valores de int:

int i; Integer I;

La primera sentencia creará una variable double y lasegunda un objeto Integer

Integer.MAX_VALUE Integer.MIN_VALUESIZE(ver 5.0).TYPE(ver 5.0).

12.16 Clase Integer

Page 364: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 364

12.17 Métodos(ver 5.0)

Page 365: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 365

12.17 … Métodos(ver 5.0)

Page 366: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 366

Cada tipo numérico tiene su propia clase de objetos.

Así el tipo long tiene el objeto Long.

Declaración:

Valores de Long:

long l; Long L;

La primera sentencia creará una variable double y lasegunda un objeto Long

Long.MAX_VALUE Long.MIN_VALUESIZE(ver 5.0)TYPE(ver 5.0)

12.18 Clase Long

Page 367: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 367

12.19 Métodos(ver 5.0)

Page 368: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 368

12.19 … Métodos(ver 5.0)

Page 369: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 369

La clase Random es un generador de número pseudo-aleatorios.

El algoritmo que se utiliza para la obtención de estos números, es el que Donald Knuth presenta en su libro The Art of Computer Programming.

Son números no realmente aleatorios porque son secuencias distribuidas uniformemente, obtenidas a partir de una semilla inicial.

12.20 Clase Random

Page 370: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 370

Cuando se inicializa un objeto Random con una semilla, se puede obtener a continuación lo que parece una secuencia aleatoria, pero si se vuelve a inicializar el objeto con la misma semilla se vuelve a obtener la misma secuencia.

Normalmente se utiliza la hora actual del sistema como semilla para inicializar estos objetos, lo que disminuye la posibilidad de obtener secuencias de números repetidas.

De un objeto Random se pueden extraer varios tipos de números aleatorios a través de sus métodos.

12.20 … Clase Random

Page 371: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 371

12.20 Métodos(ver 5.0)

Page 372: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 372

La clase StringTokenizer proporciona uno de los primeros pasos para realizar un análisis gramatical de una cadena de entrada, extrayendo los símbolos que se encuentren en esa cadena.

Si se tiene una cadena de entrada cuyo formato es regular y se desea extraer la información que está codificada en ella, StringTokenizer es el punto de partida.

Para utilizar esta clase, se necesita un String de entrada y un String de delimitación.

Los delimitadores marcan la separación entre los símbolos que se encuentran en la cadena de entrada.

12.21 String Tokenizer

Page 373: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 373

Se considera que todos los caracteres de la cadena son delimitadores válidos; por ejemplo, para <, ; :> el delimitador puede ser una coma, un punto y coma o dos puntos.

El conjunto de delimitadores por defecto son los caracteres de espacio habituales: espacio, tabulador, línea nueva y retorno de carro.

Una vez que se ha creado un objeto StringTokenizer, se utiliza el método nextToken() para ir extrayendo los símbolos consecutivamente.

El método hasMoreTokens() devuelve true cuando todavía quedan símbolos por extraer.

Se encuentra sobre el paquete java.util

12.21 … String Tokenizer

Page 374: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 374

12.22 Métodos(ver 5.0)

Page 375: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 375

public static Timestamp string2TimestampSimple(String s) {

if (s == null) {return null;

}if (s.trim().equals("")) {

return null;}if (!Validator.isValidDate(s)) {

return null;}

StringTokenizer st = new StringTokenizer(s.trim(),"/");

int dia = 0;int mes = 0;int ano = 0;

if (st.hasMoreTokens()) {dia = Integer.parseInt(st.nextToken());

}if (st.hasMoreTokens()) {

mes = Integer.parseInt(st.nextToken());}if (st.hasMoreTokens()) {

ano = Integer.parseInt(st.nextToken());}return new Timestamp(ano-1900, mes-1, dia, 0, 0, 0, 0);

}

12.23 Ejemplo de StringTokenizer

Page 376: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 376

Esta clase encapsula el proceso del intérprete Java que se ejecute.

No se puede crear una instancia de Runtime; sin embargo, se puede obtener una referencia al objeto Runtime que se está ejecutando actualmente llamando al método estático Runtime.getRuntime().

Los applets y otros fragmentos de código de los que se desconfíe habitualmente no pueden llamar a ninguno de los métodos de la clase Runtime sin activar una SecurityException, excepción de seguridad.

12.24 Clase Runtime

Page 377: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 377

Aunque Java es un sistema de recogida de basura automática, o liberación de memoria automática, se podría desear el conocer la cantidad de objetos y el espacio libre que hay, para comprobar la eficiencia del código escrito.

Para proporcionar esta información, la clase Runtime dispone de los métodos totalMemory(), que devuelve la memoria total en la Máquina Virtual Java, y freeMemory(), que devuelve la cantidad de memoria libre disponible.

12.24 … Clase Runtime

Page 378: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 378

En entornos seguros se puede hacer que Java ejecute otros procesos intensivos en un sistema operativo multitarea.

Hay varios constructores del método exec() que permiten que se indique el nombre del programa que se va a ejecutar, junto con los parámetros de entrada.

12.25 Métodos de la clase Runtime

Page 379: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 379

El método exec() devuelve un objeto Process, que se puede utilizar para controlar la interacción del programa Java con el nuevo proceso en ejecución.

Hay varias formas alternativas de exec(), pero esta es la más habitual.

El proceso que devuelve exec() se puede manipular después de que el nuevo programa haya comenzado a ejecutarse.

Se puede eliminar el subproceso con el método destroy().

El método waitFor(), esperar a, provoca que el programa espere hasta que el subproceso termine, y el método exitValue(), valor de salida, devuelve el valor que ha devuelto el subproceso cuando terminó.

12.25 Métodos de la clase Runtime

Page 380: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 380

El siguiente segmento de código invoca al programa Notepad, del sistema operativo windows, enviando además el nombre del archivo que se desea visualizar o crear.

Runtime r = Runtime.getRuntime();Process p = null;String comando[] = { "notepad","ejemploRuntime.java" };

// Datos de la memoria del SistemaSystem.out.println( "Memoria Total = "+ r.totalMemory() +" Memoria Libre = "+ r.freeMemory() );

// Intenta ejecutar el comando que se le indica, en// este caso lanzar el bloc de notastry {

p = r.exec( comando );} catch( Exception e ) {

System.out.println( "Error ejecutando "+comando[0] );}

12.26 Ejemplo Práctico

Page 381: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 381

El siguiente segmento de código presenta el mismo código del ejemplo anterior, modificado para que espere a que termine el proceso en ejecución

Runtime r = Runtime.getRuntime();Process p = null;String comando[] = { "notepad","ejemploRuntime.java" };

try {p = r.exec( comando );p.waitFor();

} catch( Exception e ) {System.out.println( "Error ejecutando "+comando[0] );

}System.out.println(comando[0]+" ha devuelto "+p.exitValue() );

12.26 … Ejemplo Práctico

Page 382: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 382

Hay ocasiones en que se necesita acceder a recursos del sistema , como son los dispositivos de entrada/salida, el reloj del sistema, etc.

Java dispone de la clase System, que proporciona acceso a estos recursos, independientemente de la plataforma. Es decir, que si se ejecuta un programa en una plataforma diferente a la que se ha desarrollado, no es necesaria ninguna modificación para tener en cuenta las peculiaridades de la nueva plataforma.

La clase System es miembro del paquete java.lang y en ella se definen los dispositivos estándar de entrada/salida

static PrintStream err;

static InputStream in;

static PrintStream out;

12.27 Clase System

Page 383: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 383

12.28 Métodos(ver 5.0)

Page 384: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 384

12.28 … Métodos(ver 5.0)

Page 385: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 385

12.29 Ejercicio Práctico

El instructor realizará una explicación detallada del ejercicio

Basado en los APIs anteriores, cree un paquete que se llame:

org.efibs.sistemaDeOrdenes.Apis

Dentro de dicho paquete, cree un archivo *.java en donde invoquealmenos tres de los métodos de cada una de las clases o APIs que se presentan en el actual capítulo.

Comente con el instructor, el uso de los métodos estáticos.

Page 386: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 386

1313SWINGSWING

Page 387: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 387

2. Entorno de Desarrollo Integrado2. Entorno de Desarrollo Integrado

3. El Lenguaje Java3. El Lenguaje Java

4. Tipos de Datos y Operadores4. Tipos de Datos y Operadores

5. Control de Flujo5. Control de Flujo

1. Introducción a Java1. Introducción a Java

6. Conceptos Básicos en Java6. Conceptos Básicos en Java

7. Trabajando con Clases7. Trabajando con Clases

13. Swing

Page 388: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 388

8. Utilización de Interfaces8. Utilización de Interfaces

9. Estándares de Desarrollo9. Estándares de Desarrollo

10. Manejo de Excepciones10. Manejo de Excepciones

11. Utilizando Cadenas, Arreglos y Colecciones11. Utilizando Cadenas, Arreglos y Colecciones

12. Clases en Java12. Clases en Java

13. Swing13. Swing

AnexoAnexo

13. Swing

Page 389: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 389

Objetivos

Explicar cada uno de los componentes gráficos del swing.

Definir, implementar y crear ejercicios, donde se ponga en práctica el uso del swing, esto con el fin de que se pueda adquirir un sólido entendimiento sobre el tema.

Page 390: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 390

Swing proporciona un conjunto completo de Componentes, todos ellos lightweight, es decir, ya no se usan componentes dependientes del sistema operativo, además, Swing está totalmente escrito en Java. Todo ello redunda en una mayor funcionalidad en manos del programador, y en la posibilidad de mejorar en gran medida la creación de las interfaces gráficas de usuario.

Son muchas las ventajas que ofrece el uso de Swing. Por ejemplo, la navegación con el teclado es automática, cualquier aplicación Swing se puede utilizar sin ratón, sin tener que escribir ni una línea de código adicional. Las etiquetas de información, o "tool tips", se pueden crear con una sola línea de código. Además, Swing aprovecha la circunstancia de que sus Componentes no están renderizados sobre la pantalla por el sistema operativo para soportar lo que llaman "pluggable look and feel", es decir, que la apariencia de la aplicación se adapta dinámicamente al sistema operativo y plataforma en que esté corriendo.

13.1 Swing

Page 391: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 391

Es muy importante entender y asimilar el hecho de que Swing es una extensión del AWT, y no un sustituto encaminado a reemplazarlo. Aunque esto sea verdad en algunos casos en que los componentes de Swing se corresponden a componentes del AWT; por ejemplo, el JButton de Swing puede considerarse como un sustituto del Button del AWT, y una vez que se usen los botones de Swing se puede tomar la decisión de no volver a utilizar jamás un botón de AWT, pero, la funcionalidad básica de Swing descansa sobre el AWT. Todo esto es para evitar que el lector salte directamente a Swing, ya que sería conveniente que primero entendiese el AWT y cómo Swing mejora al AWT.

El paquete que Swing utiliza es javax.swing.*

13.1 … Swing

Page 392: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 392

En este código se crean dos botones JButton y un JTextField, donde su funcionalidad será que cuando se pulse algún botón se despliegue en el JTextField el nombre del botón pulsado.

13.1 … Swing

Page 393: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 393

import java.awt.*;import java.awt.event.*;import javax.swing.*;

public class IniciarSwing extends JPanel {JButton boton1 = new JButton( "JButton 1" );JButton boton2 = new JButton( "JButton 2" );JTextField texto = new JTextField( 20 );public IniciarSwing() {

ActionListener al = new ActionListener() {public void actionPerformed( ActionEvent evt ) {

String nombre = ( (JButton)evt.getSource()).getText();texto.setText( nombre+" Pulsado" );} };

boton1.addActionListener( al );boton1.setToolTipText( "Soy el JBoton 1" );add( boton1 );boton2.addActionListener( al );boton2.setToolTipText( "Soy el JBoton 2" );add( boton2 );texto.setToolTipText( "Soy el JCampoDeTexto" );add( texto ); }

public static void main( String args[] ) {JFrame ventana = new JFrame( "Práctica EFIBS" );ventana.addWindowListener( new WindowAdapter() {

public void windowClosing( WindowEvent evt ){System.exit( 0 );}} );

ventana.getContentPane().add( new IniciarSwing(),BorderLayout.CENTER );ventana.setSize( 300,100 );ventana.setVisible( true );}}

13.1 … Swing

Page 394: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 394

La clase JComponent también contiene un método llamado setBorder(), que permite colocar diferentes bordes a un componente visible.

13.2 Bordes

Page 395: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 395

import javax.swing.border.*;

public class Bordes extends JPanel {static JPanel creaBorde( Border b ) {JPanel panel = new JPanel();String str = b.getClass().toString();str = str.substring( str.lastIndexOf('.') + 1 );panel.setLayout( new BorderLayout() );panel.add(new JLabel( str,JLabel.CENTER ),BorderLayout.CENTER );panel.setBorder( b );return( panel );}

public Bordes() {setLayout( new GridLayout( 2,4 ) );add( creaBorde( new TitledBorder("Titulo") ) );add( creaBorde( new EtchedBorder() ) );add( creaBorde( new LineBorder(Color.blue) ) );add( creaBorde( new MatteBorder(5,5,30,30,Color.green) ) );add( creaBorde( new BevelBorder(BevelBorder.RAISED) ) );add( creaBorde( new SoftBevelBorder(BevelBorder.LOWERED) ) );add(creaBorde(new CompoundBorder(new EtchedBorder(),new LineBorder(Color.red) ) ) );}

public static void main( String args[] ) {JFrame frame = new JFrame( "Práctica EFIBS" );frame.addWindowListener( new WindowAdapter() {public void windowClosing( WindowEvent evt ){

System.exit( 0 );}});frame.getContentPane().add( new Bordes(),BorderLayout.CENTER );frame.setSize( 500,300 );frame.setVisible( true );}}

13.2 … Bordes

Page 396: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 396

Las etiquetas, junto con los botones y las cajas de selección, son uno de los componentes más básicos de toda interfaz de usuario. Las etiquetas se limita a presentar textos en pantalla. Swing introduce la clase JLabelpara presentar estos textos en pantalla; sin embargo, es mucho más versátil que la clase correspondiente del AWT.

13.3 Etiquetas

Page 397: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 397

class Etiquetas extends JPanel {

public Etiquetas() {setLayout( new GridLayout( 2,2 ) );JLabel etiq1 = new JLabel();etiq1.setText( "Etiqueta1" );add( etiq1 );JLabel etiq2 = new JLabel( "Etiqueta2" );etiq2.setFont( new Font( "Helvetica", Font.BOLD, 18 ) );add( etiq2 );Icon imagen = new ImageIcon( "logo_efibs2.jpg" );//Se debe de poner toda la rutaJLabel etiq3 = new JLabel( "Etiqueta3", imagen,SwingConstants.CENTER );etiq3.setVerticalTextPosition( SwingConstants.TOP );add( etiq3 );JLabel etiq4 = new JLabel( "Etiqueta4",SwingConstants.RIGHT );add( etiq4 );

}public static void main( String args[] ) {JFrame ventana = new JFrame( "Práctica EFIBS" );ventana.addWindowListener( new WindowAdapter() {public void windowClosing( WindowEvent evt ){

System.exit( 0 );}} );ventana.getContentPane().add( new Etiquetas(),BorderLayout.CENTER );ventana.setSize( 300,130 );ventana.setVisible( true );}

}

13.3 … Etiquetas

Page 398: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 398

Swing añade varios tipos de botones y cambia la organización de la selección de componentes: todos los botones, cajas de selección, botones de selección y cualquier opción de un menú deben derivar de AbstractButton.

13.4 Botones

Page 399: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 399

public class Botones extends JPanel {

public Botones() {add( new JButton( "JButton" ) );add( new JToggleButton( "JToggleButton") );add( new JCheckBox( "JCheckBox" ) );add( new JRadioButton( "JRadioButton" ) );}

public static void main( String args[] ) {Botones panel = new Botones();JFrame ventana = new JFrame();ventana.getContentPane().add( panel,BorderLayout.CENTER );ventana.addWindowListener( new WindowAdapter() {public void windowClosing( WindowEvent evt ) {

System.exit( 0 );}

} );ventana.setSize( 300,200 );ventana.setTitle( "Práctica EFIBS" );ventana.setVisible( true );}

}

13.4 … Botones

Page 400: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 400

public class BotonImagen extends JPanel {

public BotonImagen() {ImageIcon izq = new ImageIcon(logo.gif" );JButton boton = new JButton( "Boton",izq );boton.setRolloverEnabled( true );boton.setToolTipText( "Boton con imagenes asociadas" );add( boton );

}public static void main( String args[] ) {BotonImagen panel = new BotonImagen();JFrame ventana = new JFrame();ventana.getContentPane().add( panel,BorderLayout.CENTER );ventana.addWindowListener( new WindowAdapter() {public void windowClosing( WindowEvent evt ) {

System.exit( 0 );} } );ventana.setSize( 250,80 );ventana.setTitle( "Práctica EFIBS" );ventana.setVisible( true );}

}

13.4 … Botones

Page 401: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 401

Si se quieren botones de selección única, los conocidos como botones radio, que tienen la particularidad de que solamente puede haber uno seleccionado, hay que crearse un grupo de botones, añadiendo botones a ese grupo uno a uno. Pero, Swing permite que cualquier AbstractButton pueda ser añadido a un ButtonGroup.

13.5 Grupos de Botones

Page 402: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 402

import java.lang.reflect.*;

public class GrupoBotones extends JPanel {

static String ids[] = { "Visa","MarterCard","American Express", "CredoMatic", };

static JPanel creaPanelBotones( Class bClass,String ids[] ) {ButtonGroup botones = new ButtonGroup();JPanel panel = new JPanel();String titulo = bClass.getName();titulo = titulo.substring( titulo.lastIndexOf('.')+1 );panel.setBorder( new TitledBorder( titulo ) );for( int i=0; i < ids.length; i++ ) {

AbstractButton botonAbs = new JButton( "fallo" );try {

// Se utiliza el constructor dinámico al que se pasa una cadena como argumentoConstructor ctor = bClass.getConstructor( new Class[] { String.class } );

// Se crea un nuevo objeto del tipo del botónbotonAbs = ( AbstractButton )ctor.newInstance( new Object[]{ ids[i] } );

} catch( Exception e ) {System.out.println( "No puedo crear " + bClass );

}botones.add( botonAbs );panel.add( botonAbs );

}return( panel );

}

13.5 … Grupos de Botones

Page 403: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 403

public GrupoBotones() {add( creaPanelBotones( JButton.class,ids ) );add( creaPanelBotones( JToggleButton.class,ids ) );add( creaPanelBotones( JCheckBox.class,ids ) );add( creaPanelBotones( JRadioButton.class,ids ) );

}public static void main( String args[] ) {JFrame frame = new JFrame( "Práctica EFIBS" );frame.addWindowListener( new WindowAdapter() {public void windowClosing( WindowEvent evt ) {System.exit( 0 );}});

frame.getContentPane().add(newGrupoBotones(),BorderLayout.CENTER );

frame.setSize( 600,300 );frame.setVisible( true );}

}

13.5 … Grupos de Botones

Page 404: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 404

Las lista y cajas "combo" en Swing funcionan del mismo modo que lo hacían en el AWT, aunque tienen incrementada la funcionalidad a través de algunas funciones de conveniencia que se han incorporado.

Por ejemplo, JList tiene un constructor al que se puede pasar un array de objetos String para que los presente.

13.6 Listas y Cajas Combinadas

Page 405: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 405

public class ListasyCajas extends JPanel {static String ids[] = {

"Visa","MarterCard","American Express", "CredoMatic", };public ListasyCajas() {

setLayout( new GridLayout( 2,1 ) );JList lista = new JList( ids );add( new JScrollPane( lista ) );JComboBox combo = new JComboBox();for( int i=0; i < 50; i++ )

combo.addItem( Integer.toString( i ) );add( combo );}

public static void main( String args[] ) {ListasyCajas lista = new ListasyCajas();JFrame ventana = new JFrame();ventana.getContentPane().add( lista,BorderLayout.CENTER );ventana.addWindowListener( new WindowAdapter() {

public void windowClosing( WindowEvent evt ) {System.exit( 0 );}} );

ventana.setSize( 200,200 );ventana.setTitle( "Práctica EFIBS" );vntana.setVisible( true ); }

}

13.6 … Listas y Cajas Combinadas

Page 406: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 406

class Listas extends JPanel {private JList lista;public Listas() {// Se crea un panel para poder contener todos los ComponentessetLayout( new BorderLayout() );// Se crean algunos elementos para poder seleccionar de la listaString datosLista[] = {"Capitulo 1\nIntroduccion a Java","Capitulo 2\nLenguaje Java","Capitulo 3\nEntornos de Desarrollo (IDE) ","Capitulo 4\nTipos de Datos y Operadores","Capitulo 5\nControl de Flujo","Capitulo 6\nConceptos Básicos de Java"

};/* Creamos una lista con un controlador propio, que va a permitir la

personalización en la presentación en pantalla de cada uno de los items que se pueden

seleccionar de esa lista*/lista = new JList( datosLista );lista.setCellRenderer( new MiRendererDeLista() );add( lista, BorderLayout.CENTER );

}

Ejemplo de Listas JList

13.7 Listas

Page 407: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 407

// Clase anidada que implementa el visualizador especial para las celdas que componen la lista

class MiRendererDeLista extends JTextArea implements ListCellRenderer {

public Component getListCellRendererComponent(JList lista,Object valor,int indice,boolean seleccionado, boolean conFoco ) {setBorder( new BevelBorder( BevelBorder.RAISED ) );// Presenta el text correspondiente al itemsetText( valor.toString() );// Pinta en los colores indicados y con la fuente seleccionada...if( seleccionado ) {

// en el caso de un item marcado (rojo/blanco)setBackground( Color.blue );setForeground( Color.white );

}else {

// en el caso de un item no marcado ( gris/negro)setBackground( Color.lightGray );setForeground( Color.black );

}return( this );

}}

13.7 … Listas

Page 408: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 408

public static void main( String args[] ) {JFrame ventana = new JFrame( "Práctica EFIBS" );ventana.addWindowListener( new WindowAdapter() {public void windowClosing( WindowEvent evt ){

System.exit( 0 );}} );ventana.getContentPane().add( new Listas(),BorderLayout.CENTER );ventana.setSize( 300,245 );ventana.setVisible( true );

}}

13.7 … Listas

Page 409: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 409

Swing también introduce nuevos componentes dentro de la manipulación de textos. Así la clase JTextArea actúa como sustituto de la clase TextArea del AWT, la clase JTextField sustituye TextField del AWT y se incorporan las clases JPasswordField que viene a ser equivalente al uso de JTextField junto con el método setEchoChar(), y la clase JTextPane que permite que se presente el texto con diferentes fuentes de caracteres, colores, tamaños, etc.

13.8 Textos

Page 410: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 410

public class Textos extends JPanel implements ActionListener {private Style estiloRojo,estiloVerde,estiloAzul;private JTextPane texto;public Textos() {setLayout( new BorderLayout() );add( creaMenu(),BorderLayout.NORTH );JTextPane texto = creaEditor();add( texto,BorderLayout.CENTER );

}private JMenuBar creaMenu() {JMenuBar menu = new JMenuBar();JMenu estilo = new JMenu( "Estilo" );menu.add( estilo );JMenuItem mi = new JMenuItem( "Rojo" );estilo.add( mi );mi.addActionListener( this );mi = new JMenuItem( "Verde" );estilo.add( mi );mi.addActionListener( this );mi = new JMenuItem( "Azul" );estilo.add( mi );mi.addActionListener( this );return( menu );

}

13.8 …Textos

Page 411: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 411

public void actionPerformed( ActionEvent evt ) {Style estilo = null;String color = (String)evt.getActionCommand();if( color.equals( "Rojo" ) ) {estilo = estiloRojo;

} else if( color.equals( "Azul" ) ) {estilo = estiloAzul;

} else if( color.equals( "Verde" ) ) {estilo = estiloVerde;

}texto.setCharacterAttributes( estilo,false );

}private JTextPane creaEditor() {

StyleContext sc = creaEstilos();DefaultStyledDocument doc = new DefaultStyledDocument( sc );return( texto = new JTextPane( doc ) );

} private StyleContext creaEstilos() {

StyleContext sc = new StyleContext();estiloRojo = sc.addStyle( null,null );StyleConstants.setForeground( estiloRojo,Color.red );estiloVerde = sc.addStyle( null,null );StyleConstants.setForeground( estiloVerde,Color.green );StyleConstants.setFontSize( estiloVerde,24 );estiloAzul = sc.addStyle( null,null );StyleConstants.setForeground( estiloAzul,Color.blue );return( sc );

}

13.8 …Textos

Page 412: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 412

public static void main( String argv[] ) {JFrame ventana = new JFrame( "Práctica EFIBS" );ventana.addWindowListener( new WindowAdapter() {public void windowClosing( WindowEvent evt ){

System.exit( 0 ); }} );ventana.getContentPane().add( new

Textos(),BorderLayout.CENTER );ventana.setSize( 300,180 );ventana.setVisible( true );}

}

13.8 ... Textos

Page 413: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 413

Casi todas las clases que se usan para crear las interfaces de usuario se derivan de JComponent. Esta clase contiene un método llamado setToolTipText( String ). Se puede indicar un texto de información virtualmente en cualquier lugar y lo único que se necesita es invocar a este método, indicando el texto correspondiente al mensaje. Por ejemplo:

y cuando el ratón permanezca sobre cada JButton, durante un periodo de tiempo predeterminado, una pequeña cajita conteniendo el texto aparecerá al lado del puntero del ratón, también en este caso, indicando el botón sobre el cual se encuentra situado el cursor del ratón.

…boton1.addActionListener( al );boton1.setToolTipText( "Soy el JBoton 1" );add( boton1 );boton2.addActionListener( al );boton2.setToolTipText( "Soy el JBoton 2" );add( boton2 );texto.setToolTipText( "Soy el JCampoDeTexto" );add( texto );…

13.9 Tool Tips

Page 414: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 414

Se puede utilizar un objeto Icon dentro de un objeto JLabel, o cualquier objeto que derive de AbstractButton; incluyendo JButton, JCheckBox, JRadioButton y los diferentes tipos de JMenuItem.

JButtonJButton

JLabelJLabel

ImageIcon izq = new ImageIcon(logo.gif" ); //Se debe de poner toda la rutaJButton boton = new JButton( "Boton",izq );

Icon imagen = new ImageIcon( "logo_efibs2.jpg" );//Se debe de poner toda la rutaJLabel etiq3 = new JLabel( "Etiqueta3", imagen,SwingConstants.CENTER );

13.10 Iconos

Page 415: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 415

Los menús están mucho mejor desarrollados y son más flexibles en Swing que los que se encuentran habitualmente en otras herramientas, incluyendo paneles y applets. La sintaxis para utilizarlos es la misma que en el AWT.

13.11 Menús

Page 416: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 416

public class Menus extends JPanel {static final Boolean bT = new Boolean( true ); static final Boolean bF = new Boolean( false );static ButtonGroup grupoBotones;// Clase que se utiliza para crear los distintos tipos de menús que se va a presentar static

class TipoMenu { TipoMenu( int i ) {}

};static final TipoMenu mi = new TipoMenu( 1 ); // Menú con elementos normalesstatic final TipoMenu cb = new TipoMenu( 2 ); // Menú con cajas de selecciónJTextField txt = new JTextField( 10 );ActionListener al1 = new ActionListener() {public void actionPerformed( ActionEvent evt ) {txt.setText( ((JMenuItem)evt.getSource() ).getText() );

}};

ActionListener al2 = new ActionListener() {public void actionPerformed( ActionEvent evt ) {JMenuItem mi = (JMenuItem)evt.getSource();}};

// En estas estrcuturas se almacenas los datos de los menús como si se// tratara de los típicos recursos de X

13.11 … Menús

Page 417: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 417

public Object menuArchivo[][] = {{ "Archivo",new Character('A') }, // Nombre del menú y tecla rápida asociada

// Nombre,tipo,tecla rápida,receptor asociado,habilitado o no para cada uno de los elementos del menú

{ "Nuevo",mi,new Character('N'),al1,bT },{ "Abrir",mi,new Character('b'),al1,bT },{ "Guardar",mi,new Character('G'),al1,bF },{ "Guardar como...",mi,new Character('c'),al1,bF },{ null }, // Separador{ "Salir",mi,new Character('S'),al1,bT },

};public Object menuOpciones[][] = {{ "Opciones",new Character('O') },{ "Opcion 1",cb,new Character('1'),al1,bT },{ "Opcion 2",cb,new Character('2'),al1,bT },

};public Object barraMenu[] = {

menuArchivo,menuOpciones, };static public JMenuBar creaMenuBarra( Object barraMenuDato[] ) {

JMenuBar barraMenu = new JMenuBar();for( int i=0; i < barraMenuDato.length; i++ )barraMenu.add( creaMenu((Object[][])barraMenuDato[i]) );

return( barraMenu );}

13.11 … Menús

Page 418: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 418

static public JMenu creaMenu( Object[][] menuDato ) {JMenu menu = new JMenu();menu.setText( (String)menuDato[0][0] );menu.setMnemonic( ((Character)menuDato[0][1]).charValue() );grupoBotones = new ButtonGroup();for( int i=1; i < menuDato.length; i++ ) {if( menuDato[i][0] == null )menu.add( new JSeparator() );

elsemenu.add( creaMenuItem( menuDato[i] ) );

} return( menu ); }static public JMenuItem creaMenuItem( Object[] dato ) {

JMenuItem m = null;TipoMenu tipo = (TipoMenu)dato[1];if( tipo == mi )m = new JMenuItem();

else if( tipo == cb )m = new JCheckBoxMenuItem();

m.setText( (String)dato[0] );m.setMnemonic( ((Character)dato[2]).charValue() );m.addActionListener( (ActionListener)dato[3] );m.setEnabled( ((Boolean)dato[4]).booleanValue() );return( m ); }

13.11 … Menús

Page 419: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 419

Menus() {setLayout( new BorderLayout() );add( creaMenuBarra( barraMenu ),BorderLayout.NORTH );JPanel p = new JPanel();p.setLayout( new BorderLayout() );p.add( txt,BorderLayout.NORTH );add( p,BorderLayout.CENTER ); }

public static void main(String args[]) {Menus panel = new Menus();JFrame ventana = new JFrame();ventana.getContentPane().add( panel,BorderLayout.CENTER );ventana.addWindowListener( new WindowAdapter() {public void windowClosing( WindowEvent evt ) {

System.exit( 0 );}} );ventana.setSize( 300,200 );ventana.setTitle( "Práctica EFIBS" );ventana.setVisible( true ); }}

13.11 … Menús

Page 420: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 420

La implementación de JPopupMenu resulta un tanto extraña, antes que, nada hay que llamar al método enableEvents() y seleccionar los eventos del ratón, en vez de utilizar un receptor de eventos como sería de esperar.

13.12 Menús Popup

Page 421: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 421

public class MenusPopup extends JPanel {JPopupMenu popup = new JPopupMenu();JTextField txt = new JTextField( 10 );public MenusPopup() {add( txt );ActionListener al = new ActionListener() {public void actionPerformed( ActionEvent evt ){txt.setText( ((JMenuItem)evt.getSource()).getText() );}};

JMenuItem elemento = new JMenuItem( "Visa" );elemento.addActionListener( al );popup.add( elemento );elemento = new JMenuItem( "MasterCard" );elemento.addActionListener( al );popup.add( elemento );elemento = new JMenuItem( "American Express" );elemento.addActionListener( al );popup.add( elemento );popup.addSeparator();elemento = new JMenuItem( "CredoMatic" );elemento.addActionListener( al );popup.add( elemento );enableEvents( AWTEvent.MOUSE_EVENT_MASK );}

13.12 … Menús Popup

Page 422: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 422

protected void processMouseEvent( MouseEvent evt ){if( evt.isPopupTrigger() )popup.show( evt.getComponent(),evt.getX(),evt.getY() );

elsesuper.processMouseEvent( evt );

}public static void main( String args[] ) {JFrame frame = new JFrame( "Práctica EFIBS" );frame.addWindowListener( new WindowAdapter() {public void windowClosing( WindowEvent evt ) {System.exit( 0 );}});

frame.getContentPane().add( new MenusPopup(),BorderLayout.CENTER );frame.setSize( 200,130 );frame.setVisible( true );}

}

13.12 … Menús Popup

Page 423: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 423

Una escala permite al usuario introducir datos desplazando el marcador de la escala hacia un lado o hacia otro, lo cual resulta altamente intuitivo en algunos casos; como pueden ser, por ejemplo, controles de volumen. Una barra de progreso presenta al usuario información en forma de una barra parcialmente llena, o parcialmente vacía, para que pueda tener una perspectiva visual de los datos.

13.13 Escalas y Barras de Progreso

Page 424: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 424

public class Escalas extends JPanel {JProgressBar barraProg = new JProgressBar();JSlider barraSlid = new JSlider( JSlider.HORIZONTAL,0,100,60 );public Escalas() {setLayout( new GridLayout(2,1) );add( barraProg );barraSlid.setValue( 0 );barraSlid.setPaintTicks( true );barraSlid.setMajorTickSpacing( 20 );barraSlid.setMinorTickSpacing( 5 );barraSlid.setBorder( new TitledBorder("Desplazame") );barraSlid.addChangeListener( new ChangeListener() {public void stateChanged( ChangeEvent evt ) {barraProg.setValue(barraSlid.getValue() );}} );

add( barraSlid ); }public static void main( String args[] ) {JFrame frame = new JFrame( "Práctica EFIBS" );frame.addWindowListener( new WindowAdapter() {public void windowClosing( WindowEvent evt ) {System.exit( 0 );} } );

frame.getContentPane().add( new Escalas(),BorderLayout.CENTER );frame.setSize( 200,130 );frame.setVisible( true );}

}

13.13 … Escalas y Barras de Progreso

Page 425: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 425

Utilizar en Swing un árbol, como los que se despliegan en muchas de las ventanas de los sistemas operativos al uso, es tan simple como escribir:

Pero esto crea un árbol muy primitivo.

El siguiente ejemplo es más complejo.

add( new JTree( new Object[]{ "este","ese","aquel" } ) );

13.14 Árboles

Page 426: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 426

import javax.swing.tree.*;

/* Esta clase toma un array de Strings, haciendo que el primer elemento del array sea un nodo y el resto sean ramas de ese nodo con ello se consiguen las ramas del árbol general cuando se pulsa el botón de test*/class Rama {DefaultMutableTreeNode r;public Rama( String datos[] ) {r = new DefaultMutableTreeNode( datos[0] );for( int i=1; i < datos.length; i++ )r.add( new DefaultMutableTreeNode( datos[i] ) );

}public DefaultMutableTreeNode node() { return( r ); }}

public class Arboles extends JPanel {String datos[][] = {{ "Colores","Rojo","Verde","Azul" },{ "Sabores","Salado","Dulce","Amargo" },{ "Longitud","Corta","Media","Larga" },{ "Intensidad","Alta","Media","Baja" },{ "Temperatura","Alta","Media","Baja" },{ "Volumen","Alto","Medio","Bajo" },};

static int i=0;DefaultMutableTreeNode raiz,rama,seleccion;JTree arbol;DefaultTreeModel modelo;public Arboles() {setLayout( new BorderLayout() );raiz = new DefaultMutableTreeNode( "raiz" );arbol = new JTree( raiz );

13.14 … Árboles

Page 427: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 427

/*Se añade el árbol y se hace sobre un ScrollPane, para que se controle automáticamente la longitud del árbol cuando está desplegado, de forma que aparecerá una barra de desplazamiento para poder visualizarlo en su totalidad*/add( new JScrollPane( arbol ),BorderLayout.CENTER );modelo =(DefaultTreeModel)arbol.getModel(); // Se obtiene el modelo del árbol// Y se añade el botón que va a ir incorporando ramas cada vez que se pulseJButton botonPrueba = new JButton("Pulsame");botonPrueba.addActionListener( new ActionListener() {public void actionPerformed( ActionEvent evt ) {if( i < datos.length ) {rama = new Rama( datos[i++] ).node();// Control de la útlima selección realizadaseleccion = (DefaultMutableTreeNode)arbol.getLastSelectedPathComponent();

if( seleccion == null ) seleccion = raiz;

// El modelo creará el evento adecuado, y en respuesta a él, el árbol se actualizará automáticamentemodelo.insertNodeInto( rama,seleccion,0 );}} } );

JPanel panel = new JPanel(); // Se crea un panel para contener al botónpanel.add( botonPrueba );add( panel,BorderLayout.SOUTH ); }

public static void main( String args[] ) {JFrame frame = new JFrame( "Práctica EFIBS" );frame.addWindowListener( new WindowAdapter() {public void windowClosing( WindowEvent evt ) {System.exit( 0 );}});

frame.getContentPane().add( new Arboles(),BorderLayout.CENTER );frame.setSize( 200,500 );frame.setVisible( true );}}

13.14 … Árboles

Page 428: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 428

Al igual que los árboles, las tablas en Swing son importantes y poderosas. En principio, se crearon para constituir una interfaz ligado a bases de datos a través del Java Database Connectivity (JDBC), y asíevitar la complejidad inherente al manejo de los datos, proporcionando mucha flexibilidad al programador.

Para cambiar los valores de la tabla en el IDE, en las propiedades seleccione model, tal y como se aprecia:

13.15 Tablas

Page 429: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 429

// El Modelo de la Tabla es el que controla todos los datos que se colocan en ellaclass ModeloDatos extends AbstractTableModel {Object datos[][] = {{"uno","dos","tres","cuatro"},

{"cinco","seis","siete","ocho"},{"nueve","diez","once","doce"}, };

// Imprime los datos en la consola cada vez que se produce un cambio en cualquiera de las casillas de la tablaclass TablaListener implements TableModelListener {public void tableChanged( TableModelEvent evt ) {for( int i=0; i < datos.length; i++ ) {for( int j=0; j < datos[0].length; j++ )System.out.print( datos[i][j] + " " );

System.out.println();}}}ModeloDatos() {// ConstructoraddTableModelListener( new TablaListener() ); }

public int getColumnCount() { // Devuelve el número de columnas de la tablareturn( datos[0].length ); }

public int getRowCount() { // Devuelve el número de filas de la tablareturn( datos.length ); }

// Devuelve el valor de una determinada casilla de la tabla identificada mediante fila y columnapublic Object getValueAt( int fila,int col ) { return( datos[fila][col] ); }

}

13.15 … Tablas

Page 430: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 430

// Cambia el valor que contiene una determinada casilla de la tablapublic void setValueAt( Object valor,int fila,int col ) {datos[fila][col] = valor;fireTableDataChanged();}// Indica que se ha cambiado

// Indica si la casilla identificada por fila y columna es editablepublic boolean isCellEditable( int fila,int col ) { return( true ); }

public class Tablas extends JPanel {public Tablas() {setLayout( new BorderLayout() );JTable tabla = new JTable( new ModeloDatos() );/* La tabla se añade a un ScrollPane para que sea éste el que controle automáticamente entamaño de la tabla, presentando una barra de desplazamiento cuando sea necesario*/JScrollPane panel = new JScrollPane( tabla );add( panel,BorderLayout.CENTER ); }

public static void main(String args[]) {JFrame frame = new JFrame( "Práctica EFIBS" );frame.addWindowListener( new WindowAdapter() {public void windowClosing( WindowEvent evt ) {System.exit( 0 );}} );

frame.getContentPane().add( new Tablas(),BorderLayout.CENTER );frame.setSize( 200,200 );frame.setVisible( true );}}

13.15 … Tablas

Page 431: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 431

JTabbedPane, puede manejar directamente todas las fichas, a base de pestañas y permite cambiar a cualquiera de ellas.

13.16 Pestañas

Page 432: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 432

public class Pestañas extends JPanel {static Object objetos[][] = {

{ "Bordes",Bordes.class },{ "Botones",Botones.class },{ "Barras",Escalas.class }, };

static JPanel creaPanel( Class clase ) {String titulo = clase.getName();titulo = titulo.substring( titulo.lastIndexOf('.') + 1 );JPanel panel = null;try {

panel = (JPanel)clase.newInstance();} catch( Exception e ) {

System.out.println( e ); }panel.setBorder( new TitledBorder( titulo ) );return( panel );}

public Pestañas() {setLayout( new BorderLayout() );JTabbedPane pestana = new JTabbedPane();for( int i=0; i < objetos.length; i++ ) {

pestana.addTab( (String)objetos[i][0],creaPanel( (Class)objetos[i][1] ) );}

add( pestana,BorderLayout.CENTER );pestana.setSelectedIndex( objetos.length/2 );

}public static void main( String args[] ) {

JFrame frame = new JFrame( "Práctica EFIBS" );frame.addWindowListener( new WindowAdapter() {

public void windowClosing( WindowEvent evt ) {System.exit( 0 );}} );

frame.getContentPane().add( new Pestañas(),BorderLayout.CENTER );frame.setSize( 460,350 );frame.setVisible( true ); }

}

13.16 ... Pestañas

Page 433: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 433

Normalmente, la ventana de selección de ficheros se utiliza para presentar una lista de ficheros y permitir al usuario seleccionar cuál de ellos debe abrir la aplicación; o, por el contrario, permitir al usuario la introducción de un nombre o selección del fichero con que se quieren salvar datos.

13.17 Selector de Ficheros

Page 434: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 434

public class Selector extends JPanel {static JFrame ventana;public Selector() {Button boton1 = new Button( "FileDialog AWT" );Button boton2 = new Button( "FileChooser SWING" );add( boton1,"North" );add( boton2,"South" );// FileDialog implementado por el AWTActionListener fd = new ActionListener() {public void actionPerformed( ActionEvent evt ) {

new FileDialog(ventana).setVisible( true );}};// FileChooser implementado por SwingActionListener fc = new ActionListener() {public void actionPerformed( ActionEvent evt ) {

new JFileChooser().showDialog( ventana,"Abrir" ); } };boton1.addActionListener( fd );boton2.addActionListener( fc ); }

public static void main( String args[] ) {Selector panel = new Selector();ventana = new JFrame();ventana.getContentPane().add( panel,BorderLayout.CENTER );ventana.addWindowListener( new WindowAdapter() {public void windowClosing( WindowEvent evt ) {

System.exit( 0 ); } } );ventana.setSize( 300,80 );ventana.setTitle( "Práctica EFIBS" );ventana.setVisible( true );}}

13.17 … Selector de Ficheros

Page 435: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 435

public class SelectorResponda extends JFrame implements ActionListener {public SelectorResponda() {JButton boton = new JButton( "Muestra Ventana" );getContentPane().add( boton,"Center" );pack();boton.addActionListener( this );

}public void actionPerformed( ActionEvent evt ) {int res = JOptionPane.showConfirmDialog( this,"Responda Si o No","Práctica EFIBS",JOptionPane.YES_NO_OPTION );

String respuesta = null;if( res == JOptionPane.YES_OPTION ) respuesta = "Si";

elserespuesta = "No";

System.out.println( "Respuesta: "+respuesta );}public static void main( String args[] ) {new SelectorResponda().setVisible( true );

}}

13.17 … Selector de Ficheros

Page 436: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 436

Del código anterior, elimine el código de la función actionPerformed y sustitúyalo por las siguientes líneas

Y observe otra forma de como se podría utilizar un Selector de Ficheros.

String respuesta = JOptionPane.showInputDialog( this,"Nombre ", "Tutorial de Java, Swing",JOptionPane.DEFAULT_OPTION );

System.out.println( "Respuesta: "+respuesta );

13.17 … Selector de Ficheros

Page 437: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 437

Algunas de las clases de Java proporcionan métodos de conveniencia para permitir realizar acciones a través del teclado. Por ejemplo, la clase AbstractButton dispone del método setMnemonic(), que permite especificar el carácter, que en combinación con una de las teclas de modificación, hace que se ejecuten las acciones asociadas a los botones. El siguiente ejemplo es muy sencillo pero se muestra como se utilizan estos métodos utilizando las direccionales del teclado.

13.18 Teclado

Page 438: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 438

public class Teclado2 extends JFrame implements ActionListener {protected JButton botones[] = new JButton[9];public Teclado2() {

super( "Práctica EFIBS" );Container pane = getContentPane();pane.setLayout( new GridLayout( 3,3 ) );Border borde = BorderFactory.createLineBorder( Color.black );KeyStroke arriba = KeyStroke.getKeyStroke( KeyEvent.VK_UP,0 );KeyStroke abajo = KeyStroke.getKeyStroke( KeyEvent.VK_DOWN,0 );KeyStroke izqda = KeyStroke.getKeyStroke( KeyEvent.VK_LEFT,0 );KeyStroke drcha = KeyStroke.getKeyStroke( KeyEvent.VK_RIGHT,0 );JRootPane rootPane = getRootPane();rootPane.registerKeyboardAction( this,"arriba",arriba,

JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT );rootPane.registerKeyboardAction( this,"abajo",abajo,

JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT );rootPane.registerKeyboardAction( this,"drcha",drcha,

JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT );rootPane.registerKeyboardAction( this,"izqda",izqda,

JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT );for( int i=0; i < 9; i++ ) {

JButton boton;boton = new JButton();boton.setBorder( borde );boton.setName( new Integer(i).toString() );pane.add( boton );botones[i] = boton;

}setSize( 200,200 );

}

13.18 … Teclado

Page 439: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 439

public void actionPerformed( ActionEvent evt ) {Component foco = getFocusOwner();String nombre = foco.getName();int indice = Integer.parseInt( nombre );botones[indice].setText( "" );String accion = evt.getActionCommand();if( accion.equals( "arriba" ) ) {indice = (indice < 3) ? indice + 6 : indice - 3;

} else if( accion.equals( "abajo" ) ) {indice = (indice > 5) ? indice - 6 : indice + 3;

} else if( accion.equals( "izqda" ) ) {indice = (indice == 0) ? indice = 8 : indice - 1;

} else { // asume drchaindice = (indice == 8) ? indice = 0 : indice + 1;

}botones[indice].setText( "X" );botones[indice].requestFocus();

}static public void main( String argv[] ) {new Teclado2().show();}

}

13.18 … Teclado

Page 440: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 440

En anteriores programas se ha utilizado la clase JScrollPane para proporcionar una forma automática de desplazar el contenido de una ventana por parte del sistema. Esta clase permite dejar las manos libres al programador para centrarse en el código de su aplicación, sin tener que estar pendiente de tener que controlar la visibilidad de todo o parte del contenido de la ventana.

13.19 Paneles de Desplazamiento

Page 441: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 441

class Desplazables extends JPanel implements ChangeListener {private JSplitPane panelVert;private JScrollPane panelScro1;public Desplazables() {setLayout( new BorderLayout() );// Se crea una zona para presentar el texto correspondiente al ficherocreaPanelSup();// Se crea un panel verticalmentepanelVert = new JSplitPane( JSplitPane.VERTICAL_SPLIT );add( panelVert,BorderLayout.CENTER );panelVert.setLeftComponent( panelScro1 );

}public void stateChanged( ChangeEvent evt ) {

if( evt.getSource() == panelScro1.getViewport() ) {// Cogemos la posición actual dentro de la vista correspondiente al panel Point point = panelScro1.getViewport().getViewPosition();}

}private void creaPanelSup() {JTextArea areaTexto = new JTextArea(); // Creamos el panel de la zona de texto

13.20 … Paneles de Desplazamiento

Page 442: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 442

// Se carga el fichero en el área de texto, cuidando de capturar // todas las excepciones que se puedan producirtry {

FileReader fileStream = new FileReader( "Botones.java" );areaTexto.read( fileStream, "Botones.java" );

} catch( FileNotFoundException e ) {System.out.println( "Fichero no encontrado" );

} catch( IOException e ) {System.out.println( "Error por IOException" );

}panelScro1 = new JScrollPane();// Creamos el panel desplazable para el área de textopanelScro1.getViewport().add( areaTexto );panelScro1.getViewport().addChangeListener( this );

}public static void main( String args[] ) {

JFrame ventana = new JFrame( "Tutorial de Java, Swing" );ventana.addWindowListener( new WindowAdapter() {

public void windowClosing( WindowEvent evt ){System.exit( 0 );}} );

ventana.getContentPane().add( new Desplazables(),BorderLayout.CENTER );ventana.setSize( 460,300 );ventana.setVisible( true ); }}

13.20 … Paneles de Desplazamiento

Page 443: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 443

Para crear un proyecto Swing en Netbeans: oprima click derecho en el nuevo paquete, y seleccione New – Jframe Form ó Jpanel Form.

Swing es muy similar a AWT, y como se menciono antes la única diferencia es que los componentes en Swing tienen una J antes del nombre, esto para diferenciarlos de los de AWT.

13.21 Swing en NetBeans 5.0

Page 444: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 444

Dentro de las características más relevantes está la nueva apariencia del escritorio a través de nuevas opciones en “Look and Feels”. Ver imágenes.

Se ha adicionado un soporte de impresión para Jtable.

El jFrame.add se ha vuelto equivalente jFrame.getContentPane().add().

13.22 Swing en ver 5.0

Page 445: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 445

Crea un paquete con el nombre gui.Sobre ese paquete crea un nuevo Jframe llamado Principal.Agregue una imagen a dicho frame por medio de un JLabel y utilizando la barra de propiedades.Crea un Menú con las siguientes opciones:Archivo

Salir

ClientesIngresarListar

ProductosIngresarListar

OrdenesIngresarListar

13.23 Ejercicio Práctico

Page 446: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 446

Agréguele a la opción de Salir el evento de poder cerrar la ventana.

Cree un nuevo Frame llamado InsertarCliente para poder Ingresar un Cliente al Sistema con los siguientes campos:

Una etiqueta Nombre y un campo de texto .Una etiqueta Cédula y un campo de texto .Una etiqueta Teléfono y un campo de texto .Una etiqueta Dirección y un campo de texto .Un botón Ingresar.

Cree un nuevo método en la clase Utilitarios.java llamado ingresarCliente() que recibe dos parámetros:

Nombre de archivo.Y un objeto de tipo Cliente.

13.23 … Ejercicio Práctico

Page 447: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 447

Este método debe obtener el archivo y agregar al final del mismo, todoslos datos del cliente recibido como parámetro y separados por coma (,).

Una vez realizada esta operación, limpie los valores de las cajas de texto de mencionado Frame, para que de esta forma se pueda realizar nuevamente el proceso de inserción.

Agregue un botón “Cancelar” para cerrar dicha ventana.

13.23 … Ejercicio Práctico

Page 448: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 448

13.23 … Ejercicio Práctico

Page 449: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 449

El instructor realizará una explicación detallada del ejercicio

Cree un nuevo paquete que se llame:org.efibs.sistemaDeOrdenes.Swing

Cree un nuevo JFrame llamado MantenimientoDeClientes que contenga las etiquetas: id,nombre,dirección y teléfono. Y los botones: Insertar, Modificar, Eliminar y Buscar.

En el método windowsOpened invoque el método leer de la clase AdminArchivos que se implementó en Cap13.

13.23 … Ejercicio Práctico

Page 450: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 450

En el método windowsClosed invoque el método escribir del AdminArchivos que se implementó en Cap13.

Implemente cada uno de los botones de: insertar,modificar,eliminar y buscar ayudado de las clases: AdminClientes y AdminArchivos propuestas en los Cap12-Cap13 respectivamente.

Finalmente, ingrese datos y prueba el correcto uso de los mismos tanto a nivel del archivo como de la memoria.

13.23 … Ejercicio Práctico

Page 451: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 451

AnexoAnexoNuevas CaracterNuevas Caracteríísticas de J2SEsticas de J2SE

Page 452: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 452

2. Entorno de Desarrollo Integrado2. Entorno de Desarrollo Integrado

3. El Lenguaje Java3. El Lenguaje Java

4. Tipos de Datos y Operadores4. Tipos de Datos y Operadores

5. Control de Flujo5. Control de Flujo

1. Introducción a Java1. Introducción a Java

6. Conceptos Básicos en Java6. Conceptos Básicos en Java

7. Trabajando con Clases7. Trabajando con Clases

Anexo

Page 453: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 453

8. Utilización de Interfaces8. Utilización de Interfaces

9. Estándares de Desarrollo9. Estándares de Desarrollo

10. Manejo de Excepciones10. Manejo de Excepciones

11. Utilizando Cadenas, Arreglos y Colecciones11. Utilizando Cadenas, Arreglos y Colecciones

12. Clases en Java12. Clases en Java

13. Swing13. Swing

AnexoAnexo

Anexo

Page 454: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 454

Objetivos

Dar a conocer las nuevas características del J2SE.

Mostrar ejemplos de algunas de las características más relevantes.

Page 455: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 455

La actual versión se conoce como la 1.5.0 ó la 5.0 y es asociada por “Tiger Proyect”. Se caracteriza por:

Facilidad de desarrollo.

Programas estructurados en forma más ordenada.

Da mayor seguridad.

Proporciona un soporte lingüístico para idiomas comunes.

Nota: Los ejemplos de las nuevas características se analizarán

en los siguientes capítulos según correspondan.

… Qué incluye el J2SE(Java 2 Standard Edition) ?

Page 456: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 456

… Qué incluye el J2SE(Java 2 Standard Edition) ?

Dentro de la facilidad de desarrollo de la ver 5.0 están las siguientes:

Metadatos.Tipos genéricos.Autoboxing.Ciclos aumentados.Tipos enumerados.Importaciones estáticas.Enumeración de tipos seguros.

Page 457: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 457

Utilidades concurrentes.Auto-empaquetadoDesempaquetado.Generación de interfaces RMI más simples.Argumentos variables.Salida formateada.Entrada mejorada.

… Qué incluye el J2SE(Java 2 Standard Edition) ?

Page 458: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 458

Metadatos:

Poseen la habilidad de asociar información adicional a: clases, interfaces y campos.

Se puede leer por medio de un compilador javadoc o por cualquier otra herramienta.

El principal objetivo de los metadatos, es el de poder desarrollar herramientas que tengan una estructura común y que reduzcan el esfuerzo requerido para la programación y el despliegue.

Las herramientas pueden utilizar los metadatos para generar código fuente adicional o proveer información adicional en el debugueo.

… Qué incluye el J2SE(Java 2 Standard Edition) ?

Page 459: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 459

Anotaciones:

Se declara en forma similar a una interfaz.

Se precede de la palabra clave ‘@’.

La declaración de los métodos no deben tener ningún parámetro o cláusula de lanzamiento.

… Qué incluye el J2SE(Java 2 Standard Edition) ?

Page 460: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 460

Los tipos de datos de retorno son restringidos a primitivos, cadenas, objetos, enums y arreglos de esos tipos.

Los métodos pueden tener valores default.

Pueden ser vistas como un especial tipo de modificador.

Puede ser utilizado aunque se estén utilizando modificadores tales como: public, static y final.

… Qué incluye el J2SE(Java 2 Standard Edition) ?

Page 461: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 461

Tipos Genéricos:

Permiten a un tipo o método operar sobre objetos de varios tipos.Provee compilación segura.Elimina el “casting” o conversión de tipos(ver capítulo 3), que debe llevar a cabo un elemento fuera de la colección.Ejemplo: public class ejemploDeTiposGenericos{

public static void main(String args[]){Vector<Integer> elVector = new Vector();elVector.addElement(new Integer(20));elVector.addElement(new Integer(30));elVector.addElement(new Integer(40));

} }

… Qué incluye el J2SE(Java 2 Standard Edition) ?

Page 462: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 462

Autoboxing y auto-unboxing:

Elimina conversiones manuales entre tipos primitivos tales como enteros(int) y wrappers o envolturas(Integer).

Ejemplo de Autoboxing y Unboxing

public class ejemploDeAutoboxinInboxing {public static void main(String args[]){

Integer a = new Integer(20);int b=0;b=a; // AutoBoxinga=b; // Unboxing

} }

… Qué incluye el J2SE(Java 2 Standard Edition) ?

Page 463: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 463

Ciclos Aumentados (For each):Reemplazo de iteradores y variables índices cuando se itera sobre colecciones y arreglos.

Ejemplo de ciclos aumentados (for each):

...public static void main(String args[]){

for(Season e: Season.values()){System.out.println(e.toString());

}}

… Qué incluye el J2SE(Java 2 Standard Edition) ?

Page 464: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 464

Enumeración de Tipos:

Los enums de la nueva versión son mucho más poderosos, ya que se pueden agregar métodos y campos a un tipo de enum.

Se pueden implementar interfaces.

Los tipos “enum”, proveen implementación de todos los métodos de los objetos.

Son comparables y serializables.

… Qué incluye el J2SE(Java 2 Standard Edition) ?

Page 465: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 465

Ejemplo de implementación de un enum y su salida:

public class ejemploEnum {public enum Season {WINTER, SPRING, SUMMER, FALL}public static void main(String args[]){

for(Season e: Season.values()){System.out.println(e.toString());

}}

… Qué incluye el J2SE(Java 2 Standard Edition) ?

Page 466: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 466

Importaciones estáticas:

Se refiere a las constantes estáticas de una clase sin necesidad de heredar de esta.

Por ejemplo:

import static java.lang.Math.*;public class ejemploImportacionesEstaticas {

public static void main(String args[]){double r = cos(PI * 10);

}}

… Qué incluye el J2SE(Java 2 Standard Edition) ?

Page 467: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 467

Salidas formateadas:

Se puede generar salidas con formato, a través del uso de instrucciones tales como: %s, %5d%n,etc..

Facilita la emigración del código de lenguajes como C a Java, permitiendo el uso de printf.

Ejemplo:public class salidasConFormato {

public static void main(String args[]){int id = 20;String nombre = new String("Jose");System.out.printf("%d,%s",id,nombre );

}}

… Qué incluye el J2SE(Java 2 Standard Edition) ?

Page 468: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 468

Entradas formateadas:

Se puede llevar a cabo lecturas de otros tipos de datos que no sean String, sin necesidad de tener que hacer un parseo al tipo respectivo.

Por ejemplo:public class entradasConFormato {

public static void main(String args[]){Scanner s = new Scanner(System.in);String parm = s.next();int value = s.nextInt();s.close();

}}

… Qué incluye el J2SE(Java 2 Standard Edition) ?

Page 469: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 469

Argumentos variables:

Permite que múltiples argumentos, sean pasados a los métodos como parámetros.

Por ejemplo:public class ejemploDeVarArgs{public static void main(String args[]){

String result = MessageFormat.format("At {1,time} on {1,date}, there was {2}

on planet " + "{0,number,integer}.", 7, new Date(), "a disturbance in the Force");

} }

… Qué incluye el J2SE(Java 2 Standard Edition) ?

Page 470: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 470

Utilidades concurrentes:

Se caracteriza por proveer un alto desempeño en la construcción de hilos.

Cada uno de los hilos están conformados por ejecutores que son los encargados de llevar a cabo ciertas tareas en el framework.

Se hacen uso de los semáforos como medios para dejar pasar o no el uso de algo.

… Qué incluye el J2SE(Java 2 Standard Edition) ?

Page 471: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 471

Utilidades concurrentes (continuación):

Mayor capacidad de procesamiento.

Uso más adecuado de los hilos.

Incluye cerrojos y otras primitivas de sincronización.

Incluye clases para la manipulación de semáforos.

… Qué incluye el J2SE(Java 2 Standard Edition) ?

Page 472: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 472

Utilidades concurrentes (continuación):

En lo que respecta al manejo de hilos, el manejador de prioridad a cambiado.

Se incluyen las clases Thread.State y newgetState.

Se puede obtener mejores resultados haciendo uso del trace a través de los métodos getStackTrace y getAllStackTraces.

En el método sleep() se pueden tener tiempos menores a un milisegundo.

… Qué incluye el J2SE(Java 2 Standard Edition) ?

Page 473: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 473

El principal objetivo de esta versión JDK 5 es la facilidad de desarrollo con las nuevas características como tipos de datos genéricos, el loop for-each, autoboxing/unboxing, enums, varargs, static imports y anotaciones.

El JDK 5 está diseñado para hacer que los programas se estructuren de manera más ordenada, más corta y fortificando la seguridad. Además, proporciona un soporte lingüístico para idiomas comunes.

Qué incluye el J2SEResumen.

Page 474: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 474

IntroducciIntroduccióón a Java n a Java Data Base Data Base

Conectivity(JDBCConectivity(JDBC))

Page 475: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 475

Objetivos

Explicar los objetos de JDBC que permitenmanipular la Base de Datos: Statement, PreparedStatement y CallableStatement.

Explicar el proceso de conectividad con la Base de Datos.

Desarrollar un ejemplo completo con manejode funciones y procedimientos almacenadoshaciendo uso de objetos de JDBC.

Page 476: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 476

2. Interfaces JDBC2. Interfaces JDBC

3. Preparación de la Base de Datos3. Preparación de la Base de Datos

4. Procesamiento de Resultados4. Procesamiento de Resultados

5. Manipulación de Resultados5. Manipulación de Resultados

1. Introducción1. Introducción

6. El Objeto PreparedStatement6. El Objeto PreparedStatement

7. Procedimientos Almacenados7. Procedimientos Almacenados

8. Ejercicios Prácticos8. Ejercicios Prácticos

1 Introducción

Page 477: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 477

JDBC es una especificación de un conjunto de clases (API) y métodos de operación que permiten a cualquier programa Java acceder a sistemas de bases de datos de forma homogénea.

Incluye:

El JDBC 1.0 API, que proporciona la funcionalidad básica para el acceso de los datos.

El JDBC 2.0 API suple el API básico con características más avanzadas y proporciona una manera estándar de tener acceso a las últimas características objeto-relacional.

Además, el nuevo API incluye características tales como el funcionamiento mejorado de las actualizaciones de los resultados y el scrollable.

También incorpora la tecnología de JDBC para aplicaciones cliente-servidor con el pool de conexiones y transacciones distribuidas.

1.1 Introducción

Page 478: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 478

El JDBC 2.0 incluye todo lo del API del Java 2 Standard Edition, y también el API JDBC de extensión estándar.

La API JDBC es una parte integral de la plataforma Java. Incluyemanejo de conexiones a base de datos, ejecución de sentencias SQL, store procedures, soporte de transacciones, etc.

JDBC provee una interfaz de programación única, que independiza a las aplicaciones del motor de base de datos usado y del mecanismo deconexión.

JDBC generaliza las funciones de acceso a datos más comunes. Las clases están contenidos en los paquetes: java.sql y javax.sql

1.2 JDBC 2.0 API -Características

Page 479: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 479

Un driver JDBC es usado por la JVM para traducir las invocaciones JDBC genéricas en invocaciones que la DB propietaria entiende.

Los drivers son clases Java que se cargan en ejecución.

Existen drivers JDBC para la mayoría de los motores de base de datos. Típicamente, los fabricantes de bases de datos proveen el driver JDBC para su motor, aunque también es posible encontrarlos en Internet.

Los drivers al estar escritos en Java son automáticamente instalables, portables y seguros.

1.3 JDBC 2.0 API –Otras Características

Page 480: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 480

El API JDBC soporta dos modelos diferentes de acceso a Bases de Datos, los modelos de dos y tres capas.

1.4 Acceso de JDBC a Bases de Datos

Page 481: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 481

Este modelo se basa en que la conexión entre la aplicación Java o el applet que se ejecuta en el navegador, se conectan directamente a la base de datos.

Esto significa que el driver JDBC específico para conectarse con la base de datos, debe residir en el sistema local. La base de datos puede estar en cualquier otra máquina y se accede a ella mediante la red. Esta es la configuración típica Cliente/Servidor: el programa cliente envía instrucciones SQL a la base de datos, ésta las procesa y envía los resultados de vuelta a la aplicación.

1.5 Modelo de dos Capas

Page 482: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 482

En este modelo de acceso a las bases de datos, las instrucciones son enviadas a una capa intermedia entre Cliente y Servidor, que es la que se encarga de enviar las sentencias SQL a la base de datos y recoger el resultado desde la base de datos. En este caso el usuario no tiene contacto directo, ni a través de la red, con la máquina donde reside la base de datos.

Este modelo presenta la ventaja de que el nivel intermedio mantiene en todo momento el control del tipo de operaciones que se realizan contra la base de datos y además, está la ventaja adicional de que los drivers JDBC no tienen que residir en la máquina cliente, lo cual libera al usuario de la instalación de cualquier tipo de driver.

1.6 Modelo de tres Capas

Page 483: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 483

Un driver JDBC puede pertenecer a una de cuatro categorías diferentes en cuanto a la forma de operar.

Estas categorías son las siguientes:

Puente JDBC – ODBC.

Java / Binario.

100% Java / Protocolo Nativo.

100% Java / Protocolo Independiente.

1.7 Tipos de Drivers

Page 484: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 484

La primera categoría de drivers es la utilizada por Sun inicialmente para popularizar JDBC y consiste en aprovechar todo lo existente, estableciendo un puente entre JDBC y ODBC. Este driver conviertetodas las llamadas JDBC a llamadas ODBC y realiza la conversión correspondiente de los resultados.

1.8 Tipos de Drivers –Puente JDBC-ODBC

Page 485: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 485

La ventaja de este driver, proporcionado con el JDK, es que Javadispone de acceso inmediato a todas las fuentes posibles de bases de datos y no hay que hacer ninguna configuración adicional aparte de la ya existente.

No obstante, tiene dos desventajas muy importantes: por un lado, la mayoría de los drivers ODBC a su vez convierten sus llamadas a una librería nativa del fabricante DBMS, con lo cual la lentitud del driverJDBC-ODBC puede ser exasperante, al llevar dos capas adicionales que no añaden funcionalidad alguna y por otra parte, el puente JDBC-ODBC requiere una instalación ODBC ya existente y configurada.

1.8 … Tipos de Drivers –Puente JDBC-ODBC

Page 486: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 486

Lo anterior implica que para distribuir con seguridad una aplicación Java que use JDBC habría que limitarse en primer lugar a entornos Windows (donde está definido ODBC) y en segundo lugar, proporcionar los drivers ODBC adecuados y configurarlos correctamente. Esto hace que este tipo de drivers esté totalmente descartado en el caso de aplicaciones comerciales, e incluso en cualquier otro desarrollo, debe ser considerado como una solución transitoria, porque el desarrollo de drivers totalmente en Java hará innecesario el uso de estos puentes.

1.8 Tipos de Drivers –Puente JDBC-ODBC

Page 487: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 487

Este driver se salta la capa ODBC y habla directamente con la librería nativa del fabricante del sistema DBMS (como pudiera ser DB-Librarypara Microsoft SQL Server o CT-Lib para Sybase SQL Server). Este driver es un driver 100% Java pero aún así necesita la existencia de un código binario (la librería DBMS) en la máquina del cliente, con las limitaciones y problemas que esto implica.

1.9 Tipos de Driver –Java/Binario

Page 488: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 488

Es un driver implementado completamente en Java que se comunica con el servidor DBMS utilizando el protocolo de red nativo del servidor. De esta forma, el driver no necesita intermediarios para hablar con el servidor y convierte todas las peticiones JDBC en peticiones de red contra el servidor. La ventaja de este tipo de driver es que es una solución 100% Java y por lo tanto, independiente de la máquina en la que se va a ejecutar el programa.

1.10 Tipos de Driver – 100% Java/Protocolo Nativo

Page 489: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 489

Igualmente, dependiendo de la forma en que esté programado el driver, puede no necesitar ninguna clase de configuración por parte del usuario. La única desventaja de este tipo de drivers es que el cliente está ligado a un servidor DBMS concreto, ya que el protocolo de red que utiliza MS SQL Server por ejemplo no tiene nada que ver con el utilizado por DB2, PostGresql u Oracle. La mayoría de los fabricantes de bases de datos han incorporado a sus propios drivers JDBC del segundo o tercer tipo, con la ventaja de que no suponen un costo adicional.

1.10 … Tipos de Driver – 100% Java/Protocolo Nativo

Page 490: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 490

Esta es la opción más flexible, se trata de un driver 100% Java / Protocolo independiente, que requiere la presencia de un intermediario en el servidor. En este caso, el driver JDBC hace las peticiones de datos al intermediario en un protocolo de red independiente del servidor DBMS. El intermediario a su vez, que está ubicado en el lado del servidor, convierte las peticiones JDBC en peticiones nativas del sistema DBMS.

1.11 Tipos de Driver – 100% Java/Protocolo Independiente

Page 491: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 491

La ventaja de este método es inmediata: el programa que se ejecuta en el cliente, y aparte de las ventajas de los drivers 100% Java, también presenta la independencia respecto al sistema de bases de datos que se encuentra en el servidor.

1.11 … Tipos de Driver – 100% Java/Protocolo Independiente

Page 492: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 492

De esta forma, si una empresa distribuye una aplicación Java para que sus usuarios puedan acceder a su servidor MS SQL y posteriormente decide cambiar el servidor por Oracle, PostGresql o DB2, no necesita volver a distribuir la aplicación, sino que únicamente debe reconfigurar la aplicación residente en el servidor que se encarga de transformar las peticiones de red en peticiones nativas.

Es un driver Java Puro que habla directamente con la BD.

Es el método más eficiente de acceso a BD.

1.11 … Tipos de Driver – 100% Java/Protocolo Independiente

Page 493: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 493

No requiere de ninguna librería adicional.

La mayoría de los fabricantes de BD proveen drivers JDBC de tipo 4 para sus BD.

PostGresql, que es un sistema de base de datos relacional que une las estructuras clásicas con los conceptos de programación orientada a objetos.

1.11 … Tipos de Driver – 100% Java/Protocolo Independiente

Page 494: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 494

2. Interfaces JDBC2. Interfaces JDBC

3. Preparación de la Base de Datos3. Preparación de la Base de Datos

4. Procesamiento de Resultados4. Procesamiento de Resultados

5. Manipulación de Resultados5. Manipulación de Resultados

1. Introducción1. Introducción

6. El Objeto PreparedStatement6. El Objeto PreparedStatement

7. Procedimientos Almacenados7. Procedimientos Almacenados

8. Ejercicios Prácticos8. Ejercicios Prácticos

2 Interfaces JDBC

Page 495: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 495

JDBC define ocho interfaces para operaciones con bases de datos, de las que se derivan las clases correspondientes.

La figura siguiente, en formato OMT, con nomenclatura UML, muestra la interrelación entre estas clases según el modelo de objetos de la especificación de JDBC.

2.1 Interfaces JDBC

Page 496: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 496

2.1 … Interfaces JDBC

Page 497: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 497

La clase que se encarga de cargar inicialmente todos los drivers JDBC disponibles es DriverManager.

Una aplicación puede utilizar DriverManager para obtener un objeto de tipo conexión, Connection, con una base de datos.

La conexión se especifica siguiendo una sintaxis basada en la especificación más amplia de los URL, de la siguiente forma:

Por ejemplo, si se utiliza PostgresSQL el nombre del subprotocolo serápostgres. En algunas ocasiones es necesario identificar aún más el protocolo.

jdbc:subprotocolo//servidor:puerto/base de datos

jdbc:postgresql//desarrollo:5432/nomina

2.2 Interfaces JDBC – DriverManager

Page 498: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 498

La siguiente tabla muestra la lista de clases e interfaces junto con una breve descripción:

Proporciona información acerca de una Base de Datos, como las tablas que contiene, etc.

DatabaseMetadata

Representa una conexión con una base de datos. Una aplicación puede tener más de una conexión a más de una base de datos

Connection

Proporciona diversa información acerca de un driver.DriverPropertyInfo

Permite gestionar todos los drivers instalados en el sistemaDriverManager

Permite conectarse a una base de datos: cada gestor de base de datos requiere un driver distinto

Driver

DescripciónClase / Interface

2.3 Descripción de Clases e Interfaces

Page 499: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 499

Permite obtener información sobre un ResultSet, como el número de columnas, sus nombres, etc.

ResultSetMetadata

Contiene las filas o registros obtenidos al ejecutar un SELECTResultSet

Permite ejecutar sentencias SQL con parámetros de entrada y salida, típicamente procedimientos almacenados

CallableStatement

Permite ejecutar sentencias SQL con parámetros de entradaPreparedStatement

Permite ejecutar sentencias SQL sin parámetrosStatement

DescripciónClase / Interface

2.3 … Descripción de Clases e Interfaces

Page 500: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 500

El siguiente diagrama relaciona las cuatro clases principales que va a usar cualquier programa Java con JDBC y representa el esqueleto de cualquiera de los programas que se desarrollan para atacar a bases de datos.

2.3 Clases Principales

Page 501: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 501

El siguiente diagrama relaciona las cuatro clases principales que va a usar cualquier programa Java con JDBC, y representa el esqueleto de cualquiera de los programas que se desarrollan para atacar a bases de datos.

Cierra

Cargar/RegistrarJDBC Driver

Estatutos SQL

Estatutos SELECT

DML/ DDLEstatutos

Conectar

Procesa elresultado

2.3 … Clases Principales

Page 502: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 502

2. Interfaces JDBC2. Interfaces JDBC

3. Preparación de la Base de Datos3. Preparación de la Base de Datos

4. Procesamiento de Resultados4. Procesamiento de Resultados

5. Manipulación de Resultados5. Manipulación de Resultados

1. Introducción1. Introducción

6. El Objeto PreparedStatement6. El Objeto PreparedStatement

7. Procedimientos Almacenados7. Procedimientos Almacenados

8. Ejercicios Prácticos8. Ejercicios Prácticos

3. Preparación de la Base de Datos

Page 503: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 503

Una vez conocidas las principales características de un driver JDBC, nos concentraremos en trabajar con conexiones a la base de datos Postgresql.

Antes de iniciar con la manipulación de JDBC-Postgresql, es importante preparar la base de datos para que que reciba conexiones Java.

Debido a que Java solo utiliza conexiones TCP/IP, el servidor PostgreSQL debe ser configurado para que acepte conexiones TCP/IP.

Este paso se debe de realizar en el archivo postgresql.conf localizado en los directorios de configuración de la base de datos. (var/lib/pgsql/data/)

tcpip_socket = true

3.1 Preparación de la Base de Datos

Page 504: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 504

Una vez localizado este archivo, se debe modificar el siguiente parámetro para que acepte dichas conexiones:

También, se debe modificar el archivo pg_hba.conf para autenticar al cliente que realizará la petición de comunicación.

host all all 10.1.1.205 255.255.255.0 trust

Tipo BaseDatos usuario DireccionIP Mascara Metodo

3.1 … Preparación de la BD

Page 505: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 505

El driver sobre el cual se ha basado este manual se denomina pg73jdbc3.jar el cual es especifico por el distribuidor de la base de datos (Postgresql).

Si se cuenta con el servidor de Aplicaciones Sun Application Server, este archivo o driver debe ser colocado en el directorio /lib de cada instancia que requiere una comunicación con la base de datos. Por ejemplo la ruta puede ser la siguiente:

donde: domain_config_dir es la ruta de donde se encuentran los dominios e instancias correspondientes a él, y server1 es el nombre de la instancia que requiere la conexión. Por ejemplo:

<domain_config_dir>/domain1/server1/lib/

/var/opt/SUNWappserver/domains/domain1/efibs/lib/

3.2 Utilizando el Driver JDBC

Page 506: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 506

Antes de conectarse a la base de datos, se requiere cargar el driver correspondiente.

Existen dos métodos disponibles para realizar este proceso y depende del código que desee utilizar:

En el primer método el código carga implícitamente el driver utilizando el método Class.forName(). Para PostgreSQL se realiza de la siguiente manera:

Class.forName("org.postgresql.Driver");

3.3 Cargando el Driver

Page 507: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 507

Esto carga el driver, y mientras lo carga, el driver automáticamente se registrara con el JDBC.

El método forName() puede lanzar la excepción ClassNotFoundException en caso de que el driver no este disponible.

Este método es el mas comúnmente utilizado, pero tiene la desventaja que ata el código a una base de datos en particular, por este motivo surge el segundo método como solución alterna.

3.3 … Cargando el Driver

Page 508: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 508

El segundo método pasa como parámetro el driver a utilizar a la maquina virtual (JVM) utilizando el argumento –D de la misma. Por ejemplo:

En este ejemplo, la JVM procurará cargar el conductor como parte de su inicialización.

Por lo tanto, este método es el mejor a utilizar porque permite que su código sea utilizado con otros paquetes de la base de datos sin necesitar recompilar el código.

Java –D jdbc.drivers=org.postgresql.Driverexample.ImageViewer

3.3 … Cargando el Driver

Page 509: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 509

Por el momento no nos preocupemos como enviar la dirección (Url) de donde se realizará la conexión, ya que será tratado más delante de este manual

Cuando desde su código intenta abrir una conexión, y no se puede establecer la comunicación, se lanzara la excepción SQLException. Esto puede ser producto de que el driver no se encuentra en el CLASSPATH o que los parámetros de entrada son erróneos.

3.3 … Cargando el Driver

Page 510: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 510

Con JDBC, una base de datos es representada por medio de un URL (Uniform Resource Locator).

Con respecto a PostgreSQL, existen varias maneras de realizar esta conexión:

jdbc:postgresql:database

jdbc:postgresql://host/database

jdbc:postgresql://host:port/database

3.4 … Conectando a la Base de Datos

Page 511: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 511

donde:

host Es el nombre del Servidor, por defecto es localhost

Port Número de Puerto donde el servidor de la base de datos escucha. Por defecto en PostgreSQL es el puerto número 5432.

Database Nombre de la Base de Datos

3.4 … Conectando a la Base de Datos

Page 512: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 512

Ahora, para conectarse a la base de datos se requiere obtener una instancia del objeto conexión (Connection) desde el JBDC de la siguiente manera:

Por otra parte y una vez obtenido el objeto de tipo conexión, un método importante para cerrar la conexión con la base es el close();

Connection db = DriverManager.getConnection(url);

Connection db = DriverManager.getConnection(url, username, password);

Connection db = DriverManager.getConnection(url, Propertiesprops);

db.close();

3.4 … Conectando a la Base de Datos

Page 513: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 513

2. Interfaces JDBC2. Interfaces JDBC

3. Preparación de la Base de Datos3. Preparación de la Base de Datos

4. Procesamiento de Resultados4. Procesamiento de Resultados

5. Manipulación de Resultados5. Manipulación de Resultados

1. Introducción1. Introducción

6. El Objeto PreparedStatement6. El Objeto PreparedStatement

7. Procedimientos Almacenados7. Procedimientos Almacenados

8. Ejercicios Prácticos8. Ejercicios Prácticos

4 Procesamiento de Resultados

Page 514: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 514

Para publicar estatutos SQL en la base de datos, se requiere declarar una instancia Statement o PreparedStatement. Una vez obtenida esta instancia, se podrá publicar la sentencia SQL.

Los objetos de declaración JDBC son creados a partir de una instancia de una conexión

Se utiliza el método createStatement(), este proporciona un contexto para ejecutar declaraciones SQL.

4.1 Procesamiento de Resultados

Page 515: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 515

Por ejemplo:

El java.sql.Statement es una interfaz, no es un objeto. Por lo tanto lo que se esta realizando es una implementación del método createStatement();

Connection conn = DriverManager.getConnection("jdbc:postgresql://10.1.1.193:5432/dbDemo”,

“postgres",“ejemplo");

Statement stmt = conn.createStatement();

4.1 … Procesamiento de Resultados

Page 516: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 516

La interfaz Statement proporciona tres métodos para ejecutar estatutos SQL

executeQuery(String sql). Utilizado para sentencias SELECT y retorna un objeto ResultSet para el procesamiento de los registros.

executeUpdate(String sql). Utilizado para DML/DDL y retorna un entero (int) indicando el número de registros afectados, de lo contrario retorna 0 para DDL.

execute(String sql). Utilizado para sentencias SELECT y retorna un valor booleano (true) si se retornan filas de lo contrario retorna false

4.2 Ejecutar una declaración SQL

Page 517: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 517

A continuación se presenta un ejemplo que toma una sentencia SQL y retorna un objeto JDBC ResultSet

Statement stmt = null;

ResultSet rset = null;

stmt = conn.createStatement();

rset = stmt.executeQuery("SELECT nombre FROM persona");

4.3 Ejecutando una Sentencia

Page 518: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 518

El driver JDBC retorna los resultados de una sentencia SQL en un objeto de tipo ResultSet.

Un objeto ResultSet mantiene un cursor apuntando a los registros que contienen los datos

Este objeto proporciona métodos para recuperar los valores de las columnas.

col1 col2

4.4 El Objeto ResulSet

Page 519: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 519

El método executeQuery() retorna un ResultSet

Utilizando el método next() en un ciclo se puede interactuar a través de las filas.

Utilizando los métodos getXXX() se obtienen los valores de las columnas seleccionadas.

Estos valores se pueden obtener por medio del nombre de las columnas o su posición en las sentencia.

stmt = conn.createStatement();ResultSet rset = stmt.executeQuery("SELECT nombre FROM persona");

while (rset.next()) {

System.out.println (rset.getString(" nombre"));

}

4.5 Procesando resultados de la Sentencia

Page 520: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 520

Para cada uno de los recursos utilizados es explícitamente necesario realizar el cierre para cada uno de ellos.

Esto se realiza invocando al respectivo método close().

Connection conn = ...;

Statement stmt = ...;

ResultSet rset = stmt.executeQuery("SELECT nombre FROM persona");

...

// Cierre de Objetos

rset.close();

stmt.close();

conn.close();

...

4.6 Cerrando Objetos

Page 521: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 521

Crear un objeto Statement vació

Utilizar executeUpdate(), para ejecutar el statement

Por ejemplo:

El executeUpdate(); retorna un entero (int) con la cantidad de filas afectadas, para un estatuto INSERT, UPDATE o DELETE

Statement stmt = conn.createStatement();

int count = stmt.executeUpdate(SQLDMLstatement);

Statement stmt = conn.createStatement();

int rowcount = stmt.executeUpdate("DELETE FROM productos

WHERE producto_id = 2354");

4.7 Declaraciones DML

Page 522: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 522

Crear un objeto Statement vació

Utilizar executeUpdate(); para ejecutar el statement

Por ejemplo:

El executeUpdate(); retorna un entero (int) con un valor de 0 para los estatutos que no retornan valor como lo son los estatutos SQL DDL.

Statement stmt = conn.createStatement();

int count = stmt.executeUpdate(SQLDMLstatement);

Statement stmt = conn.createStatement();

int rowcount = stmt.executeUpdate("CREATE TABLE temp (col1 NUMBER(5,2),

col2 VARCHAR2(30)");

4.8 Declaraciones DDL

Page 523: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 523

Los estatutos SQL pueden lanzar excepciones de tipo java.sql.SQLException

try {rset = stmt.executeQuery("SELECT id, nombre FROM persona");

} catch (java.sql.SQLException e) {

...

} finally { // Limpiar

try {

if (rset != null) rset.close();

if (stmt!= null) stmt.close();

} catch (Exception e) {

}

}

...

4.9 Declaraciones DDL

Page 524: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 524

Por defecto las conexiones se encuentran en un modo de auto commit.

Utilizando conn.setAutoCommit(false), desconectamos el autocommit.

El control de las transacciones cuando no se encuentra el modo autocommit, se debe utilizar:

conn.commit();

conn.rollback();

4.10 Manejando Transacciones

Page 525: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 525

2. Interfaces JDBC2. Interfaces JDBC

3. Preparación de la Base de Datos3. Preparación de la Base de Datos

4. Procesamiento de Resultados4. Procesamiento de Resultados

5. Manipulación de Resultados5. Manipulación de Resultados

1. Introducción1. Introducción

6. El Objeto PreparedStatement6. El Objeto PreparedStatement

7. Procedimientos Almacenados7. Procedimientos Almacenados

8. Ejercicios Prácticos8. Ejercicios Prácticos

5 Manipulación de Resultados

Page 526: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 526

Driver

Llama JDBC

Comandos Database

SELECT col1, col2 FROM t1;

Navegación en el Resultado

DDBB

5.1 Navegando en un ResultSet

Page 527: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 527

Statement stmt = conn.createStatement

(ResultSet.TYPE_SCROLL_INSENSITIVE,

ResultSet.CONCUR_UPDATABLE);

ResultSet rset = stmt.executeQuery("SELECT id, nombre FROM persona");

5.2 Configurando la navegación de un ResultSet

Page 528: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 528

col1 col2

void beforeFirst()

boolean first()boolean next()boolean absolute(int row)

boolean relative (int row)boolean previous()boolean last()

void afterLast()

5.3 Posiciones en un ResultSet

Page 529: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 529

Navegando localmente en la fila por actualizar

Actualizando los valores utilizando los métodos updateXXX()

Actualizando la fila directamente en la base de datos

Eliminado la fila en la base de datos

Insertando la fila en la base de datos

rs.deleteRow();

rs.updateRow();

rs.updateString(1, “VALORNUEVO");

rs.updateFloat(“total", 14230.0f);

rs.insertRow();

5.4 Actualizando el ResultSet

Page 530: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 530

2. Interfaces JDBC2. Interfaces JDBC

3. Preparación de la Base de Datos3. Preparación de la Base de Datos

4. Procesamiento de Resultados4. Procesamiento de Resultados

5. Manipulación de Resultados5. Manipulación de Resultados

1. Introducción1. Introducción

6. El Objeto PreparedStatement6. El Objeto PreparedStatement

7. Procedimientos Almacenados7. Procedimientos Almacenados

8. Ejercicios Prácticos8. Ejercicios Prácticos

6 El Objeto PreparedStatement

Page 531: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 531

Un PreparedStatement previene el reparseo de estatutos SQL.

Se debe de utilizar en estatutos que se requieren ejecutar más de una vez.

Hereda de Statement.

Sujeta los SQL’s precompilados.

El Statement es compilado cada vez que se invoca, a lo contrario de PreparedStatement, el cual es más eficiente porque solo se compila la primera vez que es invocado.

6.1 El Objeto PreparedStatement

Page 532: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 532

Primero se debe de registrar el driver y crear la conexión a la base de datos.

Luego se crea una variable de tipo PreparedStatement, identificando las variables que se enviarán como parámetros con un signo de pregunta (?)

PreparedStatement pstmt =

conn.prepareStatement("UPDATE persona SET nombre = ? WHERE id = ?");

PreparedStatement pstmt =

conn.prepareStatement("SELECT nombre FROM persona WHERE id = ? ");

6.2 Crear un PreparedStatement

Page 533: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 533

Suministrarle valores a las variables

Ejecutar el estatuto

pstmt.setXXX(index, value);

pstmt.executeQuery();

pstmt.executeUpdate();

int idPersona = 06771;

PreparedStatement pstmt =

conn.prepareStatement("UPDATE persona

SET nombre = ? WHERE id = ? ");

pstmt.setString(1, “EFIBS");

pstmt.setInt(2, idPersona );

pstmt.executeUpdate();

6.3 Valores en un PreparedStatement

Page 534: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 534

2. Interfaces JDBC2. Interfaces JDBC

3. Preparación de la Base de Datos3. Preparación de la Base de Datos

4. Procesamiento de Resultados4. Procesamiento de Resultados

5. Manipulación de Resultados5. Manipulación de Resultados

1. Introducción1. Introducción

6. El Objeto PreparedStatement6. El Objeto PreparedStatement

7. Procedimientos Almacenados7. Procedimientos Almacenados

8. Ejercicios Prácticos8. Ejercicios Prácticos

7 Procedimientos Almacenados

Page 535: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 535

Para la manipulación de los procedimientos almacenados en una base de datos, existe un objeto en Java para tal efecto.

Este objeto es el CallableStatement

A este objeto se le pueden enviar parámetros cada vez que se ejecuta.

Los procedimientos almacenados son escritos y compilados directamente en la base de datos.

7.1 Procedimientos Almacenados

Page 536: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 536

Primero se debe de registrar el driver y crear la conexión a la base de datos.

Luego se crea una variable de tipo CallableStatemente, identificando las variables que se enviarán como parámetros con un signo de pregunta (?)

Registrar los parámetros de Salida

CallableStatement cstmt =

conn.prepareCall("{call PROC(param1,param2)}"); // Cuando No hay retorno

conn.prepareCall("{? = call PROC(param1,param2)}"); // Cuando Hay retorno

cstmt.registerOutParameter(index,param_Type);

7.2 Creación de un CallableStatement

Page 537: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 537

Enviar los parámetros de entrada

Ejecutar el estatuto

Obtener los parámetros de salida

Por Ejemplo

cstmt.setXXX(index, value);

cstmt.execute();

var = cstmt.getXXX(index);

CallableStatement cstmt = conn.prepareCall ( {"call ADDITEM (?,?,?)} ");cstmt.setInt (1, itemNbr);cstmt.registerOutParameter(2,Types.INTEGER);cstmt.registerOutParameter(3,Type.DOUBLE);

cstmt.execute();

var = cstmt.getInt(2);

7.2 … Creación de un CallableStatement

Page 538: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 538

2. Interfaces JDBC2. Interfaces JDBC

3. Preparación de la Base de Datos3. Preparación de la Base de Datos

4. Procesamiento de Resultados4. Procesamiento de Resultados

5. Manipulación de Resultados5. Manipulación de Resultados

1. Introducción1. Introducción

6. El Objeto PreparedStatement6. El Objeto PreparedStatement

7. Procedimientos Almacenados7. Procedimientos Almacenados

8. Ejercicios Prácticos8. Ejercicios Prácticos

8 Ejercicios Prácticos

Page 539: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 539

El instructor le explicará la siguiente práctica:

Cree un paquete llamado: org.efibs.sistemaDeOrdenes.BD

dentro del paquete, cree una clase que se llame Servicio

Atributos: Objeto de tipo Conexión

Métodos: conectarse y desconectarse

Cree una clase ServicioCliente que herede de Servicio y que contenga:

Atributos: Constantes de tipo String con cada uno de los SQL necesarios para dar soporte a un mantenimiento completo a la tabla Clientes(insert,delete,update y select).

8.1 Ejercicios Prácticos

Page 540: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 540

8.1 … Ejercicios PrácticosMétodos:

1) insertarCliente(recibe: objeto de tipo cliente – no retorna ningún tipo (void)) –Usar CallableStatement.

2) actualizarCliente(recibe: objeto de tipo cliente – no retorna ningún tipo (void)) Usar PreparedStatement.

3) eliminarCliente(recibe el id a eliminar y es de tipo void).Usar PreparedStatement.

4) buscarId(recibe el id a buscar y devuelve un objeto de tipo Cliente) – Usar CallableStatement.

5) buscarNombre(recibe el nombre a buscar y devuelve un objeto de tipo Cliente si hay dos con el mismo nombre devuelve el primer registro). Usar CallableStatement.

6) Listar(devuelve un objeto de tipo Collectioncon todos los registros de la tabla Cliente).Usar CallableStatement.

Page 541: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 541

Cree una clase que se llame Principal.java y lleve a cabo lo siguiente:

Ingrese cinco clientes (debe darle valores en el constructor).

Liste los clientes.

Elimine uno de los clientes dado un id

Liste los clientes.

Modifique un cliente dado su id y su nuevo: nombre, teléfono y dirección.

Liste los clientes.

Busque el Cliente al cual a caba de hacerle cambios, muestre su información.

Repita los pasos anteriores pero para producto

Recuerde: documente las líneas que ya no ocupe.

8.1 … Ejercicios Prácticos

Page 542: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 542

INTRODUCCIINTRODUCCIÓÓN A N A JAVA SERVLETSJAVA SERVLETS

Page 543: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 543

Objetivos

Explicar los conceptos de Servlets y JSP

Explicar los conceptos de sesiones y cookies. Analizar ventajas y desventajas

Desarrollar ejemplos que pongan en prácticalos conceptos anteriores.

Page 544: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 544

2. Arquitectura n Capas2. Arquitectura n Capas

3. Definición de Servlets Java3. Definición de Servlets Java

4. Arquitectura del Paquete Servlet4. Arquitectura del Paquete Servlet

5. Métodos Básicos del Servlet5. Métodos Básicos del Servlet

1. Introducción a Html1. Introducción a Html

6. Diagrama UML del Objeto Servlet6. Diagrama UML del Objeto Servlet

7. Ciclo de Vida de un Servlet7. Ciclo de Vida de un Servlet

8. Programación de Servlets8. Programación de Servlets

9. Manejo del Objeto Session9. Manejo del Objeto Session

10. Manejo del Objeto Cookie10. Manejo del Objeto Cookie

1 Introducción a Html

Page 545: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 545

HTML es un lenguaje sencillo pensado para presentar información en la WWW.

HTML (HyperText Markup Languaje), como su nombre indica es un lenguaje de marcas para la creación de hipertextos. Por hipertexto entenderemos texto con una presentación agradable, con inclusión de elementos multimedia (gráficos, video, audio) y con la presencia de hiperenlaces que permiten relacionar otras fuentes de información en documentos hipertextos.

1.1 Introducción a Html

Page 546: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 546

Como se ha dicho es un lenguaje de marcas ya que en él, las instrucciones son trozos de texto resaltados convenientemente - llamadas etiquetas o labels- , que definirán la estructura lógica del documento.

Por tanto un documento HTML constará de texto que será el contenido, la información del documento y de instrucciones HTML que resaltarán este contenido y le darán un formato fácil y agradable de leer y con la posibilidad de relacionar documentos y fuentes de información mediante hiperenlaces o hipervínculos.

En este capitulo se definen las etiquetas básicas y las estructuras de datos que forman el lenguaje.

1.1 … Introducción a Html

Page 547: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 547

Un documento HTML está definido por una etiqueta de apertura <HTML> y una etiqueta de cierre </HTML>. Dentro de este se dividen dos partes fundamentales la cabecera, delimitada por la etiqueta <HEAD> y el cuerpo, delimitado por la etiqueta <BODY>.

Por tanto la estructura de un documento HTML será:

<HTML>

<HEAD>

Definiciones de la cabecera

</HEAD>

<BODY>

Instrucciones HTML

</BODY>

</HTML>

1.2 Estructuras básicas de un Html

Page 548: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 548

Para insertar comentarios dentro de un documento HTML utilizaremos la etiqueta especial <!--, definiéndose un comentario de la forma:

<!-- Esto es un comentario -->

1.3 Comentarios en Html

Page 549: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 549

La cabecera de un documento HTML está delimitado por las etiquetas <HEAD> y </HEAD>, en esta se incluirán las definiciones generales que afectarán a todo el documento.

Todas sus etiquetas son opcionales y se utilizarán solo en casos muy determinados, solo la etiqueta TITLE tiene un uso general y aunque es opcional se recomienda incluirla en todos los documentos que creemos.

A continuación se citan los distintos componentes que pueden formar la cabecera de un documento HTML.

1.4 Cabecera en Html

Page 550: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 550

<TITLE>: Título del documento

El título no forma parte del documento en sí, y no se incluye ni se muestra dentro del documento, normalmente se muestra en la parte superior de la ventana del programa navegador.

Se utiliza principalmente para etiquetar e identificar la página en los bookmarks (marcadores o también conocidos como favoritos ) y las history list(lista de documentos accedidos) y también se utiliza por algunos servidores de búsqueda como resultado de una búsqueda para poder intuir el contenido del documento. El titulo deberá guardar relación con el contenido del documento y definirlo de forma general.

La etiqueta <TITLE>, debe ser usada dentro de las etiquetas que definen la cabecera de la siguiente forma: <HEAD>

<TITLE>Titulo del documento HTML</TITLE>

</HEAD>

1.4 … Cabecera en Html

Page 551: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 551

<META>: Indicadores del documento

Un meta tag es un elemento del encabezado que registra información a cerca de la página actual, tal como : el autor, copyright, o palabras claves (keywords).

Estos tags pueden también ser muy útiles para dar información al servidor, tal como: fecha de expiración, intervalos de refresco, y utilidades para mejorar la búsqueda hacia esta página.

Los meta se componen de la siguiente manera:

Attribute ( Atributo ) : especifica si la etiqueta de la meta contiene la información descriptiva sobre la página (el nombre) o HTTP título información (el http-equiv)

Value ( Valor ) : especifica el tipo de información que usted está proporcionando en esta etiqueta. Algunos valores, como la descripción, las palabras claves, y el refresco.

Content (contenido) : información complementaria o de utilidad, que puede servir como parámetro al meta.

1.4 … Cabecera en Html

Page 552: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 552

Se indica el número de segundos que deben pasar antes del refresco ( 5) hacia la URL que sustituye (http://www.efibs.com ) a la actual.Si se indica cero segundos la transición entre uno y otro documento seráinmediata. Si no se indica URL el documento actual se refrescará. Este sistema es altamente utilizado en la implementación de la webcam. Pues una misma página se debe estar refrescando, para mostrar la nueva fotografía.

<meta http-equiv="refresh" content="5;URL=http://www.efibs.com">

Este meta tag, aporta lo mismo que el mencionado anteriormente, pero mas aun, este es usado en oportunidades, para describir la página, en vez de utilizar un trozo del texto de ella.

<meta name="description" content="Capacitación de tecnologías de internet, lenguajes de programación para el web, estudio de servicios en la internet">

Muchos robot motores-de-búsqueda (programas que automáticamente navegan el web recopilando información para indexar en el motor de búsqueda) leen el contenido del meta tag KeyWord y usan la información para indexar las páginas en su base de datos. Debido a que motores limitan el numero de palabras claves o ignoran todas las palabras claves, si exceden cierto limite, es una buena idea usar solo unas pocas palabras pero bien elegidas.

<meta name="keywords" content="lenguajes, web, correo, protocolos, manual, diccionario">

Tipo del contenido de la página, en este caso, contenido en formato HTML, utilizando el set de caracteres iso-8859-1

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

1.4 … Cabecera en Html

Page 553: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 553

Permite la representación de datos por filas y columnas, en forma tabular.

La definición es muy flexible indicando solo los elementos que forman cada fila y columna, calculándose de forma automática el tamaño que deben tener las celdas. En una tabla podemos introducir todo tipo de elementos del lenguaje HTML como imágenes, enlaces, texto, listas, cabeceras, formularios, etc.

<TABLE> Definición de la TablaPara definir una tabla usaremos la etiqueta <TABLE>, que tiene el siguiente formato:

<TABLE BORDER="tamaño del borde" >... Definición de la tabla ...

</TABLE>

En la etiqueta inicial TABLE definiremos los atributos que afectarán a toda la tabla, todos los atributos son opcionales. Todo lo que se incluya dentro de la instrucción de tabla se considerará como tal, pudiendo definir tablas anidadas (tablas dentro de tablas).

1.5 Creación de Tablas

Page 554: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 554

<TABLE BORDER=1><TR>

<TD ALIGN=CENTER>Cabecera de Titulo 1 </TD><TD ALIGN=CENTER> Cabecera de Titulo 2</TD><TD ALIGN=CENTER> Cabecera de Titulo 3</TD> <TD ALIGN=CENTER> Cabecera de Titulo 4</TD>

</TR> <TR>

<TD ALIGN=LEFT>Celda 1</TD> <TD ALIGN=CENTER> Celda 2</TD> <TD ALIGN=RIGHT> Celda 3</TD>

<TD ALIGN=CENTER> Celda 4</TD></TR> <TR>

<TD ALIGN=LEFT VALIGN=TOP>Celda 5</TD> <TD ALIGN=CENTER><IMG SRC="/imagenes/bibliog.gif"></TD><TD ALIGN=RIGHT VALIGN=BOTTOM> Celda 7</TD><TD ALIGN=CENTER VALIGN=MIDDLE> Celda 8</TD>

</TR> <TR>

<TD VALIGN=BOTTOM>Celda 9 </TD><TD VALIGN=MIDDLE> Celda 10 <IMG SRC="/imagenes/mundog.gif"></TD> <TD VALIGN=TOP> Celda 12</TD>

</TR> </TABLE>

1.6 Ejemplo de Tablas

Page 555: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 555

Los formularios son plantillas que permiten la creación de documentos HTML con peticiones de datos.

La principal utilidad de los formularios es la posibilidad de crear cuestionarios, encuestas, páginas de comentarios o cualquier documento en la que se desee una interacción por parte del usuario.

Se podrán definir distintos tipos de recuadros de dialogo, botones de selección, menús de múltiples opciones, ... Para permitir obtener los datos de una manera más intuitiva.

<FORM> Definición de formularios

1.7 Formularios

Page 556: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 556

Existe una instrucción HTML para la creación de formularios esta es FORM, que tiene la siguiente estructura:

< FORM ACTION="fichero que trata el formulario" METHOD= POST | GET > ...Elementos que forman el formulario...

< /FORM>

Dentro de la etiqueta del formulario se definirán los distintos elementos de petición de datos. Estas instrucciones que se explicarán a continuación definirán los tipos de botones, cajas de dialogo y ventanas para la introducción de datos. Y definirán las variables que almacenarán los datos introducidos por el usuario. Estas etiquetas se incluirán entre la de definición del formulario y la etiqueta de final de formulario.

1.7 … Formularios

Page 557: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 557

ACTION:

Indica el programa que se encargará de tratar los datos del formulario. Este programa debe encontrarse en el servidor y estar escrito en algún lenguaje de programación. A este programa se pasará como parámetros los datos introducidos en el formulario y retornará un código HTML que se mostrará tras procesar el formulario.

METHOD:

Indica el protocolo usado para el envío de los datos. Con POST envía los datos en la entrada estándar del programa que trata el formulario y con GET los datos se pasan por parámetro, en la línea de comandos, al programa. El método de uso más normal será POST.

Una vez definidas las características globales del formulario incluiremos los distintos botones y cajas de dialogo que lo constituyen.

1.8 … Atributos de las Etiquetas

Page 558: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 558

… METHOD:

Dentro de la instrucción del formulario podrán incluirse cualquier texto o etiqueta HTML, siendo recomendado a fin de poder etiquetar las opciones de entrada y especificar cualquier dato importante relacionado con el formulario.

Igualmente un formulario puede ser incluido en algunas instrucciones HTML como las listas, tablas, etc ...

1.8 Atributos de las Etiquetas

Page 559: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 559

<INPUT> Entrada básica de datos

La etiqueta INPUT se utiliza para definir gran variedad de tipos de campos de entrada de datos. Por lo general serán entradas de texto corto (a lo sumo una frase) o opciones. El formato básico es el siguiente:

Sintaxis:

< INPUT TYPE = ( TEXT | PASSWORD | CHECKBOX | RADIO | HIDDEN | SUBMIT | IMAGE | RESET ) NAME = "Variable que toma el valor" VALUE = "Valor de Inicialización" >

Ejemplo:

< INPUT TYPE=TEXT NAME="variable" VALUE="valor inicial" SIZE="tamaño" MAXLENGTH="longitud máxima" >

1.8 … Atributos de las Etiquetas

Page 560: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 560

<TEXTAREA> Texto en múltiples líneas

Permite la introducción de un texto que puede abarcar varias líneas, introduciendo este en forma de párrafo. El formato general será:

Ejemplo:

<TEXTAREA NAME="variable" ROWS=Filas COLS=Columnas> Texto de Inicializaci&oacute;n que puede incluir varias l&iacute;neas.

</TEXTAREA>

1.8 … Atributos de las Etiquetas

Page 561: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 561

<SELECT> Elección entre múltiples opciones

Se usa para menús simple o múltiples. Define menús de tipo pop-up (menúde barras) y ofrece una alternativa más compacta al uso de botones RADIO o CHECKBOX. Su formato es el siguiente:

<SELECT NAME="variable"> < OPTION SELECTED VALUE=valor1> Opción Primera< OPTION VALUE=valor2> Opción Segunda

. . .< OPTION VALUE=valorn> Opción Enésima</SELECT>

Si se desea que sea un menú múltiple, se deberá incluir el atributo MULTIPLE en la etiqueta de SELECT, en este caso se mostrarán todas las opciones en forma de tabla, en el otro caso se mostrará la opción activa y un botón para poder modificar esta opción. En ambos casos solo podráseleccionarse una de las opciones. Cuando se envía el resultado del formulario la variables NAME tomará el valor de la opción que este activa.

1.8 … Atributos de las Etiquetas

Page 562: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 562

<SELECT> Ejemplos

<SELECT NAME="variable"> <OPTION VALUE=1> Opción Primera<OPTION SELECTED VALUE=2> Opción Segunda<OPTION VALUE=3> Opción Tercera</SELECT>

<SELECT NAME="variable" MULTIPLE> <OPTION VALUE=1> Opción Primera<OPTION SELECTED VALUE=2> Opción Segunda<OPTION VALUE=3> Opción Tercera</SELECT>

1.8 … Atributos de las Etiquetas

Page 563: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 563

1.9 Ejercicio Práctico

Page 564: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 564

Crear una página web (html) en la cual se debe de poner en práctica la utilización de formularios y tablas en formato html.

El nombre que se le dará al formulario es de cliente, y su acción por el momento será un signo de numeral (#) y su método será de tipo GET.

Verifique los resultados de los puntos anteriores, es importante observar como viajan los datos en base al método utilizado ya que el siguiente paso es modificar el método del formulario de tipo POST y verificar nuevamente.

Como información adicional del curso se presenta a continuación un scriptpara realizar validaciones a nivel de formularios, para que de esta manera la información que viaje al realizar la acción sea valida antes de ser procesada.

1.9 … Ejercicio Práctico

Page 565: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 565

<head>

<script languaje=javascript>function validar(cliente){

if (cliente.id.value == ""){

alert("Por favor ingrese la identificación del usuario"); cliente.id.focus();

return; }

cliente.submit();</script>

</head>

1.9 … Ejercicio Práctico

Page 566: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 566

Una vez validados los campos requeridos, se debe de invocar la función validación, en el momento de que el usuario de click sobre el botón de procesar orden.

La manera en que se invocará esta función será utilizando el evento onclicken el botón de submit de la siguiente manera:

<INPUT NAME =accion TYPE="BUTTON" VALUE=“Insertar” onClick="returnvalidar(this.form)">

1.9 … Ejercicio Práctico

Page 567: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 567

2. Arquitectura n Capas2. Arquitectura n Capas

3. Definición de Servlets Java3. Definición de Servlets Java

4. Arquitectura del Paquete Servlet4. Arquitectura del Paquete Servlet

5. Métodos Básicos del Servlet5. Métodos Básicos del Servlet

1. Introducción a Html1. Introducción a Html

6. Diagrama UML del Objeto Servlet6. Diagrama UML del Objeto Servlet

7. Ciclo de Vida de un Servlet7. Ciclo de Vida de un Servlet

8. Programación de Servlets8. Programación de Servlets

9. Manejo del Objeto Session9. Manejo del Objeto Session

10. Manejo del Objeto Cookie10. Manejo del Objeto Cookie

2 Arquitectura n Capas

Page 568: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 568

La arquitectura n Capas es una metodología para el diseño de sistemas distribuidos.

Consiste en dividir la funcionalidad del sistema en capas lógicas para interactuar entre ellas a alto nivel. Dichas capas lógicas pueden ser encapsuladas como componentes.

Esta funcionalidad provoca un gran dinamismo en la gestión de la información requerida (Presentación, Negocio, Datos).

2.1 Arquitectura n Capas

Page 569: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 569

Permite desarrollar aplicaciones a alta velocidad y bajo costo.

Son aplicaciones escalables, permitiendo n cantidad de usuarios, por lo que la inversión en software se puede mantener mientras el sistema crece.

Las n capas pueden estar contenidas en una misma máquina o tener una diferente para cada capa. También pueden ser configuradas en cluster de aplicaciones.

2.1 Arquitectura n Capas

Page 570: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 570

Al separar la capa de presentación de las demás capas, un cambio de diseño no supone el cambio de toda la aplicación.

Se pueden reutilizar las aplicaciones ya existentes para diferentes dispositivos sólo cambiando la capa de presentación, es decir, existe una mayor portabilidad entre plataformas.

Lo mismo podemos decir de la capa de datos, podemos cambiar el origen de los datos sin necesidad de modificar componentes del resto de capas.

Inconvenientes de la Arquitectura n Capas:

Se requiere un mayor esfuerzo de diseño para asegurar que la arquitectura planteada es la idónea y, como consecuencia, se obtiene una mayor complejidad de la aplicación en cuanto a número de componentes y comunicación entre ellos.

2.2 Ventajas de la Arquitecturapor Capas

Page 571: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 571

2.3 Representación Gráfica

Page 572: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 572

2. Arquitectura n Capas2. Arquitectura n Capas

3. Definición de Servlets Java3. Definición de Servlets Java

4. Arquitectura del Paquete Servlet4. Arquitectura del Paquete Servlet

5. Métodos Básicos del Servlet5. Métodos Básicos del Servlet

1. Introducción a Html1. Introducción a Html

6. Diagrama UML del Objeto Servlet6. Diagrama UML del Objeto Servlet

7. Ciclo de Vida de un Servlet7. Ciclo de Vida de un Servlet

8. Programación de Servlets8. Programación de Servlets

9. Manejo del Objeto Session9. Manejo del Objeto Session

10. Manejo del Objeto Cookie10. Manejo del Objeto Cookie

3 Definición de Servlets Java

Page 573: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 573

Los Servlets son la respuesta de la tecnología Java a la programación CGI (Common Gateway Interfase).

Son programas que se ejecutan en un servidor Web y construyen páginas Web dinámicamente.

Los Servlets son para los servidores lo que los applets son para los navegadores. Sin embargo, al contrario que los applets, los servlets no tienen interfaz gráfica de usuario.

3.1 Definición de Servlets Java

Page 574: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 574

Se deberán utilizar páginas dinámicas cuando:

El contenido de la página es a petición del cliente, es decir, la página Web está basada en datos enviados por el usuario. Las páginas de resultados de los motores de búsqueda se generan de esta forma, y los programas que procesan pedidos desde sites de comercio electrónico también.

Los datos cambian frecuentemente. Un informe sobre el tiempo o las páginas de cabeceras de noticias se podrían construir dinámicamente, por ejemplo devolviendo una página previamente construida y luego actualizándola, con lo que sólo cambiaría el contenido, no el diseño.

La página Web usa información de bases de datos corporativas u otras fuentes. Por ejemplo una página web construida para una tienda on-line a partir de los datos de los precios actuales y el número de artículos en stock.

3.1 … Definición de ServletsJava

Page 575: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 575

Permitir la colaboración entre usuarios. Un servlet puede manejar múltiples peticiones concurrentes, y puede sincronizarlas. Esto permite a los servlets soportar sistemas como las conferencias on-line

Reenviar peticiones. Los Servlets pueden reenviar peticiones a otros servidores y servlets. Con esto los servlets pueden ser utilizados para cargar balances desde varios servidores que reflejan el mismo contenido, y para particionar un único servicio lógico en varios servidores, de acuerdo con los tipos de tareas o la organización compartida.

Acceso BDLógica de Negocio

Servidor HTTP

www.capris.co.cr

Firewall

Internet

htmhtmhtm

jsp jsp jsp

JSP COMPILER/SERVLETG ENGINE

servletsservlets

Firewall

Servidor de Web Servidor de DDBB

servletsservlets

Presentación Browser

3.2 Otros usos de los Servlets

Page 576: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 576

Los Servlets son módulos que extienden los servidores web y que están orientados a resolver petición-respuesta (Request-Response).

Los Servlets pueden ser incluidos en servidores diferentes porque el API Servlet, el que se utiliza para escribir Servlets, no asume nada sobre el entorno o protocolo del servidor.

Actualmente los Servlets se están utilizando ampliamente dentro de servidores HTTP.

3.3 Orientación de los Servlets

Page 577: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 577

El objetivo de esta práctica, es que el estudiante aprenda a crear un proyecto WEB haciendo uso del IDE.

Los siguientes son los pasos para poder lograr el objetivo anterior:

Ingrese al IDE y seleccione New Proyect específicamente proyecto WEB.

Póngale un nombre representativo a el content type (carpeta donde se publicará la página).

3.4 Ejercicio Práctico

Page 578: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 578

El objetivo de esta práctica, es que el estudiante aprenda a crear un proyecto

WEB haciendo uso del IDE.

Los siguientes son los pasos para poder lograr el objetivo anterior:

No seleccione ninguna de las siguientes opciones (ver 5.5).

Dar click en finalización.

3.4 … Ejercicio Práctico

Page 579: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 579

El objetivo de esta práctica, es que el estudiante aprenda a crear htmldesde el IDE.

Siga las instrucciones del instructor para poder tomar la página de mantenimiento de clientes hecha en la práctica anterior e incorporarla en el IDE

Siga la siguiente ruta y

agregue el código html

hecho en la práctica

anterior.

3.4 … Ejercicio Práctico

Page 580: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 580

2. Arquitectura n Capas2. Arquitectura n Capas

3. Definición de Servlets Java3. Definición de Servlets Java

4. Arquitectura del Paquete Servlet4. Arquitectura del Paquete Servlet

5. Métodos Básicos del Servlet5. Métodos Básicos del Servlet

1. Introducción a Html1. Introducción a Html

6. Diagrama UML del Objeto Servlet6. Diagrama UML del Objeto Servlet

7. Ciclo de Vida de un Servlet7. Ciclo de Vida de un Servlet

8. Programación de Servlets8. Programación de Servlets

9. Manejo del Objeto Session9. Manejo del Objeto Session

10. Manejo del Objeto Cookie10. Manejo del Objeto Cookie

4 Arquitectura del PaqueteServlet

Page 581: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 581

El paquete javax.servlet proporciona clases e interfaces para escribir servlets. La arquitectura de este paquete se describe a continuación.

La interfaz Servlet.

La abstracción central en el API Servlet es la interfaz Servlet. Todos los servlets implementan esta interfaz, bien directamente o, más comúnmente, extendiendo una clase que lo implemente como HttpServlet.

La interfaz Servlet declara pero no implementa métodos que manejan el Servlet y su comunicación con los clientes. Al programar un Servlet se han de codificar algunos de esos métodos.

4.1 Arquitectura del PaqueteServlet

Page 582: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 582

Interacción con el cliente

Cuando un servlet acepta una llamada de un cliente, recibe dos objetos,

Un ServletRequest, que encapsula la comunicación desde el cliente al servidor.

Un ServletResponse, que encapsula la comunicación de vuelta desde el servlet hacia el cliente.

ServletRequest y ServletResponse son interfaces definidas en el packagejavax.servlet.

4.1 … Arquitectura del PaqueteServlet

Page 583: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 583

La Interfaz ServletRequest

La interfaz ServletRequest permite al servlet acceder a :

Información referente a los nombres de los parámetros pasados por el cliente, el protocolo (esquema) que está siendo utilizado por el cliente, y los nombres del host remote que ha realizado la petición y la del server que la ha recibido.

El stream de entrada, ServletInputStream. Los Servlets utilizan este stream para obtener los datos de los clientes que utilizan protocolos como los métodos POST y PUT de HTTP.

Las interfaces, que extienden de la interfaz ServletRequest permiten al servlet recibir más datos específicos del protocolo. Por ejemplo, la interfaz HttpServletRequest contiene métodos para acceder a información de

cabecera específica HTTP.

4.1 … Arquitectura del PaqueteServlet

Page 584: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 584

La interfaz ServletResponse

La interfaz ServletResponse le da al servlet los métodos para responder al cliente.

Permite al servlet seleccionar la longitud del contenido y el tipo MIME de la respuesta.

Proporciona un stream de salida, ServletOutputStream, y un Writer a través del cual el servlet puede responder datos.

Las interfaces que extienden de ServletResponse le dan a los servlets más capacidades específicas del protocolo. Por ejemplo, la interfaz

HttpServletResponse contiene métodos que permiten al servlet manipular información de cabecera específica HTTP.

4.1 … Arquitectura del PaqueteServlet

Page 585: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 585

Capacidades adicionales de los servlets HTTP

Las clases e interfaces descritas anteriormente construyen un servlet básico. Para el caso de los servlets http, se tienen algunos objetos adicionales que proporcionan:

Capacidades de seguimiento de sesión.

Posibilidades de mantenimiento del estado entre el servlet y el cliente persistente a través de múltiples conexiones durante un periodo de tiempo.

Capacidades de gestión de cookies. El API cookie se utiliza para guardar y recuperar datos dentro del cliente.

4.1 … Arquitectura del PaqueteServlet

Page 586: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 586

2. Arquitectura n Capas2. Arquitectura n Capas

3. Definición de Servlets Java3. Definición de Servlets Java

4. Arquitectura del Paquete Servlet4. Arquitectura del Paquete Servlet

5. Métodos Básicos del Servlet5. Métodos Básicos del Servlet

1. Introducción a Html1. Introducción a Html

6. Diagrama UML del Objeto Servlet6. Diagrama UML del Objeto Servlet

7. Ciclo de Vida de un Servlet7. Ciclo de Vida de un Servlet

8. Programación de Servlets8. Programación de Servlets

9. Manejo del Objeto Session9. Manejo del Objeto Session

10. Manejo del Objeto Cookie10. Manejo del Objeto Cookie

5 Métodos Básicos del Servlet

Page 587: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 587

Init(): El código de este método se ejecuta solamente cuando se carga el servlet, es decir, se ejecuta una sola vez independientemente del número de veces que llamemos al servlet.

Service(): El código se ejecuta en respuesta a las peticiones del cliente (GET, POST, PUT, DELETE,...)

Destroy(): Cuando el servlet es "desmontado" se invoca este método. Es utilizado para hacer limpieza.

DoGet() y doPost(): Son métodos idénticos excepto que uno atiende las peticiones GET y el otro las POST. Son refinamientos del método service() en los HttpServlets.

5.1 Métodos Básicos del Servlet

Page 588: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 588

package org.efibs.accion;

import java.io.*;

import java.net.*

import javax.servlet.*;

import javax.servlet.http.*;

public class MiServlet extends HttpServlet {

public void init(ServletConfig config) throws ServletException{

super.init(config);

}

public void destroy() {

// Código antes de destruir el Servlet

}

protected voidprocessRequest(HttpServletRequestrequest, HttpServletResponse response)

throws ServletException, IOException {

response.setContentType("text/html");

PrintWriter out = response.getWriter();

/* TODO output your page here

out.println("<html>");

out.println("<head>");

out.println("<title>EFIBS S.A.</title>");

out.println("</head>");

out.println("<body>");

out.println("</body>");

out.println("</html>");

*/

out.close();

}

protected voiddoGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException{

processRequest(request, response);

}

protected voiddoPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException{

processRequest(request, response);

}

public String getServletInfo() {

return "Short description";

}

}

5.2 Estructura del Servlet

Page 589: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 589

Sobre la carpeta WEB-INF classes cree un nuevo servlet llamado Bienvenida.java, utilizando el IDE.

De click derecho sobre la capeta classes y seleccione la opción New Servlet.

Modifique el método processRequest del servlet, el cual forma una página html con un mensaje de bienvenida.

Compile el servlet.

Ejecutar el Servlet: Para realizar la ejecución del servlet cree una nueva pagina html en la cual en el action del formulario invoque al servlet de Bienvenida de la siguiente manera:

<FORM NAME=“curso” ACTION=“Bienvenida”>

.....

</FORM>

5.3 Ejercicio Práctico

Page 590: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 590

A continuación se presenta la estructura e información del archivo web.xml, el cual el instructor le explicará detalladamente para su correcto funcionamiento.

<?xml version="1.0" encoding="UTF-8"?>

<web-app version="2.4" 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 http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

<servlet>

<servlet-name>Bienvenida</servlet-name>

<servlet-class>org.efibs.accion.Bienvenida</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>Bienvenida</servlet-name>

<url-pattern>/Bienvenida</url-pattern>

</servlet-mapping>

5.3 … Ejercicio Práctico

Page 591: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 591

<session-config>

<session-timeout>30</session-timeout>

</session-config>

<welcome-file-list>

<welcome-file>index.jsp</welcome-file>

<welcome-file>index.html</welcome-file>

<welcome-file>index.htm</welcome-file>

</welcome-file-list>

</web-app>

5.3 … Ejercicio Práctico

Page 592: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 592

2. Arquitectura n Capas2. Arquitectura n Capas

3. Definición de Servlets Java3. Definición de Servlets Java

4. Arquitectura del Paquete Servlet4. Arquitectura del Paquete Servlet

5. Métodos Básicos del Servlet5. Métodos Básicos del Servlet

1. Introducción a Html1. Introducción a Html

6. Diagrama UML del Objeto Servlet6. Diagrama UML del Objeto Servlet

7. Ciclo de Vida de un Servlet7. Ciclo de Vida de un Servlet

8. Programación de Servlets8. Programación de Servlets

9. Manejo del Objeto Session9. Manejo del Objeto Session

10. Manejo del Objeto Cookie10. Manejo del Objeto Cookie

6. Diagrama UML del ObjetoServlet

Page 593: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 593

En esta imagen vemos un diagrama UML con los métodos más utilizados y la jerarquía básica de las clases que implementan la interfaz Servlet.

6.1 Diagrama UML del ObjetoServlet

Page 594: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 594

2. Arquitectura n Capas2. Arquitectura n Capas

3. Definición de Servlets Java3. Definición de Servlets Java

4. Arquitectura del Paquete Servlet4. Arquitectura del Paquete Servlet

5. Métodos Básicos del Servlet5. Métodos Básicos del Servlet

1. Introducción a Html1. Introducción a Html

6. Diagrama UML del Objeto Servlet6. Diagrama UML del Objeto Servlet

7. Ciclo de Vida de un Servlet7. Ciclo de Vida de un Servlet

8. Programación de Servlets8. Programación de Servlets

9. Manejo del Objeto Session9. Manejo del Objeto Session

10. Manejo del Objeto Cookie10. Manejo del Objeto Cookie

7. Ciclo de Vida de un Servlet

Page 595: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 595

Cada servlet tiene el mismo ciclo de vida.

Un servidor carga e inicializa el servlet.

El servlet maneja una o más peticiones de cliente.

El servidor elimina el servlet. (Algunos servidores sólo cumplen este paso cuando se desconectan).

•SE CARGA

•SE INICIALIZA

•SE EJECUTA

•SE DESTRUYE

7.1 Ciclo de Vida de un Servlet

Page 596: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 596

2. Arquitectura n Capas2. Arquitectura n Capas

3. Definición de Servlets Java3. Definición de Servlets Java

4. Arquitectura del Paquete Servlet4. Arquitectura del Paquete Servlet

5. Métodos Básicos del Servlet5. Métodos Básicos del Servlet

1. Introducción a Html1. Introducción a Html

6. Diagrama UML del Objeto Servlet6. Diagrama UML del Objeto Servlet

7. Ciclo de Vida de un Servlet7. Ciclo de Vida de un Servlet

8. Programación de Servlets8. Programación de Servlets

9. Manejo del Objeto Session9. Manejo del Objeto Session

10. Manejo del Objeto Cookie10. Manejo del Objeto Cookie

8. Programación de Servlets

Page 597: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 597

Servlets: Peticiones y Respuestas

Los métodos de la clase HttpServlet que manejan peticiones de cliente toman dos argumentos:

Un objeto HttpServletRequest, que encapsula los datos desde el cliente.

Un objeto HttpServletResponse, que encapsula la respuesta hacia el cliente.

8.1 Programación de Servlets

Page 598: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 598

Un objeto HttpServletRequest proporciona acceso a los datos de cabecera HTTP.

El objeto HttpServletRequest también permite obtener los argumentos que el cliente envía como parte de la petición.

Para acceder a los datos del cliente.

El método getParameter devuelve el valor de un parámetro nombrado.

El método getParameterValues devuelve un arreglo de valores del parámetro nombrado.

8.2 Objetos HttpServletRequest

Page 599: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 599

Para peticiones GET de HTTP, el método getQueryString devuelve en un String una línea de datos desde el cliente.

Para peticiones POST, PUT, y DELETE de HTTP:

Si esperamos los datos en formato texto, el método getReader devuelve un BufferedReader.

Si esperamos datos binarios, el método getInputStreamdevuelve un ServletInputStream.

8.2 … ObjetosHttpServletRequest

Page 600: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 600

Un objeto HttpServletResponse proporciona dos formas de devolver datos al usuario.

El método getWriter devuelve un WriterEl método getOutputStream devuelve un ServletOutputStream

Se utiliza el método getWriter para devolver datos en formato texto al usuario y el método getOutputStream para devolver datos binarios. Si se cierra el Writer o el ServletOutputStream después de haber enviado la respuesta, se permite al servidor saber cuando la respuesta se ha completado.

Cabecera de Datos HTTP

Se debe seleccionar la cabecera de datos HTTP antes de acceder a Writer o a OutputStream. La clase HttpServletResponseproporciona métodos para acceder a los datos de la cabecera. Por ejemplo, el método setContentType selecciona el tipo del contenido. (Normalmente esta es la única cabecera que se selecciona manualmente).

8.3 ObjetosHttpServletResponse

Page 601: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 601

public class SimpleServlet extends HttpServlet {

public void init(ServletConfig config) throws ServletException {

super.init(config);

}

public void destroy() {

}

8.4 Estructura de un Servlet

Page 602: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 602

/*** Maneja el método GET de HTTP para construir una

sencilla página Web.*/

public void doGet (HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {

PrintWriter out;String titulo = “Salida de un Servlet";

// primero selecciona el tipo de contenidos y otros campos de cabecera de la respuesta

response.setContentType("text/html");

// Luego escribe los datos de la respuestaout = response.getWriter();out.println("<HTML><HEAD><TITLE>");out.println(“Simple Servlet”);out.println("</TITLE></HEAD><BODY>");out.println("<H1>" + titulo + "</H1>");out.println("<P>Esta es la salida del Servlet");out.println("</BODY></HTML>");out.close();

} // Fin Método doGet(...) }

8.5 Estructura de un Servlet

Page 603: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 603

Después de la inicialización, el servlet puede manejar peticiones de clientes. Un Servlet HTTP maneja peticiones de cliente a través de su método service.

Los métodos en los que delega el método service las peticiones HTTP, incluyen

doGet, para manejar GET, GET condicional, y peticiones de HEAD

doPost, para manejar peticiones POST

doPut, para manejar peticiones PUT

doDelete, para manejar peticiones DELETE

Si en los servlets que se codifican no se sobrescriben estos métodos, por defecto devuelven el error BAD_REQUEST (400).

8.6 Interactuar con Clientes

Page 604: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 604

Los servlets HTTP normalmente sirven a múltiples clientes concurrentemente. Si los métodos de nuestro servlet trabaja con clientes que acceden a recursos compartidos, se puede manejar la concurrencia creando un servlet que maneje sólo una petición de cliente a la vez.

Para hacer que el servlet maneje sólo un cliente a la vez, se tiene que implementar de la interfaz SingleThreadModel además de extender de la clase HttpServlet.

Implementar de SingleThreadModel no implica escribir ningún método extra. Sólo se declara que el servlet implementa la interfaz, y el servidor se asegura de que nuestro servlet sólo ejecute un método service cada vez.

public class ReceiptServlet extends HttpServlet implements SingleThreadModel {

public void doPost(HttpServletRequest request, HttpServletResponseresponse)

throws ServletException, IOException {

...

}

...

}

8.7 Problemas con los Threads

Page 605: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 605

Para destruir un Servlet, se debe sobrescribir el método destroy como se presenta a continuación:

public class BookDBServlet extends GenericServlet {

private BookstoreDB books; // En el métod init(..)

public void destroy() { // Eliminar la instancia y recursos compartidos

books = null; }

}

8.8 Cómo destruir un Servlet?

Page 606: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 606

Un servlet puede ser invocado de la siguiente manera:

Desde un Navegador

http://nombre-de-máquina:puerto/servlet/nombre-servlet

donde nombre-servlet se corresponde con el nombre con el que se registra nuestro servlet en el servidor.

Desde una página HTML

<a href="servlet/demo>Demostración Invocar Sevlet</a">

<form name=“formulario” action=“/servlet/demo”

Desde otro Servlet

public class BookDetailServlet extends HttpServlet {

public void doGet (HttpServletRequest request,HttpServletResponseresponse)

throws ServletException, IOException {

...BookDBServlet database = (BookDBServlet)

getServletConfig().getServletContext().getServlet("bookdb"); ...

}

}

8.9 Invocación de un Servlet

Page 607: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 607

8.10 Ejercicio Práctico

Page 608: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 608

El objetivo de esta práctica es el de crear un Sistema de Ordenes utilizando tecnología de servlets para las principales operaciones de mantenimiento para el módulo de Clientes y Productos.

El sistema deberá presentar al ingresar una pantalla de búsqueda para cada uno de los módulos. Una vez que el usuario digite los parámetros requeridos y presione el botón de submit, esta información viajará por el request a un servlet llamado Clientes y Productos respectivamente.

Estos servlets deberán capturar dichos parámetros y realizar la opción de búsqueda para cada módulo.

8.10 … Ejercicio Práctico

Page 609: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 609

En base al gráfico anterior se requiere inicialmente crear los correspondientes servicios los cuales interactuan directamente con la base de datos utilizada en el curso. (Servicio, ServicioCliente y ServicioProducto). Estos servicios no se requiere que sean servlets sino simples objetos en Java. El instructor le entregará la clase de Servicio y ServicioCliente, las cuales interactúan directamente con la base de datos que se encuentra referencia en el servidor de aplicaciones.

Los servlets deberá recibir como parámetro adicional una bandera llamada acción, para controlar el tipo de operación que el usuario ha seleccionado (insertar, modificar, eliminar, consultar y listar).

El flujograma del módulo de clientes será semejante al que se presenta a continuación.

8.10 … Ejercicio Práctico

Page 610: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 610

8.10 … Ejercicio Práctico

Page 611: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 611

2. Arquitectura n Capas2. Arquitectura n Capas

3. Definición de Servlets Java3. Definición de Servlets Java

4. Arquitectura del Paquete Servlet4. Arquitectura del Paquete Servlet

5. Métodos Básicos del Servlet5. Métodos Básicos del Servlet

1. Introducción a Html1. Introducción a Html

6. Diagrama UML del Objeto Servlet6. Diagrama UML del Objeto Servlet

7. Ciclo de Vida de un Servlet7. Ciclo de Vida de un Servlet

8. Programación de Servlets8. Programación de Servlets

9. Manejo del Objeto Session9. Manejo del Objeto Session

10. Manejo del Objeto Cookie10. Manejo del Objeto Cookie

9. Manejo del Objeto Session

Page 612: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 612

El seguimiento de sesión es un mecanismo que los servlets utilizan para mantener el estado sobre la serie de peticiones desde un mismo usuario (esto es, peticiones originadas desde el mismo navegador) durante un periodo de tiempo.

Las sesiones son compartidas por los servlets a los que accede el cliente.

Para utilizar el seguimiento de sesión se debe:

Obtener una sesión (un objeto HttpSession) para un usuario.

Almacenar u obtener datos desde el objeto HttpSession.

Invalidar la sesión (opcional).

9.1 Manejo del Objeto Session

Page 613: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 613

Cliente 1

Cliente 2

Instancia del Servlet 1

Instancia del Servlet 2

Cliente 1

Cliente 1

Single-thread ModelMulti-thread Model

9.2 Threading

Page 614: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 614

public class CatalogServlet extends HttpServlet {

public void doGet (HttpServletRequest request,HttpServletResponseresponse) throws ServletException, IOException {

// Get the user's session and shopping cart

HttpSession session = request.getSession(true);

...

out = response.getWriter();

...

}

}

9.3 Obtener una sesión

Page 615: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 615

public class CatalogServlet extends HttpServlet {

public void doGet (HttpServletRequest request,HttpServletResponse response)throws ServletException, IOException {

// Get the user's session and shopping cart

HttpSession session = request.getSession(true);

ShoppingCart cart =

(ShoppingCart)session.getAttribute(session.getId());

// If the user has no cart, create a new one

if (cart == null) {

cart = new ShoppingCart();

session.setAttribute(session.getId(), cart);

}

}

}

9.4 Almacenar y Obtenerdatos de una sesión

Page 616: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 616

public class ReceiptServlet extends HttpServlet {

public void doPost(HttpServletRequest request, HttpServletResponseresponse) throws ServletException, IOException {

scart = (ShoppingCart)session.getAttribute(session.getId());

// Clear out shopping cart by invalidating the session

session.invalidate();

// set content type header before accessing the Writer

response.setContentType("text/html");

out = response.getWriter();

}

}

9.5 Invalidar una sesión

Page 617: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 617

2. Arquitectura n Capas2. Arquitectura n Capas

3. Definición de Servlets Java3. Definición de Servlets Java

4. Arquitectura del Paquete Servlet4. Arquitectura del Paquete Servlet

5. Métodos Básicos del Servlet5. Métodos Básicos del Servlet

1. Introducción a Html1. Introducción a Html

6. Diagrama UML del Objeto Servlet6. Diagrama UML del Objeto Servlet

7. Ciclo de Vida de un Servlet7. Ciclo de Vida de un Servlet

8. Programación de Servlets8. Programación de Servlets

9. Manejo del Objeto Session9. Manejo del Objeto Session

10. Manejo del Objeto Cookie10. Manejo del Objeto Cookie

10. Manejo del Objeto Cookie

Page 618: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 618

Las Cookies se utilizan para que un servidor (o un servlet, como parte de un servidor) envíe información al cliente para almacenarla, y para que el servidor pueda posteriormente recuperar esos datos desde el cliente.

Los servlet envían cookies al cliente añadiendo campos a las cabeceras de respuesta HTTP. Los clientes devuelven las cookies automáticamente añadiendo campos a las cabeceras de peticiones HTTP.

Las cookies que un cliente almacena para un servidor sólo pueden ser devueltas a ese mismo servidor.

10.1 Manejo del Objeto Cookie

Page 619: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 619

public void doGet (HttpServletRequest request, HttpServletResponseresponse) throws ServletException, IOException {

...//If the user wants to add a book, remember it by adding a cookieif (values != null) {bookId = values[0];Cookie getBook = new Cookie("Buy", bookId);getBook.setComment("User has indicated a desire " +"to buy this book from the bookstore.");response.addCookie(getBook);

}

10.2 Enviar una Cookie

Page 620: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 620

public void doGet (HttpServletRequest request,HttpServletResponseresponse) throws ServletException, IOException {

/* Handle any pending deletes from the shopping cart */String bookId = request.getParameter("Remove");if (bookId != null) {// Find the cookie that pertains to the book to removeCookie[] cookies = request.getCookies();...For (int i=0; i < cookies.length; i++) {

Cookie thisCookie = cookie[i];if (thisCookie.getName().equals("Buy") &&

thisCookie.getValue().equals(bookId)) {// Delete the cookie by setting its maximum age to

zerothisCookie.setMaxAge(0);

}}

}

10.3 Recuperar,Recorrer y Eliminar una Cookie

Page 621: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 621

Declararla:

HttpSession session = request.getSession(true);

Agregarla:

session.setAttribute(session.getId(),valor));valor: puede ser de tipo Object.

Recuperarla:

Object valor =(Object)session.getAttribute(session.getId());valor: puede ser de tipo Object.

10.4 Session-Resumen

Page 622: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 622

Declararla:Cookie laCookie = new Cookie(id,valor);

valor: de tipo String unicamente.Duración de la cookie:

laCookie.setMaxAge(60*60*7*24); para que queden durante un ratoAdicionar la cookie:

response.addCookie(laCookie);

10.5 Cookie-Resumen

Page 623: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 623

Reccorrer una cookie:

Cookie[] c = null;c = request.getCookies();if (c != null) {

int iCLength = c.length;for(int i=0; i<iCLength; i++) {

Cookie galleta = c[i]; if(galleta.getName().equals("NumItem")){

out.println(galleta.getName());out.print(galleta.getValue());

}

}

10.5 … Cookie-Resumen

Page 624: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 624

Obtener más de un dato en una cookie:

Cookie laCookie1 = new Cookie("InformacionCliente1", "123 , Juan , Moreno, Alajuela");Cookie laCookie2 = new Cookie("InformacionCliente2", "321 , Jonathan, Flores, Arroyo, San José");

response.addCookie(laCookie1);response.addCookie(laCookie2);

10.5 … Cookie-Resumen

Page 625: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 625

… Obtener más de un dato en una cookie:

Cookie[] cookies = request.getCookies();if(cookies!=null){

for(int i=0; i<cookies.length;i++){if(cookies[i].getName().equals(Nombre)){

String cadena = cookies[i].getValue();String[] resultado =cadena.split(",");

for(int c=0; c<resultado.length;c++){out.println(resultado[c]+"<br>");

} }

} }

else{out.print("Vacio");

}

10.5 … Cookie-Resumen

Page 626: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 626

INTRODUCCIINTRODUCCIÓÓN A N A JAVASERVER PAGESJAVASERVER PAGES

(JSP)(JSP)

Page 627: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 627

2. Características Principales de JSPs2. Características Principales de JSPs

3. Ciclo de Vida de un JSP 3. Ciclo de Vida de un JSP

4. Elemento Script JSP4. Elemento Script JSP

5. Directivas JSP5. Directivas JSP

1. Introducción y Objetivos1. Introducción y Objetivos

6. Variables Predefinidas u Objetos Implícitos6. Variables Predefinidas u Objetos Implícitos

7. Acciones7. Acciones

8. Comentarios - Caracteres Escape8. Comentarios - Caracteres Escape

9. Sumario de Sintaxis9. Sumario de Sintaxis

10. Ejercicios Prácticos10. Ejercicios Prácticos

1 Introducción y Objetos

Page 628: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 628

Objetivos Específicos:

Describir como cargar, inicializar y ejecutar un JavaServer Pages (JSP’s).

Listar las principales características de un JSP.

Construir, generar y probar aplicaciones basadas en JSP´s.

1.1 Introducción y Objetos

Page 629: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 629

2. Características Principales de JSPs2. Características Principales de JSPs

3. Ciclo de Vida de un JSP 3. Ciclo de Vida de un JSP

4. Elemento Script JSP4. Elemento Script JSP

5. Directivas JSP5. Directivas JSP

1. Introducción y Objetivos1. Introducción y Objetivos

6. Variables Predefinidas u Objetos Implícitos6. Variables Predefinidas u Objetos Implícitos

7. Acciones7. Acciones

8. Comentarios - Caracteres de Escape8. Comentarios - Caracteres de Escape

9. Sumario de Sintaxis9. Sumario de Sintaxis

10. Ejercicios Prácticos10. Ejercicios Prácticos

2. Características Principales de JSPs

Page 630: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 630

Varias de las principales características de los JSP son:

Están basados en la tecnología de servlets

Permiten separar la parte dinámica de nuestras páginas Web del HTML estático.

Fácil creación de página.

Por medio de compilación se convierten en Servlets.

Utilizan tags XML, para una mayor gestión.

Invocación de JavaBeans, EJB’s, XML

2.1 Características Principalesde JSPs

Page 631: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 631

Contra Active Server Pages (ASP). ASP es una tecnología similar de Microsoft. Las ventajas de JSP están duplicadas. Primero, la parte dinámica está escrita en Java, no en Visual Basic, otro lenguaje específico de MS, por eso es mucho más poderosa y fácil de usar. Segundo, es portable a otros sistemas operativos y servidores Web.

Contra los Servlets. JSP no nos da nada que no pudiéramos en principio hacer con un servlet. Pero es mucho más conveniente escribir (y modificar!) HTML normal que tener que hacer un billón de sentencias out.println que generen HTML. Además, separando el formato del contenido podemos poner diferentes personas en diferentes tareas: nuestros expertos en diseño de páginas Web pueden construir el HTML, dejando espacio para que nuestros programadores de servlets inserten el contenido dinámico.

2.2 Ventajas de los JSP

Page 632: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 632

Contra Server-Side Includes (SSI). SSI es una tecnología ampliamente soportada que incluye piezas definidas externamente dentro de una página Web estática. JSP es mejor porque nos permite usar servlets en vez de un programa separado para generar las partes dinámicas. Además, SSI, realmente está diseñado para inclusiones sencillas, no para programas "reales" que usen formularios de datos, hagan conexiones a bases de datos, etc.

Contra JavaScript. JavaScript puede generar HTML dinámicamente en el cliente. Esta es una capacidad útil, pero sólo maneja situaciones donde la información dinámica está basada en el entorno del cliente. Con la excepción de las cookies, el HTTP y el envió de formularios no están disponibles con JavaScript. Y, como se ejecuta en el cliente, JavaScript no puede acceder a los recursos en el lado del servidor, como bases de datos, catálogos, información de precios, etc.

2.2 … Ventajas de los JSP

Page 633: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 633

2. Características Principales de JSPs2. Características Principales de JSPs

3. Ciclo de Vida de un JSP 3. Ciclo de Vida de un JSP

4. Elemento Script JSP4. Elemento Script JSP

5. Directivas JSP5. Directivas JSP

1. Introducción y Objetivos1. Introducción y Objetivos

6. Variables Predefinidas u Objetos Implícitos6. Variables Predefinidas u Objetos Implícitos

7. Acciones7. Acciones

8. Comentarios - Caracteres Escape8. Comentarios - Caracteres Escape

9. Sumario de Sintaxis9. Sumario de Sintaxis

10. Ejercicios Prácticos10. Ejercicios Prácticos

3. Ciclo de Vida de un JSP

Page 634: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 634

Servidor de WebBrowser del Cliente

http://www.efibs.com/demo.jsp

Primer vez

1

Crear Servlet

demo.java

2

Compilar Servlet

demo.class

3

Ciclo de Vida del Servlet

3.1 Ciclo de Vida de un JSP

Page 635: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 635

2. Características Principales de JSPs2. Características Principales de JSPs

3. Ciclo de Vida de un JSP 3. Ciclo de Vida de un JSP

4. Elemento Script JSP4. Elemento Script JSP

5. Directivas JSP5. Directivas JSP

1. Introducción y Objetivos1. Introducción y Objetivos

6. Variables Predefinidas u Objetos Implícitos6. Variables Predefinidas u Objetos Implícitos

7. Acciones7. Acciones

8. Comentarios - Caracteres de Escape8. Comentarios - Caracteres de Escape

9. Sumario de Sintaxis9. Sumario de Sintaxis

10. Ejercicios Prácticos10. Ejercicios Prácticos

4. Elemento Script JSP

Page 636: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 636

Los elementos de script permiten insertar código Java dentro del servlet que se generará desde la página JSP. Hay tres formas de hacer esto:

Mediante expresiones de la forma <%= expresión %>: son evaluadas e insertadas en la salida.

Mediante scriptlets de la forma <% código %> : se insertan dentro del método service del servlet.

Mediante declaraciones de la forma <%! código %> : se insertan en el cuerpo de la clase del servlet, fuera de cualquier método existente.

4.1 Elemento Script JSP

Page 637: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 637

El Objeto requestrequest

El Objeto responseresponse

El Objeto sessionsession

El Objeto outout

El Objeto exceptionexception

El Objeto applicationapplication

4.2 Objetos Implícitos

Page 638: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 638

Una expresión JSP se usa para insertar valores Java directamente en la salida y tiene la siguiente forma:

<%= expresión Java %>

Ejemplo:

Fecha Actual: <%= new java.util.Date() %>

En XML, se puede usar una sintaxis alternativa para las expresiones JSP:

<jsp:expression>Expresión Java</jsp:expression>

4.3 Expresiones JSP

Page 639: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 639

Si se desea realizar algo más complejo que insertar una simple expresión, los scriptlets JSP nos permiten insertar código arbitrario dentro del método servlet que será construido al generar la página. Los Scriptlets tienen la siguiente forma: <% Código Java %>

Ejemplo:

<%

String queryData = request.getQueryString();

out.println(“Adjuntando GET data: " + queryData);

%>

Si queremos usar los caracteres "%>" dentro de un scriptlet, debemos poner "%\>".

Finalmente, observa que el equivalente XML de <% Código Java %> es:

<jsp:scriptlet>Código</jsp:scriptlet>

4.4 Scriplets JSP

Page 640: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 640

Una declaración JSP nos permite definir métodos o campos que serán insertados dentro del cuerpo principal de la clase servlet (fuera del método service que procesa la petición). Tienen la siguiente forma:

<%! Código Java%>

Ejemplo:

<%! private int accesos = 0; %>

Cantidad de Accesos:

<%= ++ accesos %>

Como con los scriptlet, si queremos usar los caracteres "%>", ponemos "%\>". Finalmente, se puede observar que el equivalente XML de <%! Código %> es:

<jsp:declaration>Código</jsp:declaration>

4.5 Declaraciones JSP

Page 641: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 641

2. Características Principales de JSPs2. Características Principales de JSPs

3. Ciclo de Vida de un JSP 3. Ciclo de Vida de un JSP

4. Elemento Script JSP4. Elemento Script JSP

5. Directivas JSP5. Directivas JSP

1. Introducción y Objetivos1. Introducción y Objetivos

6. Variables Predefinidas u Objetos Implícitos6. Variables Predefinidas u Objetos Implícitos

7. Acciones7. Acciones

8. Comentarios - Caracteres de Escape8. Comentarios - Caracteres de Escape

9. Sumario de Sintaxis9. Sumario de Sintaxis

10. Ejercicios Prácticos10. Ejercicios Prácticos

5. Directivas JSP

Page 642: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 642

Habilita la declaración de Variables globales.

Empieza con la secuencia <%@

Termina con la secuencia %>

Existen los siguientes tipos:

Directiva page

Directiva include

Directiva taglib

5.1 Directivas JSP

Page 643: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 643

La directiva page nos permite definir uno o más de los siguientes atributos sensibles a las mayúsculas:

autoflush

languajebuffer

isErrorPagesession

errorPageisThreadSafe

infocontentType

extendsimport

5.2 Directiva Page

Page 644: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 644

import="package.class" o import="package.class1,...,package.classN". Esta instrucción permite especificar los paqutes que deberían ser importados.

Por ejemplo:

<%@ page import="java.util.*" %>

El atributo import es el único que puede aparecer múltiples veces.

5.3 Directiva import

Page 645: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 645

contentType="MIME-Type" o contentType="MIME-Type; charset=Character-Set". Esta instrucción especifica el tipo MIME de la salida.

El valor por defecto es text/html.

Por ejemplo, la directiva:

<%@ page contentType="text/plain" %>

Tiene el mismo valor que el scriptlet

<% response.setContentType("text/plain"); %>

5.4 Directiva contentType

Page 646: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 646

isThreadSafe="true|false".

Un valor de true (por defecto) indica un procesamiento del servlet normal, donde múltiples peticiones pueden procesarse simultáneamente con un sólo ejemplar del servlet (bajo la suposición de que el autor sincroniza las variables de ejemplar).

Un valor de false indica que el servlet debería implementar SingleThreadModel, con peticiones enviadas de forma serializada o con peticiones simultáneas siendo entregadas por ejemplares separados del servlet. Single-thread Model (false)Multi-thread Model (true)

Cliente 1

Cliente 2

Instancia del Servlet Cliente 1

5.5 Directiva isThreadSafe

Page 647: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 647

session="true|false".

Un valor de true (por defecto) indica que la variable predefinida session(del tipo HttpSession) debería unirse a la sesión existente si existe una, y si no existe, se debería crear una nueva sesión para unirla.

Un valor de false indica que no se usarán sesiones y los intentos de acceder a la variable session provocarán errores en el momento en que la página JSP sea traducida a un servlet.

5.6 Directiva session

Page 648: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 648

buffer="sizekb|none".

Esto especifica el tamaño del buffer para el JspWriter out.

El valor por defecto es específico del servidor y debería ser de al menos 8kb.

5.7 Directiva buffer

Page 649: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 649

autoflush="true|false".

Un valor de true (por defecto) indica que el buffer debería descargarse cuando esté lleno.

Un valor de false, raramente utilizado, indica que se debe lanzar una excepción cuando el buffer se sobrecargue. Un valor de false es ilegal cuando usamos buffer="none".

5.8 Directiva autoflush

Page 650: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 650

extends="package.class".

Esto indica la superclase del servlet que se va a generar.

Debemos usarla con extrema precaución, ya que el servidor podría utilizar una superclase personalizada.

5.9 Directiva extends

Page 651: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 651

info="message".

Define un string que puede usarse para ser recuperado mediante el método getServletInfo.

5.10 Directiva info

Page 652: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 652

errorPage="url".

Especifica la página JSP que se debería procesar si se lanzará cualquier Throwable.

5.11 Directiva errorPage

Page 653: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 653

isErrorPage="true|false".

Indica si la página actual actúa o no como página de error de otra página JSP.

El valor por defecto es false.

5.12 Directiva isErrorPage

Page 654: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 654

language="java".

Esta instrucción está pensada para especificar el lenguaje a utilizar.

Por ahora, no debemos preocuparnos por ella ya que “java”, es tanto el valor por defecto como la única opción legal.

Por ejemplo, el equivalente XML de:

<%@ page import="java.util.*" %> es:

<jsp:directive.page import="java.util.*" />

5.13 Directiva language

Page 655: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 655

La sintaxis XML para definir directivas es:

<jsp:directive.TipoDirectivaTipoDirectiva atributo=valorvalor />

Por ejemplo, el equivalente XML de:

<%@ page import="java.util.*" %>

es:

<jsp:directive.page import="java.util.*" />

5.14 Sintaxis XML para definirdirectivas

Page 656: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 656

Esta directiva nos permite incluir ficheros en el momento en que la página JSP es traducida a un servlet.

<%@ include file="url relativa" %>

La URL especificada normalmente se interpreta como relativa a la página JSP a la que se refiere, pero, al igual que las URLs relativas en general, podemos decirle al sistema que interprete la URL relativa al directorio homedel servidor Web, empezando con una barra invertida.

Los contenidos del fichero incluido son analizados como texto normal JSP, y así pueden incluir HTML estático, elementos de script, directivas y acciones.

5.15 Directiva include

Page 657: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 657

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<HTML>

<HEAD>

<TITLE>Tutorial EFIBS: JavaServer Pages (JSP)</TITLE>

<META NAME="author" CONTENT="[email protected]">

<META NAME="keywords" CONTENT="...">

<META NAME="description" CONTENT="...">

<LINK REL=STYLESHEET HREF="Site-Styles.css“ TYPE="text/css">

</HEAD>

<BODY>

<%@ include file="/navbar.html" %>

</BODY>

</HTML>

5.16 Ejemplo Directiva include

Page 658: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 658

2. Características Principales de JSPs2. Características Principales de JSPs

3. Ciclo de Vida de un JSP 3. Ciclo de Vida de un JSP

4. Elemento Script JSP4. Elemento Script JSP

5. Directivas JSP5. Directivas JSP

1. Introducción y Objetivos1. Introducción y Objetivos

6. Variables Predefinidas u Objetos Implícitos6. Variables Predefinidas u Objetos Implícitos

7. Acciones7. Acciones

8. Comentarios - Caracteres Escape8. Comentarios - Caracteres Escape

9. Sumario de Sintaxis9. Sumario de Sintaxis

10. Ejercicios Prácticos10. Ejercicios Prácticos

6. Variables Predefinidas u Objetos Implícitos

Page 659: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 659

El Objeto requestrequest : : HttpServletRequestHttpServletRequest

El Objeto responseresponse : : HttpServletResponseHttpServletResponse

El Objeto outout : : PrintWriterPrintWriter

El Objeto sessionsession : : HttpSessionHttpSession

El Objeto applicationapplication : : Es el Es el ServletContextServletContext obtenido mediante obtenido mediante getServletConfiggetServletConfig().().getContextgetContext()(). .

El Objeto configconfig : : Es el objeto Es el objeto ServletConfigServletConfig para la ppara la páágina.gina.

El Objeto pageContextpageContext : : PageContextPageContext para encapsular caracterpara encapsular caracteríísticas de uso sticas de uso especespecííficas del ficas del servidor como servidor como JspWriterJspWriterss de alto rendimientode alto rendimiento..

6.1 … Variables Predefinidas u Objetos Implícitos

Page 660: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 660

2. Características Principales de JSPs2. Características Principales de JSPs

3. Ciclo de Vida de un JSP 3. Ciclo de Vida de un JSP

4. Elemento Script JSP4. Elemento Script JSP

5. Directivas JSP5. Directivas JSP

1. Introducción y Objetivos1. Introducción y Objetivos

6. Variables Predefinidas u Objetos Implícitos6. Variables Predefinidas u Objetos Implícitos

7. Acciones7. Acciones

8. Comentarios - Caracteres de Escape8. Comentarios - Caracteres de Escape

9. Sumario de Sintaxis9. Sumario de Sintaxis

10. Ejercicios Prácticos10. Ejercicios Prácticos

7. Acciones

Page 661: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 661

Las acciones JSP usan construcciones de sintaxis XML para controlar el comportamiento del motor de Servlets.

Se pueden utilizar para:

Insertar un fichero dinámicamente.

Reutilizar componentes JavaBeans.

Reenviar al usuario a otra página o generar HTML para el plug-in Java.

7.1 Acciones

Page 662: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 662

Esta acción nos permite insertar ficheros en una página que está siendo generada.

La sintaxis es la siguiente: <jsp:include page="relative URL" flush="true" />

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<HTML>

...

<BODY>

Este es un resumen de la más recientes noticias:

<UL>

<LI><jsp:include page="EjemploJSP/noticia1.htm" flush="true"/>

<LI><jsp:include page="EjemploJSP/noticia2.htm" flush="true"/>

<LI><jsp:include page="EjemploJSP/noticia3.htm" flush="true"/>

7.2 Acción jsp:include

Page 663: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 663

<LI><jsp:include page="EjemploJSP/noticia4.htm" flush="true"/>

</UL>

</BODY>

</HTML>

7.2 … Acción jsp:include

Page 664: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 664

Esta acción nos permite cargar y utilizar un JavaBean en la página JSP. Esta es una capacidad muy útil porque permite practicar la reusabilidad de las clases Java. La sintaxis más simple para especificar que se debe usar un Beanes: <jsp:useBean id="name" class="package.class" />

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<HTML>

...

<BODY>

<jsp:useBean id="test" class="SimpleBean" />

<jsp:setProperty name="test" property="message” value="Hola amigos" />

<H1>Message:

<jsp:getProperty name="test" property="message" />

</H1>

</BODY>

</HTML>

7.3 Acción jsp:useBean

Page 665: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 665

Indica el contexto en el que el bean debería estar disponible.

Hay cuatro posibles valores: page, request, session, y application.

El valor por defecto, page, indica que el bean está sólo disponible para la página actual (almacenado en el PageContext de la página actual).

Un valor de request indica que el bean sólo está disponible para la petición actual del cliente (almacenado en el objeto ServletRequest).

Un valor de session indica que el objeto está disponible para todas las páginas durante el tiempo de vida de la HttpSession actual.

Un valor de application indica que está disponible para todas las páginas que compartan el mismo ServletContext.

scope

Designa el nombre completo del paquete que contiene el bean. class

Da un nombre a la variable la cual contendrá la referencia al bean. Se usaráun objeto bean anterior en lugar de ejemplarizar uno nuevo si se puede encontrar uno con el mismo id y scope.

id

UsoAtributo

7.4 Atributos de jsp:useBean

Page 666: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 666

Da el nombre del bean, como se ingresaría en el método instantiate de Beans. Esta permitido suministrar un type y un beanName, y omitir el atributo class.

beanName

Especifica el tipo de la variable a la que se referirá el objeto. Este debe corresponder con el nombre de la clase o ser una superclase o un interfaceque implemente la clase. Recuerda que el nombre de la variable se designa mediante el atributo id.

type

UsoAtributo

7.4 … Atributos de jsp:useBean

Page 667: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 667

Esta acción permite reenviar la petición a otra página. Tiene un sólo atributo, page, que debería consistir en una URL relativa.

Éste podría ser un valor estático o podría ser calculado en el momento de la petición. Aquí se muestran dos ejemplos:

<jsp:forward page="/utils/errorReporter.jsp" />

<jsp:forward page="<%= someJavaExpression %>" />

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<HTML>

...

<BODY>

<jsp:forward page="/main.jsp" />

</H1>

</BODY>

</HTML>

7.5 Acción jsp:forward

Page 668: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 668

Cuando se invoca un elemento include o forward, el objeto request original es enviado a la página de destino.

Aquí se muestran un ejemplos:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<HTML>

...

<BODY>

<jsp:include page="..." >

<jsp:param name=”param1” value="value1"/>

</jsp:include>

</H1>

</BODY>

</HTML>

7.6 Acción jsp:param

Page 669: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 669

Esta acción nos permite insertar un elemento OBJECT o EMBED específico del navegador para indicar que el navegador debería ejecutar un appletusando el Plug-in Java.

<jsp:plugin

type="bean|applet"

code="objectCode"

codebase="objectCodebase"

{ align="alignment" }

{ archive="archiveList" }

{ height="height" }

{ hspace="hspace" }

{ jreversion="jreversion" }

{ name="componentName" }

{ vspace="vspace" }

{ width="width" }

{ nspluginurl="url" }

{ iepluginurl="url" } >

{ <jsp:params>

{ <jsp:param name="paramName" value= paramValue" /> }+

</jsp:params> }

{ <jsp:fallback> arbitrary_text </jsp:fallback> }

</jsp:plugin>

7.7 Acción jsp:plugin

Page 670: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 670

<jsp:plugin type="applet“ code="JavaClock.class“ height="200" width="200" nspluginurl="http://java.sun.com/products/plugin/1.3.0_01/plugin-install.html"iepluginurl="http://java.sun.com/products/plugin/1.3.0_01/jinstall-130_01 win32.cab#Version=1,3,0,1" >

<jsp:params>

<jsp:param name="delay" value="100" />

<jsp:param name="border" value="5" />

<jsp:param name="nradius" value="80" />

<jsp:param name="bgcolor" value="ffffff" />

<jsp:param name="shcolor" value="ff0000" />

<jsp:param name="mhcolor" value="00ff00" />

<jsp:param name="hhcolor" value="0000ff" />

<jsp:param name="ccolor" value="dddddd" />

<jsp:param name="ncolor" value="000000" />

</jsp:params>

7.7 … Acción jsp:plugin

Page 671: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 671

<jsp:fallback>

<p>No se ha podido arrancar el plugin.</p>

</jsp:fallback>

</jsp:plugin>

7.7 … Acción jsp:plugin

Page 672: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 672

2. Características Principales de JSPs2. Características Principales de JSPs

3. Ciclo de Vida de un JSP 3. Ciclo de Vida de un JSP

4. Elemento Script JSP4. Elemento Script JSP

5. Directivas JSP5. Directivas JSP

1. Introducción y Objetivos1. Introducción y Objetivos

6. Variables Predefinidas u Objetos Implícitos6. Variables Predefinidas u Objetos Implícitos

7. Acciones7. Acciones

8. Comentarios - Caracteres de Escape8. Comentarios - Caracteres de Escape

9. Sumario de Sintaxis9. Sumario de Sintaxis

10. Ejercicios Prácticos10. Ejercicios Prácticos

8. Comentarios –Caracteres de Escape

Page 673: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 673

<% en un atributo. <\%

%> en un atributo %\>

Una doble comilla en un atributo que usa comillas dobles. Sin embargo, recuerda que podemos usar comillas dobles o simples, y que otros tipos de comillas serán caracteres regulares.

\"

Una sola comilla en un atributo que usa comillas simples. Sin embargo, recuerda que podemos usar comillas dobles o simples, y que otros tipos de comillas serán caracteres regulares.

\'

Usado en elementos de script donde realmente queremos escribir "%>". %\>

Usado en plantillas de texto (HTML estático) donde realmente queremos escribir "<%".

<\%

Un comentario HTML. Se pasa al HTML resultante. Cualquier elemento de script, directivas o acciones embebidas se ejecutan normalmente.

<!-- comment -->

Un comentario JSP. Ignorado por el traductor JSP-a-scriptlet. Cualquier elemento de script, directivas o acciones embebidas son ignorados.

<%-- comment --%>

PropósitoSintaxis

8.1 Comentarios –Caracteresde Escape

Page 674: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 674

2. Características Principales de JSPs2. Características Principales de JSPs

3. Ciclo de Vida de un JSP 3. Ciclo de Vida de un JSP

4. Elemento Script JSP4. Elemento Script JSP

5. Directivas JSP5. Directivas JSP

1. Introducción y Objetivos1. Introducción y Objetivos

6. Variables Predefinidas u Objetos Implícitos6. Variables Predefinidas u Objetos Implícitos

7. Acciones7. Acciones

8. Comentarios - Caracteres de Escape8. Comentarios - Caracteres de Escape

9. Sumario de Sintaxis9. Sumario de Sintaxis

10. Ejercicios Prácticos10. Ejercicios Prácticos

9. Sumario de Sintaxis

Page 675: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 675

Sumario de SintaxisSumario de Sintaxis

9.1 … Sumario de Sintaxis

Page 676: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 676

2. Características Principales de JSPs2. Características Principales de JSPs

3. Ciclo de Vida de un JSP 3. Ciclo de Vida de un JSP

4. Elemento Script JSP4. Elemento Script JSP

5. Directivas JSP5. Directivas JSP

1. Introducción y Objetivos1. Introducción y Objetivos

6. Variables Predefinidas u Objetos Implícitos6. Variables Predefinidas u Objetos Implícitos

7. Acciones7. Acciones

8. Comentarios - Caracteres de Escape8. Comentarios - Caracteres de Escape

9. Sumario de Sintaxis9. Sumario de Sintaxis

10. Ejercicios Prácticos10. Ejercicios Prácticos

10. Ejercicios Prácticos

Page 677: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 677

El instructor le explicará la siguiente práctica:

Convierta en JSPs todas las páginas html que se hicieron en la práctica anterior.

Crear una página llamada login.jsp, la cual debe contener un formulario con los siguientes datos:

Contraseña

Usuario

login

10.1 Ejercicios Prácticos

Page 678: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 678

La página anterior deberá de redireccionarse por medio de un método post a un servlet, el cual se llamará validarLogin.java.

El Servlet validarLogin.java, recibirá como parámetros todos los valores enviados en el punto 2.

Una vez completado el punto anterior, el servlet debe validar la integridad de la información, así como también, si el usuario existe o no en la base de datos.

De existir errores, la colección generada se deberá almacenar en un objeto de session, para que luego sea desplegado en la página login.jsp.

En caso contrario al punto 6, se debe generar una cookie con el nombre del usuario y deberá aparecer en la página sistemaOrdenes.jsp, la cual únicamente tendrá dos enlaces, uno a mantenimientoClientes.jsp y otro a mantenimientoProductos.jsp.

10.1 … Ejercicios Prácticos

Page 679: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 679

De ingresar a cualquiera de las dos páginas, deberá llamar un servletmantenimientoClientes.java ó mantenimientoProductos.java

Sí se selecciona algunas de las siguientes opciones: insertar, modificar óeliminar, se deberá devolver en el objeto request un mensaje donde se establezca la transacción satisfactoria o bien el mensaje de error que haya ocurrido.

En el caso de consultar deberá aparecer la información del cliente o bien un mensaje de no existencia del mismo.

Para el caso de listar, cree un objeto session donde estén todos los cliente provenientes en de la base de datos y preséntelo en otra página de despliegue tanto para los clientes como para los productos.

Pruebe exhaustivamente la página hasta que haya sido totalmente validada y que esté funcionalmente correcta. Haga exactamente los mismos pasos parael módulo de productos.

10.1 … Ejercicios Prácticos

Page 680: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 680

10.1 … Ejercicios Prácticos

La página debería quedar como la siguiente:

Page 681: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 681

FRAMEWORK FRAMEWORK STRUTSSTRUTS

Page 682: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 682

Objetivos

Explicar los principales componentes del framework ,específicamente Beans, Forms, Actions, Messages y Errors.

Analizar los componentes dentro del contextode las n-capas.

Aplicar los conceptos de Struts al sistema de Ordenes.

Page 683: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 683

2. Modelo 3 Capas2. Modelo 3 Capas

3. Framework STRUTS3. Framework STRUTS

4. Estructura Aplicación4. Estructura Aplicación

1. Introducción1. Introducción

1 Introducción

5. Ejercicios Prácticos5. Ejercicios Prácticos

Page 684: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 684

¿ Que es un framework ?

Es la implementación de un grupo de componentes y servicios basados en patrones, estándares, y prácticas disponibles para web.

La plataforma J2EE es un sistema multi-capas, así pues, un framework que sigue el estándar de J2EE debe adaptarse a ese mismo esquema –presentación, negocio e integración.

Basado en el lineamiento anterior, han surgido variedades de frameworkspara el desarrollo de aplicaciones web, siendo uno de estos Struts.

1.1 Introducción

Page 685: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 685

Generalidades

Struts es un framework J2EE que:

Parte del proyecto Jakarta, el cual fué patrocinado por la fundación de software Apache (Apache Software Foundation)

Se basa en el paradigma de J2EE, Model - View - Controller (MVC), ideal para el desarrollo de aplicaciones Web basado en servlets y tecnología Java Server Pages (JSP).

1.1 … Introducción

Page 686: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 686

2 Modelo 3 Capas

2. Modelo 3 Capas2. Modelo 3 Capas

3. Framework STRUTS3. Framework STRUTS

4. Estructura Aplicación4. Estructura Aplicación

1. Introducción1. Introducción

5. Ejercicios Prácticos5. Ejercicios Prácticos

Page 687: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 687

Presentación Lógica de Negocio

Base de Datos

Explorer

JSP, HTML

Código JAVA

Esquema General

2 … Modelo 3 Capas

Page 688: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 688

Detalle del esquema en tres capas

2 … Modelo 3 Capas

Page 689: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 689

Estructura bien diferenciada

La lógica de negocio no se mezcla con la presentación de la aplicación

El acceso a los datos se realiza en un bloque diferenciado dela lógica de negocio

Cada desarrollador se especializa en una capa de la aplicación.

Mantenimiento de la aplicación mucho más fácil y eficaz

¿ Porqué el desarrollo en tres capas ?

2 … Modelo 3 Capas

Page 690: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 690

Requiere:

Los más utilizados son Netscape o Explorer.

Browser: Permite visualizar la aplicación.

Contiene:

Imágenes.

HTML: Código que el browser entiende para dibujar componentes en la ventana.

JSP.

Capa de Presentación

2 … Modelo 3 Capas

Page 691: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 691

Contiene:

Clases JAVA

Helpers

Session Beans

EJB’s

Capa de Lógica de Negocio

2 … Modelo 3 Capas

Page 692: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 692

Contiene

Estructura de la base de datos

Tablas

Capa de Datos

2 … Modelo 3 Capas

Page 693: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 693

2. Modelo 3 Capas2. Modelo 3 Capas

3. Framework STRUTS3. Framework STRUTS

4. Estructura Aplicación4. Estructura Aplicación

1. Introducción1. Introducción

3 Framework STRUTS

5. Ejercicios Prácticos5. Ejercicios Prácticos

Page 694: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 694

Framework para desarrollar aplicaciones Java

Código abierto

Pertenece a Apache

Tiene dos años en el mercado

¿ Qué es ?

3 … Framework STRUTSFRAMEWORK:

Extensión de un lenguaje mediante jerarquías de clases que implementan una funcionalidad y que pueden ser extendidas.

Struts:

Page 695: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 695

Manejo del interface con el usuario, es decir manejo de la Capa de presentación

Manejo del flujo de la aplicación

Manejo de la lógica de la aplicación

Struts permite que el desarrollo y mantenimiento de las aplicaciones complejas o que crecen en el tiempo sea mucho más fácil

¿ Porqué se utiliza Struts en los proyectos ?

3 … Framework STRUTS

Page 696: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 696

Struts consiste en una librería de clases y una serie de configuraciones

Java Development Kit

Servlet Container

Java Server Pages

XML Parser compatible con Java API for XML Parsing

JDBC 2.0 Optional Package Classes

¿ Como poner en funcionamiento Struts ?

3 … Framework STRUTS

Page 697: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 697

MODEL VIEW CONTROLLER

Controller(Servlet)

View(JSP)

Model(Java Beans)

Cliente( Browser )

Esquema

3 … Framework STRUTS

Page 698: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 698

Estándar Web Browser

Su función es la de manejar el workflow de la aplicación:

La sesión.

Flujo de las peticiones del cliente.

Realiza el Mapping de requests a las clases quegestionan la lógica de negocio.

El controlador maneja las peticiones dirigidas haciaun Action class.

Cliente

Controller

3 … Framework STRUTS

Page 699: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 699

El “Action Class”, clase del tipo JavaBean o EJB, que corresponde al modelo en sí, encapsula la lógica del negocio. La forma de ligar éste con los demás archivos, es a través del archivo de configuración struts-config.xml.

El “Form Class”, que corresponde a la vista (view, siguiendo el modelo MVC), constituye un grupo de librerías que funcionan en concordancia con el controlador para conectar un .JSP con dichaslibrerías. Las páginas JSP pertenecientes a la capa de presentación utilizanlibrerias de marcas para mostrar el estado del Model.

Model

View

3 … Framework STRUTS

Page 700: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 700

MODEL VIEW CONTROLLER

Controller

Define el comportamiento de la aplicaciónMapea las acciones del usuario al modelSelecciona views para la respuestaUno para cada funcionalidad.

View

Presenta páginas al usuarioActualiza peticiones del ModelManda al Controller peticiones del usuarioPermite al Controller seleccionar la view

Model

Encapsula el estado de la aplicaciónDa respuesta a las queriesSe encarga de la lógica de negocioNotifica cambios en la capa de presentación

Notificaciónde Cambio

Petición de Estado Cambio de Estado

Gestiones del Usuario

Selección de la View

Invocación a métodos

Eventos

3 … Framework STRUTS

Page 701: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 701

2.Acciones

3. Resultados

4. Redireccionamiento

6. Resultado 5. Consulta

Model(Java Beans

y/o EJBs)

1. Solicitud Controller( Servlet)

View(JSPs, TagLibs)

¿ Como funciona esto en aplicaciones WEB ?

3 … Framework STRUTS

Page 702: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 702

(1) El navegador genera una solicitud que es atendida por el Controller(Servlet especializado).

(2)El Controller analiza la solicitud, siguiendo la configuración que se le ha programado en su XML y llama al Action correspondiente pasándole los parámetros enviados. El Action instancia y/o utilizarálos objetos de negocio para concretar la tarea.

(3) Según el resultado que retorne el Action, (4) el Controller derivará la generación de interfaz a una o más JSPs, (5) las cuales podrán consultar los objetos del Model a (6) fines de realizar su tarea.

¿ Como funciona esto en aplicaciones WEB ?

3 … Framework STRUTS

Page 703: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 703

Separación del workflow de la aplicación del modelo de objetos de negocio y de la generación de interfaz.

El controlador ya está implementado por Struts, aunque se puede extender y heredar. El workflow se puede programar desde un archivo XML.

La generación de interfaz se soporta mediante un conjunto de Tagspredefinidos por Struts.

Logísticamente, permite desarrollar la interfaz del workflow y la lógica de negocio conjuntamente o con personal especializado en cada capa.

Potencia la reutilización, soporte de múltiples interfaces ( Html).

Características Principales

3 … Framework STRUTS

Page 704: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 704

Errors.java

ActionServlet Action.java

Session Beans

Entity Beans

Tables

Tables

Tables

.jsp

ActionForm.java

Struts-config.XML

View Controller Model EJB Database

1:1 fields + validation

forward

add form errors

display errors

Instanciate ActionForm Bean

forward

action mapping

add logic errors

forward

invoke / replay

use

invoke / replay

Diagrama de Clases

3 … Framework STRUTS

Page 705: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 705

Es la parte fundamental de la capa de presentación.

Permite mezclar código HTML estático con HTML generado dinámicamente ( código JAVA ).

Se ejecutan en cualquier servidor WEB

VIEW con JSPs

3 … Framework STRUTS

Page 706: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 706

Al realizar el usuario una acción, la JSP llama al ActionServlet que contiene la clase Form que ha de llamarse para validar los datos.

Cualquier aplicación con páginas dinámicas en respuesta a las acciones realizadas por el usuario es susceptible de usar JSP’s.

VIEW con JSPs

3 … Framework STRUTS

Page 707: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 707

Estructura visual de la página, junto con HTML.

Acceder a objetos del servidor.

Modificar los datos.

Para incluir código de acceso a la base de datos.

Para incluir código de lógica de negocio

¿ Para que usar JSP’s ?

¿ Para que no usar JSP’s ?

3 … Framework STRUTS

Page 708: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 708

<HTML><HEAD>

<TITLE>Welcome to Our Store</TITLE></HEAD><BODY>

<H1>Welcome to Our Store</H1> <SMALL>Welcome,<!-- User name is "New User" for 1st-time

visitor--> <% out.println(Utils.getUserNameFromCookie(request));

%>To access your account settings, click <A HREF="Account-Settings.html">here.</A>

</SMALL> <P> Regular HTML for all the rest of the on-line store's Web page.

</BODY></HTML>

JSP - Ejemplo

3 … Framework STRUTS

Page 709: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 709

Un archivo .Properties se utiliza para definir los mensajes a desplegar en un JSP. Estos mensajes se pueden utilizar como mensajes de error, es decir, captions de etiquetas. Dentro de este archivo se especifican entradas de la forma nombre=valor.

Existe uno principal que se llama NombreAplicacion.properties , donde se refiere al nombre configurado de la aplicación en el servletinicial. Aquí se definirán todas las etiquetas necesarias para la aplicación.

Etiquetas en un .Properties

3 … Framework STRUTS

Page 710: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 710

Cuando se haga referencia a una etiqueta, Struts buscará el archivo principal por defecto correspondiente al nombreAplicacion.properties.

Este archivo se encuentra ubicado en la carpeta WEB-INF/classes.

Etiquetas en un .Properties

3 … Framework STRUTS

Page 711: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 711

A continuación se muestra como utilizar los distintos elementosde Struts en una página JSP para generar un Form que envíe unapetición y controle automáticamente los errores.

<%@ taglib uri="/WEB-INF/tlds/struts-bean.tld" prefix="bean" %><%@ taglib uri="/WEB-INF/tlds/struts-html.tld" prefix="html" %><%@ taglib uri="/WEB-INF/tlds/struts-logic.tld" prefix="logic" %>

Combinando elementos de Struts en un JSP

3 … Framework STRUTS

Page 712: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 712

<html><head><title>JSP Page</title></head><body><html:errors/><br><html:form action="/prueba" scope="session"><TABLE>

<TR><TD WIDTH="3%"><bean:message

key="index.titulo"/></TD></TR><TR>

<TD><!-- Inicio Tabla Detalle -->

3 … Framework STRUTS

Page 713: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 713

<TABLE><TR>

<TD>Nombre:</TD><TD><html:text property="nombre" /></TD>

</TR><TR>

<TD>Apellido1:</TD><TD><html:text property="apellido1" /></TD>

</TR><TABLE>

</TD></TR><TR>

<TD WIDTH="3%"></TD></TR>

</TABLE></html:form>

</body></html>

Combinando elementos de Struts en un JSP

3 … Framework STRUTS

Page 714: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 714

Un form de struts se define como la agrupación de información de entrada, encapsulada en una clase de java llamada Form y la misma se captura directamente de una sesión de usuario.

La función principal de este componente es la validación de los tipos de los datos. Cuando se trata la información que el usuario ha digitado, lo ideal es que la misma no vaya con errores en cuanto al tipo de las variables. De igual forma, si ese es el caso, el desarrollador desearía tener el medio por el cual poder comunicarle al usuario que ha cometido un error en la digitación. Esta es otra de las funciones del Form.

VIEW ---- ACTION FORM

3 … Framework STRUTS

Page 715: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 715

Cada formulario tiene su propio Form.

Contiene la declaración de todos los campos del formulario, sus métodos get() y set() y los métodos validate y reset.

Las variables y sus métodos deben usar el mismo nombre.

Contiene las validaciones para que se pueda redireccionar la página a otra JSP o se devuelva un resultado en la misma ventana.

VIEW ---- ACTION FORM

3 … Framework STRUTS

Page 716: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 716

Se trata de una clase integramente JAVA.

Si las validaciones son correctas, se llama al Action para realizar la lógica de negocio. Se trata de un firewall entre Cliente y Action.

Si bien el ActionForm tiene características que corresponden al Model,

pertenece a la View.

VIEW ---- ACTION FORM

3 … Framework STRUTS

Page 717: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 717

Como Crear un Action Form

Para definir un form se deben seguir los siguientes pasos:

Crear la clase NombreForm.java, en donde Nombre se sustituye por un nombre significativo que haga referencia al contenido de la clase.

Importar los paquetes org.apache.struts.action.* y javax.servlet.http.*.

Esta clase debe extender la clase ActionForm del paquete importado anteriormente.

3 … Framework STRUTS

Page 718: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 718

Método Get Método Set

public String getPropiedad () {return propiedad;

}

Public void setPropiedad (String propiedad) {

this.propiedad = propiedad;

}

… Como Crear un Action Form

Definir Strings de tipo privado para cada una de las propiedades que compondrán este formulario. (Ej. Nombre, Apellido1, Apellido2, Salario, etc).

Por cada uno de esas propiedades, definir dos métodos:

3 … Framework STRUTS

Page 719: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 719

Ahora se debe sobreescribir el siguiente método:

public ActionErrors validate(ActionMapping mapping,

HttpServletRequest request)

Por medio de este método se realizan las validaciones de losdatos recibidos en cada una de las propiedades definidasanteriormente. En el JSP asociado a este form, deben definirsecada una de estas propiedades como objetos de HTMLpara que al hacer “submit” del formulario de HTML, dichaspropiedades sean almacenadas en la clase de java o Formdestinado para ello.

Como Crear un Action Form

3 … Framework STRUTS

Page 720: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 720

Dentro del método validate se capturan los errores a través de

un objeto de errores (Ej. ActionErrors errors= new

ActionErrors(); será la primera variable local a declarar)que la función se encargará de devolver. Si no se encuentraningún error, entonces se devuelve un null o una instancia de laclase ActionErrors de zero-length.

3 … Framework STRUTS

Page 721: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 721

Si alguna validación no se cumple, entonces se agrega un errornuevo a la instancia de ActionErrors, como sigue:

errors.add("nombreError",new ActionError(”Descripción”)); nombreError: Etiqueta identificando el error.

Descripción: La descripción es el mensaje que se le desplegaráal usuario al devolver el foco al formulario de HTML. Puede seruna cadena definida por el desarrollador en el momento deagregar el error , o puede ser una etiqueta definida en el archivode .properties de la aplicación (Ej. NewActionError("error.descripcion")).

Como Crear un Action Form

3 … Framework STRUTS

Page 722: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 722

Es posible agregar tantos errores como se deseen.Posteriormente, en el JSP a través de un tag de HTML(<html:errors/>) se desplegarán los errores una vez que el formse haya invocado.

Como Crear un Action Form

3 … Framework STRUTS

Page 723: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 723

También se puede utilizar el siguiente método que será requerido cuando se utilicen checkbox:

Public void reset(ActionMapping mapping, HttpServletRequestrequest)

Este método únicamente llevará la inicialización de las variables.

Como Crear un Action Form

3 … Framework STRUTS

Page 724: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 724

Esto es todo lo que debe contener la claseNombreForm.java.

Por último, se debe incluir la definición de este form en el archivode configuración del Struts, struts-config.xml :

<!—===== Definición de formas ====== --><form-beans><form-bean name="NombreForm"

type="paquete.paquete2.paqueteN.nombreForm"/></form-beans>

Como Crear un Action Form

3 … Framework STRUTS

Page 725: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 725

En donde NombreForm, corresponde a un nombre por el cual sehará referencia al archivo .java que se ha generado, a través detoda la aplicación y paquete.paquete2.paqueteN.nombreFormque corresponde a la ruta física delarchivo dentro de la aplicación, de acuerdo a la especificación denombres de archivos de JAVA (fully qualified name).

Como Crear un Action Form

3 … Framework STRUTS

Page 726: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 726

public final class DireccionForm extends ActionForm {

private String tipDireccion;

public void reset(ActionMapping mapping, HttpServletRequest request) {

this.tipDireccion = null;}

ActionForm - Ejemplo

3 … Framework STRUTS

Page 727: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 727

public ActionErrors validate(ActionMapping mapping, HttpServletRequest

request) {

ActionErrors errors = new ActionErrors();DetalleTipoHelper detalleTipoHelper = null;boolean validar = true; //Se valida el Tipo de Direccion.if (this.tipDireccion == null ||"".equals(this.tipDireccion.trim()) ||

"-1".equals(this.tipDireccion.trim())) {errors.add("tipDireccion", new

ActionError("error.direccion.tipDireccion.requerido"));}return errors;

}

ActionForm – Ejemplo (cont.)

3 … Framework STRUTS

Page 728: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 728

//Definición del método get()public String getTipDireccion() {

return tipDireccion;}

//Definición del metodo set()public void setTipDireccion(String tipDireccion) {

this.tipDireccion = tipDireccion;}

}

ActionForm – Ejemplo (Cont.)

3 … Framework STRUTS

Page 729: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 729

Comprende la funcionalidad involucrada desde que el usuario genera un estímulo (click en link, envió de formulario...) hasta que se genera la interfaz de respuesta.

En medio, llama a los objetos de negocio del Model para que resuelvan funcionalidad de la lógica de negocio y según el resultado, ejecutará la JSP que deba generar la interfaz resultante

CONTROLLER ---- ACTION SERVLET

3 … Framework STRUTS

Page 730: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 730

El Controller usado por defecto se encuentra en org.apache.action.Action y puede extenderse o modificarse la clase.

Se basa en el fichero struts-config.XML

CONTROLLER ---- ACTION SERVLET

3 … Framework STRUTS

Page 731: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 731

Para integrar struts a una aplicación WEB es necesarioinicializar el framework a través del actionServlet. Estaclase representa el “controlador” en la estructura deMVC (Model View Controller).

La inicialización se realiza en el archivo web.xml y loselementos a configurar, se especifican a continuación:

Servlet-name: Nombre del Servlet.

Application: Nombre de la Aplicación.

Config: Ruta donde se encuentra el archivo struts-config.xml.

CONFIGURAR EL SERVLET INICIAL

3 … Framework STRUTS

Page 732: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 732

Debug y detail: Parámetros para controlar errores. Va desde cero, desactivado, hasta un nivel de 6, muy serio.

Validate: Se debe utilizar un parser de XML para validar el archivo de configuración.

CONFIGURAR EL SERVLET INICIAL

3 … Framework STRUTS

Page 733: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 733

<servlet><servlet-name>action</servlet-name><servlet-class>org.apache.struts.action.ActionServlet</servlet-class><init-param>

<param-name>application</param-name><param-value>afiliacion</param-value>

</init-param><init-param>

<param-name>config</param-name><param-value>/WEB-INF/struts-config.xml</param-

value></init-param><init-param>

<param-name>debug</param-name><param-value>0</param-value>

</init-param>

EJEMPLO ---- ACTION SERVLET

3 … Framework STRUTS

Page 734: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 734

<init-param><param-name>detail</param-name><param-value>0</param-value>

</init-param><init-param>

<param-name>validate</param-name><param-value>true</param-value>

</init-param><load-on-startup>1</load-on-startup>

</servlet>

EJEMPLO ---- ACTION SERVLET

3 … Framework STRUTS

Page 735: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 735

Fichero XML básico para el funcionamiento de la aplicación.

En él se definen todos los ActionForm de cada uno de los formularios de la aplicación.

También pueden definirse los redireccionamientos globales.

CONTROLLER ---- STRUTS-CONFIG.XML

3 … Framework STRUTS

Page 736: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 736

Y todos los action-mapping de la aplicación.

Si este fichero no se define correctamente, la aplicación no pasará de este punto, o estará mal redireccionada.

CONTROLLER ---- STRUTS-CONFIG.XML

3 … Framework STRUTS

Page 737: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 737

<?xml version="1.0" encoding="ISO-8859-1" ?><struts-config>

<! - - ==== Definición de formas === - - ><form-beans>

<form-bean name=“NombreForm"

type=“paquete1.paquete2.nombreForm.java"/></form-beans>

<!- - === Definición de redireccionamientos globales === -->

<global-forwards><forward name="success" path="/main.jsp"/>

</global-forwards>

Struts-Config - Ejemplo

3 … Framework STRUTS

Page 738: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 738

<!- - === Definicion de acciones === - -><action-mappings>

<action path="/actionFormHTML"type="paquete1.paqute2.nombreAction.java"name="nombreForm"scope="request"validate="true/false"input="/ArchivoRutaJSP"><forward name="success“

path="/ArchivoRutaJSP"/></action>

</action-mappings></struts-config>

Struts-Config (Cont.)

3 … Framework STRUTS

Page 739: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 739

Form-bean: Aquí se define la clase de java correspondiente al nombreForm.java.

Action-mappings: Elemento de XML donde se define la información asociada con el actionclass de java:

Path: Nombre del formulario. Este nombre es el que se utiliza en una página JSP para asociar un form de HTML con un form de Struts. De esta forma, al hacer el “submit” desde la página JSP, el Model ViewController de Struts manejará la solicitud en concordancia con el nombreForm.java y el nombreAction.java.

Elementos Struts-Config

3 … Framework STRUTS

Page 740: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 740

Tape: Nombre completo de la clase de java nombreAction.java. Corresponde a la ruta física del archivo dentro de la aplicación, de acuerdo a la especificación de nombres de archivos de JAVA (fullyqualified name).

Name: Nombre del Formulario.

Scope: Alcance del formulario, es decir, si se quiere que estéalmacenado en sesión o en el objeto request. Posibles valores = REQUEST ó SESSIÓN.

Elementos Struts-Config

3 … Framework STRUTS

Page 741: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 741

Validate: Determina si el método validate del form de struts seráinvocado. Posibles valores = TRUE ó FALSE.

Input: Ruta de la página JSP que invocó al form de struts. De esta manera, al haber un error, struts sabrá a quien devolver el Foco para la corrección de éste.

Forward-name: Corresponde a una etiqueta asociada a una ruta de una página JSP. Esto permitirá que desde el action, con solo invocar a mapping.findForward(etiqueta) sea posible efectuar la llamada.

Elementos Struts-Config

3 … Framework STRUTS

Page 742: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 742

2. Sets y Validate

4. Perform

7. Redireccionamiento

9. Resultado 8. ConsultaObjetos de

NegocioJavaBeans

1. SolicitudController(Servlet)

View(JSPs, TagLibs)

configXML

ActionForm

Action

3. Resultado

6. Resultado

5. Acciones

Model

Esquema funcional

3 … Framework STRUTS

Page 743: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 743

(1) Cuando un usuario completa un formulario y lo envia, el Controller busca en el struts-config.xml el ActionForm Beancorrespondiente.

(2) Luego realiza un set por cada input del form y llama al método validate. (3a) Si retorna errores, (7)(8)(9) el Controller llamaría a la JSP del formulario para que esta lo volviera a generar ( con losvalores establecidos por el usuario ) e incluyera los mensajes de error correspondientes.

Descripción del esquema funcional

3 … Framework STRUTS

Page 744: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 744

(3b) Si todo estuviese bien, (4) llamaría al método perform del Action (también configurado en el struts-config.xml) pasándole el ActionForm Bean como parámetro para que sea utilizado para (5)obtener los valores de los datos.

(6) Retorna los resultados, (7) el Controller redirecciona a la JSP correspondiente, y se (9) retorna la JSP resultante (8) con sus datos informados.

3 … Framework STRUTS

Page 745: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 745

El action es la clase de java en donde se manipula la información recolectada en el form.

Contiene los Objetos donde se implementa toda la lógica de negocio de la aplicación (el “how it’s done”) y donde se soportan todos los requisitos funcionales del Sistema sin mezclarlo con el workflow(“what to do”) que corresponden al Controller.

MODEL ---- ACTION

3 … Framework STRUTS

Page 746: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 746

Se accede al Action si las validaciones del Form (usuario y sesión) son correctas. Es aquí donde realmente se manipulan los datos, para almacenarlos en la Base de datos o para desplegarlos en un JSP.

Si no aparecen problemas, retorna la respuesta al Controller para que redireccione la aplicación a la nueva página JSP (Action Forward)

MODEL ---- ACTION

3 … Framework STRUTS

Page 747: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 747

Crear la clase NombreAction.java. En donde Nombre se

sustituye por un nombre significativo que haga

referencia al contenido de la clase.

Importar los paquetes:

import org.apache.struts.action.*;import javax.servlet.http.*;import javax.servlet.*;import java.io.*;

Como crear un Action

3 … Framework STRUTS

Page 748: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 748

Ahora se debe sobreescribir el método:

public ActionForward perform(ActionMapping mapping,ActionFormform,HttpServletRequest request,HttpServletResponse response) throws IOException, ServletException

Como crear un Action

3 … Framework STRUTS

Page 749: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 749

Esta clase debe ser declarada como final y debe extender la clase Action contenida en el paquete action importado anteriormente.

Aquí se validará la información contenida en el Form. Estavalidación será de contenido y no de forma (Ej: El monto deun depósito que no pueda ser menor a cierta cantidad).

Dependiendo del resultado de la validación, se enviará al usuario a una página específica.

Como crear un Action

3 … Framework STRUTS

Page 750: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 750

Si existiese algún error, basta con agregar la etiqueta de error yla descripción a una instancia de la clase ActionError.(ver punto 6de la sección definiendo nuevos Forms). Una vez que se tiene lainstancia de la clase ActionError se almacena en el objetorequest para ser invocada al retornar al

formulario que invocó el action(mapping.getInput()):if (!errors.empty()) {

saveErrors(request, errors);return (new ActionForward(mapping.getInput()));

}

Como crear un Action

3 … Framework STRUTS

Page 751: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 751

Inmediatamente después de esté fragmento de código, se debecontemplar la posibilidad de que no exista ningún error, en cuyocaso , se debe remover la información del Action Formalmacenada en la sessión o en el objeto request.

if (mapping.getAttribute() != null) {if ("request".equals(mapping.getScope()))

request.removeAttribute(mapping.getAttribute());else

session.removeAttribute(mapping.getAttribute());}

Como crear un Action

3 … Framework STRUTS

Page 752: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 752

Finalmente para redireccionar el Form a una página desde elaction class:

mapping.findForward(nombreDireccionar)

Donde el nombreDireccionar se reemplazará por el alias definidoen el archivo struts-config.xml en la sección de action-mappingspara el action class en cuestión.

Por último, se debe definir el Action class en el atributo <action-mappings> del archivo de configuración struts-config.xml visto con anterioridad.

Como crear un Action

3 … Framework STRUTS

Page 753: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 753

public final class DireccionAction extends Action {public ActionForward perform(ActionMapping mapping,

ActionForm form,HttpServletRequest request,HttpServletResponse response)

throws IOException, ServletException {ActionErrors errors = new ActionErrors();HttpSession session = request.getSession();ControlDireccionHelper controlDireccionHelper = null; // Si el Usuario no se encuentra en la session se enviaa la pagina inicial.UsuarioHelper usuario = (UsuarioHelper) session.getAttribute("usuario");if (usuario == null || "".equals(usuario)) {

return mapping.findForward("redirigirSimpleModal");}

Action - Ejemplo

3 … Framework STRUTS

Page 754: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 754

DireccionHelper direccionHelper = new DireccionHelper();if (boton.equalsIgnoreCase("GRABAR")) {

try {direccionHelper.setNumId(new Long(numId));direccionHelper.crear();

} catch (CreateException e) {e.printStackTrace();errors.add(ActionErrors.GLOBAL_ERROR,

new ActionError("error.direccion.operacion"));

} }

Action – Ejemplo (Cont.)

3 … Framework STRUTS

Page 755: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 755

if (!errors.empty()) {saveErrors(request, errors);return (new ActionForward(mapping.getInput()));

}

if (mapping.getAttribute() != null) {if ("request".equals(mapping.getScope()))

request.removeAttribute(mapping.getAttribute());else

session.removeAttribute(mapping.getAttribute());} return (mapping.findForward("success"));

}}

Action – Ejemplo (Cont.)

3 … Framework STRUTS

Page 756: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 756

Invoca las clases que se ejecutan en el servidor de aplicaciones.

Llama a los métodos contenidos en los Session Beans y los EJB’s.

Contiene una instancia de la clase Home.

MODEL ---- HELPER CLASS

3 … Framework STRUTS

Page 757: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 757

Debe ser serializable.

Contiene métodos get() y set() de las variables.

Puede contener un VO que retorna los valores del Bean accedido.

MODEL ---- HELPER CLASS

3 … Framework STRUTS

Page 758: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 758

public final class DireccionHelper implements Serializable {

private Long numId;private Long tipDireccion; private DireccionHome home = null;

public DireccionHelper() throws NamingException {Context initial = new InitialContext();Object

objref=initial.lookup("java:comp/env/ejb/Direccion");home =

(DireccionHome)PortableRemoteObject.narrow(objref,DireccionHome.class);

}

Helper Class - Ejemplo

3 … Framework STRUTS

Page 759: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 759

public void leer() throws RemoteException, FinderException {LlaveDireccion llave = new LlaveDireccion(numId,

tipDireccion, conSecuencia);

Direccion direccion = home.findByPrimaryKey(llave);bajar(direccion);direccion = null;

}public Long getNumId() {

return numId;}public void setNumId(Long numId) {

this.numId = numId;}

Helper Class – Ejemplo (Cont.)

3 … Framework STRUTS

Page 760: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 760

public DireccionVO getDireccionVO() { return crearDireccionVO();

}

private DireccionVO crearDireccionVO() {DireccionVO direccionVO = new

DireccionVO();direccionVO.setNumId(this.numId);direccionVO.setTipDireccion(this.tipDireccion);return direccionVO;

}}

Helper Class – Ejemplo (Cont.)

3 … Framework STRUTS

Page 761: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 761

Son un middelware entre la parte cliente y la parte servidor de Internet.

Posibilitan crear la lógica de negocio como componentes reusables, para poder usarlos en cualquier tipo de servidor que soporte la especificación EJB.

El programar EJBs en lugar de aplicaciones enteras en JAVA permite ahorrarse preocupaciones de seguridad, pool de conexiones, gestión transaccional, control de estado, persistencia o multithreading, ya que son características propias del servidor de aplicaciones.

MODEL ---- ENTERPRISE JAVA BEANS (EJB)

3 … Framework STRUTS

Page 762: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 762

Session Beans

Entity Beans

MODEL --- Tipos de EJB

3 … Framework STRUTS

Page 763: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 763

Representación del cliente en el servidor.

Una instancia de un session bean siempre pertenece a un único cliente.

Solo se permite el acceso al cliente que lo ha creado.

El servidor es responsable de mantener los datos entre las diferentes llamadas del cliente.

Existen dos tipos de session bean:

Stateless

Stateful

¿ Qué es un Session Bean ?

3 … Framework STRUTS

Page 764: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 764

No guarda estado entre las diferentes peticiones peticiones del cliente.

Se reutilizan las instancias para dar servicio a diferentes clientes, al no guardar información del cliente.

Guarda información del estado del cliente.

Sus instancias no son reutilizables entre llamadas de diferentesclientes.

No guarda datos ante una posible caida del servidor.

Stateless Session Beans

Statefull Session Beans

3 … Framework STRUTS

Page 765: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 765

Se pueden definir como Representaciones de datos del servidor.

No están ligados a ningún cliente, su instancia pertenece al servidor.

Se utilizan para englobar el acceso a la base de datos del servidor.

Responsables de mantener persistencia y de estar sincronizados con los datos a los que representan.

El servidor puede crear diferentes instancias si es necesario para la carga de peticiones del bean

¿ Qué es un Entity Bean ?

3 … Framework STRUTS

Page 766: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 766

Se deben desarrollar tres partes: La clase en cuestión, su interfaz HOME y la interfaz remota.

La Clase contiene la lógica de negocio.

La interfaz Home contiene la interfaz de acceso a la clase Bean.

Ciclo de desarrollo de un EJB

3 … Framework STRUTS

Page 767: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 767

El interfaz Remote contiene la interfaz remota de acceso a los valores retornados por la Clase Bean.

El deployment permite definir las propiedades del EJB, tales como nombre, tipo (Session o Entity), clases, campos,y se configura su comportamiento transaccional y su seguridad. El fichero es en XML.

Ciclo de desarrollo de un EJB

3 … Framework STRUTS

Page 768: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 768

Un EJB corre dentro de un container en un servidor de aplicaciones. El Container lo facilita el fabricante del servidor de aplicaciones y es el interface entre el EJB desarrollado y el servidor escogido.

Los containers proporcionan independencia al EJB del servidor en el que corre.

Arquitectura para EJB’s

3 … Framework STRUTS

Page 769: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 769

Contenedor EJBInvoca automaticamente servicios para la EJB basándose en requisitos definidos en los descriptores de despliegue (ciclo de vida, estados, transacciones, seguridad, persistencia)

Servidor de Aplicaciones EJBProporciona gestión de recursos y servicios middleware(transacciones, seguridad, persistencia)

EJB Home(ID del bean) Entorno

Contexto

EnterpriseBeanCliente

Pooling de recursosTolerancia a fallos

ConectividadMultithreading

Cache de DatosControl concurrencia

métodos métodos

createlookupdestroy

createlookupdestroy

Descriptoresde despliegue

Objeto EJB(vista de cliente)

Arquitectura para EJB’s

3 … Framework STRUTS

Page 770: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 770

Se usan en proyectos internet de tipo medio grande, es decir, los que corran en servidores de aplicaciones.

Se benefician de crear porciones de código reutilizables en diversos proyectos

¿ Para que usar EJB’s ?

3 … Framework STRUTS

Page 771: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 771

2. Modelo 3 Capas2. Modelo 3 Capas

3. Framework STRUTS3. Framework STRUTS

4. Estructura - Aplicación4. Estructura - Aplicación

1. Introducción1. Introducción

5. Ejercicios Prácticos5. Ejercicios Prácticos

4. Estructura - Aplicación

Page 772: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 772

View Controller Model EJB Database

WAR ( Web Application Archive) JAR (Java Archive)

EAR ( Enterprise Application Archive )

4 … Estructura de la Aplicación

Page 773: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 773

Permite agrupar clases desarrolladas en el lenguaje Java.

Otorga nivel de comprensión y reduce la carga administrativa al distribuir clases en el lenguaje.

No pueden ser observados ni manipulados directamente.

Un EJB-JAR es un JAR pero contiene la distribución del desarrollo de los EJB’s. Modulariza el desarrollo de los EJB’s.

JAR (Java Archives)

4 … Estructura de la Aplicación

Page 774: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 774

Permite agrupar un conjunto de clases y documentos que conformanuna aplicación Web en Java .

Es simplemente un WAR y un EJB-JAR agrupados. La razón de su existencia es basicamente para seguir la estructura de un “Java Application Server”

Un aplicación Server contiene el “Servlet Engine” (ambiente usado para WAR’s) y el “EJB Container” (ambiente usado para EJB-JAR’s)

WAR (Web Archives)

EAR (Enterprise Archives)

4 … Estructura de la Aplicación

Page 775: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 775

Se necesitan ejecutables para generar el JAR, el WAR y el EAR de

la aplicación

Estructura Principal

4 … Estructura de la Aplicación

Page 776: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 776

application.xml – define si generamos entorno de producción

o de desarrollo

ejb-jar.xml – contiene el deployment descriptor utilizado

en EJB’s

weblogic-ejb-jar – archivo de configuración utilizado por el

“Application Server”(concretamente el EJB-

Container)

ccss.afiliacion.* – contiene todas las clases Java necesarias para definir los distintos EJB’s

Estructura de Directorios

4 … Estructura de la Aplicación

Page 777: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 777

afiliacion --- interfaz Remota del EJB afiliacion

afiliacionHome --- interfaz de creacion del EJB afiliación

afiliacionEJB --- clase Java que contiene la el acceso a los datos

de la afiliación

afiliaciónVO --- Value Object que contiene todos los campos del EJB

afiliación

Estructura de Directorios

4 … Estructura de la Aplicación

Page 778: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 778

/*.html, *.jsp, *.css,*.gif ---directorios que contienen los elementos

comunmente utilizados

web.xml – contiene elementos de seguridad de la aplicación así como detalles sobre los

servlets que serán usados dentro de la misma

classes – contiene las clases Java adicionales a las del JDK que serán

empleadas por las JSP’s

lib – Contiene los JAR’s que usará la aplicación

tlds – clases que usa struts

weblogic-ejb-jar – archivo de configuración utilizado por el “ApplicationServer” (concretamente el Servlet Engine)

Estructura de Directorios

4 … Estructura de la Aplicación

Page 779: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 779

aportacionHelper --- clase Java de conexión entre el WAR y el JAR

BusquedaAportacionAction --- clase Java que contiene la lógica de negocio

de este formulario

BusquedaAportacionForm --- Clase Java que valida y contiene todos los

campos del formulario

Estructura de Directorios

4 … Estructura de la Aplicación

Page 780: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 780

SESSION BEAN

JAR

ARCHIVO FORM JAVA

JAR

ARCHIVO FORM JSPWAR

ARCHIVO CONTROLADOR JSPWAR

4 … Estructura de la Aplicación

Page 781: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 781

STRUTS - ACTION

WAR

HELPER

WAR

SESSION BEAN

JAR

ARCHIVO JSPWAR

STRUTS - FORMWAR

ENTITY BEAN

JAR

4 … Estructura de la Aplicación

Page 782: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 782

2. Modelo 3 Capas2. Modelo 3 Capas

3. Framework STRUTS3. Framework STRUTS

4. Estructura - Aplicación4. Estructura - Aplicación

1. Introducción1. Introducción

4 Estructura - Aplicación

5. Ejercicios Prácticos5. Ejercicios Prácticos

Page 783: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 783

El instructor le explicará la siguiente práctica:

Cree un paquete que se llame: org.efibs.sistemaDeOrdenes.struts.

Dentro del paquete anterior, cree un objeto Action y un Form. El primero tendrá como nombre ClienteAction y el segundo tendrácomo nombre ClienteForm.

Dentro del ClienteAction, cree una instancia de ServicioCliente e invoque cada una de las acciones para manipular la base de datos: insertar, modificar, eliminar y buscar respectivamente. Haga uso de métodos privados para mantener modularidad.

5 … Ejercicios Prácticos

Page 784: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 784

Para hacer uso de la información del form-bean, deberá utilizar la siguiente línea: ClientesForm formulario=(ClientesForm)form.

Recuerde ingresar el detalle de los mensajes en el archivo ApplicationResource.properties tal y como se aprecia en el siguiente ejemplo: mensajes.insertar = Inserción Satisfactoria!

Utilice objetos de tipo: sesión y request , para poder enviar la información de un cliente o de varios clientes a la página respectiva. Por ejemplo: "));

session.setAttribute("Cliente",elCliente);

request.setAttribute("listaClientes",lista);

Administre los errores de la siguiente manera:errors.add("",new

ActionError("mensajes.insertar));

!

5 … Ejercicios Prácticos

Page 785: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 785

Dentro del ClienteForm, implemente cada uno de los set y getscorrespondientes a los atributos que vaya a tener el JSP. Así por ejemplo, en el caso del módulo clientes los campos serían : id, nombre , dirección y teléfono.

Para el manejo automático de los errores pueden agregarse las siguientes líneas de código en el método validate del formulario:

ActionErrors errors = super.validate(mapping,request);return errors;

Recuerde hacer el siguiente cambio en el struts-config.xml:!

!

5 … Ejercicios Prácticos

<action-mappings> <action path="/Clientes" type="com.myapp.struts.ClientesAction" validate="true" input="/template.jsp" name="ClientesForm"> <forward name="desplegar" path="/despliegue_cliente.jsp"/> <forward name="desplegarTodos" path="/despliegue_clientes.jsp"/> <forward name="satisfaccion" path="/satisfaccion.jsp"/> <forward name="errores" path="/errores.jsp"/> </action>

Page 786: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 786

Otros cambios en el struts.config.xml serán agregados automáticamente tales como:!

5 … Ejercicios Prácticos

<form-bean name="ClientesForm" type="com.myapp.struts.ClientesForm"/>

En el caso de las JSP, se hará uso de tiles como parte de plantillas que le permita darle mayor extensibilidad a la aplicación. El siguiente código, deberá ubicarse en el archivo tiles-defs.xml

<definition name="mantenimientoClientes" path="/template.jsp"> <put name="header" value="/header.jsp"/> <put name="body" value="/mantenimiento_de_clientes.jsp"/> <put name="foot" value="/foot.jsp"/> </definition>

Page 787: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 787

INTRODUCCION A INTRODUCCION A J2EEJ2EE

Page 788: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 788

Objetivos

Crear y aplicar todos los términos y conceptos alrededor de la Tecnología J2EE.

Desplegar y construir Enterprise Java Beans

Construir, generar y probar Componentes Java utilizando un Ambiente de desarrollo Integrado (IDE).

Page 789: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 789

2. Definición de Enterprise Java Beans2. Definición de Enterprise Java Beans

3. Tecnología de Enterprise Java Beans3. Tecnología de Enterprise Java Beans

4. Contenedor de Enterprise Java Beans4. Contenedor de Enterprise Java Beans

5. Beneficios y Características5. Beneficios y Características

1. Introducción1. Introducción

6. Mecanismos de Interacción6. Mecanismos de Interacción

1 Introducción

Page 790: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 790

8. Tipos de los Enterprise Java Beans8. Tipos de los Enterprise Java Beans

9. Session Beans9. Session Beans

10. Entity Beans10. Entity Beans

11. Message-Driven Beans11. Message-Driven Beans

12. Formas de Acceso12. Formas de Acceso

7. Conceptos Básicos J2EE7. Conceptos Básicos J2EE

1 Introducción

13. Ejercicio Práctico13. Ejercicio Práctico

Page 791: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 791

J2EE, es utilizado para crear aplicaciones empresariales y comerciales. Ha tenido gran auge y sobre todo brinda bastante seguridad y abstracción en la implementación de los sistemas. Es por este motivo, que durante este curso se le enseñará al estudiante como poder crear y publicar los principales componentes de la arquitectura.

Es esencial, que el estudiante posea un conocimiento sólido de tecnologías tales como: JSP, Servlets, JDBC y si es posible también Struts.

1.1 Introducción

Page 792: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 792

2. Definición de Enterprise Java Beans2. Definición de Enterprise Java Beans

3. Tecnología de Enterprise Java Beans3. Tecnología de Enterprise Java Beans

4. Contenedor de Enterprise Java Beans4. Contenedor de Enterprise Java Beans

5. Beneficios y Características5. Beneficios y Características

1. Introducción1. Introducción

6. Mecanismos de Interacción6. Mecanismos de Interacción

2 Definición de Enterprise Java Beans

Page 793: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 793

8. Tipos de los Enterprise Java Beans8. Tipos de los Enterprise Java Beans

9. Session Beans9. Session Beans

10. Entity Beans10. Entity Beans

11. Message-Driven Beans11. Message-Driven Beans

12. Formas de Acceso12. Formas de Acceso

7. Conceptos Básicos J2EE7. Conceptos Básicos J2EE

2 Definición de Enterprise Java Beans

13. Ejercicio Práctico13. Ejercicio Práctico

Page 794: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 794

De acuerdo a la definición de Sun Microsystems:

“Los Enterprise JavaBeans es una arquitectura para el desarrollo y ensamblaje de aplicaciones distribuidas de negocio basado en componentes. Las aplicaciones que se desarrollen utilizando EJB son escalables, transaccionales y poseen seguridad multi-usuario. Estas aplicaciones pueden ser escritas una vez, y ser ensambladas en cualquier plataforma de servidor que soporte la especificación de los EJB.”

Los Enterprise JavaBeans son escritos en el lenguaje de programación Java.

Son componentes del lado del servidor (server-side), los cuales encapsulan la lógica de Negocio de una aplicación.

2.1 Definición de Enterprise Java Beans

Page 795: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 795

2. Definición de Enterprise Java Beans2. Definición de Enterprise Java Beans

3. Tecnología de Enterprise Java Beans3. Tecnología de Enterprise Java Beans

4. Contenedor de Enterprise Java Beans4. Contenedor de Enterprise Java Beans

5. Beneficios y Características5. Beneficios y Características

1. Introducción1. Introducción

6. Mecanismos de Interacción6. Mecanismos de Interacción

3 Tecnología de Enterprise Java Beans

Page 796: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 796

8. Tipos de los Enterprise Java Beans8. Tipos de los Enterprise Java Beans

9. Session Beans9. Session Beans

10. Entity Beans10. Entity Beans

11. Message-Driven Beans11. Message-Driven Beans

12. Formas de Acceso12. Formas de Acceso

7. Conceptos Básicos J2EE7. Conceptos Básicos J2EE

3 Tecnología de Enterprise Java Beans

13. Ejercicio Práctico13. Ejercicio Práctico

Page 797: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 797

La especificación de Enterprise JavaBeans define una arquitectura para un sistema transaccional de objetos distribuidos basado en componentes.

La especificación contiene un modelo de programación; es decir, convenciones o protocolos y un conjunto de clases e interfaces que crean el API EJB.

Este modelo de programación proporciona a los desarrolladores de Beans y a los vendedores de servidores EJB un conjunto de contratos que definen una plataforma de desarrollo común.

El objetivo de estos contratos es asegurar la portabilidad a través de los vendedores y el soporte de un rico conjunto de funcionalidades.

3.1 Tecnología de EJBs

Page 798: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 798

La plataforma Java 2 Enterprise Edition se utiliza para distribuir en un modelo de capas las aplicaciones Enterprise.

La lógica de la aplicación es dividida en componentes acorde a la funcionalidad.

3.2 Plataforma J2EE

Page 799: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 799

3.3 Comunicación de Servidores

Page 800: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 800

3.4 Componentes de Negocio

Page 801: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 801

3.5 J2EE API Plataforma

Page 802: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 802

Acceso BDLógica de Negocio

Servidor HTTPhttp://www.efibs.com

Servidor de Aplicaciones

ejb ejb ejb

Firewall

InternetJDBC(Pool)

htmhtmhtm

jsp jsp jsp

JSP COMPILER/SERVLETG ENGINE

servletsservlets

Firewall

Servidor de Web

servletsservlets

Entity BeansSession BeansJava Beans

Servidor de Base de Datos

servletsservlets

Presentación / Gestión de EventosUtilización de framework para la gestión de eventos, errores y excepciones. Permite desarrollar aplicaciones muy estables, facilitando la gestión del interfaz gráfico.

Lógica de NegocioMediante la utilización de EJBs (Session y EntityBeans) o Java Beans se implementa la lógica de negocio, perfectamente aislada y controlada mediante el framework.

Acceso DatosEn algunos casos mediante procedimientos almacenados en la BD se encapsula lógica de negocio.

Presentación / Gestión de Eventos

Presentación Browser

3.6 J2EE - Escenario Simple

Page 803: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 803

2. Definición de Enterprise Java Beans2. Definición de Enterprise Java Beans

3. Tecnología de Enterprise Java Beans3. Tecnología de Enterprise Java Beans

4. Contenedor de Enterprise Java Beans4. Contenedor de Enterprise Java Beans

5. Beneficios y Características5. Beneficios y Características

1. Introducción1. Introducción

6. Mecanismos de Interacción6. Mecanismos de Interacción

4 Contenedor de Enterprise Java Beans

Page 804: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 804

8. Tipos de los Enterprise Java Beans8. Tipos de los Enterprise Java Beans

9. Session Beans9. Session Beans

10. Entity Beans10. Entity Beans

11. Message-Driven Beans11. Message-Driven Beans

12. Formas de Acceso12. Formas de Acceso

7. Conceptos Básicos J2EE7. Conceptos Básicos J2EE

4 Contenedor de Enterprise Java Beans

13. Ejercicio Práctico13. Ejercicio Práctico

Page 805: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 805

Los Beans Enterprise son componentes de software que se ejecutan en un entorno especial llamado un contenedor EJB.

El contenedor contiene y maneja un Bean enterprise de igual forma que el Servidor Web Java contiene un servlet o un servidor Web contiene un appletJava.

Un Bean Enterprise no puede funcionar fuera de un contenedor EJB.

El contenedor EJB controla cada aspecto del bean enterprise en tiempo de ejecución incluyendo accesos remotos al bean, seguridad, persistencia, transacciones, concurrencia, y accesos a un almacén de recursos.

4.1 Contenedor de EJBs

Page 806: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 806

El contenedor aísla al bean enterprise de accesos directos por parte de aplicaciones cliente.

Cuando una aplicación cliente invoca un método remoto de un bean enterprise, el contenedor primero intercepta la llamada para asegurar que la persistencia, las transacciones, y la seguridad son aplicadas apropiadamente a cada operación que el cliente realiza en el Bean.

El contenedor maneja estos aspectos de forma automática, por eso el desarrollador no tiene que escribir este tipo de lógica dentro del propio código del bean.

4.1 … Contenedor de EJBs

Page 807: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 807

2. Definición de Enterprise Java Beans2. Definición de Enterprise Java Beans

3. Tecnología de Enterprise Java Beans3. Tecnología de Enterprise Java Beans

4. Contenedor de Enterprise Java Beans4. Contenedor de Enterprise Java Beans

5. Beneficios y Características5. Beneficios y Características

1. Introducción1. Introducción

6. Mecanismos de Interacción6. Mecanismos de Interacción

5 Beneficios y Características

Page 808: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 808

8. Tipos de los Enterprise Java Beans8. Tipos de los Enterprise Java Beans

9. Session Beans9. Session Beans

10. Entity Beans10. Entity Beans

11. Message-Driven Beans11. Message-Driven Beans

12. Formas de Acceso12. Formas de Acceso

7. Conceptos Básicos J2EE7. Conceptos Básicos J2EE

5 Beneficios y Características

13. Ejercicio Práctico13. Ejercicio Práctico

Page 809: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 809

Simplifican los desarrollos largos y las aplicaciones distribuidas.

El contenedor (Container) de EJB proporciona servicios a nivel de sistema.

Se concentran en la solución de problemas de negocio.

El EJB-Container es responsable de la administración de las transacciones y de la autorización de la seguridad, dando como beneficio, que el desarrollador de Bean no se preocupe por estos temas.

División de grupos de trabajo.

La capa de presentación puede ejecutarse en dispositivos pequeños.

Los EJB’s son componentes portables.

Se pueden construir nuevos componentes en base a los existentes.

5.1 Beneficios y Características

Page 810: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 810

Entre las características más importantes, se encuentran las siguientes:

Si se requiere la distribución de componentes entre múltiples maquinas.

Cuando las aplicaciones deben ser escalables. (Número creciente de usuarios).

Cuando se requiere integridad de datos ya que soportan transacciones.

Cuando se desea manejar el acceso concurrente de objetos compartidos.

Cuando la aplicación tiene una gran cantidad de desarrolladores ya que con pocas líneas de código, los clientes remotamente pueden localizar los componentes EJB desarrollados por otras personas.

5.1 ¿Cuándo utilizar EJBs?

Page 811: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 811

La portabilidad es el principal valor que EJB pone encima de la mesa. La portabilidad asegura que un bean desarrollado para un contenedor puede migrarse a otro si ese otro ofrece mejor rendimiento, características, o ahorros. Portabilidad también significa que la destreza del desarrollador de beans puede influenciarse a través de varios contenedores EJB, proporcionando mejores oportunidades para las organizaciones y los desarrolladores.

La simplicidad del modelo de programación EJB hace que este sea muy valioso. Como el contenedor tiene cuidado de manejar las complejas tareas como la seguridad, las transacciones, la persistencia, la concurrencia y el control de recursos, el desarrollador de beans es libre para enfocar su atención en las reglas del negocio y en un modelo de programación muy sencillo.

Esto quiere decir que los beans pueden desarrollarse rápidamente sin necesidad de profundos conocimientos en objetos distribuidos, transacciones y otros sistemas enterprise.

5.2 Otras Características

Page 812: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 812

2. Definición de Enterprise Java Beans2. Definición de Enterprise Java Beans

3. Tecnología de Enterprise Java Beans3. Tecnología de Enterprise Java Beans

4. Contenedor de Enterprise Java Beans4. Contenedor de Enterprise Java Beans

5. Beneficios y Características5. Beneficios y Características

1. Introducción1. Introducción

6. Mecanismos de Interacción6. Mecanismos de Interacción

6 Mecanismos de Interacción

Page 813: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 813

8. Tipos de los Enterprise Java Beans8. Tipos de los Enterprise Java Beans

9. Session Beans9. Session Beans

10. Entity Beans10. Entity Beans

11. Message-Driven Beans11. Message-Driven Beans

12. Formas de Acceso12. Formas de Acceso

7. Conceptos Básicos J2EE7. Conceptos Básicos J2EE

6 Mecanismos de Interacción

13. Ejercicio Práctico13. Ejercicio Práctico

Page 814: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 814

Un Enterprise Bean depende del contenedor para todo lo que necesite.

Si un Enterprise Bean necesita acceder a una conexión JDBC o a otro Enterprise Bean, lo hace a través del contenedor.

Si un Enterprise Bean necesita acceder a la identidad del que lo invoca, obtiene una referencia a sí mismo, o accede a las propiedades a través de su contenedor.

El Enterprise Bean interactúa con su contenedor a través de uno de los siguientes tres mecanismos:

6.1 Mecanismos de Interacción

Page 815: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 815

Todo bean implementa un subtipo del interface EnterpriseBean que define muchos métodos, llamados métodos de retrollamada.

Cada uno de estos métodos alerta al bean sobre un evento diferente en su ciclo de vida y el contenedor llamará a estos métodos para notificar al beancuando lo va a activar, persistir su estado a la base de datos, finalizar la transacción, eliminar el bean de la memoria, etc.

Los métodos de retrollamada le dan al bean la oportunidad de hacer algún trabajo inmediatamente antes o después de algún evento.

6.1.1 Métodos de Retrollamada

Page 816: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 816

Todo bean obtiene un objeto EJBContext, que es una referencia directa a su contenedor.

El interface EJBContext proporciona métodos para interactuar con el contenedor para que el bean pueda solicitar información sobre su entorno como la identidad de sus clientes, el estado de una transacción, o para obtener referencias remotas a sí mismo.

6.1.2 EJBContext

Page 817: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 817

El Inteface Java de Nombres y Directorios (JNDI) es una extensión estándar de la plataforma Java para acceder a sistemas de nombrado como LDAP, NetWare, sistemas de ficheros, etc.

Todo bean tiene automáticamente acceso a un sistema de nombrado especial llamado Environment Naming Context (ENC). El ENC estácontrolado por el contenedor y los bean acceden a él usando JNDI.

El JNDI ENC permite al bean acceder a recursos como conexiones JDBC, otros enterprise beans, y a propiedades específicas para ese bean.

6.1.3 Java Naming and Directory Interface (JNDI)

Page 818: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 818

2. Definición de Enterprise Java Beans2. Definición de Enterprise Java Beans

3. Tecnología de Enterprise Java Beans3. Tecnología de Enterprise Java Beans

4. Contenedor de Enterprise Java Beans4. Contenedor de Enterprise Java Beans

5. Beneficios y Características5. Beneficios y Características

1. Introducción1. Introducción

6. Mecanismos de Interacción6. Mecanismos de Interacción

7. Conceptos Básicos J2EE

Page 819: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 819

8. Tipos de los Enterprise Java Beans8. Tipos de los Enterprise Java Beans

9. Session Beans9. Session Beans

10. Entity Beans10. Entity Beans

11. Message-Driven Beans11. Message-Driven Beans

12. Formas de Acceso12. Formas de Acceso

7. Conceptos Básicos J2EE7. Conceptos Básicos J2EE

7. Conceptos Básicos J2EE

13. Ejercicio Práctico13. Ejercicio Práctico

Page 820: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 820

Una aplicación de Java 2 Edición Empresarial (Java 2 Enterprise Edition por sus siglas en inglés, J2EE) consiste en una arquitectura que contiene módulos de:

Conexión a base de datos y lógica de negocio.

Módulos de páginas WEB a ser desplegados en un navegador de Internet.

Este tipo de aplicaciones constituye un estándar desarrollado por la empresa Sun Microsystems, Inc.

Una aplicación de J2EE, está definida básicamente por tres archivos:

Enterprise Archive (EAR)

Java Archive (JAR)

Web Archive (WAR)

los cuales se detallan a continuación:

7.1 Conceptos Básicos J2EE

Page 821: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 821

El archivo de Web (Web Archive, por sus siglas en Inglés) contiene la capa de presentación o páginas web que se desplegarán en el browser del cliente.

Todos los elementos relacionados con las páginas web deben ser incluidos en este archivo, como por ejemplo, imágenes, javascript, java server pages(JSP), Hypertext Markup Language (HTML), hoja de estilos (.CSS), etc.

Todos los archivos que se incluyan en el .WAR, debe ser organizarlos en diferentes carpetas como “images”, “js” para javascript, etc. Por medio de esta estructura se facilitará el acceso una vez que la aplicación web estéinstalada.

El archivo WAR debe contener un archivo principal (index.jsp o index.html) que servirá de inicio a la aplicación. En la raíz de la estructura directorios que contendrá este archivo, se distingue el archivo principal index.jsp o index.html.

7.1.1 Estructura Básica del War

Page 822: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 822

/NombreWAR/: Carpeta que contendrá toda la definición de la capa de presentación de la Aplicación WEB. Nombre se refiere al nombre de la aplicación. En la raíz de esta carpeta pueden incluirse ciertos archivos, como por ejemplo un index.html. Se recomienda que los demás archivos de despliegue al cliente (.jsp, .html) sean incluidos en subcarpetas que hagan referencia al contenido del archivo, como por ejemplo, “usuarios”,”recibos”,”notas de crédito y débito”, etc.

/NombreWAR/WEB-INF/: Carpeta estándar para aplicaciones web. Dentro de ella se incluirán archivos de configuración (.xml) así como archivos java para validaciones o redireccionar archivos. Se recomienda colocar aquí cualquier archivo de dominio no público, esto quiere decir que esta carpeta no estará visible en el navegador o browser de internet.

7.1.2 Estructura de DirectoriosWar

Page 823: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 823

/NombreWAR/WEB-INF/web.xml: Este archivo contendrála definición del archivo principal, definición de paquetes o servlets a utilizar, variables de ambiente, página de error, referencias a objetos reutilizables (EJB), etc. Dependiendo del servidor de aplicaciones que se esté manejando, es posible que sea necesario incluir otro archivo como complemento del web.xml. Por ejemplo, en el Oracle 9IAS se incluye un orion-web.xml, cuyo contenido es una variación del web.xml, y es necesario para ser interpretado por dicho servidor.

7.1.2 … Estructura de Directorios War

Page 824: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 824

/NombreWAR/WEB-INF/classes/: Carpeta donde se ubicarán archivos .java para determinadas tareas.

/NombreWAR/WEB-INF/lib/: Carpeta donde se encuentran distintas librerías para el funcionamiento de la aplicación.

/NombreWAR/WEB-INF/tlds/: Carpeta donde se guardan los descriptores de las librerias de tags.

/NombreWAR/js/: En esta carpeta se incluyen todos los archivos de Javascript.

/NombreWAR/styles/: En esta carpeta se incluyen todos los archivos de Hojas de Estilos.

/NombreWAR/images/: En esta carpeta se incluyen todas las imágenes de la aplicación.

7.1.2 … Estructura de Directorios War

Page 825: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 825

7.1.2 … Estructura de Directorios War

Page 826: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 826

El archivo de Java (Java Archive, por sus siglas en inglés) se refiere a la jerarquía de archivos que se encargará de soportar la conexión a la base de datos así como las clases conteniendo la lógica del negocio.

Para una mejor agrupación de los archivos dentro del .JAR, las clases de acceso a la base de datos, deben ser agrupadas en una carpeta con un nombre representativo a la aplicación. Además, existirá otra carpeta denominada META-INF, en mayúsculas estrictamente.

Aquí se ubicará el archivo ejb-jar.xml, el cual se refiere al estándar de configuración de los objetos o componentes.

7.1.3 Estructura Básica JAR

Page 827: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 827

Algunos de los elementos a definir dentro de este archivo son los siguientes:

Descripción del .JAR

Declaración de session beans.

Declaración de entity beans.

Seguridad en los accesos a beans y

Transacciones de base de datos por bean y por método.

7.1.3 … Estructura Básica JAR

Page 828: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 828

NombreJAR/: Carpeta principal del Archivo JAR. Dentro de ella se localizandescriptores de configuración de objetos de acceso a base de datos (EntityBeans y Session Beans).

/META-INF/: Contiene el descriptor de los EJBs llamado ejb-jar.xml. Dependiendo del servidor de aplicaciones que se esté utilizando, es posible que más archivos .xml sean requeridos, por ejemplo orion-ejb-jar.xml en el caso del Oracle 9IAS.

/META-INF/ejb-jar.xml: Dentro de este archivo se definen cada objeto de base de datos EJB. Por cada uno de ellos debe especificarse su nombre, la ruta de acceso a la clases que lo componen y las relaciones que existen entre ellos. También se definen aquí roles de seguridad en cuanto al acceso, así como los niveles de transacción por Bean.

7.1.4 … Estructura de Directorios JAR

Page 829: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 829

/NombreJAR/NombreAplicacion/: Dentro de esta carpeta se encuentran la definición de las clases de los EJB. NombreAplicacion hace referencia a un nombre relacionado con la aplicación y constituye el nombre del paquete base a especificar en cada clase java. Por cada EJB deberá definirse una carpeta conteniendo, mínimo, las tres clases básicas de las que se compone un Bean.

/META-INF/NombreAplicacion/NombreBean: Se definirán tanto Beanscomo tablas o lógica de negocio se requieran. Como se mencionó antes, cada Enterprise Java Bean contendrá al menos 3 clases java.

7.1.4 … Estructura de Directorios JAR

Page 830: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 830

7.1.5 … Ejemplo de Directorios

Page 831: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 831

Dentro del archivo empresarial (Enterprise Archive, por sus siglas en inglés) se incluyen varias estructuras de directorio y archivos XML para configuración. Los estándares de J2EE utilizan ciertos acrónicos para los nombres de los archivos (Ej. WAR, EAR, JAR).

La estructura a seguir se describe a continuación:

7.1.6 … Estructura Básica EAR

Page 832: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 832

nombreAPP.ear Archivo de aplicación que podrá ser ejecutado en el servidor de aplicaciones Oracle 9IAS. Dependiendo del servidor a utilizar, así serán las modificaciones que habrá que realizar en el .EAR, siendo estas mínimas en la programación y la lógica. Este archivo contendrá la siguiente estructura de archivos:

Aplication.xml

Aquí se incluye la configuración de la aplicación y serviráde guía o referencia al servidor de aplicaciones en el momento de instalar la aplicación. Algunos de los elementos básicos más importantes que deben ser configurados son:

Nombre de despliegue de la aplicación.Módulos que contiene el .EAR y sus rutas.Carpeta raíz de la aplicación, etc.

Este archivo estará localizado dentro de una carpeta llamada META-INF, estrictamente en mayúscula.

7.1.6 … Estructura Básica EAR

Page 833: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 833

NombreWAR.warContiene los módulos de las páginas WEB. Dichas páginas se desplegarán en el cliente y combinan llamadas a los objetos de lógica de negocio con elementos de HTML. La palabra Nombre debe ser reemplazada por el nombre genérico asociado a la aplicación. Nota: debe tenerse en cuenta que el nombre asignado a la aplicación a utilizar debe ser igual para todos los archivos de la aplicación.

NombreJAR.jarArchivo que contiene los módulos de lógica de negocio, objetos reutilizables y conexión a base de datos. La palabra Nombre debe ser reemplazada por el nombre genérico asociado a la aplicación. Nota: debe tenerse en cuenta que el nombre asignado a la aplicación a utilizar debe ser igual para todos los archivos de la aplicación.

7.1.7 … Estructura de Directorios EAR

Page 834: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 834

Los archivos de definición de tipo de Documento (DTD, Document TypeDefinition) son aquellos que definen los “tags” o elementos utilizados en un archivo XML. Aquí se especifica cuantos subelementos posee un elemento y cuales son requeridos y cuales opcionales.

Es necesario utilizar un DTD para realizar las validaciones sintácticas de un archivo XML. De esta forma, el parser que se utilice podrá indicar errores cometidos en la definición de un tag. Algunos ejemplos de errores a detectar son:

Un tag mal escrito.Utilización de una propiedad en un lugar que no corresponde.Omisión de un elemento requerido.

7.1.8 Definición de los DTD’s

Page 835: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 835

Referencia Local:

La referencia local se refiere a tener una copia en un disco duro de cada uno de los Archivos DTD utilizado por un xml. De esta forma, al invocarse desde una aplicación web, las validaciones se realizarán localmente. La ventaja que presenta, es un control total sobre la disponibilidad del DTD.

La copia local debe encontrarse en una carpeta en un servidor web y debe poder leerse desde el navegador o browser.

Para referenciar un DTD debe describirse su ubicación al inicio del archivo XML que lo utiliza:

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE ejb-jar PUBLIC

"-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN" "http://localhost:9000/dtds/ejb-jar_2_0.dtd">

7.1.9 Referencias Locales DTD’s

Page 836: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 836

Referencia Web

En el caso de los EJB, Sun Microsystems dispone públicamente de dtd que contiene la especificación de los elementos, que debe contener el archivo ejb-jar.xml. Únicamente debe escribirse la dirección web donde se encuentra el archivo:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN" "http://www.java.sun.com/dtd/ejb-jar_2_0.dtd">

7.1.10 Tipos de ReferenciaWeb a DTD’s

Page 837: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 837

<?xml version="1.0"?>

<!DOCTYPE web-app PUBLIC '-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN'

'http://java.sun.com/dtd/web-app_2_3.dtd'>

<web-app>

<servlet>

<servlet-name>Bienvenida</servlet-name>

<servlet-class>org.efibs.accion.Bienvenida</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>Bienvenida</servlet-name>

<url-pattern>/Bienvenida</url-pattern>

</servlet-mapping>

<session-config>

<session-timeout>30</session-timeout>

</session-config>

<welcome-file-list>

<welcome-file>index.jsp</welcome-file>

<welcome-file>index.html</welcome-file>

<welcome-file>index.htm</welcome-file>

</welcome-file-list>

<ejb-ref>

<ejb-ref-name>ejb/Usuario</ejb-ref-name>

<ejb-ref-type>Entity</ejb-ref-type>

<home>org.sica.comun.usuario.UsuarioHome</home>

<remote>org.sica.comun.usuario.Usuario</remote>

</ejb-ref>

<ejb-ref>

<ejb-ref-name>ejb/ListasDeducciones</ejb-ref-name>

<ejb-ref-type>Session</ejb-ref-type>

<home>org.sica.cxc.dedpla.listas.ListasHome</home>

<remote>org.sica.cxc.dedpla.listas.Listas</remote>

</ejb-ref>

</web-app>

7.1.11 Ejemplo de un web.xml

Page 838: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 838

<?xml version = '1.0' encoding = 'UTF-8'?>

<!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD EnterpriseJavaBeans 2.0//EN" "http://java.sun.com/dtd/ejb-jar_2_0.dtd">

<ejb-jar>

<display-name>sicaJAR</display-name>

<enterprise-beans>

<entity>

<display-name>UsuarioEJB</display-name>

<ejb-name>ejb/Usuario</ejb-name>

<home>org.sica.comun.usuario.UsuarioHome</home>

<remote>org.sica.comun.usuario.Usuario</remote>

<ejb-class>org.sica.comun.usuario.UsuarioEJB</ejb-class>

<persistence-type>Bean</persistence-type>

<prim-key-class>org.sica.comun.usuario.LlaveUsuario</prim-key-class>

<reentrant>False</reentrant>

</entity>

<session>

<display-name>ListasDeduccionesEJB</display-name>

<ejb-name>ejb/ListasDeducciones</ejb-name>

<home>org.sica.cxc.dedpla.listas.ListasHome</home>

<remote>org.sica.cxc.dedpla.listas.Listas</remote>

<ejb-class>org.sica.cxc.dedpla.listas.ListasEJB</ejb-class>

<session-type>Stateless</session-type>

</session>

</enterprise-beans>

</ejb-jar>

7.1.12 Ejemplo de un ejb.jar.xml

Page 839: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 839

2. Definición de Enterprise Java Beans2. Definición de Enterprise Java Beans

3. Tecnología de Enterprise Java Beans3. Tecnología de Enterprise Java Beans

4. Contenedor de Enterprise Java Beans4. Contenedor de Enterprise Java Beans

5. Beneficios y Características5. Beneficios y Características

1. Introducción1. Introducción

6. Mecanismos de Interacción6. Mecanismos de Interacción

8. Tipos de los Enterprise Java Beans

Page 840: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 840

8. Tipos de los Enterprise Java Beans8. Tipos de los Enterprise Java Beans

9. Session Beans9. Session Beans

10. Entity Beans10. Entity Beans

11. Message-Driven Beans11. Message-Driven Beans

12. Formas de Acceso12. Formas de Acceso

7. Conceptos Básicos J2EE7. Conceptos Básicos J2EE

8. Tipos de los Enterprise Java Beans

13. Ejercicio Práctico13. Ejercicio Práctico

Page 841: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 841

Existen 3 tipos de Enterprise Java Beans (EJB):

Actua como listener para el API de Java Message Service, procesando mensajes asincrónicamente

Message-Driven

Representa un objeto de la entidad de negocio que exista en almacenaje persistente.

Entity Bean

Realiza una tarea para un cliente, implementa Servicios Web.

Session Bean

PropósitoTipos de Enterprise Java Beans

8.1 Tipos de los Enterprise Java Beans

Page 842: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 842

2. Definición de Enterprise Java Beans2. Definición de Enterprise Java Beans

3. Tecnología de Enterprise Java Beans3. Tecnología de Enterprise Java Beans

4. Contenedor de Enterprise Java Beans4. Contenedor de Enterprise Java Beans

5. Beneficios y Características5. Beneficios y Características

1. Introducción1. Introducción

6. Mecanismos de Interacción6. Mecanismos de Interacción

9. Sesion Beans

Page 843: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 843

8. Tipos de los Enterprise Java Beans8. Tipos de los Enterprise Java Beans

9. Session Beans9. Session Beans

10. Entity Beans10. Entity Beans

11. Message-Driven Beans11. Message-Driven Beans

12. Formas de Acceso12. Formas de Acceso

7. Conceptos Básicos J2EE7. Conceptos Básicos J2EE

9. Sesion Beans

13. Ejercicio Práctico13. Ejercicio Práctico

Page 844: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 844

Los beans de sesión representan un proceso o tarea, que se realizan en beneficio de la aplicación cliente

Los session beans se dividen en dos categorías:

Cuando se completa una llamada a algún método del bean, éste queda libre para satisfacer las necesidades de otro cliente.

Mantiene un estado conocido como estado conversacional, que significa que el bean puede mantener sus variables en cache con respecto al cliente que está atendiendo y serán modificadas por los métodos en invocaciones posteriores.

StateFull (Con Estado)

Colección de funciones o métodos encargados de realizar operaciones en la base de datos, comúnmente de lectura.

Stateless (Sin Estado)

9.1 Session Beans

Page 845: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 845

Para crear un Session Bean se deben especificar los siguientes 3 archivos:Clase Nombre del Archivo Descripción

Interfaz Remota Nombre.java En esta interfaz se definen los encabezados de los métodos del negocio que se presentan como públicos parapoder ser utilizado desde una clase java o desde un .JSP. Deben arrojar la excepción remoteException obligatoriamente y extender la clase javax.ejb.EJBObject.

Clase Home Remota NombreHome.java Esta interfaz define el encabezado del método create queserá definido en la clase del bean. Debe arrojar la excepciónremoteException obligatoriamente y extender la clasejavax.ejb.EJBHome.

Clase del Bean NombreEJB.java Los métodos del ciclo de vida del bean de tipo Sessión, son definidos en esta clase. Los encabezados definidosvarían un poco con respecto a las interfaces anteriores. Por ejemplo, en esta clase el método create se define ejbCreate y en la interfaz home se define como create. Estainterfaz debe implementar la clase javax.ejb.SessionBean.

9.1 … Session Beans

Page 846: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 846

Cuando el Session Bean se invoca, se revisa el pool de conexiones y se determina si existe algún bean creado que esté libre. De no ser así, se crea una nueva instancia y se invoca al método create() que inicializa la interfaz remota. Posteriormente, cada uno de los métodos de negocio definidos, podrán ser invocados mientras el Bean se mantenga en su ciclo de vida.

Este tipo de Session Bean es de tipo stateless, lo que significa que no guarda ningún estado y las acciones que realiza en memoria son inmediatas y finales.

Stateless Session BeanStateful Session Bean

9.2 Session Beans – Ciclos de Vida

Page 847: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 847

Cuando solo un cliente tiene acceso a la instancia del Bean en cualquier tiempo.

Cuando el estado del Bean no es persistente, existiendo por periodos cortos.

Cuando se pone un servicio web en ejecución.

9.3 ¿Cuando utilizar un Session Beans?

Page 848: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 848

Cuando el estado del bean representa una interacción entre el bean y un cliente en especifico.

Cuando el Bean necesita llevar a cabo la información sobre el cliente a través de invocaciones del método.

Cuando el Bean interviene entre el cliente y los otros componentes, presentando una visión simplificada del cliente.

Cuando Bean maneja el flujo de trabajo de varios Beans de la empresa.

9.4 Cuando utilizar un Stateful

Page 849: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 849

Cuando el estado del bean no tiene ningún dato para un cliente en especifico.

Cuando en una invocación del método, el Bean realiza una tarea genérica para todos los clientes. Por ejemplo: Enviar un correo que confirma una orden de compra.

Cuando se requiere solicitud de información de la base de datos de registros en forma de solo lectura (SELECT).

9.5 Cuando utilizar un Stateless

Page 850: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 850

package org.efibs.session.mensaje;

import java.sql.*;

import java.util.*;

import javax.ejb.*;

import javax.naming.*;

import java.rmi.*;

public interface Mensajes extends javax.ejb.EJBObject {

public Collection getMensajeBienvenida() throws RemoteException, NamingException, SQLException, FinderException;

}

9.6 Ejemplo de Session-Bean Interfaz Remota

Page 851: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 851

package org.efibs.session.mensaje;

import javax.ejb.EJBHome;

import javax.ejb.CreateException;

import java.rmi.RemoteException;

public interface MensajesHome extends EJBHome {

public Mensaje create () throws RemoteException, CreateException;

}

9.6 … Ejemplo de Session-Bean Interfaz Remota

Page 852: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 852

package org.efibs.session.mensaje;

import java.rmi.RemoteException;

import javax.ejb.SessionBean;

import javax.ejb.SessionContext;

public class MensajeEJB implements SessionBean {

public MensajeEJB() { }

public String getMensajeBienvenida() {

return "EFIBS S.A. - Mi Primer SessionBean";

}

public void ejbCreate() { }

public void ejbRemove() { }

public void ejbActivate() { }

public void ejbPassivate() { }

public void setSessionContext(SessionContext sc) { }

}

9.7 Ejemplo de Session-Bean Clase Bean.

Page 853: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 853

<session>

<display-name>ejb/Mensajes</display-name>

<ejb-name>ejb/Mensajes</ejb-name>

<home>org.efibs.session.mensaje.MensajesHome</home>

<remote>org.efibs.session.mensaje.Mensajes</remote>

<ejb-class>org.efibs.session.mensaje.MensajesEJB</ejb-class>

<session-type>Stateless</session-type>

<transaction-type>Bean</transaction-type>

</session>

9.8 Ejemplo de Session-Bean ejb.jar.xml

Page 854: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 854

El objetivo de esta práctica es el de crear un Session Bean que retorne un mensaje de Bienvenida. Guiándose en el ejemplo anterior.

Seguidamente, realizar un Session Bean que retorne todos los usuarios que se encuentran registrados en la base de datos. Recuerde utilizar todos los métodos correspondientes a la base de datos utilizados en los cursos anteriores.

Los resultados deberán de visualizarce por pantalla.

El instructor le guiaré en todo el proceso de creación de estos componentes.

9.9 Ejercicio Práctico

Page 855: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 855

2. Definición de Enterprise Java Beans2. Definición de Enterprise Java Beans

3. Tecnología de Enterprise Java Beans3. Tecnología de Enterprise Java Beans

4. Contenedor de Enterprise Java Beans4. Contenedor de Enterprise Java Beans

5. Beneficios y Características5. Beneficios y Características

1. Introducción1. Introducción

6. Mecanismos de Interacción6. Mecanismos de Interacción

10. Entity Beans

Page 856: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 856

8. Tipos de los Enterprise Java Beans8. Tipos de los Enterprise Java Beans

9. Session Beans9. Session Beans

10. Entity Beans10. Entity Beans

11. Message-Driven Beans11. Message-Driven Beans

12. Formas de Acceso12. Formas de Acceso

7. Conceptos Básicos J2EE7. Conceptos Básicos J2EE

10. Entity Beans

13. Ejercicio Práctico13. Ejercicio Práctico

Page 857: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 857

El Enterprise Java Bean de tipo Entity se caracteriza por ser una representación robusta y persistente de la información contenida en una base de datos.

Cada Entity Bean será asociado a una tabla específica y definirá las cuatro instrucciones básicas del Lenguaje de Consulta Simple para bases de datos (SQL, por sus referencias en inglés): SELECT, INSERT, UPDATE, DELETE.

De todas las anteriores, es obligatorio definir el SELECT ya que cuando el Bean es inicializado, debe “poblarse” con la información de un (os) registro (s) de la base de datos que el desarrollador le especifique.

Para crear un Entity bean se deben especificar los archivos a seguir:

10.1 Entity Beans

Page 858: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 858

Clase Nombre de Archivo Descripción

Interfaz Remota Nombre.java En esta interfaz se definen los encabezados de los métodos del negocio. Deben arrojar la excepción remoteExceptionobligatoriamente y extender la clase javax.ejb.EJBObject.

Clase Home Remota NombreHome.java Esta interfaz define encabezados de los métodos del ciclo de vida de un Bean: para crearlo, modificarlo, eliminarlo, etc. Los métodos deben extender la clase javax.ejbEJBHome.

Clase del Bean NombreEJB.java Debe definir los encabezados y su contenido. Esta interfaz debeimplementar la clase javax.ejb.EntityBean.

Llave Primaria (opcional) LlaveClase.java Clase que incluye los campos de una llave compuesta de una tabla a ser representada en un bean. En el archivo de configuración de XML ejb-jar.xml, se utilizará el elemento prim-key-class para definir la clase de Llave Primaria. El nombre queda sujeto a criterio del desarrollador. Debe implementar java.io.Serializable.

10.2 Archivos de Especificación

Page 859: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 859

Cuando el entity bean comienza, existen varias instancias del mismo en el pool de beans (esto varía de vendedor a vendedor). Cada una de estas instancias están listas para ser utilizadas.

Un Entity Bean pasa a estar listo cuando el container asigna una instancia del Bean a un objeto.

En este momento es cuando se puede invocar a métodos como el select, el load , el store u otros métodos de negocio definidos por el desarrollador (ejbHome<METHOD>).

10.3 Ciclo de de vida de un Entity

Page 860: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 860

Los Entity Bean son Persistentes.

Permiten el Acceso Compartido.

Trabajan por medio de Llaves Primarias.

Pueden participar en relacion con otros Entity Beans.

10.4 Diferencia entre los Entity y los Session Beans

Page 861: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 861

Bean-Managed Persistence (BMP)

Con el código con el que se escribe el programador debe preocuparse por las relaciones.

Existe código SQL.

Container-Managed Persistence (CMP).

El contenedor asume y ejecuta las relaciones.

No Existe código SQL. (EJBQL)

10.5 Tipos de Entity

Page 862: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 862

Cuando el Bean representa una entidad de negocio y no un procedimiento. Por ejemplo: UsuarioBean sería la entidad, pero ValidarUsuarioBean sería un Bean de Session.

Cuando el estado del Bean debe ser persistente. Si en caso de que un Beantermine o si se cierra el servidor de Aplicaciones, el estado del Bean aún existe en el almacenaje persistente (una base de datos).

10.6 Cuando utilizar los Entity Beans

Page 863: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 863

package perfil;

import javax.ejb.*;

import java.rmi.*;

import java.sql.*;

public interface Perfil extends EJBObject {

public Long getPerIdPerfil() throws RemoteException;

public void setPerIdPerfil(String perIdPerfil) throws RemoteException;

public String getPerDescripcion() throws RemoteException;

public void setPerDescripcion(String perDescripcion) throws RemoteException;

public void setCambiar(boolean cambiar) throws RemoteException;

}

10.7 Ejemplo de Entity Beans

Page 864: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 864

package org.efibs.comun.perfil;

import java.util.*;

import java.rmi.*;

import javax.ejb.*;

public interface PerfilHome extends EJBHome {

public Perfil create(String idPerfil, String perDescripcion)

throws RemoteException, CreateException, FinderException;

public Perfil findByPrimaryKey(String idPerfil) throws RemoteException, FinderException;

public Collection findByAll() throws RemoteException, FinderException;

}

10.7 … Ejemplo de Entity Beans

Page 865: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 865

10.7 … Ejemplo de Entity Beans

Page 866: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 866

10.7 … Ejemplo de Entity Beans

Page 867: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 867

El objetivo de esta práctica es el poder crear un Entity Bean que localice un usuario en base al username utilizando campos CMP.

El instructor le entregará una clase java para comprender y estructurar mejor la creación de los mismos. Esta clase además será explicada detalladamente.

10.8 Ejercicio Práctico

Page 868: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 868

2. Definición de Enterprise Java Beans2. Definición de Enterprise Java Beans

3. Tecnología de Enterprise Java Beans3. Tecnología de Enterprise Java Beans

4. Contenedor de Enterprise Java Beans4. Contenedor de Enterprise Java Beans

5. Beneficios y Características5. Beneficios y Características

1. Introducción1. Introducción

6. Mecanismos de Interacción6. Mecanismos de Interacción

11. Message-Driven Beans

Page 869: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 869

8. Tipos de los Enterprise Java Beans8. Tipos de los Enterprise Java Beans

9. Session Beans9. Session Beans

10. Entity Beans10. Entity Beans

11. Message-Driven Beans11. Message-Driven Beans

12. Formas de Acceso12. Formas de Acceso

7. Conceptos Básicos J2EE7. Conceptos Básicos J2EE

11. Message-Driven Beans

13. Ejercicio Práctico13. Ejercicio Práctico

Page 870: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 870

El Message-Driven Bean es un Enterprise Bean que permite procesar mensajes asíncronos.

Normalmente actúa como un JavaMessageService message listerner (JMS), donde el evento listerner es similar excepto que recibe mensajes instanciadosde los eventos.

El mensaje pueden ser enviados por componentes J2EE como por ejemplo:

Desde una aplicación Cliente.

Desde otro Enterprise Java Bean.

Desde un componente Web.

Los Message-driven beans, pueden procesar múltiples JMS u otras clases de Mensajes.

11.1 Message-Driven Beans

Page 871: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 871

La diferencia radica en que los cliente no pueden tener acceso al Message-Driven Bean por medio de interfaces.

Se tienen que programar sólo una clase.

Los Message-Driven Bean se asemejan a los stateless session bean

No conservan ningún dato o estado conversacional para un cliente.

Todas las instancias son equivalentes, permitiendo al contenedor de EJB’s asignar un mensaje a cualquier instancia del bean.

Contiene un pool de instancias permitiendo el procesamiento concurrente.

Se pueden procesar mensajes para múltiples clientes.

11.2 Diferencia entre Message-Driven,Session y Entity Beans

Page 872: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 872

Se invocan asincrónicamente.

Son relativamente de una duración breve.

No representan datos directamente compartidos en la base de datos, sino que pueden tener acceso y actualizar al día a estos datos.

Son Stateless.

Se utilizan para recibir mensajes asincrónicamente.

11.3 Características de los Message-Driven Bean

Page 873: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 873

2. Definición de Enterprise Java Beans2. Definición de Enterprise Java Beans

3. Tecnología de Enterprise Java Beans3. Tecnología de Enterprise Java Beans

4. Contenedor de Enterprise Java Beans4. Contenedor de Enterprise Java Beans

5. Beneficios y Características5. Beneficios y Características

1. Introducción1. Introducción

6. Mecanismos de Interacción6. Mecanismos de Interacción

12. Formas de Acceso

Page 874: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 874

8. Tipos de los Enterprise Java Beans8. Tipos de los Enterprise Java Beans

9. Session Beans9. Session Beans

10. Entity Beans10. Entity Beans

11. Message-Driven Beans11. Message-Driven Beans

12. Formas de Acceso12. Formas de Acceso

7. Conceptos Básicos J2EE7. Conceptos Básicos J2EE

12. Formas de Acceso

13. Ejercicio Práctico13. Ejercicio Práctico

Page 875: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 875

Accesos Remotos.

Pueden ejecutarse en diferentes máquinas y en diferentes JVM.

Puede ser un componente del Web, una aplicación cliente, u otro Enterprise Bean.

Para un cliente remoto la localización del Bean es transparente (JNDI).

Accesos Locales.

Se ejecutan sobre una sola JVM.

Puede ser un componente del Web u otro Entrerpise Bean.

Para un cliente local la localización del Bean no es transparente.

Utilización de CMP para comunicarse con otros Entity Beans.

12.1 Formas de Acceso

Page 876: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 876

12.2 Contenido de un EJB

Page 877: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 877

2. Definición de Enterprise Java Beans2. Definición de Enterprise Java Beans

3. Tecnología de Enterprise Java Beans3. Tecnología de Enterprise Java Beans

4. Contenedor de Enterprise Java Beans4. Contenedor de Enterprise Java Beans

5. Beneficios y Características5. Beneficios y Características

1. Introducción1. Introducción

6. Mecanismos de Interacción6. Mecanismos de Interacción

13. Ejercicio Práctico

Page 878: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 878

8. Tipos de los Enterprise Java Beans8. Tipos de los Enterprise Java Beans

9. Session Beans9. Session Beans

10. Entity Beans10. Entity Beans

11. Message-Driven Beans11. Message-Driven Beans

12. Formas de Acceso12. Formas de Acceso

7. Conceptos Básicos J2EE7. Conceptos Básicos J2EE

13. Ejercicio Práctico

13. Ejercicio Práctico13. Ejercicio Práctico

Page 879: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 879

Paso 1. Crear un modelo de datos tal y como se en la siguiente diapositiva y con el cual se basará todo el ejercicio de este curso.

Paso 2. Implemente un session bean y un CMP Entity bean para cada uno de los objetos del diagrama. El objetivo es que el session tenga los métodos de insertar, modificar, eliminar, consultar y listar los cuales tendrán implementado los correspondientes “finders” del Entity.

Paso 3. Para el caso del listar, deberá crear un findAll que retorne una colección con los elementos de la tabla. Solicite al instructor el ejemplo de usuario y tómelo como modelo.

Paso 4. Crear las clases correspondientes a nivel del war, las cuales servirán como “helpers” para poder pasar la información entre el war y jar.

13 Ejercicio Práctico

Page 880: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 880

Paso 5. Cree las páginas web necesarias para poder desarrollar el sistema. A parte de las clases especificadas en el UML, debe incluir la de Login de usuarios.

Paso 6. Pruebe cada uno de los módulos conforme los vaya terminando. Recuerde validar adecuadamente la aplicación.

Paso 7. Finalmente, implemente el módulo de cliente pero utilizando sessionbeans y BMP Entity Beans. Solicite ayuda del instructor. Utilice las clases de acceso a la base de datos creadas en el curso de java y base de datos.

El instructor le entregará, un ejemplo de un mantenimiento completo de la tabla usuarios.

Se deberá basar en dicho ejemplo para poder hacer los restantes ejercicios.

13 … Ejercicio Práctico

Page 881: Desarrollo Java

Copyright Formación y Soluciones Informáticas EFIBS S.A. 881

Modelo del Sistema de OrdenesOrde

nid: intfechaOrden: DatetotalOrden: double

agregarItem()eliminarItem()setFechaOrden()getFechaOrden()setTotalOrden()getTotalOrden()

ItemOrdenNumLinea: intcantidad: intprecio: double

getCantidad()setCantidad()setPrecio()getPrecio()getTotalItem()

Cliente

id: intnombe: Stringdireccion: Stringtelefono: StringgetNombre()setNombre()setDireccion()getDireccion()

Empresacontacto: String

descuento: doublegetContacto()setContacto()..

Productoid: intnombre: Stringdescripcion: Stringprecio: double

getPrecio():