Desarrollo de Aplicaciones Empresariales

Formación y Soluciones Informáticas EFIBS S.A Derechos Reservados - 2007.

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

1

1 Introducción a Java

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

2

1. Introducción a Java
1. Introducción a Java 1. Introducción a Java 2. Entorno de Desarrollo Integrado 2. Entorno de Desarrollo Integrado 3. El Lenguaje Java 3. El Lenguaje Java 4. Tipos de Datos y Operadores 4. Tipos de Datos y Operadores 5. Control de Flujo 5. Control de Flujo 6. Conceptos Básicos en Java 6. Conceptos Básicos en Java 7. Trabajando con Clases 7. Trabajando con Clases

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

3

1. Introducción a Java
8. Utilización de Interfaces 8. Utilización de Interfaces 9. Estándares de Desarrollo 9. Estándares de Desarrollo 10. Manejo de Excepciones 10. Manejo de Excepciones 11. Utilizando Cadenas, Arreglos y Colecciones 11. Utilizando Cadenas, Arreglos y Colecciones 12. Clases en Java 12. Clases en Java 13. Swing 13. Swing Anexo Anexo

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

4

Objetivos

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

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

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

5

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.

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

6

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.

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

7

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.

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

8

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).

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

9

1.2 … Características
Orientado a Objetos: Java trabaja bajo el paradigma orientado a objetos por lo que se basa 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.

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

10

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.

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

11

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.

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

12

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.

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

13

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.

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

14

1.2 … Características
Dinámico: Java es un lenguaje totalmente Orientado a Objetos. Por lo que construye los objetos y la conexión entre ellos en el momento en que se va a ejecutar la aplicación.

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

15

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.

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

16

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.

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

17

1.4 … Máquina Virtual Java(JVM).
Versión 1.4 Versión 5.0 “Tiger Proyect”

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

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

18

1.5 Qué es el JRE?

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.

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

19

1.6 Plataforma Independiente?

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

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

20

1.6 … Plataforma Independiente?

Los Bytecodes son interpretados por el runtime.

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

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

21

1.7 Cómo trabaja la JVM?

El class loader carga todas las clases necesarias, utilizando el classpath 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).

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

22

1.7 … Cómo trabaja la JVM?

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

23

1.8 Comparaciones
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.

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

24

1.9 Ejercicio Práctico
El instructor realizará una explicación detallada del ejercicio a realizar. 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:\ jdk1_5_0_08-windows-i586-p).

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

25

1.9 … Ejercicio Práctico
Modificar variables de ambiente: Inicio-> Panel de Control- Sistema-Variables de ambiente o entorno.

Ubicar las variables de entorno ó de sistema

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

26

1.9 … Ejercicio Práctico
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.

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

27

1.9 … Ejercicio Práctico
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.

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

28

1.9 … Ejercicio Práctico
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.

Notas: 1. 2.

El método main es el punto de inicio de una clase principal en Java. La instrucción System.out.println(“…”) se utiliza para desplegar en consola lo que se encuentre entre comillas dobles.

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

29

1.9 … Ejercicio Práctico
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

Compila

Ejecuta

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

30

Entorno de Desarrollo Integrado

2

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

31

2. Entorno de Desarrollo Integrado
1. Introducción a Java 1. Introducción a Java 2. Entorno de Desarrollo Integrado 2. Entorno de Desarrollo Integrado 3. El Lenguaje Java 3. El Lenguaje Java 4. Tipos de Datos y Operadores 4. Tipos de Datos y Operadores 5. Control de Flujo 5. Control de Flujo 6. Conceptos Básicos en Java 6. Conceptos Básicos en Java 7. Trabajando con Clases 7. Trabajando con Clases

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

32

2. Entorno de Desarrollo Integrado
8. Utilización de Interfaces 8. Utilización de Interfaces 9. Estándares de Desarrollo 9. Estándares de Desarrollo 10. Manejo de Excepciones 10. Manejo de Excepciones 11. Utilizando Cadenas, Arreglos y Colecciones 11. Utilizando Cadenas, Arreglos y Colecciones 12. Clases en Java 12. Clases en Java 13. Swing 13. Swing Anexo Anexo

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

33

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.

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

34

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.

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

35

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 de NetBeans 5.0.

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

36

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.

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

37

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.

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

38

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
Copyright Formación y Soluciones Informáticas EFIBS S.A.

39

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
Copyright Formación y Soluciones Informáticas EFIBS S.A.

40

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
Copyright Formación y Soluciones Informáticas EFIBS S.A.

41

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

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

42

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:

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

43

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

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

44

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.

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

45

2.7 … Secciones NetBeans
Secciones del IDE (continuación): Proyecto: Pueden existir uno o varios proyectos.

Dentro de los paquetes tenemos las clases que vamos a Utilizar.

Nombre del paquete

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

46

2.7 … Secciones NetBeans
Secciones del IDE (continuación): Archivos: Pueden existir uno o varios proyectos Activos.

Archivos propios del IDE

La carpeta scr es donde se almacenan los proyectos que se van creando

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

.

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

47

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 propias del IDE.

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

48

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.

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

49

2.7 … Secciones NetBeans
Secciones de clases: Conforme se van creando las clases se irán agregando al entorno de desarrollo como se aprecia a continuación:

Área para digitar el código fuente

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

50

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

Apertura de proyectos Creación de proyectos

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

51

2.8 … Proyectos en NetBeans
Antes de crear un proyecto se debe tener claro que tipo de proyecto es el que se desea crear:

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

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

52

2.8 … Proyectos en NetBeans
Creación de proyectos: Para crear un proyecto siga los siguientes pasos:
Se selecciona la ubicación en disco dónde estará el proyecto

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

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

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

53

2.8 … Proyectos en NetBeans
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.

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

54

2.8 … Proyectos en NetBeans
Construcción del Proyecto: Genera toda la estructura del proyecto, en lo que respecta a fuentes y demás archivos propios del proyecto.

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 limpieza del anterior.

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

55

2.9 Compilación-EjecuciónEdición
Compilación : Consiste en la revisión sintáctica del código fuente. Si hay errores se marcan cuales
Código sin errores.

son y la línea donde se produjo.

Código con errores.

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

56

2.9 … Compilación-EjecuciónEdición
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

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

57

2.9 … Compilación-EjecuciónEdición
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.
Copyright Formación y Soluciones Informáticas EFIBS S.A.

58

2.9 … Compilación-EjecuciónEdición
Editor de Texto: Presenta una serie de botones que 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étodos específicamente en la sección del ámbito. Lo anterior, facilita la búsqueda de errores en el código.

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

59

2.10 Otras Opciones de NetBeans
Opciones: Las opciones del IDE se encuentran ubicadas en el menú Tools. A continuación una imagen de la pestaña general:

La pestaña que está activa es la general, donde se puede entre otras cosas cambiar información referente a: paquetes java, proxy y actualizaciones.

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

60

2.10 … Otras Opciones de NetBeans
Opciones: A continuación una imagen de la pestaña editor:

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

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

61

2.10 … Otras Opciones de NetBeans
Opciones: A continuación una imagen de la pestaña fuentes y colores:

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

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

62

2.10 … Otras Opciones de NetBeans
Opciones: A continuación una imagen de la pestaña keymap, donde se tienen las teclas abreviadas:

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

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

63

2.10 … Otras Opciones de NetBeans
Opciones: A continuación una imagen de la pestaña Misceláneo:

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

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

64

2.10 … Otras Opciones de NetBeans
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 mecanismos y opciones soportada por NetBeans 5.0.

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

65

2.10 … Otras Opciones de NetBeans
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.

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

66

2.10 … Otras Opciones de NetBeans
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.

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

67

2.10 … Otras Opciones de NetBeans
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.

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

68

2.10 … Otras Opciones de NetBeans
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

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

69

2.11 Ejercicio Práctico

El instructor realizará una explicación detallada del ejercicio 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.
Copyright Formación y Soluciones Informáticas EFIBS S.A.

70

2.11 … Ejercicio Práctico
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:

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

71

2.11 … Ejercicio Práctico
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.

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

72

3 El Lenguaje Java

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

73

3. El Lenguaje Java
1. Introducción a Java 1. Introducción a Java 2. Entorno de Desarrollo Integrado 2. Entorno de Desarrollo Integrado 3. El Lenguaje Java 3. El Lenguaje Java 4. Tipos de Datos y Operadores 4. Tipos de Datos y Operadores 5. Control de Flujo 5. Control de Flujo 6. Conceptos Básicos en Java 6. Conceptos Básicos en Java 7. Trabajando con Clases 7. Trabajando con Clases

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

74

3. El Lenguaje Java
8. Utilización de Interfaces 8. Utilización de Interfaces 9. Estándares de Desarrollo 9. Estándares de Desarrollo 10. Manejo de Excepciones 10. Manejo de Excepciones 11. Utilizando Cadenas, Arreglos y Colecciones 11. Utilizando Cadenas, Arreglos y Colecciones 12. Clases en Java 12. Clases en Java 13. Swing 13. Swing Anexo Anexo

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

75

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.

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

76

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.

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

77

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 */

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

78

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:

p nom_Persona nomPersona _nomPersona nom$Persona nomPersona2

nom#Cost nom-Persona nom*Cost abstract 2nomPersona

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

int contadorPrincipal; char listaDeFicheros; float precioProducto;

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

79

3.3 Separadores
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.

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

80

3.4 Variables

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; char letra; boolean flag; // Declaración de un entero // Declaración de un carácter // Declaración de un booleano

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

81

3.5 Operadores

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:

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

82

3.6 Expresiones
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:
final float NOMBRE_CONSTANTE = 3.14159

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.

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

83

3.7 Cadenas
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.

1. 2. 3. 4.

String cadena = “Variable cadena”; int longitud = cadena.length(); cadena.toUpperCase(); cadena.toLowerCase();

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

84

3.8 Arreglos
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 al array.
Char s[]; int Array ; int tabla[][] = new int[4][5]; String nombres[] = {“Juan”, “Pepe”, “Pedro”}; System.out.println(nombres[1]); // Imprime Pepe

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

85

3.9 Ejercicio Práctico
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

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

86

3.9 … Ejercicio Práctico
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.

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

87

4 Tipos de Datos y Operadores
Copyright Formación y Soluciones Informáticas EFIBS S.A.

88

4. Tipos de Datos y Operadores
1. Introducción a Java 1. Introducción a Java 2. Entorno de Desarrollo Integrado 2. Entorno de Desarrollo Integrado 3. El Lenguaje Java 3. El Lenguaje Java 4. Tipos de Datos y Operadores 4. Tipos de Datos y Operadores 5. Control de Flujo 5. Control de Flujo 6. Conceptos Básicos en Java 6. Conceptos Básicos en Java 7. Trabajando con Clases 7. Trabajando con Clases

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

89

4. Tipos de Datos y Operadores
8. Utilización de Interfaces 8. Utilización de Interfaces 9. Estándares de Desarrollo 9. Estándares de Desarrollo 10. Manejo de Excepciones 10. Manejo de Excepciones 11. Utilizando Cadenas, Arreglos y Colecciones 11. Utilizando Cadenas, Arreglos y Colecciones 12. Clases en Java 12. Clases en Java 13. Swing 13. Swing Anexo Anexo

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

90

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.

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

91

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: boolean Textual: char. Integral: byte,short,int,long. Punto Flotante: double, float. Enum: Enumeraciones (versión 5.0). Los Tipos compuestos.

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

92

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;

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

93

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;

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

94

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.

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

95

4.1.2 … Tipo Textual
char:
Representa a 16-bits un solo carácter. Requiere estar entre comillas simples (‘ ’). Utiliza la siguiente notación:
char primerLetra = ‘a’; char ch1, ch2; \n: \t: \b: \r: \uxxx: //La Letra a //Declaración de dos variables char Salto de línea Tabulador Backspace. Retorno de carro Donde xxxx es el código Unicode del carácter. Por ejemplo \u0027 es el apostrofe (')

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

96

4.1.2 … Tipo Textual
String: No es un tipo de dato primitivo, es una clase Requiere estar entre comillas dobles (“”) Utiliza la siguiente notación:

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

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

97

4.1.3 Tipo Integral
Un tipo de datos Integral tiene los siguientes rangos:

Nombre o Tipo byte short int long

Tamaño 8-bit complemento a 2 16-bit complemento a 2 32-bit complemento a 2 64-bit complemento a 2

Rango -27 a 27-1 -215 a 215-1 -231 a 231-1 -263 a 263-1

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

98

4.1.4 Tipo Flotante
Flotante:
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 exponencial F ó f (Float) D ó d (Double)

Nombre o Tipo float double

Tamaño 32 bits 64 bits

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

99

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.

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

100

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.

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

101

4.2 … Operadores
Aritmé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.

Operador + * / %

Uso op1 + op2 op1 – op2 op1 * op2 op1 / op2 op1 % op2

Descripción Suma op1 y op2 Resta op1 y op2 Multiplica op1 y op2 Divide op1 y op2 Obtiene el resto de dividir op1 por op2

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

102

4.2 … Operadores
Aritméticos:
Existen formas abreviadas para incrementar y decrementar:

Operador ++ ++ ---

Uso op1 ++ ++ op1 op1 --- op1

Descripción Incrementa op en 1; evalúa el valor antes de incrementar Incrementa op en 1; evalúa el valor después de incrementar Decrementa op en 1; evalúa el valor antes de decrementar Decrementa op en 1; evalúa el valor después de decrementar

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

103

4.2 … Operadores
Aritméticos:
Ejemplos:

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

int a, b, c, d; a = 2 + 2; b = a * 3; c = b - 2; // Suma // Multiplicación // Resta // división

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

d = b / 2;

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

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

104

4.2 … Operadores
Relacionales:
Son aquellos donde se procede a una comparación entre dos operandos y ésta, produce un resultado verdadero o falso.
Operador Uso Descripción

> >= < <= == !=

op1 > op2 op1 >= op2 op1 < op2 op1 <= op2 op1 == op2 op1 != op2

op1 es mayor que op2 op1 es mayor o igual que op2 op1 es menor que op2 op1 es menor o igual que op2 op1 y op2 son iguales op1 y op2 son distintos

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

105

4.2 … Operadores
Condicionales:
Son aquellos donde se procede a una evaluación que produce un valor de verdad o de falsedad basado en las tablas de verdad.
Operador Uso Descripción

AND OR NEGACION

&& || !

op1 && op2 op1 || op2 ! op1

op1 y op2 son verdaderos uno de los dos es verdadero op1 es falso

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

106

4.2 … Operadores
Condicionales:
Ejemplos:
int var1 = 7, var2 = 13; boolean res = true; res = (var1 == var2); res = (var2 > var1); // res ahora es igual a false // res ahora es igual a true

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

107

4.2 … Operadores
Condicionales:
Otro tipo de operador condicional que se puede utilizar en Java es el ( ? : )
boolean_expr ? expr1 : expr2

Este operador es utilizado como una alternativa de uno de los controles de flujo (if...else)
int val1 = 120; int val2 = 0; int resultado; resultado = (val1 > val2) ? 100 : 200; System.out.println(“El Resultado es " + resultado);

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

108

4.2 … Operadores
Asignación:
Se asigna un valor a otro a través del =, recuerde que el == es para comprar, mientras que el = es para asignar. Ejemplos:
Operador += -= *= /= %= Asignación op1 += op2 op1 -= op2 op1 *= op2 op1 /= op2 op1 %= op2 Equivale a: op1 = op1 + op2 op1 - op2 op1 * op2 op1 / op2 op1 % op2

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

109

4.3 Resumen Operadores
Tipos
Enteros

Grupos de Operadores
Operadores de comparación que devuelven un valor boolean Operadores numéricos, que devuelven un valor int o long

Operadores
< (menor) , <= (menor o igual) , > (mayor), >= (mayor o igual), == (igual), != (distinto) + (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) < (menor) , <= (menor o igual) , > (mayor), >= (mayor o igual), == (igual), != (distinto) + (unario, positivo), - (unario, negativo), + (suma) , - (resta) , * (multiplicación), / (división), % (resto), ++ (incremento), -(decremento) == (igual), != (distinto), ! (complemento), & (AND), | (OR), ^ (XOR), && (AND condicional), || (OR condicional)

Punto Flotante

Operadores de comparación que devuelven un valor boolean Operadores numéricos, que devuelven un valor float o double

Booleanos

Operadores booleanos

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

110

4.4 Valores de Precedencia
Orden 1 2 3 4 5 6 7 8 9 10 11 12 13 Operadores ++ -- + - ~ !(type) * / % + - + << >> >>> < > <= >= instanceof == != & ^ | && || ?: = op= Descripción Unary operators Multiply, divide, remainder Add, subtract, add string Shift (>>> is zero-fill shift) Relational, type compare Equality Bit/logical AND Bit/logical exclusive OR Bit/logical inclusive OR Logical AND Logical OR Conditional operator Assignment operators Assoc. R L L L L L L L L L L R R

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

111

4.4 … Valores de Precendencia
Precedencia:
Ejemplos:

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

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

112

4.5 Palabras Reservadas
boolean byte char double float int long short void enum abstract final native private protected public static synchronized transient volatile strictfp break case catch continue default do else finally for if return switch throw try while class extends implements interface throws

import package

true false null

instanceof new super this

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

113

4.6 Expresiones
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:
final float NOMBRE_CONSTANTE = 3.14159

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.

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

114

4.7 Conversiones y Casting
Conversió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

short

int

long long

byte

short

int

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

115

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; nomCompleto = nombre ; // otra forma para obtener el mismo resultado

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

116

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.

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

117

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.

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

118

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.

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

119

5 Control de Flujo

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

120

5. Control de Flujo
1. Introducción a Java 1. Introducción a Java 2. Entorno de Desarrollo Integrado 2. Entorno de Desarrollo Integrado 3. El Lenguaje Java 3. El Lenguaje Java 4. Tipos de Datos y Operadores 4. Tipos de Datos y Operadores 5. Control de Flujo 5. Control de Flujo 6. Conceptos Básicos en Java 6. Conceptos Básicos en Java 7. Trabajando con Clases 7. Trabajando con Clases

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

121

5. Control de Flujo
8. Utilización de Interfaces 8. Utilización de Interfaces 9. Estándares de Desarrollo 9. Estándares de Desarrollo 10. Manejo de Excepciones 10. Manejo de Excepciones 11. Utilizando Cadenas, Arreglos y Colecciones 11. Utilizando Cadenas, Arreglos y Colecciones 12. Clases en Java 12. Clases en Java 13. Swing 13. Swing Anexo Anexo

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

122

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.

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

123

5. Estructuras de Control y Repetitivas
Secuencial

Selección

Iteración

Transferencia

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

124

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, ifelse {}. El if evalua una expresión, la cual puede ser falsa o verdadera.

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

125

5.1 … Control de Flujo
Ejemplo de condicional simple y compuesto son los siguientes:

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

if (expresión_booleana){ sentencia1 … sentencia N; }

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

if (expresión_booleana) { sentencia1; … sentencia N; } else { sentencia1; … sentencia N; ... }

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

126

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.
La expresión deberá corresponder alguno de los casos

No poner un break, puede ocasionar que se entre a casos no deseados El default es cuando no se pudo cumplir ninguno de los casos anteriores

switch ( expresión_entera ) { case valor_entero: sentencia; break; case valor_entero: sentencia; break; ... default: sentencia; }

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

127

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.

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

128

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 manejado explícitamente por una de las sentencias case.

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

129

5.3 Ejemplo Switch
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:

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; }

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

130

5.4 Sentencias de Repetición
Los tres tipos básicos en java son: While do-while For for each(ver 5.0). Los tres primeros tienen tres partes: Condición de iniciación Cuerpo Condición Iniciación Terminación

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

131

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

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.

Iniciación

Término
... int cont=0; while (cont<10) { System.out.println(“Valor Contador = " + cont); cont++; }

Variación

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

133

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

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

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

Iniciación

Término

Variació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

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

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.

Iniciación
... int cont=0; do{

Término

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

cont++; }while (cont<10)

Variación

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

138

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++;

Termina el ciclo

} for(int i=0; i<10;++i){ if(i==5){ break; } }

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

139

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. while(cont<10){
if(cont==5){ continue; } cont++; }

Finalmente, el return también es una sentencia de transferencia y se encarga de transferir el control a donde fue invocado.
int suma(){ int a=5,b=10; return a + b; }

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

140

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

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

6 Conceptos Básicos en Java
Copyright Formación y Soluciones Informáticas EFIBS S.A.

143

6. Conceptos Básicos en Java
1. Introducción a Java 1. Introducción a Java 2. Entorno de Desarrollo Integrado 2. Entorno de Desarrollo Integrado 3. El Lenguaje Java 3. El Lenguaje Java 4. Tipos de Datos y Operadores 4. Tipos de Datos y Operadores 5. Control de Flujo 5. Control de Flujo 6. Conceptos Básicos en Java 6. Conceptos Básicos en Java 7. Trabajando con Clases 7. Trabajando con Clases

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

144

6. Conceptos Básicos en Java
8. Utilización de Interfaces 8. Utilización de Interfaces 9. Estándares de Desarrollo 9. Estándares de Desarrollo 10. Manejo de Excepciones 10. Manejo de Excepciones 11. Utilizando Cadenas, Arreglos y Colecciones 11. Utilizando Cadenas, Arreglos y Colecciones 12. Clases en Java 12. Clases en Java 13. Swing 13. Swing Anexo Anexo

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

145

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.

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

146

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.

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

147

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).

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

148

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 objeto sería miLapicero y en el caso de la clase Cliente podemos tener elCliente.

Objeto: Lapicero

Objeto: Cliente

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

149

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

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

150

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.

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

151

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í:

Cliente

setId
id nombre telefono direccion

...

getId

getId() Mensaje

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

setNombre

Solicitante
152

6.2 Crear Objetos
Como ya se ha visto, un objeto es una instancia de una clase, es decir un ejemplo específico de esa clase. En Java, la creación de un objeto se hace de la siguiente manera:
Cliente elCliente;
// Solo declaración

Cliente elCliente = new Cliente();

// Declaración – Instanciación.

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

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

153

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

Por ejemplo:

Se recomienda el uso de métodos de acceso tales como: set y get

Cliente elCliente = new Cliente(123,”Juan”, “Alajuela”, “4445678”) ; System.out.println(“ID: ”+elCliente.getId()); System.out.println(“Nombre:”+elCliente.getNombre());

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

154

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).

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

155

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 cuando se borra explícitamente un objeto referencia mediante la selección de un valor cuyo tipo de dato es una referencia a null.

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

156

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.

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

157

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().

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

158

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.

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

159

6.6 … Finalización de los Objetos

Ejemplo:

public class Cliente { public void finalize(){ System.out.println(“Adios…."); } }

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

160

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.

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

161

6.7 … Concepto de Clase
En Java una clase es vista como: DATOS + OPERACIONES dó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í:

Cliente setId getId() Mensaje

...

id nombre telefono direccion

getId

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

setNombre

Solicitante
162

6.7 … Concepto de Clase
En java las clases se definen así:

[ modificadores ] class NombredeClase [ extends NombredeSuperclase ] [ implements NombredeInterface ] { . . .// Ambito de la clase }
Lo que está entre corchetes es opcional.

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

163

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 { // Atributos private int iid; private String nombre,direccion,telefono; // Métodos public 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

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

164

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”);

(Referencia a la clase Cliente, la instancia)

elCliente

Atributos + Métodos

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

165

6.10 Convención del Nombres
Los nombres de archivos Persona.java – Mecánico.java Los nombres de clases Persona – Mecánico Los nombres de los métodos getNombrePersona(), setNombrePersona(….) Los nombres de paquetes org.efibs.aplicacion.*; Los nombres de variables nombrePersona – tipoMecanico Los nombres de constantes CONSULTA_DE_PERSONAS MAX_INTENTOS_DE_CONEXIONES

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

166

6.11 Contenido de una Clase
Objetos Métodos

Paquetes Contenido de una Clase

Atributos

Referencia a Objetos
167

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

6.12 Tipos de acceso a una Clase
private Ninguna 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. protected Sólo las subclases de la clase pueden crear instancias de ella. public Cualquiera puede crear una instancia de la clase. package-access Nadie externo al paquete puede construir una instancia de su clase.

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

168

6.12 … Tipos de acceso a una Clase
acmevideo acmetools

public

public

protected

private

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

169

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:
public private protected

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

170

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.

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

171

6.13 … Atributos de una Clase
El siguiente, es un esquema para declaración de variables: [especificadordeAcceso] [static] [final] [transient] [volatile] tipo nombredeVariable

Recuerde, la información entre corchetes es opcional.

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

172

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.
class Cliente { transient int id; ... }

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

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

173

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; ... }

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

174

6.16 Métodos
Los 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() { ... } }

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

175

6.16 … Métodos
La sintaxis general de un método es: TipoDeAcceso + TipoDeRetorno + nombreDelMetodo +[parámetrosFormales] Ejemplos:
public class Cliente{ ... public boolean consultar() {…} public void esperar(){…} public void comprar(){…} ... }

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

176

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.

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

177

6.17 … SobreCarga
Un Ejemplo:

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

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

178

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.
public class Cliente {

Por ejemplo:

public boolean consultar() { if (!preguntar) return true; else return false; } }

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

179

6.19 Estructura de la Clase
Tipo de Acceso Bloques de Código Declaración public class Cliente { // Atributos ó características int id; String nombre, direccion , telefono; … // Métodos ó Operaciones int getId() { … } … } Métodos de la Instancia Variables de la Instancia

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

180

6.20 Estructura de un método
Tipo de Acceso
public boolean comprar () { // variables del método int producto; // cuerpo del método if(producto>=10000 && producto<40000){ return true; } else{ return false; } }

Tipo de Dato Retorno Declaración Variables del Método Estatutos del método

Retorno

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

181

6.21 Clases-Métodos-Atributos final
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é”; … }

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

182

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.

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

183

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.

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

184

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!

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

185

6.23 ... Polimorfismo en Java
// Inglés-Francés: // Ingles.java public 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!”); } ... }

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

186

6.23 ... Polimorfismo en Java
Cliente:

//

// Cliente.java public class Cliente{ ... public abstract void saludar(); // se define abstract y sin // implementación ... }

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

187

6.23 … Polimorfismo en Java
Ejemplo:
// 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! }

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

188

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.

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

189

6.24 Encapsulamiento
Cliente setId getId() ... id nombre telefono direccion getId Mensaje

getNombre

setNombre

Solicitante

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

190

6.25 Ejercicio Práctico
Analice con el instructor el siguiente diagrama:

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

191

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.java Cliente.java OrdenItem.java Producto.java
Copyright Formación y Soluciones Informáticas EFIBS S.A.

192

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

193

7. Trabajando con Clases
1. Introducción a Java 1. Introducción a Java 2. Entorno de Desarrollo Integrado 2. Entorno de Desarrollo Integrado 3. El Lenguaje Java 3. El Lenguaje Java 4. Tipos de Datos y Operadores 4. Tipos de Datos y Operadores 5. Control de Flujo 5. Control de Flujo 6. Conceptos Básicos en Java 6. Conceptos Básicos en Java 7. Trabajando con Clases 7. Trabajando con Clases

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

194

7. Trabajando con Clases
8. Utilización de Interfaces 8. Utilización de Interfaces 9. Estándares de Desarrollo 9. Estándares de Desarrollo 10. Manejo de Excepciones 10. Manejo de Excepciones 11. Utilizando Cadenas, Arreglos y Colecciones 11. Utilizando Cadenas, Arreglos y Colecciones 12. Clases en Java 12. Clases en Java 13. Swing 13. Swing Anexo Anexo

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

195

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).

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

196

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.

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

197

7.1 … Concepto de Herencia
Un ejemplo de herencia es el siguiente:

Hardware, Manual y Software son tipos de producto

Individuo y compañía son tipos de Clientes

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

198

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.

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

199

7.2 … Definiciones
Otro ejemplo de herencia es el siguiente:

Producto

Hardware

Software

Manual

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

200

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 { ... }

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

201

7.4 Herencia de atributos
Regla 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.

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

202

7.4 … Herencia de atributos
Un ejemplo de herencia es el siguiente:

public class Producto { private String id; private String nombre; … } public class Hardware extends Producto{ private int periodoDeGarantia; }

elHardware

id nombre

periodoDeGarantia

Hardware elHardware = new Hardware();

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

203

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.

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

204

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.

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

205

7.7 Métodos de la clase Object
El 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. Individuo elIndividuo = new Individuo(), Individuo otroIndividuo = new Individuo(); if (elIndividuo.equals(otroIndividuo)) System.out.println("Los Individuos son Iguales");

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í.

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

206

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:

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

207

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();

}

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

208

7.8 … Métodos de la clase Object
Otros métodos de la clase object son:
finalize(); Anteriormente estudiado notify(); 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.

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

209

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.

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

210

7.9 … Clases Abstractas
El uso de clases abstractas se recomienda para poder mantener modelos generales tales como:

SuperClase Abstracta

Cliente

SubClases Concretas

Compañia

Individuo

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

211

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.

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

212

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.

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

213

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; ...

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

214

7.9 … Clases Abstractas
abstract class Cliente { … abstract float calcularMonto(); } class Individuo extends Cliente { … float calcularMonto(){ … } } class Administrativo extends Persona { … float calcularMonto(){ … } }

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

215

7.10 Ejercicio Práctico
Analice con el instructor el siguiente diagrama:

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

216

7.10 … Ejercicio Práctico
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 Manual.java Software.java Hardware.java (en el paquete Cliente) (en el paquete Producto) (en el paquete Producto) (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.
Copyright Formación y Soluciones Informáticas EFIBS S.A.

217

7.10 … Ejercicio Práctico
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.

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

218

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

219 219

8. Utilización de Interfaces
1. Introducción a Java 1. Introducción a Java 2. Entorno de Desarrollo Integrado 2. Entorno de Desarrollo Integrado 3. El Lenguaje Java 3. El Lenguaje Java 4. Tipos de Datos y Operadores 4. Tipos de Datos y Operadores 5. Control de Flujo 5. Control de Flujo 6. Conceptos Básicos en Java 6. Conceptos Básicos en Java 7. Trabajando con Clases 7. Trabajando con Clases

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

220

8. Utilización de Interfaces
8. Utilización de Interfaces 8. Utilización de Interfaces 9. Estándares de Desarrollo 9. Estándares de Desarrollo 10. Manejo de Excepciones 10. Manejo de Excepciones 11. Utilizando Cadenas, Arreglos y Colecciones 11. Utilizando Cadenas, Arreglos y Colecciones 12. Clases en Java 12. Clases en Java 13. Swing 13. Swing Anexo Anexo

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

221

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.

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

222

8. Interfaces
Una posible definición para las interfaces es la siguiente: “Una interface es una colección de definiciones de métodos (sin implementaciones) 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.

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

223

8.1 Utilidades de las Interfaces
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).

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

224

8.2 Las interfaces Vs herencia múltiple
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.

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

225

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

declaraciondeInterface { cuerpodeInterface }
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.

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

226

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

interface Texable { ... }

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".

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

227

8.4 … Declaración de Interfaces
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] { ... }

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

228

8.4 … Declaración de Interfaces
Una posible forma de definir una interface, se puede ver a través del siguiente esquema.

[public] interface NombreDeInterface [extends listadeSuperInterfaces] { ... }

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

229

8.5 Algunas Consideraciones
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.

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

230

8.6 Cuerpo de la Interfaz
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.

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

231

8.7 Acceso de las Interfaces

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.

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

232

8.7 … Acceso de las Interfaces

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(); }

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

233

8.8 Uso de las interfaces

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.

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

234

8.9 Ejemplo de las interfaces
interface colección { int MAXIMO = 500; 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étodos declarados en la interface colección. } class PilaFIFO implements colección { ... void añadir(Object obj) { ... } void borrar(Object obj) { ... } Object buscar(Object obj) { ... } int contadorActual() { ... }

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

235

8.10 Uso del instanceof
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 } }

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

236

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

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

237

8.11 ... Ejercicio Práctico
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 y Software 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.

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

238

9 Estándares de Desarrollo
Copyright Formación y Soluciones Informáticas EFIBS S.A.

239

9. Estándares de Desarrollo
1. Introducción a Java 1. Introducción a Java 2. Entorno de Desarrollo Integrado 2. Entorno de Desarrollo Integrado 3. El Lenguaje Java 3. El Lenguaje Java 4. Tipos de Datos y Operadores 4. Tipos de Datos y Operadores 5. Control de Flujo 5. Control de Flujo 6. Conceptos Básicos en Java 6. Conceptos Básicos en Java 7. Trabajando con Clases 7. Trabajando con Clases

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

240

9. Estándares de Desarrollo
8. Utilización de Interfaces 8. Utilización de Interfaces 9. Estándares de Desarrollo 9. Estándares de Desarrollo 10. Manejo de Excepciones 10. Manejo de Excepciones 11. Utilizando Cadenas, Arreglos y Colecciones 11. Utilizando Cadenas, Arreglos y Colecciones 12. Clases en Java 12. Clases en Java 13. Swing 13. Swing Anexo Anexo

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

241

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.

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

242

9. Uso de Estándares
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.

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

243

9.1 Nomenclatura de la Aplicación
Nombre de atributos y 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 tipo de dato al cual pertenece, el nombre del identificador y el posible valor que va a tomar el identificador. int contador = 1; Nombre 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.
Copyright Formación y Soluciones Informáticas EFIBS S.A.

244

9.1 … Nomenclatura de la Aplicación
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 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

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

245

9.2 Nombre de Ficheros
El software de Java utiliza las siguientes extensiones: Tipo Fichero Extensión Java fuente Java bytecode (compilado) .java .class

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

246

9.3 Organización de los archivos
Comentarios 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 */

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

247

9.3 … Organización de los archivos
Líneas de importació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;

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

248

9.3 … Organización de los archivos
Partes Ordenadas a declarar en una Clase/Interface Comentarios en una Clase/interfase (/**...*/) Declaración de la Clase o Interface Implementación de la Clase o Interfase con comentarios (/*...*/), si es necesario Estos comentarios suelen contener información sobre el contexto de la clase o el interfase. Aquí definimos el alcance de la clase o interfase. 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. Primero las públicas, después las protegidas, después las variables a nivel del paquete (sin modificador) y después las variables privadas. Notas

Variables (estáticas) de la Clase

Variables instanciadas

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

249

9.3 ... Organización de los archivos
Partes Ordenadas a declarar en una Clase/Interface Constructores Métodos 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. Notas

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

250

9.4 … Indentación
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.

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

251

9.4 Indentación
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.

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

252

9.4.1 Ejemplo de Indentación
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) { ... }

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

253

9.4.1 … Ejemplo de Indentación

if ((condition1 && condition2) || (condition3 && condition4) ||!(condition5 && condition6)) { doSomethingAboutIt(); } alpha = (aLongBooleanExpression) ? beta : gamma;

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

254

9.5 Comentarios
/* * Bloque */ /** Aquí esta el bloque de comentarios con formato especial * que quiero indentar para ignorar. * * * * */ uno dos tres

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

255

9.5 … Comentarios
if (condition) { /* Manejar la condición. */ ... } if (a == 2) { return TRUE; } else { return isPrime(a); } /* cuando a es nº primo */ /* caso especial */

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

256

9.5 … Comentarios
if (foo > 1) { // Hacer un doble-flip ... } else { return false; } // Explicar porqué

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

257

9.6 Declaración de Variables
int level; // nivel de indención int size; // tamaño de la tabla es preferible a int level, size; Donde las definimos void myMethod() { int int1 = 0; if (condition) { int int2 = 0; ... } } // inicio del bloque "if" // inicio del método

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

258

9.6 … Declaración de Variables
class Sample extends Object { int ivar1; int ivar2; Sample(int i, int j) { ivar1 = i; ivar2 = j; } int emptyMethod() {} } ...

Los métodos son separados por una línea en blanco.

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

259

9.7 Estructuras
argv++; // Correcto argc--; // 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; }

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

260

9.7.1 Declaración de Estructuras
switch (condición) { caso ABC: statements; /* break */ caso DEF: statements; break; caso XYZ: statements; break; default: statements; break; }

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

261

9.8 Manipulación de Ejemplo
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.

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

262

9.8 … Manipulación de Ejemplo
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.

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

263

9.9 Nomenclaturas
Tipo de Reglas para la Nomenclatura Identificador 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 com.sun.eng especifica en la ISO Standard 3166, com.apple.quicktime.v2 1981. edu.cmu.cs.bovik.cheese 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... 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 class Raster; simples y descriptibles. Usar palabras class ImageSprite; completas. Eliminar abreviaturas y siglas, a no ser que haga la definición más entendible.

CLASES

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

264

9.9 … Nomenclaturas
Tipo de Identificador
INTERFASES

Reglas para la Nomenclatura
La nomenclatura de interfases suele usar la letra inicial en mayúscula como la definición de clases. 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.

Ejemplos
interface RasterDelegate; interface Storing; run(); runFast(); getBackground();

MÉTODOS

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 int i; para su uso. La elección del nombre suele ser char c; mnemónico – el nombre de la variable indica float myWidth; 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. 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;

CONSTANTES

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

265

9.10 Prácticas de Programación
/* * @(#)Blah.java * * 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 * @author */ 1.82 18 Mar 1999 Firstname Lastname 1.82 99/03/18

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

266

9.10 … Prácticas de Programación
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;

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

267

9.10 ... Prácticas de Programación
/** * ...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í... }

}

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

268

9.11 Ejercicio Práctico
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.

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

269

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

270

10. Manejo de Excepciones
1. Introducción a Java 1. Introducción a Java 2. Entorno de Desarrollo Integrado 2. Entorno de Desarrollo Integrado 3. El Lenguaje Java 3. El Lenguaje Java 4. Tipos de Datos y Operadores 4. Tipos de Datos y Operadores 5. Control de Flujo 5. Control de Flujo 6. Conceptos Básicos en Java 6. Conceptos Básicos en Java 7. Trabajando con Clases 7. Trabajando con Clases

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

271

10. Manejo de Excepciones
8. Utilización de Interfaces 8. Utilización de Interfaces 9. Estándares de Desarrollo 9. Estándares de Desarrollo 10. Manejo de Excepciones 10. Manejo de Excepciones 11. Utilizando Cadenas, Arreglos y Colecciones 11. Utilizando Cadenas, Arreglos y Colecciones 12. Clases en Java 12. Clases en Java 13. Swing 13. Swing Anexo Anexo

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

272

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.

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

273

10 Excepciones en Java
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.

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

274

10.1 Excepciones y Errores
Todas las excepciones y errores extienden de la clase Throwable

Throwable

Error

Exception

RuntimeException

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

275

10.2 Manejo de Excepciones
try { // call the method } catch (exception1) { // handle exception1 } catch (exception2) { // handle exception2 }… finally { // any final processing } int valor; String entrada = getQtyFromForm(); try { // Might throw NumberFormatException valor = Integer.parseInt(entrada); } catch ( NumberFormatException e ) { // Handle the exception } // If no exceptions were thrown, we end up here

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

276

10.3 Capturando múltiples Excepciones
try { // Might throw MalformedURLException URL u = new URL(str); // Might throw IOException URLConnection c = u.openConnection(); } catch (MalformedURLException e) { System.err.println("Could not open URL: " + e); } catch (IOException e) { System.err.println("Could not connect: " + e); }

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

277

10.4 Palabra Reservada Finally
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"); }

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

278

10.5 Generando Exepciones - throws

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”); } … }

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

279

10.6 Creación de Excepciones Propias
/** * 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(); codeError = ERROR_NO_DEFINIDO; } public ServiceException(int codeError, String message) { super(message); this.codeError = codeError; } /** * Obtiene el código asociado al error. * @return Código de error. */ public int getCodeError() { return codeError; }

}

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

280

10.7 Ejercicio Práctico
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.

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

281

11 Utilizando Cadenas, Arreglos y Colecciones

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

282

11. Utilizando Cadenas,Arreglos y Colecciones
1. Introducción a Java 1. Introducción a Java 2. Entorno de Desarrollo Integrado 2. Entorno de Desarrollo Integrado 3. El Lenguaje Java 3. El Lenguaje Java 4. Tipos de Datos y Operadores 4. Tipos de Datos y Operadores 5. Control de Flujo 5. Control de Flujo 6. Conceptos Básicos en Java 6. Conceptos Básicos en Java 7. Trabajando con Clases 7. Trabajando con Clases

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

283

11. Utilizando Cadenas,Arreglos y Colecciones
8. Utilización de Interfaces 8. Utilización de Interfaces 9. Estándares de Desarrollo 9. Estándares de Desarrollo 10. Manejo de Excepciones 10. Manejo de Excepciones 11. Utilizando Cadenas, Arreglos y Colecciones 11. Utilizando Cadenas, Arreglos y Colecciones 12. Clases en Java 12. Clases en Java 13. Swing 13. Swing Anexo Anexo

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

284

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.

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

285

11.1 Qué es un String?
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";

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

286

11.2 Creación de un String?
Asignado doble comilla a la variable constante del String.
String category = "Action";

Concatenando otra Cadena, utilizando el operador +
String empName = firstName + " " + lastName;

Utilizando el Constructor
String empName = new String("Joe Smith");

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

287

11.3 Constructores de un String?
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 );

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

288

11.4 Concatenación de String
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");

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

289

11.4 … Concatenación de String
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:
String concatenar = “Este ejemplo muestra como " + "\n" + “se pueden concatenar " + "\n" + “multiples Lineas en JAVA" + "\n";

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

290

11.5 Operaciones con String
Obtener el tamaño de un String
int length(); String str = "Comedy"; int len = str.length();

Localizar un carácter con un índice especifico.

char charAt(int index);

Retornar el substring de un String.
String substring (int indiceInicio, int indiceFinal); // el IndiceFinal es igual IndiceFinal -1

String str = "Comedy"; char c = str.charAt(1);

String str = "Comedy"; String sub = str.substring(2,4);

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

291

11.5 … Operaciones con String
Convertir a mayúscula o minúscula:
String toUpperCase(); String toLowerCase(); String caps = str.toUpperCase();

Eliminar espacios:
String trim(); // En ambos lados String nospaces = str.trim();

Localizar el índice de un String:
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

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

292

11.6 Comparar Strings
Utilización del método equals()

String clave = “fgHPUw”; if (clave.equals("fgHPUw"))… // Las mayúsculas son Importantes

Utilización del método equalsIgnoreCase()

String cat = “drama”; if (cat.equalsIgnoreCase("Drama"))…

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

293

11.7 Método Value Of
Es un método estático de la clase String representación de un String en un tipo Primitivo. que retorna la

Cuando un primitivo es concatenado a un String, automáticamente se invoca a String.valueOf()
int contador; … System.out.println(contador); String nueve = String.valueOf(9); String unoFloat = String.valueOf(1.0f);

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

294

11.8 Método Parse Int
Convierte un objeto String a un entero primitivo.

Quantity: Price:

17 425.00

String cantidadVal = campoCant.getText(); String precioVal = campoPrecio.getText(); int cantidad = Integer.parseInt(cantidadVal); float precio = Float.parseFloat(precioVal);

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

295

11.9 StringBuffer
El siguiente ejemplo, muestra como crear un objeto String y copiar todos los caracteres al nuevo String es creado utilizando el operador +
String cadena = “Ejemplar de "; cadena = cadena + “concatenar cadenas";

Una forma más eficiente y elegante es reservar la cantidad de espacio utilizando la clase StringBuffer.
StringBuffer cadena = new StringBuffer(30); // Reserva 30 caracteres cadena.append("Ejemplar de "); cadena.append("concatenar cadenas");

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

296

11.9 … StringBuffer
A continuación se muestra un ejemplo de cómo poder concatenar en un StringBuffer una cadena de forma inversa.
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(); }

Una forma más eficiente y elegante puede ser la siguiente:
public String reverseIt(String s) { StringBuffer sb = new StringBuffer(s); return sb.reverse().toString(); }

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

297

11.9 … StringBuffer
StringBuffer StringBuffer StringBuffer StringBuffer StringBuffer StringBuffer StringBuffer StringBuffer StringBuffer StringBuffer StringBuffer StringBuffer StringBuffer StringBuffer StringBuffer StringBuffer StringBuffer StringBuffer StringBuffer append( Object obj ); append( String str ); append( char str[] ); append( char str[],int offset,int len ); append( boolean b ); append( int i ); append( long l ); append( float f ); append( double d ); append( char c ); insert( int offset,Object obj ); insert( int offset,String str ); insert( int offset,char str[] ); insert( int offset,boolean b ); insert( int offset,int i ); insert( int offset,long l ); insert( int offset,float f ); insert( int offset,double d ); insert( int offset,char c );

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

298

11.10 Ejercicio Práctico
Pruebe los siguientes fragmentos de código:
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));

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

299

11.10 … Ejercicio Práctico
Pruebe los siguientes fragmentos de código:

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"));

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

300

11.10 … Ejercicio Práctico
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.

[0] [1] [2]

Orden Cliente Producto

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

301

11.11 Creación de Arreglos
Declaración: Crea la variable que se refiere al arreglo.
1. 2. 1. 2. tipo[] nombre; tipo nombre[]; int[] nombre; float nombre[]; nombre

nul l

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

302

11.11 … Creación de Arreglos
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]; int[] nombre; nombre = new int[3]; nombr e

0 0 0

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

303

11.12 Inicialización por Defecto
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

var 0
int[] var; array var = new int[4]; //Crea un objeto array // Declara una variable

[0] [1] [2] [3]

0 0 0

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

304

11.13 Inicializando - un arreglo
Asignando valores a elementos individualmente

1
nomArray[indice] = valor; items[0] = 1; items

[0] 0 [1] 0 [2] 0 [3]

Crear e inicializar elementos de un arreglo al mismo tiempo

tipo[] nomArray = {ListaValores}; int[] numPares = {2, 3, 5, 7}; numPares

[0] 3 [1] [2] 7 [3]
5

2

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

305

11.14 Arreglos - Objetos
categorías

Declarar el Arreglo
1. 2. ClassName[] arrVar; ClassName arrVar[];

null
categorías

null null

String[] categorías; categorías = new String[3]; categorías // Lo anterior es igual que: String[] categorías = new String[3];

null

Acción Drama Música

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

306

11.15 Asignar valores - Arreglos
A continuación se presenta un ejemplo que crea un arreglo para cuatro Strings vacíos
String[] arr = new String[4]; for (int i = 0; i < arr.length; i++) { arr[i] = new String(); }

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());

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

307

11.16 Arreglos y Excepciones
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]);

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

308

11.17 Vectores
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);

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

309

11.18 Modificando un vector
Agregar un elemento al final del Vector
String nombre = “José Andres” personas.addElement(nombre);

Agregar un elemento al Vector especificando una posición

personas.insertElementAt(nombre, 0);

Eliminar un elemento del Vector por medio de un índice

personas.removeElementAt(0);

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

310

11.19 Otros métodos de un vector
Obtener el primer elemento del Vector
String s = (String) personas.firstElement();

Obtener un elemento en una posición especifica
String s = (String) personas.elementAt(2);

Localizar un objeto en un Vector
int posicion = personas.indexOf(name);

Obtener el tamaño de un Vector
int tamanno = personas.size();

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

311

11.20 elementAt - FirstElement
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");

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

312

11.21 Recorrer un Vector
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()); }

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

313

11.22 Colecciones
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.

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

314

11.22 … Colecciones
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

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

315

11.22 … Colecciones
Entre las colecciones se encuentran: Map, List, Set Entre los métodos mas habituales se encuentran: add(Object); clear(); contains(Object); isEmpty(); iterator(); size();

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

316

11.22 … Colecciones
Los principales métodos de las colecciones son los siguientes:

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.

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

317

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

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

318

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.

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

319

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.

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

320

11.22 … Colecciones

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

321

11.22 … Colecciones
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:

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
Copyright Formación y Soluciones Informáticas EFIBS S.A.

322

11.22 … Colecciones
Otros ejemplos son los siguientes:

Hasta Java 1.4 para iterar por una colección o array hacíamos lo siguiente: // numbers es una lista de números for (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... }

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

323

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.

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

324

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.

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

325

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().

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

326

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.

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

327

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. ArrayMap Es 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.

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

328

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.

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

329

11.26 Ejercicio Práctico
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.

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

330

11.26 … Ejercicio Práctico
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"));

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

331

11.26 … Ejercicio Práctico

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.

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

332

11.26 … Ejercicio Práctico
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.

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

333

11.26 … Ejercicio Práctico
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.

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

334

12 Clases Java

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

335

12. Clases en Java
1. Introducción a Java 1. Introducción a Java 2. Entorno de Desarrollo Integrado 2. Entorno de Desarrollo Integrado 3. El Lenguaje Java 3. El Lenguaje Java 4. Tipos de Datos y Operadores 4. Tipos de Datos y Operadores 5. Control de Flujo 5. Control de Flujo 6. Conceptos Básicos en Java 6. Conceptos Básicos en Java 7. Trabajando con Clases 7. Trabajando con Clases

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

336

12. Clases en Java
8. Utilización de Interfaces 8. Utilización de Interfaces 9. Estándares de Desarrollo 9. Estándares de Desarrollo 10. Manejo de Excepciones 10. Manejo de Excepciones 11. Utilizando Cadenas, Arreglos y Colecciones 11. Utilizando Cadenas, Arreglos y Colecciones 12. Clases en Java 12. Clases en Java 13. Swing 13. Swing Anexo Anexo

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

337

Objetivos
Estudiar algunas de las clases más importantes del lenguaje. Enseñar al estudiante como obtener el máximo provecho de los APIS. Analizar la diferencia entre una clase Java y una clase hecha por el usuario.

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

338

12.1 Clase Math
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

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

339

12.1 … Clase Math
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.

http://java.sun.com/j2se/1.5.0/docs/relnotes/features.html#math

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

340

12.2 Funciones de la Clase Math
Math.abs( x ) Math.sin( double a ) Math.cos( double a ) Math.tan( double a ) Math.asin( double r ) Math.acos( double r ) Math.atan( double r ) Math.atan2(double a,double b) Math.exp( double x ) Math.log( double x ) Math.sqrt( double x ) Math.ceil( double a )
Copyright Formación y Soluciones Informáticas EFIBS S.A.

para int, long, float y double devuelve el seno del ángulo a en radianes devuelve el coseno del ángulo a en radianes devuelve la tangente del ángulo a en radianes devuelve el ángulo cuyo seno es r devuelve el ángulo cuyo coseno es r devuelve el ángulo cuya tangente es r devuelve el ángulo cuya tangente es a/b devuelve e elevado a x devuelve el logaritmo natural de x devuelve la raíz cuadrada de x devuelve el número completo más pequeño mayor o igual que a
341

12.2 … Funciones de la Clase Math
Math.floor( double a ) Math.rint( double a ) Math.pow( double x,double y) Math.round( x ) Math.random() Math.max( a,b ) Math.min( a,b ) Math.E Math.PI devuelve el número completo más grande menor o igual que a devuelve el valor double truncado de a devuelve y elevado a x para double y float devuelve un double para int, long, float y double para int, long, float y double para la base exponencial, aproximadamente 2.72 para PI, aproximadamente 3.12

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

342

12.2 … La Clase Math(ver 5.0)
Math. cbrt(double a) Math. log10(double a) Math. sinh(double x) Math. tanh(double x) Math. cosh(double x) Math.log1p(double x) Math.expm1(double x) Math.hypot(double x, double y) Devuelve la raíz cúbica de a Devuelve el logaritmo en base 10 de a Devuelve el valor hiperbólico del seno de x Devuelve el valor hiperbólico del tan de x Devuelve el valor hiperbólico del cos de x Retorna el logaritmo natural de la suma del argumento y 1. retorna el valor de (ex -1) Retorna sqrt(x2 +y2), sin overflow.

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

343

12.2 … La Clase Math(ver 5.0)
Math.signum(float f) Math.ulp(float f) Retorna la función signum del argumento f. Retorna el tamaño de un ulp del argumento.

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

344

12.3 Funciones de la clase Math
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( System.out.println( System.out.println( System.out.println( System.out.println( rand ); x ); y ); z ); max );

}

}

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

345

12.4 Precisión Arbitraria
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
Copyright Formación y Soluciones Informáticas EFIBS S.A.

346

12.5 Métodos de la clase BigDecimal
El constructor más sencillo es el que construye un BigDecimal a partir de su representación como cadena:
BigDecimal( String s ); http://java.sun.com/j2se/1.5.0 /docs/api/java/math/BigDecim al.html

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:
setScale( int precision,int redondeo );

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

347

12.6 Operadores - Clase BigDecimal
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 );

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

348

12.7 La Clase Character
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:
char c; Character C; La primera sentencia creará una variable carácter y la segunda un objeto Character C = new Character( 'J' ); char c = C.charValue(); String s = C.toString();

Ejemplos:

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

349

12.8 Métodos(ver 5.0)

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

350

12.8 … Métodos(ver 5.0)

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

351

12.8 … Métodos(ver 5.0)

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

352

12.8 … Métodos(ver 5.0)

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

353

12.8 … Métodos(ver 5.0)

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

354

12.8 … Métodos(ver 5.0)

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

355

12.9 Comprobaciones Booleanas
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.

Character.isLowerCase( char ) Character.isUpperCase( char ) Character.isDigit( char ) Character.isSpace( char )

devuelve true si el carácter es una letra minúscula devuelve true si el carácter es una letra mayúscula devuelve true para caracteres numéricos devuelve true para espacios en blanco

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

356

12.10 Traslaciones
Traslaciones de Caracteres.

Character.toLowerCase( char ) Character.toUpperCase( char )

convierte entre mayúscula y minúscula convierte entre minúscula y mayúscula

Traslaciones de carácter/digito.

int i = Character.digit( c, base10 ); char c = Character.forDigit( i, base10 );

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

357

12.11 Float
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:
float f; Float F; La primera sentencia creará una variable float y la segunda un objeto Float

Valores de Float:

Float.POSITIVE_INFINITY Float.NEGATIVE_INFINITY Float.NaN Float.MAX_VALUE Float.MIN_VALUE Float SIZE(ver 5.0). Float TYPE(ver 5.0).

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

358

12.12 Conversiones y comprobaciones
Conversiones Clase / Cadena

String s = Float.toString( f ); f = Float.valueOf( "3.12" );

Comprobaciones
boolean b = Float.isNaN( f ); // El método isNaN() comprueba si f es un No-Número boolean b = Float.isInfinite( f );

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

359

12.13 Métodos(ver 5.0)

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

360

12.14 Clase Double
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: double d; Double D; La primera sentencia creará una variable double y la segunda un objeto Double

Valores de Double:

Double.POSITIVE_INFINITY Double.NEGATIVE_INFINITY Double.NaN Double.MAX_VALUE Double.MIN_VALUE SIZE(ver 5.0) TYPE(ver 5.0)

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

361

12.15 Métodos(ver 5.0)

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

362

12.16 Clase Integer
Cada tipo numérico tiene su propia clase de objetos. Así el tipo int tiene el objeto Integer. Declaración:
int i; Integer I; La primera sentencia creará una variable double y la segunda un objeto Integer

Valores de int:
Integer.MAX_VALUE Integer.MIN_VALUE SIZE(ver 5.0). TYPE(ver 5.0).

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

363

12.17 Métodos(ver 5.0)

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

364

12.17 … Métodos(ver 5.0)

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

365

12.18 Clase Long
Cada tipo numérico tiene su propia clase de objetos. Así el tipo long tiene el objeto Long. Declaración:
long l; Long L; La primera sentencia creará una variable double y la segunda un objeto Long

Valores de Long:
Long.MAX_VALUE Long.MIN_VALUE SIZE(ver 5.0) TYPE(ver 5.0)

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

366

12.19 Métodos(ver 5.0)

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

367

12.19 … Métodos(ver 5.0)

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

368

12.20 Clase Random
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.

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

369

12.20 … Clase Random
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.

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

370

12.20 Métodos(ver 5.0)

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

371

12.21 String Tokenizer

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.

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

372

12.21 … String Tokenizer
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

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

373

12.22 Métodos(ver 5.0)

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

374

12.23 Ejemplo de StringTokenizer
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);

}

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

375

12.24 Clase Runtime
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.

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

376

12.24 … Clase Runtime
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.

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

377

12.25 Métodos de la clase Runtime

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.

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

378

12.25 Métodos de la clase Runtime
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ó.

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

379

12.26 Ejemplo Práctico
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 Sistema System.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 notas try { p = r.exec( comando ); } catch( Exception e ) { System.out.println( "Error ejecutando "+comando[0] ); }

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

380

12.26 … Ejemplo Práctico
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() );

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

381

12.27 Clase System
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;

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

382

12.28 Métodos(ver 5.0)

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

383

12.28 … Métodos(ver 5.0)

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

384

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 invoque almenos 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.

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

385

13 SWING

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

386

13. Swing
1. Introducción a Java 1. Introducción a Java 2. Entorno de Desarrollo Integrado 2. Entorno de Desarrollo Integrado 3. El Lenguaje Java 3. El Lenguaje Java 4. Tipos de Datos y Operadores 4. Tipos de Datos y Operadores 5. Control de Flujo 5. Control de Flujo 6. Conceptos Básicos en Java 6. Conceptos Básicos en Java 7. Trabajando con Clases 7. Trabajando con Clases

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

387

13. Swing
8. Utilización de Interfaces 8. Utilización de Interfaces 9. Estándares de Desarrollo 9. Estándares de Desarrollo 10. Manejo de Excepciones 10. Manejo de Excepciones 11. Utilizando Cadenas, Arreglos y Colecciones 11. Utilizando Cadenas, Arreglos y Colecciones 12. Clases en Java 12. Clases en Java 13. Swing 13. Swing Anexo Anexo

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

388

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.

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

389

13.1 Swing
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.

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

390

13.1 … Swing
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.*

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

391

13.1 … Swing
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.

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

392

13.1 … Swing
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 );}}

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

393

13.2 Bordes
La clase JComponent también contiene un método llamado setBorder(), que permite colocar diferentes bordes a un componente visible.

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

394

13.2 … Bordes
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 );}}

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

395

13.3 Etiquetas
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 JLabel para presentar estos textos en pantalla; sin embargo, es mucho más versátil que la clase correspondiente del AWT.

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

396

13.3 … Etiquetas
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 ruta JLabel 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 );} }

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

397

13.4 Botones
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.

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

398

13.4 … Botones
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 );} }

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

399

13.4 … Botones
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 );} }

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

400

13.5 Grupos de Botones
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.

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

401

13.5 … Grupos de Botones
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 argumento Constructor ctor = bClass.getConstructor( new Class[] { String.class } ); // Se crea un nuevo objeto del tipo del botón botonAbs = ( 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 ); }

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

402

13.5 … Grupos de Botones
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 );} }

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

403

13.6 Listas y Cajas Combinadas
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.

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

404

13.6 … Listas y Cajas Combinadas
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 ); } }

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

405

13.7 Listas
Ejemplo de Listas JList
class Listas extends JPanel { private JList lista; public Listas() { // Se crea un panel para poder contener todos los Componentes setLayout( new BorderLayout() ); // Se crean algunos elementos para poder seleccionar de la lista String 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 ); }

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

406

13.7 … Listas
// 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 item setText( 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 ); } }

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

407

13.7 … Listas

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 ); } }

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

408

13.8 Textos
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.

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

409

13.8 …Textos
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 ); }

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

410

13.8 …Textos
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 ); }

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

411

13.8 ... Textos

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( Textos(),BorderLayout.CENTER ); ventana.setSize( 300,180 ); ventana.setVisible( true );} }

new

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

412

13.9 Tool Tips
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:
… 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 ); …

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.

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

413

13.10 Iconos
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.
JButton
ImageIcon izq = new ImageIcon(logo.gif" ); //Se debe de poner toda la ruta JButton boton = new JButton( "Boton",izq );

JLabel
Icon imagen = new ImageIcon( "logo_efibs2.jpg" );//Se debe de poner toda la ruta JLabel etiq3 = new JLabel( "Etiqueta3", imagen,SwingConstants.CENTER );

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

414

13.11 Menús
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.

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

415

13.11 … Menús
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 normales static final TipoMenu cb = new TipoMenu( 2 ); // Menú con cajas de selección JTextField 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

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

416

13.11 … Menús
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 ); }

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

417

13.11 … Menús
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() ); else menu.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 ); }

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

418

13.11 … Menús
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 ); }}

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

419

13.12 Menús Popup

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.

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

420

13.12 … Menús Popup
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 ); }

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

421

13.12 … Menús Popup
protected void processMouseEvent( MouseEvent evt ){ if( evt.isPopupTrigger() ) popup.show( evt.getComponent(),evt.getX(),evt.getY() ); else super.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 ); } }

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

422

13.13 Escalas y Barras de Progreso
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.

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

423

13.13 … Escalas y Barras de Progreso
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 );} }

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

424

13.14 Árboles
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:

add( new JTree( new Object[]{ "este","ese","aquel" } ) );

Pero esto crea un árbol muy primitivo. El siguiente ejemplo es más complejo.

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

425

13.14 … Árboles
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 );

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

426

13.14 … Árboles
/*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 pulse JButton 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 realizada seleccion = (DefaultMutableTreeNode) arbol.getLastSelectedPathComponent(); if( seleccion == null ) seleccion = raiz; // El modelo creará el evento adecuado, y en respuesta a él, el árbol se actualizará automáticamente modelo.insertNodeInto( rama,seleccion,0 );}} } ); JPanel panel = new JPanel(); // Se crea un panel para contener al botón panel.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 );}}
Copyright Formación y Soluciones Informáticas EFIBS S.A.

427

13.15 Tablas
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:

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

428

13.15 … Tablas
// El Modelo de la Tabla es el que controla todos los datos que se colocan en ella class 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 tabla class 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() {// Constructor addTableModelListener( new TablaListener() ); } public int getColumnCount() { // Devuelve el número de columnas de la tabla return( datos[0].length ); } public int getRowCount() { // Devuelve el número de filas de la tabla return( datos.length ); } // Devuelve el valor de una determinada casilla de la tabla identificada mediante fila y columna public Object getValueAt( int fila,int col ) { return( datos[fila][col] ); } }

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

429

13.15 … Tablas
// Cambia el valor que contiene una determinada casilla de la tabla public 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 editable public 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 en tamañ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 );}}

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

430

13.16 Pestañas
JTabbedPane, puede manejar directamente todas las fichas, a base de pestañas y permite cambiar a cualquiera de ellas.

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

431

13.16 ... Pestañas
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 ); } }

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

432

13.17 Selector de Ficheros
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.

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

433

13.17 … Selector de Ficheros
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 AWT ActionListener fd = new ActionListener() { public void actionPerformed( ActionEvent evt ) { new FileDialog(ventana).setVisible( true );}}; // FileChooser implementado por Swing ActionListener 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 );}}

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

434

13.17 … Selector de Ficheros
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"; else respuesta = "No"; System.out.println( "Respuesta: "+respuesta ); } public static void main( String args[] ) { new SelectorResponda().setVisible( true ); } }

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

435

13.17 … Selector de Ficheros
Del código anterior, elimine el código de la función actionPerformed y sustitúyalo por las siguientes líneas

String respuesta = JOptionPane.showInputDialog( this,"Nombre ", "Tutorial de Java, Swing",JOptionPane.DEFAULT_OPTION ); System.out.println( "Respuesta: "+respuesta );

Y observe Ficheros.

otra forma de como se podría utilizar un Selector de

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

436

13.18 Teclado
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.

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

437

13.18 … Teclado
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 ); }

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

438

13.18 … Teclado
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 drcha indice = (indice == 8) ? indice = 0 : indice + 1; } botones[indice].setText( "X" ); botones[indice].requestFocus(); } static public void main( String argv[] ) { new Teclado2().show(); } }

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

439

13.19 Paneles de Desplazamiento
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.

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

440

13.20 … Paneles de Desplazamiento
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 fichero creaPanelSup(); // Se crea un panel verticalmente panelVert = 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

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

441

13.20 … Paneles de Desplazamiento
// Se carga el fichero en el área de texto, cuidando de capturar // todas las excepciones que se puedan producir try { 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 texto panelScro1.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 ); }}

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

442

13.21 Swing en NetBeans 5.0
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.

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

443

13.22 Swing en ver 5.0
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().

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

444

13.23 Ejercicio Práctico
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:
Salir Ingresar Listar Ingresar Listar Ingresar Listar

Archivo

Clientes

Productos

Ordenes

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

445

13.23 … Ejercicio Práctico
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 ingresarCliente() que recibe dos parámetros: Nombre de archivo. Y un objeto de tipo Cliente. llamado

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

446

13.23 … Ejercicio Práctico
Este método debe obtener el archivo y agregar al final del mismo, todos los 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.

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

447

13.23 … Ejercicio Práctico

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

448

13.23 … Ejercicio Práctico
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.

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

449

13.23 … Ejercicio Práctico
En el método windowsClosed invoque el AdminArchivos que se implementó en Cap13. método escribir del

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.

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

450

Nuevas Características de J2SE

Anexo

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

451

Anexo
1. Introducción a Java 1. Introducción a Java 2. Entorno de Desarrollo Integrado 2. Entorno de Desarrollo Integrado 3. El Lenguaje Java 3. El Lenguaje Java 4. Tipos de Datos y Operadores 4. Tipos de Datos y Operadores 5. Control de Flujo 5. Control de Flujo 6. Conceptos Básicos en Java 6. Conceptos Básicos en Java 7. Trabajando con Clases 7. Trabajando con Clases

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

452

Anexo
8. Utilización de Interfaces 8. Utilización de Interfaces 9. Estándares de Desarrollo 9. Estándares de Desarrollo 10. Manejo de Excepciones 10. Manejo de Excepciones 11. Utilizando Cadenas, Arreglos y Colecciones 11. Utilizando Cadenas, Arreglos y Colecciones 12. Clases en Java 12. Clases en Java 13. Swing 13. Swing Anexo Anexo

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

453

Objetivos

Dar a conocer las nuevas características del J2SE. Mostrar ejemplos de algunas de las características más relevantes.

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

454

… Qué incluye el J2SE (Java 2 Standard Edition) ?
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.

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

455

… 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.

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

456

… Qué incluye el J2SE (Java 2 Standard Edition) ?
Utilidades concurrentes. Auto-empaquetado Desempaquetado. Generación de interfaces RMI más simples. Argumentos variables. Salida formateada. Entrada mejorada.

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

457

… Qué incluye el J2SE (Java 2 Standard Edition) ?
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.

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

458

… Qué incluye el J2SE (Java 2 Standard Edition) ?
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.

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

459

… Qué incluye el J2SE (Java 2 Standard Edition) ?
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.

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

460

… Qué incluye el J2SE (Java 2 Standard Edition) ?
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));

}

}

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

461

… Qué incluye el J2SE (Java 2 Standard Edition) ?
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; // AutoBoxing a=b; // Unboxing }

}

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

462

… Qué incluye el J2SE (Java 2 Standard Edition) ?
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()); }

}

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

463

… Qué incluye el J2SE (Java 2 Standard Edition) ?
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.

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

464

… Qué incluye el J2SE (Java 2 Standard Edition) ?
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()); }

}

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

465

… Qué incluye el J2SE (Java 2 Standard Edition) ?
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); } }

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

466

… Qué incluye el J2SE (Java 2 Standard Edition) ?
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 ); } }

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

467

… Qué incluye el J2SE (Java 2 Standard Edition) ?
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(); } }

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

468

… Qué incluye el J2SE (Java 2 Standard Edition) ?
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[]){
{2} String result = MessageFormat.format("At {1,time} on {1,date}, there was

}

}

on planet " + "{0,number,integer}.", 7, new Date(), "a disturbance in the Force");

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

469

… Qué incluye el J2SE (Java 2 Standard Edition) ?
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.

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

470

… Qué incluye el J2SE (Java 2 Standard Edition) ?
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.

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

471

… Qué incluye el J2SE (Java 2 Standard Edition) ?
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.

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

472

Qué incluye el J2SE Resumen.
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.

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

473

Introducción a Java Data Base Conectivity(JDBC)

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

474

Objetivos
Explicar los objetos de JDBC que permiten manipular la Base de Datos: Statement, PreparedStatement y CallableStatement. Explicar el proceso de conectividad con la Base de Datos. Desarrollar un ejemplo completo con manejo de funciones y procedimientos almacenados haciendo uso de objetos de JDBC.
Copyright Formación y Soluciones Informáticas EFIBS S.A.

475

1 Introducción
1. Introducción 1. Introducción 2. Interfaces JDBC 2. Interfaces JDBC 3. Preparación de la Base de Datos 3. Preparación de la Base de Datos 4. Procesamiento de Resultados 4. Procesamiento de Resultados 5. Manipulación de Resultados 5. Manipulación de Resultados 6. El Objeto PreparedStatement 6. El Objeto PreparedStatement 7. Procedimientos Almacenados 7. Procedimientos Almacenados 8. Ejercicios Prácticos 8. Ejercicios Prácticos

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

476

1.1 Introducción
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 clienteservidor con el pool de conexiones y transacciones distribuidas.

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

477

1.2 JDBC 2.0 API Características
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. Incluye manejo 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 de conexió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

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

478

1.3 JDBC 2.0 API – Otras Características
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.

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

479

1.4 Acceso de JDBC a Bases de Datos
El API JDBC soporta dos modelos diferentes de acceso a Bases de Datos, los modelos de dos y tres capas.

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

480

1.5 Modelo de dos Capas
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.

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

481

1.6 Modelo de tres Capas
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.
Copyright Formación y Soluciones Informáticas EFIBS S.A.

482

1.7 Tipos de Drivers
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.

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

483

1.8 Tipos de Drivers – Puente JDBC-ODBC
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 convierte todas las llamadas JDBC a llamadas ODBC y realiza la conversión correspondiente de los resultados.

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

484

1.8 … Tipos de Drivers – Puente JDBC-ODBC
La ventaja de este driver, proporcionado con el JDK, es que Java dispone 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 driver JDBC-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.

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

485

1.8 Tipos de Drivers – Puente JDBC-ODBC
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.

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

486

1.9 Tipos de Driver – Java/Binario
Este driver se salta la capa ODBC y habla directamente con la librería nativa del fabricante del sistema DBMS (como pudiera ser DB-Library para 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.

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

487

1.10 Tipos de Driver – 100% Java/Protocolo Nativo
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.

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

488

1.10 … Tipos de Driver – 100% Java/Protocolo Nativo
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.

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

489

1.11 Tipos de Driver – 100% Java/Protocolo Independiente
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.

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

490

1.11 … Tipos de Driver – 100% Java/Protocolo Independiente
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.

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

491

1.11 … Tipos de Driver – 100% Java/Protocolo Independiente
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.

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

492

1.11 … Tipos de Driver – 100% Java/Protocolo Independiente
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.

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

493

2 Interfaces JDBC
1. Introducción 1. Introducción 2. Interfaces JDBC 2. Interfaces JDBC 3. Preparación de la Base de Datos 3. Preparación de la Base de Datos 4. Procesamiento de Resultados 4. Procesamiento de Resultados 5. Manipulación de Resultados 5. Manipulación de Resultados 6. El Objeto PreparedStatement 6. El Objeto PreparedStatement 7. Procedimientos Almacenados 7. Procedimientos Almacenados 8. Ejercicios Prácticos 8. Ejercicios Prácticos
Copyright Formación y Soluciones Informáticas EFIBS S.A.

494

2.1 Interfaces JDBC
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.

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

495

2.1 … Interfaces JDBC

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

496

2.2 Interfaces JDBC – Driver Manager
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:

jdbc:subprotocolo//servidor:puerto/base de datos

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:postgresql//desarrollo:5432/nomina

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

497

2.3 Descripción de Clases e Interfaces
La siguiente tabla muestra la lista de clases e interfaces junto con una breve descripción:

Clase / Interface Driver DriverManager DriverPropertyInfo Connection

Descripción Permite conectarse a una base de datos: cada gestor de base de datos requiere un driver distinto Permite gestionar todos los drivers instalados en el sistema Proporciona diversa información acerca de un driver. 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 Proporciona información acerca de una Base de Datos, como las tablas que contiene, etc.

DatabaseMetadata

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

498

2.3 … Descripción de Clases e Interfaces
Clase / Interface Statement PreparedStatement CallableStatement ResultSet ResultSetMetadata Descripción Permite ejecutar sentencias SQL sin parámetros Permite ejecutar sentencias SQL con parámetros de entrada Permite ejecutar sentencias SQL con parámetros de entrada y salida, típicamente procedimientos almacenados Contiene las filas o registros obtenidos al ejecutar un SELECT Permite obtener información sobre un ResultSet, como el número de columnas, sus nombres, etc.

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

499

2.3 Clases Principales
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.

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

500

2.3 … Clases Principales
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.

Cargar/Registrar JDBC Driver

Estatutos SELECT Conectar

Estatutos SQL DML/ DDL Estatutos Cierra

Procesa el resultado

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

501

3. Preparación de la Base de Datos
1. Introducción 1. Introducción 2. Interfaces JDBC 2. Interfaces JDBC 3. Preparación de la Base de Datos 3. Preparación de la Base de Datos 4. Procesamiento de Resultados 4. Procesamiento de Resultados 5. Manipulación de Resultados 5. Manipulación de Resultados 6. El Objeto PreparedStatement 6. El Objeto PreparedStatement 7. Procedimientos Almacenados 7. Procedimientos Almacenados 8. Ejercicios Prácticos 8. Ejercicios Prácticos
Copyright Formación y Soluciones Informáticas EFIBS S.A.

502

3.1 Preparación de la Base de Datos
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

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

503

3.1 … Preparación de la BD
Una vez localizado este archivo, se debe modificar el siguiente parámetro para que acepte dichas conexiones: Tipo BaseDatos usuario DireccionIP Mascara Metodo

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

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

504

3.2 Utilizando el Driver JDBC
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:
<domain_config_dir>/domain1/server1/lib/

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:
/var/opt/SUNWappserver/domains/domain1/efibs/lib/

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

505

3.3 Cargando el Driver
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");

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

506

3.3 … Cargando el Driver
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.

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

507

3.3 … Cargando el Driver
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:
Java –D example.ImageViewer jdbc.drivers=org.postgresql.Driver

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.

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

508

3.3 … Cargando el Driver
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.

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

509

3.4 … Conectando a la Base de Datos
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

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

510

3.4 … Conectando a la Base de Datos
donde: host Port Es el nombre del Servidor, por defecto es localhost Número de Puerto donde el servidor de la base de datos escucha. Por defecto en PostgreSQL es el puerto número 5432. Nombre de la Base de Datos

Database

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

511

3.4 … Conectando a la Base de Datos
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:

Connection db = DriverManager.getConnection(url); Connection db = DriverManager.getConnection(url, username, password); Connection db = DriverManager.getConnection(url, Properties props);

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();
db.close();

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

512

4 Procesamiento de Resultados
1. Introducción 1. Introducción 2. Interfaces JDBC 2. Interfaces JDBC 3. Preparación de la Base de Datos 3. Preparación de la Base de Datos 4. Procesamiento de Resultados 4. Procesamiento de Resultados 5. Manipulación de Resultados 5. Manipulación de Resultados 6. El Objeto PreparedStatement 6. El Objeto PreparedStatement 7. Procedimientos Almacenados 7. Procedimientos Almacenados 8. Ejercicios Prácticos 8. Ejercicios Prácticos
Copyright Formación y Soluciones Informáticas EFIBS S.A.

513

4.1 Procesamiento de Resultados
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.

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

514

4.1 … Procesamiento de Resultados
Por ejemplo:
Connection conn = DriverManager.getConnection( "jdbc:postgresql://10.1.1.193:5432/dbDemo”, “postgres",“ejemplo");

Statement stmt = conn.createStatement();

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();

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

515

4.2 Ejecutar una declaración SQL
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

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

516

4.3 Ejecutando una Sentencia
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");

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

517

4.4 El Objeto ResulSet
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

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

518

4.5 Procesando resultados de la Sentencia
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")); }

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

519

4.6 Cerrando Objetos
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(); ...

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

520

4.7 Declaraciones DML
Crear un objeto Statement vació
Statement stmt = conn.createStatement();

Utilizar executeUpdate(), para ejecutar el statement Por ejemplo:
int count = stmt.executeUpdate(SQLDMLstatement);

El executeUpdate(); retorna un entero (int) con la cantidad de filas afectadas, para un estatuto INSERT, UPDATE o DELETE
Statement stmt = conn.createStatement(); int rowcount = stmt.executeUpdate("DELETE FROM productos WHERE producto_id = 2354");

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

521

4.8 Declaraciones DDL
Crear un objeto Statement vació
Statement stmt = conn.createStatement();

Utilizar executeUpdate(); para ejecutar el statement
int count = stmt.executeUpdate(SQLDMLstatement);

Por ejemplo:
Statement stmt = conn.createStatement(); int rowcount = stmt.executeUpdate ("CREATE TABLE temp (col1 NUMBER(5,2), col2 VARCHAR2(30)");

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.

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

522

4.9 Declaraciones DDL
Los estatutos SQL 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) { … } } ... …
Copyright Formación y Soluciones Informáticas EFIBS S.A.

pueden

lanzar

excepciones

de

tipo

523

4.10 Manejando Transacciones
Por defecto las conexiones se encuentran en un modo de auto commit. Utilizando autocommit. conn.setAutoCommit(false), desconectamos el

El control de las transacciones cuando no se encuentra el modo autocommit, se debe utilizar: conn.commit(); conn.rollback();

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

524

5 Manipulación de Resultados
1. Introducción 1. Introducción 2. Interfaces JDBC 2. Interfaces JDBC 3. Preparación de la Base de Datos 3. Preparación de la Base de Datos 4. Procesamiento de Resultados 4. Procesamiento de Resultados 5. Manipulación de Resultados 5. Manipulación de Resultados 6. El Objeto PreparedStatement 6. El Objeto PreparedStatement 7. Procedimientos Almacenados 7. Procedimientos Almacenados 8. Ejercicios Prácticos 8. Ejercicios Prácticos

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

525

5.1 Navegando en un ResultSet
SELECT col1, col2 FROM t1;
Llama JDBC Comandos Database Driver DDBB

Navegación en el Resultado

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

526

5.2 Configurando la navegación de un ResultSet
Statement stmt = conn.createStatement (ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);

ResultSet rset = stmt.executeQuery ("SELECT id, nombre FROM persona");

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

527

5.3 Posiciones en un ResultSet
col1 col2 void beforeFirst() boolean first() boolean next() boolean absolute(int row) boolean relative (int row) boolean previous() boolean last() void afterLast()

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

528

5.4 Actualizando el ResultSet
Navegando localmente en la fila por actualizar Actualizando los valores utilizando los métodos updateXXX()
rs.updateRow();

Actualizando la fila directamente en la base de datos
rs.updateString(1, “VALORNUEVO"); rs.updateFloat(“total", 14230.0f);

Eliminado la fila en la base de datos
rs.deleteRow();

Insertando la fila en la base de datos
rs.insertRow();

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

529

6 El Objeto PreparedStatement
1. Introducción 1. Introducción 2. Interfaces JDBC 2. Interfaces JDBC 3. Preparación de la Base de Datos 3. Preparación de la Base de Datos 4. Procesamiento de Resultados 4. Procesamiento de Resultados 5. Manipulación de Resultados 5. Manipulación de Resultados 6. El Objeto PreparedStatement 6. El Objeto PreparedStatement 7. Procedimientos Almacenados 7. Procedimientos Almacenados 8. Ejercicios Prácticos 8. Ejercicios Prácticos

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

530

6.1 El Objeto PreparedStatement
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.

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

531

6.2 Crear un PreparedStatement
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 = ? ");

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

532

6.3 Valores en un PreparedStatement
Suministrarle valores a las variables
pstmt.setXXX(index, value);

Ejecutar el estatuto
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();
Copyright Formación y Soluciones Informáticas EFIBS S.A.

533

7 Procedimientos Almacenados
1. Introducción 1. Introducción 2. Interfaces JDBC 2. Interfaces JDBC 3. Preparación de la Base de Datos 3. Preparación de la Base de Datos 4. Procesamiento de Resultados 4. Procesamiento de Resultados 5. Manipulación de Resultados 5. Manipulación de Resultados 6. El Objeto PreparedStatement 6. El Objeto PreparedStatement 7. Procedimientos Almacenados 7. Procedimientos Almacenados 8. Ejercicios Prácticos 8. Ejercicios Prácticos
Copyright Formación y Soluciones Informáticas EFIBS S.A.

534

7.1 Procedimientos Almacenados
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 directamente en la base de datos. son escritos y compilados

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

535

7.2 Creación de un CallableStatement
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 (?)
CallableStatement cstmt = conn.prepareCall("{call PROC(param1,param2)}"); // Cuando No hay retorno conn.prepareCall("{? = call PROC(param1,param2)}"); // Cuando Hay retorno

Registrar los parámetros de Salida
cstmt.registerOutParameter(index,param_Type);

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

536

7.2 … Creación de un CallableStatement
Enviar los parámetros de entrada
cstmt.setXXX(index, value);

Ejecutar el estatuto
cstmt.execute();

Obtener los parámetros de salida
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);

Por Ejemplo

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

537

8 Ejercicios Prácticos
1. Introducción 1. Introducción 2. Interfaces JDBC 2. Interfaces JDBC 3. Preparación de la Base de Datos 3. Preparación de la Base de Datos 4. Procesamiento de Resultados 4. Procesamiento de Resultados 5. Manipulación de Resultados 5. Manipulación de Resultados 6. El Objeto PreparedStatement 6. El Objeto PreparedStatement 7. Procedimientos Almacenados 7. Procedimientos Almacenados 8. Ejercicios Prácticos 8. Ejercicios Prácticos
Copyright Formación y Soluciones Informáticas EFIBS S.A.

538

8.1 Ejercicios Prácticos
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).

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

539

8.1 … Ejercicios Prácticos
Mé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 Collection con todos los registros de la tabla Cliente). Usar CallableStatement.

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

540

8.1 … Ejercicios Prácticos
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.

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

541

INTRODUCCIÓN A JAVA SERVLETS

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

542

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áctica los conceptos anteriores.

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

543

1 Introducción a Html
1. Introducción a Html 1. Introducción a Html 2. Arquitectura n Capas 2. Arquitectura n Capas 3. Definición de Servlets Java 3. Definición de Servlets Java 4. Arquitectura del Paquete Servlet 4. Arquitectura del Paquete Servlet 5. Métodos Básicos del Servlet 5. Métodos Básicos del Servlet 6. Diagrama UML del Objeto Servlet 6. Diagrama UML del Objeto Servlet 7. Ciclo de Vida de un Servlet 7. Ciclo de Vida de un Servlet 8. Programación de Servlets 8. Programación de Servlets 9. Manejo del Objeto Session 9. Manejo del Objeto Session 10. Manejo del Objeto Cookie 10. Manejo del Objeto Cookie
Copyright Formación y Soluciones Informáticas EFIBS S.A.

544

1.1 Introducción a Html
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.

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

545

1.1 … Introducción a Html
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.

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

546

1.2 Estructuras básicas de un Html
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>

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

547

1.3 Comentarios en Html
Para insertar comentarios dentro de un documento HTML utilizaremos la etiqueta especial <!--, definiéndose un comentario de la forma:

<!-- Esto es un comentario -->

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

548

1.4 Cabecera en Html
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.

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

549

1.4 … Cabecera en Html
<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>
Copyright Formación y Soluciones Informáticas EFIBS S.A.

550

1.4 … Cabecera en Html
<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.

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

551

1.4 … Cabecera en Html
<meta http-equiv="ContentType" content="text/html; charset=iso-8859-1"> <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 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. 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"> <meta http-equiv="refresh" content="5;URL=http://www. efibs.com">

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.

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

552

1.5 Creación de Tablas
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 Tabla Para 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).

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

553

1.6 Ejemplo de Tablas
<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>
Copyright Formación y Soluciones Informáticas EFIBS S.A.

554

1.7 Formularios
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

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

555

1.7 … Formularios
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.

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

556

1.8 … Atributos de las Etiquetas
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.

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

557

1.8 Atributos de las Etiquetas
… 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 ...

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

558

1.8 … Atributos de las Etiquetas
<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" >

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

559

1.8 … Atributos de las Etiquetas
<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>

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

560

1.8 … Atributos de las Etiquetas
<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.

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

561

1.8 … Atributos de las Etiquetas
<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>

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

562

1.9 Ejercicio Práctico

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

563

1.9 … Ejercicio Práctico
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 script para 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.

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

564

1.9 … Ejercicio Práctico
<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>

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

565

1.9 … Ejercicio Práctico
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 onclick en el botón de submit de la siguiente manera:

<INPUT NAME =accion TYPE="BUTTON" VALUE=“Insertar” onClick="return validar(this.form)">

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

566

2 Arquitectura n Capas
1. Introducción a Html 1. Introducción a Html 2. Arquitectura n Capas 2. Arquitectura n Capas 3. Definición de Servlets Java 3. Definición de Servlets Java 4. Arquitectura del Paquete Servlet 4. Arquitectura del Paquete Servlet 5. Métodos Básicos del Servlet 5. Métodos Básicos del Servlet 6. Diagrama UML del Objeto Servlet 6. Diagrama UML del Objeto Servlet 7. Ciclo de Vida de un Servlet 7. Ciclo de Vida de un Servlet 8. Programación de Servlets 8. Programación de Servlets 9. Manejo del Objeto Session 9. Manejo del Objeto Session 10. Manejo del Objeto Cookie 10. Manejo del Objeto Cookie
Copyright Formación y Soluciones Informáticas EFIBS S.A.

567

2.1 Arquitectura n Capas
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).

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

568

2.1 Arquitectura n Capas
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.

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

569

2.2 Ventajas de la Arquitectura por Capas
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.

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

570

2.3 Representación Gráfica

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

571

3 Definición de Servlets Java
1. Introducción a Html 1. Introducción a Html 2. Arquitectura n Capas 2. Arquitectura n Capas 3. Definición de Servlets Java 3. Definición de Servlets Java 4. Arquitectura del Paquete Servlet 4. Arquitectura del Paquete Servlet 5. Métodos Básicos del Servlet 5. Métodos Básicos del Servlet 6. Diagrama UML del Objeto Servlet 6. Diagrama UML del Objeto Servlet 7. Ciclo de Vida de un Servlet 7. Ciclo de Vida de un Servlet 8. Programación de Servlets 8. Programación de Servlets 9. Manejo del Objeto Session 9. Manejo del Objeto Session 10. Manejo del Objeto Cookie 10. Manejo del Objeto Cookie
Copyright Formación y Soluciones Informáticas EFIBS S.A.

572

3.1 Definición de Servlets Java
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.

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

573

3.1 … Definición de Servlets Java
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 online a partir de los datos de los precios actuales y el número de artículos en stock.

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

574

3.2 Otros usos de los Servlets
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. Presentación Lógica de Negocio Acceso BD Browser Servidor de Servidor de Web DDBB
Servidor HTTP www.capris.co. cr htm htm htm JSP COMPILER/ SERVLETG ENGINE

Internet
Firewall jsp jsp jsp

servlets servlets

servlets servlets

Firewall

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

575

3.3 Orientación de los Servlets
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.

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

576

3.4 Ejercicio Práctico
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).

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

577

3.4 … Ejercicio Práctico
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.

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

578

3.4 … Ejercicio Práctico
El objetivo de esta práctica, es que el estudiante aprenda a crear html desde 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.

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

579

4 Arquitectura del Paquete Servlet
1. Introducción a Html 1. Introducción a Html 2. Arquitectura n Capas 2. Arquitectura n Capas 3. Definición de Servlets Java 3. Definición de Servlets Java 4. Arquitectura del Paquete Servlet 4. Arquitectura del Paquete Servlet 5. Métodos Básicos del Servlet 5. Métodos Básicos del Servlet 6. Diagrama UML del Objeto Servlet 6. Diagrama UML del Objeto Servlet 7. Ciclo de Vida de un Servlet 7. Ciclo de Vida de un Servlet 8. Programación de Servlets 8. Programación de Servlets 9. Manejo del Objeto Session 9. Manejo del Objeto Session 10. Manejo del Objeto Cookie 10. Manejo del Objeto Cookie
Copyright Formación y Soluciones Informáticas EFIBS S.A.

580

4.1 Arquitectura del Paquete Servlet
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.

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

581

4.1 … Arquitectura del Paquete Servlet
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 package javax.servlet.

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

582

4.1 … Arquitectura del Paquete Servlet
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.

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

583

4.1 … Arquitectura del Paquete Servlet
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.

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

584

4.1 … Arquitectura del Paquete Servlet
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. para cliente. Capacidades de gestión de cookies. El API cookie se utiliza guardar y recuperar datos dentro del

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

585

5 Métodos Básicos del Servlet
1. Introducción a Html 1. Introducción a Html 2. Arquitectura n Capas 2. Arquitectura n Capas 3. Definición de Servlets Java 3. Definición de Servlets Java 4. Arquitectura del Paquete Servlet 4. Arquitectura del Paquete Servlet 5. Métodos Básicos del Servlet 5. Métodos Básicos del Servlet 6. Diagrama UML del Objeto Servlet 6. Diagrama UML del Objeto Servlet 7. Ciclo de Vida de un Servlet 7. Ciclo de Vida de un Servlet 8. Programación de Servlets 8. Programación de Servlets 9. Manejo del Objeto Session 9. Manejo del Objeto Session 10. Manejo del Objeto Cookie 10. Manejo del Objeto Cookie
Copyright Formación y Soluciones Informáticas EFIBS S.A.

586

5.1 Métodos Básicos del Servlet
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.

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

587

5.2 Estructura del Servlet
package org.efibs.accion;

protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); /* TODO output your page here

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); }

import java.io.*; import java.net.* import javax.servlet.*; import javax.servlet.http.*;

public class MiServlet extends HttpServlet { { super.init(config); }

out.println("<html>"); out.println("<head>"); out.println("<title>EFIBS S.A.</title>");

public void init(ServletConfig config) throws ServletException

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); } public String getServletInfo() { return "Short description"; }

out.println("</head>"); out.println("<body>");

public void destroy() { // Código antes de destruir el Servlet }

out.println("</body>"); out.println("</html>"); */ out.close(); }
}

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

588

5.3 Ejercicio Práctico
Sobre la carpeta WEB-INF Bienvenida.java, utilizando el IDE. De click derecho New Servlet. sobre la classes cree un nuevo servlet llamado capeta classes y seleccione la opción

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>

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

589

5.3 … Ejercicio Práctico
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:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 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> xmlns="http://java.sun.com/xml/ns/j2ee" http://java.sun.com/xml/ns/j2ee/web-

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

590

5.3 … Ejercicio Práctico
<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>

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

591

6. Diagrama UML del Objeto Servlet
1. Introducción a Html 1. Introducción a Html 2. Arquitectura n Capas 2. Arquitectura n Capas 3. Definición de Servlets Java 3. Definición de Servlets Java 4. Arquitectura del Paquete Servlet 4. Arquitectura del Paquete Servlet 5. Métodos Básicos del Servlet 5. Métodos Básicos del Servlet 6. Diagrama UML del Objeto Servlet 6. Diagrama UML del Objeto Servlet 7. Ciclo de Vida de un Servlet 7. Ciclo de Vida de un Servlet 8. Programación de Servlets 8. Programación de Servlets 9. Manejo del Objeto Session 9. Manejo del Objeto Session 10. Manejo del Objeto Cookie 10. Manejo del Objeto Cookie
Copyright Formación y Soluciones Informáticas EFIBS S.A.

592

6.1 Diagrama UML del Objeto Servlet
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.

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

593

7. Ciclo de Vida de un Servlet
1. Introducción a Html 1. Introducción a Html 2. Arquitectura n Capas 2. Arquitectura n Capas 3. Definición de Servlets Java 3. Definición de Servlets Java 4. Arquitectura del Paquete Servlet 4. Arquitectura del Paquete Servlet 5. Métodos Básicos del Servlet 5. Métodos Básicos del Servlet 6. Diagrama UML del Objeto Servlet 6. Diagrama UML del Objeto Servlet 7. Ciclo de Vida de un Servlet 7. Ciclo de Vida de un Servlet 8. Programación de Servlets 8. Programación de Servlets 9. Manejo del Objeto Session 9. Manejo del Objeto Session 10. Manejo del Objeto Cookie 10. Manejo del Objeto Cookie
Copyright Formación y Soluciones Informáticas EFIBS S.A.

594

7.1 Ciclo de Vida de un Servlet
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

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

595

8. Programación de Servlets
1. Introducción a Html 1. Introducción a Html 2. Arquitectura n Capas 2. Arquitectura n Capas 3. Definición de Servlets Java 3. Definición de Servlets Java 4. Arquitectura del Paquete Servlet 4. Arquitectura del Paquete Servlet 5. Métodos Básicos del Servlet 5. Métodos Básicos del Servlet 6. Diagrama UML del Objeto Servlet 6. Diagrama UML del Objeto Servlet 7. Ciclo de Vida de un Servlet 7. Ciclo de Vida de un Servlet 8. Programación de Servlets 8. Programación de Servlets 9. Manejo del Objeto Session 9. Manejo del Objeto Session 10. Manejo del Objeto Cookie 10. Manejo del Objeto Cookie
Copyright Formación y Soluciones Informáticas EFIBS S.A.

596

8.1 Programación de Servlets
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.

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

597

8.2 Objetos HttpServletRequest
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.

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

598

8.2 … Objetos HttpServletRequest
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 getInputStream devuelve un ServletInputStream.

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

599

8.3 Objetos HttpServletResponse
Un objeto HttpServletResponse proporciona dos formas de devolver datos al usuario. El método getWriter devuelve un Writer El 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 HttpServletResponse proporciona 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).
Copyright Formación y Soluciones Informáticas EFIBS S.A.

600

8.4 Estructura de un Servlet
public class SimpleServlet extends HttpServlet { public void init(ServletConfig config) throws ServletException { super.init(config); } public void destroy() { }

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

601

8.5 Estructura de un Servlet
/** * 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 respuesta out = 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(...) }

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

602

8.6 Interactuar con Clientes
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).

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

603

8.7 Problemas con los Threads
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, HttpServletResponse response) throws ServletException, IOException { ... } ... }
Copyright Formación y Soluciones Informáticas EFIBS S.A.

604

8.8 Cómo destruir un Servlet?
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; public void destroy() { compartidos books = null; } } // En el métod init(..) // Eliminar la instancia y recursos

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

605

8.9 Invocación de un Servlet
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,HttpServletResponse response) throws ServletException, IOException {

...BookDBServlet database = (BookDBServlet) getServletConfig().getServletContext().getServlet("bookdb"); } }
Copyright Formación y Soluciones Informáticas EFIBS S.A.

...

606

8.10 Ejercicio Práctico

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

607

8.10 … Ejercicio Práctico
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.

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

608

8.10 … Ejercicio Práctico
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.

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

609

8.10 … Ejercicio Práctico

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

610

9. Manejo del Objeto Session
1. Introducción a Html 1. Introducción a Html 2. Arquitectura n Capas 2. Arquitectura n Capas 3. Definición de Servlets Java 3. Definición de Servlets Java 4. Arquitectura del Paquete Servlet 4. Arquitectura del Paquete Servlet 5. Métodos Básicos del Servlet 5. Métodos Básicos del Servlet 6. Diagrama UML del Objeto Servlet 6. Diagrama UML del Objeto Servlet 7. Ciclo de Vida de un Servlet 7. Ciclo de Vida de un Servlet 8. Programación de Servlets 8. Programación de Servlets 9. Manejo del Objeto Session 9. Manejo del Objeto Session 10. Manejo del Objeto Cookie 10. Manejo del Objeto Cookie
Copyright Formación y Soluciones Informáticas EFIBS S.A.

611

9.1 Manejo del Objeto Session
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).

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

612

9.2 Threading
Multi-thread Model Single-thread Model

Cliente 1 Instancia del Servlet 1 Cliente 2 Cliente 1

Instancia del Servlet 2

Cliente 1
613

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

9.3 Obtener una sesión
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); ... out = response.getWriter(); ... } }

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

614

9.4 Almacenar y Obtener datos de una sesión
public class CatalogServlet extends HttpServlet { throws public void doGet (HttpServletRequest request,HttpServletResponse response) 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); } } }
Copyright Formación y Soluciones Informáticas EFIBS S.A.

615

9.5 Invalidar una sesión
public class ReceiptServlet extends HttpServlet { public void doPost(HttpServletRequest request, HttpServletResponse response) 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(); } }
Copyright Formación y Soluciones Informáticas EFIBS S.A.

616

10. Manejo del Objeto Cookie
1. Introducción a Html 1. Introducción a Html 2. Arquitectura n Capas 2. Arquitectura n Capas 3. Definición de Servlets Java 3. Definición de Servlets Java 4. Arquitectura del Paquete Servlet 4. Arquitectura del Paquete Servlet 5. Métodos Básicos del Servlet 5. Métodos Básicos del Servlet 6. Diagrama UML del Objeto Servlet 6. Diagrama UML del Objeto Servlet 7. Ciclo de Vida de un Servlet 7. Ciclo de Vida de un Servlet 8. Programación de Servlets 8. Programación de Servlets 9. Manejo del Objeto Session 9. Manejo del Objeto Session 10. Manejo del Objeto Cookie 10. Manejo del Objeto Cookie
Copyright Formación y Soluciones Informáticas EFIBS S.A.

617

10.1 Manejo del Objeto Cookie
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.

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

618

10.2 Enviar una Cookie
public void doGet (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ... //If the user wants to add a book, remember it by adding a cookie if (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); }

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

619

10.3 Recuperar,Recorrer y Eliminar una Cookie
public void doGet (HttpServletRequest request,HttpServletResponse response) 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 remove Cookie[] 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 zero thisCookie.setMaxAge(0); } } }
Copyright Formación y Soluciones Informáticas EFIBS S.A.

620

10.4 Session-Resumen
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.

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

621

10.5 Cookie-Resumen
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 rato Adicionar la cookie: response.addCookie(laCookie);

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

622

10.5 … Cookie-Resumen
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()); } }

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

623

10.5 … Cookie-Resumen
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);

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

624

10.5 … Cookie-Resumen
… 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"); } } }

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

625

INTRODUCCIÓN A JAVASERVER PAGES (JSP)

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

626

1 Introducción y Objetos
1. Introducción y Objetivos 1. Introducción y Objetivos 2. Características Principales de JSPs 2. Características Principales de JSPs 3. Ciclo de Vida de un JSP 3. Ciclo de Vida de un JSP 4. Elemento Script JSP 4. Elemento Script JSP 5. Directivas JSP 5. Directivas JSP 6. Variables Predefinidas u Objetos Implícitos 6. Variables Predefinidas u Objetos Implícitos 7. Acciones 7. Acciones 8. Comentarios --Caracteres Escape 8. Comentarios Caracteres Escape 9. Sumario de Sintaxis 9. Sumario de Sintaxis 10. Ejercicios Prácticos 10. Ejercicios Prácticos
Copyright Formación y Soluciones Informáticas EFIBS S.A.

627

1.1 Introducción y Objetos
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.

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

628

2. Características Principales de JSPs
1. Introducción y Objetivos 1. Introducción y Objetivos 2. Características Principales de JSPs 2. Características Principales de JSPs 3. Ciclo de Vida de un JSP 3. Ciclo de Vida de un JSP 4. Elemento Script JSP 4. Elemento Script JSP 5. Directivas JSP 5. Directivas JSP 6. Variables Predefinidas u Objetos Implícitos 6. Variables Predefinidas u Objetos Implícitos 7. Acciones 7. Acciones 8. Comentarios --Caracteres de Escape 8. Comentarios Caracteres de Escape 9. Sumario de Sintaxis 9. Sumario de Sintaxis 10. Ejercicios Prácticos 10. Ejercicios Prácticos
Copyright Formación y Soluciones Informáticas EFIBS S.A.

629

2.1 Características Principales de JSPs
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

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

630

2.2 Ventajas de los JSP
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.

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

631

2.2 … Ventajas de los JSP
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.

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

632

3. Ciclo de Vida de un JSP
1. Introducción y Objetivos 1. Introducción y Objetivos 2. Características Principales de JSPs 2. Características Principales de JSPs 3. Ciclo de Vida de un JSP 3. Ciclo de Vida de un JSP 4. Elemento Script JSP 4. Elemento Script JSP 5. Directivas JSP 5. Directivas JSP 6. Variables Predefinidas u Objetos Implícitos 6. Variables Predefinidas u Objetos Implícitos 7. Acciones 7. Acciones 8. Comentarios --Caracteres Escape 8. Comentarios Caracteres Escape 9. Sumario de Sintaxis 9. Sumario de Sintaxis 10. Ejercicios Prácticos 10. Ejercicios Prácticos
Copyright Formación y Soluciones Informáticas EFIBS S.A.

633

3.1 Ciclo de Vida de un JSP
Browser del Cliente http://www.efibs.com/demo.jsp Primer vez Crear Servlet demo.java

Servidor de Web

1

3
Ciclo de Vida del Servlet

2
Compilar Servlet demo.class

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

634

4. Elemento Script JSP
1. Introducción y Objetivos 1. Introducción y Objetivos 2. Características Principales de JSPs 2. Características Principales de JSPs 3. Ciclo de Vida de un JSP 3. Ciclo de Vida de un JSP 4. Elemento Script JSP 4. Elemento Script JSP 5. Directivas JSP 5. Directivas JSP 6. Variables Predefinidas u Objetos Implícitos 6. Variables Predefinidas u Objetos Implícitos 7. Acciones 7. Acciones 8. Comentarios --Caracteres de Escape 8. Comentarios Caracteres de Escape 9. Sumario de Sintaxis 9. Sumario de Sintaxis 10. Ejercicios Prácticos 10. Ejercicios Prácticos
Copyright Formación y Soluciones Informáticas EFIBS S.A.

635

4.1 Elemento Script JSP
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.

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

636

4.2 Objetos Implícitos
El Objeto request El Objeto response El Objeto session El Objeto out El Objeto exception El Objeto application

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

637

4.3 Expresiones JSP
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>

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

638

4.4 Scriplets JSP
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>

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

639

4.5 Declaraciones JSP
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>

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

640

5. Directivas JSP
1. Introducción y Objetivos 1. Introducción y Objetivos 2. Características Principales de JSPs 2. Características Principales de JSPs 3. Ciclo de Vida de un JSP 3. Ciclo de Vida de un JSP 4. Elemento Script JSP 4. Elemento Script JSP 5. Directivas JSP 5. Directivas JSP 6. Variables Predefinidas u Objetos Implícitos 6. Variables Predefinidas u Objetos Implícitos 7. Acciones 7. Acciones 8. Comentarios --Caracteres de Escape 8. Comentarios Caracteres de Escape 9. Sumario de Sintaxis 9. Sumario de Sintaxis 10. Ejercicios Prácticos 10. Ejercicios Prácticos
Copyright Formación y Soluciones Informáticas EFIBS S.A.

641

5.1 Directivas JSP
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

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

642

5.2 Directiva Page
La directiva page nos permite definir uno o más de los siguientes atributos sensibles a las mayúsculas:

import contentType isThreadSafe session buffer autoflush

extends info errorPage isErrorPage languaje

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

643

5.3 Directiva import
import="package.class" import="package.class1,...,package.classN". Esta 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. instrucción o permite

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

644

5.4 Directiva contentType
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"); %>

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

645

5.5 Directiva isThreadSafe
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.

Multi-thread Model (true)

Single-thread Model (false)

Cliente 1 Instancia del Servlet Cliente 1

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

Cliente 2

646

5.6 Directiva session
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.

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

647

5.7 Directiva buffer
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.

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

648

5.8 Directiva autoflush
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".

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

649

5.9 Directiva extends
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.

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

650

5.10 Directiva info
info="message". Define un string que puede usarse para ser recuperado mediante el método getServletInfo.

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

651

5.11 Directiva errorPage
errorPage="url". Especifica la página JSP que se debería procesar si se lanzará cualquier Throwable.

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

652

5.12 Directiva isErrorPage
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.

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

653

5.13 Directiva language
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.*" />

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

654

5.14 Sintaxis XML para definir directivas
La sintaxis XML para definir directivas es: <jsp:directive.TipoDirectiva atributo=valor /> Por ejemplo, el equivalente XML de: <%@ page import="java.util.*" %> es: <jsp:directive.page import="java.util.*" />

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

655

5.15 Directiva include
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 home del 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.

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

656

5.16 Ejemplo Directiva include
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD> <TITLE>Tutorial EFIBS: JavaServer Pages (JSP)</TITLE> <META NAME="author" CONTENT="webmaster@efibs.com"> <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>

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

657

6. Variables Predefinidas u Objetos Implícitos
1. Introducción y Objetivos 1. Introducción y Objetivos 2. Características Principales de JSPs 2. Características Principales de JSPs 3. Ciclo de Vida de un JSP 3. Ciclo de Vida de un JSP 4. Elemento Script JSP 4. Elemento Script JSP 5. Directivas JSP 5. Directivas JSP 6. Variables Predefinidas u Objetos Implícitos 6. Variables Predefinidas u Objetos Implícitos 7. Acciones 7. Acciones 8. Comentarios --Caracteres Escape 8. Comentarios Caracteres Escape 9. Sumario de Sintaxis 9. Sumario de Sintaxis 10. Ejercicios Prácticos 10. Ejercicios Prácticos
Copyright Formación y Soluciones Informáticas EFIBS S.A.

658

6.1 … Variables Predefinidas u Objetos Implícitos
El Objeto request El Objeto response El Objeto out El Objeto session El Objeto application El Objeto config El Objeto pageContext específicas del : HttpServletRequest : HttpServletResponse : PrintWriter : HttpSession : Es el ServletContext obtenido mediante getServletConfig().getContext(). : Es el objeto ServletConfig para la página. : PageContext para encapsular características de uso servidor como JspWriters de alto rendimiento.

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

659

7. Acciones
1. Introducción y Objetivos 1. Introducción y Objetivos 2. Características Principales de JSPs 2. Características Principales de JSPs 3. Ciclo de Vida de un JSP 3. Ciclo de Vida de un JSP 4. Elemento Script JSP 4. Elemento Script JSP 5. Directivas JSP 5. Directivas JSP 6. Variables Predefinidas u Objetos Implícitos 6. Variables Predefinidas u Objetos Implícitos 7. Acciones 7. Acciones 8. Comentarios --Caracteres de Escape 8. Comentarios Caracteres de Escape 9. Sumario de Sintaxis 9. Sumario de Sintaxis 10. Ejercicios Prácticos 10. Ejercicios Prácticos
Copyright Formación y Soluciones Informáticas EFIBS S.A.

660

7.1 Acciones
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.

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

661

7.2 Acción jsp:include
Esta acción nos permite insertar ficheros en una página que está siendo generada. La sintaxis es flush="true" /> la siguiente: <jsp:include page="relative URL"

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> ... <BODY> Este es un <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"/>
Copyright Formación y Soluciones Informáticas EFIBS S.A.

resumen de la más recientes noticias:

662

7.2 … Acción jsp:include
<LI><jsp:include page="EjemploJSP/noticia4.htm" flush="true"/> </UL> </BODY> </HTML>

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

663

7.3 Acción jsp:useBean
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 Bean es: <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>

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

664

7.4 Atributos de jsp:useBean
Atributo Uso

id

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. Designa el nombre completo del paquete que contiene el bean. 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.

class scope

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

665

7.4 … Atributos de jsp:useBean
Atributo type Uso 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 interface que implemente la clase. Recuerda que el nombre de la variable se designa mediante el atributo id. 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

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

666

7.5 Acción jsp:forward
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>

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

667

7.6 Acción jsp:param
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>

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

668

7.7 Acción jsp:plugin
Esta acción nos permite insertar un elemento OBJECT o EMBED específico del navegador para indicar que el navegador debería ejecutar un applet usando 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> }
Copyright Formación y Soluciones Informáticas EFIBS </jsp:plugin> S.A.

669

7.7 … Acción jsp:plugin
<jsp:plugin type="applet“ code="JavaClock.class“ height="200" width="200" nspluginurl="http://java.sun.com/products/plugin/1.3.0_01/plugininstall.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>

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

670

7.7 … Acción jsp:plugin
<jsp:fallback> <p>No se ha podido arrancar el plugin.</p> </jsp:fallback> </jsp:plugin>

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

671

8. Comentarios –Caracteres de Escape
1. Introducción y Objetivos 1. Introducción y Objetivos 2. Características Principales de JSPs 2. Características Principales de JSPs 3. Ciclo de Vida de un JSP 3. Ciclo de Vida de un JSP 4. Elemento Script JSP 4. Elemento Script JSP 5. Directivas JSP 5. Directivas JSP 6. Variables Predefinidas u Objetos Implícitos 6. Variables Predefinidas u Objetos Implícitos 7. Acciones 7. Acciones 8. Comentarios --Caracteres de Escape 8. Comentarios Caracteres de Escape 9. Sumario de Sintaxis 9. Sumario de Sintaxis 10. Ejercicios Prácticos 10. Ejercicios Prácticos
Copyright Formación y Soluciones Informáticas EFIBS S.A.

672

8.1 Comentarios –Caracteres de Escape
Sintaxis <%-- comment --%> <!-- comment --> <\% %\> \' Propósito Un comentario JSP. Ignorado por el traductor JSP-a-scriptlet. Cualquier elemento de script, directivas o acciones embebidas son ignorados. Un comentario HTML. Se pasa al HTML resultante. Cualquier elemento de script, directivas o acciones embebidas se ejecutan normalmente. Usado en plantillas de texto (HTML estático) donde realmente queremos escribir "<%". Usado en elementos de script donde realmente queremos escribir "%>". 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. 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. %> en un atributo <% en un atributo.

\"

%\> <\%

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

673

9. Sumario de Sintaxis
1. Introducción y Objetivos 1. Introducción y Objetivos 2. Características Principales de JSPs 2. Características Principales de JSPs 3. Ciclo de Vida de un JSP 3. Ciclo de Vida de un JSP 4. Elemento Script JSP 4. Elemento Script JSP 5. Directivas JSP 5. Directivas JSP 6. Variables Predefinidas u Objetos Implícitos 6. Variables Predefinidas u Objetos Implícitos 7. Acciones 7. Acciones 8. Comentarios --Caracteres de Escape 8. Comentarios Caracteres de Escape 9. Sumario de Sintaxis 9. Sumario de Sintaxis 10. Ejercicios Prácticos 10. Ejercicios Prácticos
Copyright Formación y Soluciones Informáticas EFIBS S.A.

674

9.1 … Sumario de Sintaxis
Sumario de Sintaxis Sumario de Sintaxis

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

675

10. Ejercicios Prácticos
1. Introducción y Objetivos 1. Introducción y Objetivos 2. Características Principales de JSPs 2. Características Principales de JSPs 3. Ciclo de Vida de un JSP 3. Ciclo de Vida de un JSP 4. Elemento Script JSP 4. Elemento Script JSP 5. Directivas JSP 5. Directivas JSP 6. Variables Predefinidas u Objetos Implícitos 6. Variables Predefinidas u Objetos Implícitos 7. Acciones 7. Acciones 8. Comentarios --Caracteres de Escape 8. Comentarios Caracteres de Escape 9. Sumario de Sintaxis 9. Sumario de Sintaxis 10. Ejercicios Prácticos 10. Ejercicios Prácticos
Copyright Formación y Soluciones Informáticas EFIBS S.A.

676

10.1 Ejercicios Prácticos
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:
login Usuario Contraseña

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

677

10.1 … Ejercicios Prácticos
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.

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

678

10.1 … Ejercicios Prácticos
De ingresar a cualquiera de las dos páginas, deberá llamar un servlet mantenimientoClientes.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 para el módulo de productos.

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

679

10.1 … Ejercicios Prácticos
La página debería quedar como la siguiente:

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

680

FRAMEWORK STRUTS

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

681

Objetivos
Explicar los principales componentes del framework ,específicamente Beans, Forms, Actions, Messages y Errors. Analizar los componentes dentro del contexto de las n-capas. Aplicar los conceptos de Struts al sistema de Ordenes.

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

682

1 Introducción
1. Introducción 1. Introducción 2. Modelo 3 Capas 2. Modelo 3 Capas 3. Framework STRUTS 3. Framework STRUTS 4. Estructura Aplicación 4. Estructura Aplicación 5. Ejercicios Prácticos 5. Ejercicios Prácticos

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

683

1.1 Introducción
¿ 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 frameworks para el desarrollo de aplicaciones web, siendo uno de estos Struts.

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

684

1.1 … Introducción
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).

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

685

2 Modelo 3 Capas
1. Introducción 1. Introducción 2. Modelo 3 Capas 2. Modelo 3 Capas 3. Framework STRUTS 3. Framework STRUTS 4. Estructura Aplicación 4. Estructura Aplicación 5. Ejercicios Prácticos 5. Ejercicios Prácticos

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

686

2 … Modelo 3 Capas
Esquema General

Presentación
Explorer JSP, HTML

Lógica de Negocio
Código JAVA

Base de Datos

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

687

2 … Modelo 3 Capas
Detalle del esquema en tres capas

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

688

2 … Modelo 3 Capas
¿ Porqué el desarrollo en tres capas ? 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 de la 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

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

689

2 … Modelo 3 Capas
Capa de Presentación 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.

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

690

2 … Modelo 3 Capas
Capa de Lógica de Negocio Contiene: Clases JAVA Helpers Session Beans EJB’s

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

691

2 … Modelo 3 Capas
Capa de Datos

Contiene Estructura de la base de datos Tablas

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

692

3 Framework STRUTS
1. Introducción 1. Introducción 2. Modelo 3 Capas 2. Modelo 3 Capas 3. Framework STRUTS 3. Framework STRUTS 4. Estructura Aplicación 4. Estructura Aplicación 5. Ejercicios Prácticos 5. Ejercicios Prácticos

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

693

3 … Framework STRUTS
FRAMEWORK:

¿ Qué es ?

Extensión de un lenguaje mediante jerarquías de clases que implementan una funcionalidad y que pueden ser extendidas. Struts: Framework para desarrollar aplicaciones Java Código abierto Pertenece a Apache Tiene dos años en el mercado

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

694

3 … Framework STRUTS
¿ Porqué se utiliza Struts en los proyectos ?
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

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

695

3 … Framework STRUTS
¿ Como poner en funcionamiento Struts ?
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

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

696

3 … Framework STRUTS
Esquema

MODEL VIEW CONTROLLER
Controller (Servlet)

Cliente ( Browser )

Model (Java Beans)

View (JSP)

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

697

3 … Framework STRUTS
Cliente Estándar Web Browser Controller 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 que gestionan la lógica de negocio. El controlador maneja las peticiones dirigidas hacia un Action class.

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

698

3 … Framework STRUTS
Model 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. View

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 dichas librerías. Las páginas JSP pertenecientes a la capa de presentación utilizan librerias de marcas para mostrar el estado del Model.

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

699

3 … Framework STRUTS
MODEL VIEW CONTROLLER

Invocación a métodos

Model
Encapsula el estado de la aplicación Da respuesta a las queries Notificación Se encarga de la lógica de negocio de Cambio Notifica cambios en la capa de presentación

Petición de Estado

Cambio de Estado

Eventos

View
Presenta páginas al usuario Actualiza peticiones del Model Manda al Controller peticiones del usuario Permite al Controller seleccionar la view

Controller
Selección de la View Define el comportamiento de la aplicación Mapea las acciones del usuario al model Selecciona views para la respuesta Uno para cada funcionalidad.

Gestiones del Usuario

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

700

3 … Framework STRUTS
¿ Como funciona esto en aplicaciones WEB ? 2.Acciones 1. Solicitud

Controller ( Servlet)
3. Resultados 4. Redireccionamiento

Model (Java Beans y/o EJBs)

6. Resultado

View (JSPs, TagLibs)

5. Consulta

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

701

3 … Framework STRUTS
¿ Como funciona esto en aplicaciones WEB ?

(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.

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

702

3 … Framework STRUTS
Características Principales 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 Tags predefinidos 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).

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

703

3 … Framework STRUTS
Diagrama de Clases

View
ActionForm.java

Controller
forward Instanciate ActionForm Bean

Model

EJB
Session Beans
invoke / replay

Database

ActionServlet
1:1 fields + validation forward

Action.java
use

Tables Tables Tables

.jsp
forward action mapping add form errors display errors invoke / replay

Entity Beans
Struts-config.XML

Errors.java
add logic errors

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

704

3 … Framework STRUTS
VIEW con JSPs

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

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

705

3 … Framework STRUTS
VIEW con JSPs

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.

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

706

3 … Framework STRUTS
¿ Para que usar JSP’s ? Estructura visual de la página, junto con HTML. Acceder a objetos del servidor. Modificar los datos.

¿ Para que no usar JSP’s ? Para incluir código de acceso a la base de datos. Para incluir código de lógica de negocio

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

707

3 … Framework STRUTS
JSP - Ejemplo <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>

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

708

3 … Framework STRUTS
Etiquetas en un .Properties 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 servlet inicial. Aquí se definirán todas las etiquetas necesarias para la aplicación.

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

709

3 … Framework STRUTS
Etiquetas en un .Properties 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.

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

710

3 … Framework STRUTS
Combinando elementos de Struts en un JSP A continuación se muestra como utilizar los distintos elementos de Struts en una página JSP para generar un Form que envíe una petició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" %>

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

711

3 … Framework STRUTS
<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 -->

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

712

3 … Framework STRUTS
Combinando elementos de Struts en un JSP
<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>

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

713

3 … Framework STRUTS
VIEW ---- ACTION FORM

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.

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

714

3 … Framework STRUTS
VIEW ---- ACTION FORM 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.

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

715

3 … Framework STRUTS
VIEW ---- ACTION FORM 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.

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

716

3 … Framework STRUTS
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.

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

717

3 … Framework STRUTS
… 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:
Método Get public String getPropiedad () { return propiedad; } Método Set Public void setPropiedad (String propiedad) { this.propiedad = propiedad; }

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

718

3 … Framework STRUTS
Como Crear un Action Form 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 los datos recibidos en cada una de las propiedades definidas anteriormente. En el JSP asociado a este form, deben definirse cada una de estas propiedades como objetos de HTML para que al hacer “submit” del formulario de HTML, dichas propiedades sean almacenadas en la clase de java o Form destinado para ello.

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

719

3 … Framework STRUTS
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 encuentra ningún error, entonces se devuelve un null o una instancia de la clase ActionErrors de zero-length.

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

720

3 … Framework STRUTS
Como Crear un Action Form Si alguna validación no se cumple, entonces se agrega un error nuevo 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 ser una cadena definida por el desarrollador en el momento de agregar el error , o puede ser una etiqueta definida en el archivo de .properties de la aplicación (Ej. New ActionError("error.descripcion")).

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

721

3 … Framework STRUTS
Como Crear un Action Form

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 form se haya invocado.

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

722

3 … Framework STRUTS
Como Crear un Action Form También se puede utilizar el siguiente método que será requerido cuando se utilicen checkbox: Public void reset(ActionMapping mapping, HttpServletRequest request) Este método únicamente llevará la inicialización de las variables.

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

723

3 … Framework STRUTS
Como Crear un Action Form Esto es todo lo que debe contener la clase NombreForm.java. Por último, se debe incluir la definición de este form en el archivo de configuración del Struts, struts-config.xml : <!—===== Definición de formas ====== --> <form-beans> <form-bean name="NombreForm" type="paquete.paquete2.paqueteN.nombreForm"/> </form-beans>

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

724

3 … Framework STRUTS
Como Crear un Action Form En donde NombreForm, corresponde a un nombre por el cual se hará referencia al archivo .java que se ha generado, a través de toda la aplicación y paquete.paquete2.paqueteN.nombreForm que 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 (fully qualified name).

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

725

3 … Framework STRUTS
ActionForm - Ejemplo public final class DireccionForm extends ActionForm { private String tipDireccion; public void reset(ActionMapping mapping, HttpServletRequest request) { this.tipDireccion = null; }

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

726

3 … Framework STRUTS
ActionForm – Ejemplo (cont.) 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; }

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

727

3 … Framework STRUTS
ActionForm – Ejemplo (Cont.)

//Definición del método get() public String getTipDireccion() { return tipDireccion; } //Definición del metodo set() public void setTipDireccion(String tipDireccion) { this.tipDireccion = tipDireccion; }

}

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

728

3 … Framework STRUTS
CONTROLLER ---- ACTION SERVLET 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

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

729

3 … Framework STRUTS
CONTROLLER ---- ACTION SERVLET

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

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

730

3 … Framework STRUTS
CONFIGURAR EL SERVLET INICIAL Para integrar struts a una aplicación WEB es necesario inicializar el framework a través del actionServlet. Esta clase representa el “controlador” en la estructura de MVC (Model View Controller). La inicialización se realiza en el archivo web.xml y los elementos 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.

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

731

3 … Framework STRUTS
CONFIGURAR EL SERVLET INICIAL

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.

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

732

3 … Framework STRUTS
EJEMPLO ---- ACTION SERVLET <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</paramvalue> </init-param> <init-param> <param-name>debug</param-name> <param-value>0</param-value> </init-param>
Copyright Formación y Soluciones Informáticas EFIBS S.A.

733

3 … Framework STRUTS
EJEMPLO ---- ACTION SERVLET <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>

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

734

3 … Framework STRUTS
CONTROLLER ---- STRUTS-CONFIG.XML 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.

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

735

3 … Framework STRUTS
CONTROLLER ---- STRUTS-CONFIG.XML 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.

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

736

3 … Framework STRUTS
Struts-Config - Ejemplo <?xml version="1.0" encoding="ISO-8859-1" ?> <struts-config> <! - - ==== Definición de formas === - - > <form-beans> <form-bean name=“NombreForm" </form-beans> -> type=“paquete1.paquete2.nombreForm.java"/>

<!- - === Definición de redireccionamientos globales === <global-forwards> <forward name="success" path="/main.jsp"/> </global-forwards>

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

737

3 … Framework STRUTS
Struts-Config (Cont.) <!- - === 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>

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

738

3 … Framework STRUTS
Elementos Struts-Config 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 View Controller de Struts manejará la solicitud en concordancia con el nombreForm.java y el nombreAction.java.

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

739

3 … Framework STRUTS
Elementos Struts-Config 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 (fully qualified 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.

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

740

3 … Framework STRUTS
Elementos Struts-Config 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.

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

741

3 … Framework STRUTS
Esquema funcional
2. Sets y Validate

config XML
1. Solicitud

3. Resultado

Action Form

Controller (Servlet)

4. Perform 6. Resultado

Action
7. Redireccionamiento 5. Acciones

9. Resultado

View
(JSPs, TagLibs)

8. Consulta

Objetos de Negocio JavaBeans

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

742

3 … Framework STRUTS
Descripción del esquema funcional

(1) Cuando un usuario completa un formulario y lo envia, el Controller busca en el struts-config.xml el ActionForm Bean correspondiente. (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 los valores establecidos por el usuario ) e incluyera los mensajes de error correspondientes.

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

743

3 … Framework STRUTS
(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.

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

744

3 … Framework STRUTS
MODEL ---- ACTION 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.

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

745

3 … Framework STRUTS
MODEL ---- ACTION 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)

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

746

3 … Framework STRUTS
Como crear un Action 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 import import import org.apache.struts.action.*; javax.servlet.http.*; javax.servlet.*; java.io.*;

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

747

3 … Framework STRUTS
Como crear un Action Ahora se debe sobreescribir el método: public ActionForward perform(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response) throws IOException, ServletException

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

748

3 … Framework STRUTS
Como crear un Action 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. Esta validación será de contenido y no de forma (Ej: El monto de un 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.

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

749

3 … Framework STRUTS
Como crear un Action Si existiese algún error, basta con agregar la etiqueta de error y la descripción a una instancia de la clase ActionError.(ver punto 6 de la sección definiendo nuevos Forms). Una vez que se tiene la instancia de la clase ActionError se almacena en el objeto request para ser invocada al retornar al formulario que invocó el action(mapping.getInput()): if (!errors.empty()) { saveErrors(request, errors); return (new ActionForward(mapping.getInput())); }

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

750

3 … Framework STRUTS
Como crear un Action
Inmediatamente después de esté fragmento de código, se debe contemplar la posibilidad de que no exista ningún error, en cuyo caso , se debe remover la información del Action Form almacenada 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()); }

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

751

3 … Framework STRUTS
Como crear un Action
Finalmente para redireccionar el Form a una página desde el action class: mapping.findForward(nombreDireccionar) Donde el nombreDireccionar se reemplazará por el alias definido en el archivo struts-config.xml en la sección de action-mappings para el action class en cuestión. Por último, se debe definir el Action class en el atributo <actionmappings> del archivo de configuración struts-config.xml visto con anterioridad.

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

752

3 … Framework STRUTS
Action - Ejemplo 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 envia a la pagina inicial. UsuarioHelper usuario = (UsuarioHelper) session.getAttribute("usuario"); if (usuario == null || "".equals(usuario)) { return mapping.findForward("redirigirSimpleModal"); }

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

753

3 … Framework STRUTS
Action – Ejemplo (Cont.) 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")); } }

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

754

3 … Framework STRUTS
Action – Ejemplo (Cont.) 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"));

}

}

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

755

3 … Framework STRUTS
MODEL ---- HELPER CLASS 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.

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

756

3 … Framework STRUTS
MODEL ---- HELPER CLASS

Debe ser serializable. Contiene métodos get() y set() de las variables. Puede contener un VO que retorna los valores del Bean accedido.

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

757

3 … Framework STRUTS
Helper Class - Ejemplo 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); }

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

758

3 … Framework STRUTS
Helper Class – Ejemplo (Cont.) 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; }

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

759

3 … Framework STRUTS
Helper Class – Ejemplo (Cont.) public DireccionVO getDireccionVO() { return crearDireccionVO(); } private DireccionVO crearDireccionVO() { DireccionVO direccionVO = new DireccionVO(); direccionVO.setNumId(this.numId); direccionVO.setTipDireccion(this.tipDireccion); return direccionVO; } }

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

760

3 … Framework STRUTS
MODEL ---- ENTERPRISE JAVA BEANS (EJB) 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.

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

761

3 … Framework STRUTS
MODEL --- Tipos de EJB

Session Beans Entity Beans

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

762

3 … Framework STRUTS
¿ Qué es un Session Bean ? 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

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

763

3 … Framework STRUTS
Stateless Session Beans 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. Statefull Session Beans Guarda información del estado del cliente. Sus instancias no son reutilizables entre llamadas de diferentes clientes. No guarda datos ante una posible caida del servidor.

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

764

3 … Framework STRUTS
¿ Qué es un Entity Bean ? 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

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

765

3 … Framework STRUTS
Ciclo de desarrollo de un EJB 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.

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

766

3 … Framework STRUTS
Ciclo de desarrollo de un EJB 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.

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

767

3 … Framework STRUTS
Arquitectura para EJB’s 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.

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

768

3 … Framework STRUTS
Arquitectura para EJB’s
Servidor de Aplicaciones EJB
Proporciona gestión de recursos y servicios middleware (transacciones, seguridad, persistencia)

Pooling de recursos Tolerancia a fallos Conectividad Multithreading Cache de Datos Control concurrencia

Contenedor EJB
Invoca automaticamente servicios para la EJB basándose en requisitos definidos en los descriptores de despliegue (ciclo de vida, estados, transacciones, seguridad, persistencia) Contexto
métodos

métodos

Objeto EJB (vista de cliente)

Cliente
create lookup destroy

Enterprise Bean EJB Home (ID del bean)
create lookup destroy

Descriptores de despliegue

Entorno

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

769

3 … Framework STRUTS
¿ Para que usar EJB’s ? 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

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

770

4. Estructura - Aplicación
1. Introducción 1. Introducción 2. Modelo 3 Capas 2. Modelo 3 Capas 3. Framework STRUTS 3. Framework STRUTS 4. Estructura --Aplicación 4. Estructura Aplicación 5. Ejercicios Prácticos 5. Ejercicios Prácticos

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

771

4 … Estructura de la Aplicación
View Controller Model EJB Database

WAR ( Web Application Archive)

JAR (Java Archive)

EAR ( Enterprise Application Archive )
Copyright Formación y Soluciones Informáticas EFIBS S.A.

772

4 … Estructura de la Aplicación
JAR (Java Archives) 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.

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

773

4 … Estructura de la Aplicación
WAR (Web Archives) Permite agrupar un conjunto de clases y documentos que conforman una aplicación Web en Java . EAR (Enterprise Archives) 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)

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

774

4 … Estructura de la Aplicación
Estructura Principal

Se necesitan ejecutables para generar el JAR, el WAR y el EAR de la aplicación

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

775

4 … Estructura de la Aplicación
Estructura de Directorios
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 EJBContainer) ccss.afiliacion.* – contiene todas las clases Java necesarias para definir los distintos EJB’s

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

776

4 … Estructura de la Aplicación
Estructura de Directorios

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

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

777

4 … Estructura de la Aplicación
Estructura de Directorios
/*.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 weblogic-ejb-jar – archivo de configuración utilizado por el “Application Server” (concretamente el Servlet Engine) 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

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

778

4 … Estructura de la Aplicación
Estructura de Directorios

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

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

779

4 … Estructura de la Aplicación
WAR ARCHIVO FORM JSP

WAR ARCHIVO CONTROLADOR JSP

JAR SESSION BEAN

JAR ARCHIVO FORM JAVA

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

780

4 … Estructura de la Aplicación
WAR ARCHIVO JSP WAR STRUTS - FORM STRUTS - ACTION

WAR

JAR SESSION BEAN

WAR HELPER

JAR ENTITY BEAN

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

781

4 Estructura - Aplicación
1. Introducción 1. Introducción 2. Modelo 3 Capas 2. Modelo 3 Capas 3. Framework STRUTS 3. Framework STRUTS 4. Estructura --Aplicación 4. Estructura Aplicación 5. Ejercicios Prácticos 5. Ejercicios Prácticos

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

782

5 … Ejercicios Prácticos
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.

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

783

5 … Ejercicios Prácticos
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)); !

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

784

5 … Ejercicios Prácticos
Dentro del ClienteForm, implemente cada uno de los set y gets correspondientes 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:!
<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>

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

785

5 … Ejercicios Prácticos
Otros cambios en el struts.config.xml serán agregados automáticamente tales como:! <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>

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

786

INTRODUCCION A J2EE

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

787

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).

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

788

1 Introducción
1. Introducción 1. Introducción 2. Definición de Enterprise Java Beans 2. Definición de Enterprise Java Beans 3. Tecnología de Enterprise Java Beans 3. Tecnología de Enterprise Java Beans 4. Contenedor de Enterprise Java Beans 4. Contenedor de Enterprise Java Beans 5. Beneficios y Características 5. Beneficios y Características 6. Mecanismos de Interacción 6. Mecanismos de Interacción

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

789

1 Introducción
7. Conceptos Básicos J2EE 7. Conceptos Básicos J2EE 8. Tipos de los Enterprise Java Beans 8. Tipos de los Enterprise Java Beans 9. Session Beans 9. Session Beans 10. Entity Beans 10. Entity Beans 11. Message-Driven Beans 11. Message-Driven Beans 12. Formas de Acceso 12. Formas de Acceso 13. Ejercicio Práctico 13. Ejercicio Práctico

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

790

1.1 Introducción
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.

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

791

2 Definición de Enterprise Java Beans
1. Introducción 1. Introducción 2. Definición de Enterprise Java Beans 2. Definición de Enterprise Java Beans 3. Tecnología de Enterprise Java Beans 3. Tecnología de Enterprise Java Beans 4. Contenedor de Enterprise Java Beans 4. Contenedor de Enterprise Java Beans 5. Beneficios y Características 5. Beneficios y Características 6. Mecanismos de Interacción 6. Mecanismos de Interacción

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

792

2 Definición de Enterprise Java Beans
7. Conceptos Básicos J2EE 7. Conceptos Básicos J2EE 8. Tipos de los Enterprise Java Beans 8. Tipos de los Enterprise Java Beans 9. Session Beans 9. Session Beans 10. Entity Beans 10. Entity Beans 11. Message-Driven Beans 11. Message-Driven Beans 12. Formas de Acceso 12. Formas de Acceso 13. Ejercicio Práctico 13. Ejercicio Práctico

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

793

2.1 Definición de Enterprise Java Beans
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.

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

794

3 Tecnología de Enterprise Java Beans
1. Introducción 1. Introducción 2. Definición de Enterprise Java Beans 2. Definición de Enterprise Java Beans 3. Tecnología de Enterprise Java Beans 3. Tecnología de Enterprise Java Beans 4. Contenedor de Enterprise Java Beans 4. Contenedor de Enterprise Java Beans 5. Beneficios y Características 5. Beneficios y Características 6. Mecanismos de Interacción 6. Mecanismos de Interacción

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

795

3 Tecnología de Enterprise Java Beans
7. Conceptos Básicos J2EE 7. Conceptos Básicos J2EE 8. Tipos de los Enterprise Java Beans 8. Tipos de los Enterprise Java Beans 9. Session Beans 9. Session Beans 10. Entity Beans 10. Entity Beans 11. Message-Driven Beans 11. Message-Driven Beans 12. Formas de Acceso 12. Formas de Acceso 13. Ejercicio Práctico 13. Ejercicio Práctico

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

796

3.1 Tecnología de EJBs
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.

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

797

3.2 Plataforma J2EE
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.

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

798

3.3 Comunicación de Servidores

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

799

3.4 Componentes de Negocio

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

800

3.5 J2EE API Plataforma

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

801

3.6 J2EE - Escenario Simple
Presentación Browser Presentación / Gestión de Eventos Servidor de Web
Servidor HTTP JSP COMPILER/ SERVLETG ENGINE

Lógica de Negocio Servidor de Aplicaciones Entity Beans Session Beans Java Beans
ejb ejb ejb

Acceso BD

http://www.efibs.com

Servidor de Base de Datos

htm htm htm

Internet
Firewall jsp jsp jsp

servlets servlets

servlets servlets

Firewall servlets servlets

JDBC (Pool)

Presentación / Gestión de Eventos Utilizació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.
Copyright Formación y Soluciones Informáticas EFIBS S.A.

Lógica de Negocio Mediante la utilización de EJBs (Session y Entity Beans) o Java Beans se implementa la lógica de negocio, perfectamente aislada y controlada mediante el framework.

Acceso Datos En algunos casos mediante procedimientos almacenados en la BD se encapsula lógica de negocio.
802

4 Contenedor de Enterprise Java Beans
1. Introducción 1. Introducción 2. Definición de Enterprise Java Beans 2. Definición de Enterprise Java Beans 3. Tecnología de Enterprise Java Beans 3. Tecnología de Enterprise Java Beans 4. Contenedor de Enterprise Java Beans 4. Contenedor de Enterprise Java Beans 5. Beneficios y Características 5. Beneficios y Características 6. Mecanismos de Interacción 6. Mecanismos de Interacción

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

803

4 Contenedor de Enterprise Java Beans
7. Conceptos Básicos J2EE 7. Conceptos Básicos J2EE 8. Tipos de los Enterprise Java Beans 8. Tipos de los Enterprise Java Beans 9. Session Beans 9. Session Beans 10. Entity Beans 10. Entity Beans 11. Message-Driven Beans 11. Message-Driven Beans 12. Formas de Acceso 12. Formas de Acceso 13. Ejercicio Práctico 13. Ejercicio Práctico

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

804

4.1 Contenedor de EJBs
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 applet Java. 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.

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

805

4.1 … Contenedor de EJBs
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.

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

806

5 Beneficios y Características
1. Introducción 1. Introducción 2. Definición de Enterprise Java Beans 2. Definición de Enterprise Java Beans 3. Tecnología de Enterprise Java Beans 3. Tecnología de Enterprise Java Beans 4. Contenedor de Enterprise Java Beans 4. Contenedor de Enterprise Java Beans 5. Beneficios y Características 5. Beneficios y Características 6. Mecanismos de Interacción 6. Mecanismos de Interacción

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

807

5 Beneficios y Características
7. Conceptos Básicos J2EE 7. Conceptos Básicos J2EE 8. Tipos de los Enterprise Java Beans 8. Tipos de los Enterprise Java Beans 9. Session Beans 9. Session Beans 10. Entity Beans 10. Entity Beans 11. Message-Driven Beans 11. Message-Driven Beans 12. Formas de Acceso 12. Formas de Acceso 13. Ejercicio Práctico 13. Ejercicio Práctico

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

808

5.1 Beneficios y Características
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.

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

809

5.1 ¿Cuándo utilizar EJBs?
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 compartidos. desea manejar el acceso concurrente de objetos

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.

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

810

5.2 Otras Características
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.

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

811

6 Mecanismos de Interacción
1. Introducción 1. Introducción 2. Definición de Enterprise Java Beans 2. Definición de Enterprise Java Beans 3. Tecnología de Enterprise Java Beans 3. Tecnología de Enterprise Java Beans 4. Contenedor de Enterprise Java Beans 4. Contenedor de Enterprise Java Beans 5. Beneficios y Características 5. Beneficios y Características 6. Mecanismos de Interacción 6. Mecanismos de Interacción

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

812

6 Mecanismos de Interacción
7. Conceptos Básicos J2EE 7. Conceptos Básicos J2EE 8. Tipos de los Enterprise Java Beans 8. Tipos de los Enterprise Java Beans 9. Session Beans 9. Session Beans 10. Entity Beans 10. Entity Beans 11. Message-Driven Beans 11. Message-Driven Beans 12. Formas de Acceso 12. Formas de Acceso 13. Ejercicio Práctico 13. Ejercicio Práctico

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

813

6.1 Mecanismos de Interacción
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:

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

814

6.1.1 Métodos de Retrollamada
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 bean cuando 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.

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

815

6.1.2 EJBContext
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.

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

816

6.1.3 Java Naming and Directory Interface (JNDI)
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.

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

817

7. Conceptos Básicos J2EE
1. Introducción 1. Introducción 2. Definición de Enterprise Java Beans 2. Definición de Enterprise Java Beans 3. Tecnología de Enterprise Java Beans 3. Tecnología de Enterprise Java Beans 4. Contenedor de Enterprise Java Beans 4. Contenedor de Enterprise Java Beans 5. Beneficios y Características 5. Beneficios y Características 6. Mecanismos de Interacción 6. Mecanismos de Interacción

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

818

7. Conceptos Básicos J2EE
7. Conceptos Básicos J2EE 7. Conceptos Básicos J2EE 8. Tipos de los Enterprise Java Beans 8. Tipos de los Enterprise Java Beans 9. Session Beans 9. Session Beans 10. Entity Beans 10. Entity Beans 11. Message-Driven Beans 11. Message-Driven Beans 12. Formas de Acceso 12. Formas de Acceso 13. Ejercicio Práctico 13. Ejercicio Práctico

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

819

7.1 Conceptos Básicos J2EE
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:

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

820

7.1.1 Estructura Básica del War
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.

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

821

7.1.2 Estructura de Directorios War
/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.

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

822

7.1.2 … Estructura de Directorios War
/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 orionweb.xml, cuyo contenido es una variación del web.xml, y es necesario para ser interpretado por dicho servidor.

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

823

7.1.2 … Estructura de Directorios War
/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.

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

824

7.1.2 … Estructura de Directorios War

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

825

7.1.3 Estructura Básica JAR
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 METAINF, 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.

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

826

7.1.3 … Estructura Básica JAR
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.

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

827

7.1.4 … Estructura de Directorios JAR
NombreJAR/: Carpeta principal del Archivo JAR. Dentro de ella se localizan descriptores de configuración de objetos de acceso a base de datos (Entity Beans 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.

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

828

7.1.4 … Estructura de Directorios JAR
/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 Beans como tablas o lógica de negocio se requieran. Como se mencionó antes, cada Enterprise Java Bean contendrá al menos 3 clases java.

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

829

7.1.5 … Ejemplo de Directorios

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

830

7.1.6 … Estructura Básica EAR
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:

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

831

7.1.6 … Estructura Básica EAR
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.

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

832

7.1.7 … Estructura de Directorios EAR
NombreWAR.war Contiene 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.jar Archivo 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.

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

833

7.1.8 Definición de los DTD’s
Los archivos de definición de tipo de Documento (DTD, Document Type Definition) 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.

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

834

7.1.9 Referencias Locales DTD’s
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">

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

835

7.1.10 Tipos de Referencia Web a DTD’s
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 ejbjar.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">

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

836

7.1.11 Ejemplo de un web.xml
<?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>

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

837

7.1.12 Ejemplo de un ejb.jar.xml
<?xml version = '1.0' encoding = 'UTF-8'?> <!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 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> class> <prim-key-class>org.sica.comun.usuario.LlaveUsuario</prim-key<reentrant>False</reentrant> </entity> <remote>org.sica.cxc.dedpla.listas.Listas</remote> <ejbclass>org.sica.cxc.dedpla.listas.ListasEJB</ejb-class> <session-type>Stateless</session-type> </session> </enterprise-beans> name> <session> <displayname>ListasDeduccionesEJB</display-name> <ejb-name>ejb/ListasDeducciones</ejb-

<home>org.sica.cxc.dedpla.listas.ListasHome</home>

</ejb-jar>

Copyright Formación y Soluciones Informáticas EFIBS S.A.

838

8. Tipos de los Enterprise Java Beans
1. Introducción 1. Introducción 2. Definición de Enterprise Java Beans 2. Definición de Enterprise Java Beans 3. Tecnología de Enterprise Java Beans 3. Tecnología de Enterprise Java Beans 4. Contenedor de Enterprise Java Beans 4. Contenedor de Enterprise Java Beans 5. Beneficios y Características 5. Beneficios y Características 6. Mecanismos de Interacción 6. Mecanismos de Interacción

Copyright Formación y Soluciones Informáticas EFIBS S.A.

839

8. Tipos de los Enterprise Java Beans
7. Conceptos Básicos J2EE 7. Conceptos Básicos J2EE 8. Tipos de los Enterprise Java Beans 8. Tipos de los Enterprise Java Beans 9. Session Beans 9. Session Beans 10. Entity Beans 10. Entity Beans 11. Message-Driven Beans 11. Message-Driven Beans 12. Formas de Acceso 12. Formas de Acceso 13. Ejercicio Práctico 13. Ejercicio Práctico

Copyright Formación y Soluciones Informáticas EFIBS S.A.

840

8.1 Tipos de los Enterprise Java Beans
Existen 3 tipos de Enterprise Java Beans (EJB): Tipos de Enterprise Java Beans Session Bean Entity Bean Propósito Realiza una tarea para un cliente, implementa Servicios Web. Representa un objeto de la entidad de negocio que exista en almacenaje persistente. Actua como listener para el API de Java Message Service, procesando mensajes asincrónicamente

Message-Driven

Copyright Formación y Soluciones Informáticas EFIBS S.A.

841

9. Sesion Beans
1. Introducción 1. Introducción 2. Definición de Enterprise Java Beans 2. Definición de Enterprise Java Beans 3. Tecnología de Enterprise Java Beans 3. Tecnología de Enterprise Java Beans 4. Contenedor de Enterprise Java Beans 4. Contenedor de Enterprise Java Beans 5. Beneficios y Características 5. Beneficios y Características 6. Mecanismos de Interacción 6. Mecanismos de Interacción

Copyright Formación y Soluciones Informáticas EFIBS S.A.

842

9. Sesion Beans
7. Conceptos Básicos J2EE 7. Conceptos Básicos J2EE 8. Tipos de los Enterprise Java Beans 8. Tipos de los Enterprise Java Beans 9. Session Beans 9. Session Beans 10. Entity Beans 10. Entity Beans 11. Message-Driven Beans 11. Message-Driven Beans 12. Formas de Acceso 12. Formas de Acceso 13. Ejercicio Práctico 13. Ejercicio Práctico

Copyright Formación y Soluciones Informáticas EFIBS S.A.

843

9.1 Session Beans
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: Stateless (Sin Estado) Colección de funciones o métodos encargados de realizar operaciones en la base de datos, comúnmente de lectura. 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)

Cuando se completa una llamada a algún método del bean, éste queda libre para satisfacer las necesidades de otro cliente.
Copyright Formación y Soluciones Informáticas EFIBS S.A.

844

9.1 … Session Beans
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 para poder 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 que será definido en la clase del bean. Debe arrojar la excepción remoteException obligatoriamente y extender la clase javax.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 definidos varí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. Esta interfaz debe implementar la clase javax.ejb.SessionBean.

Copyright Formación y Soluciones Informáticas EFIBS S.A.

845

9.2 Session Beans – Ciclos de Vida
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.
Stateful Session Bean Stateless Session Bean

Copyright Formación y Soluciones Informáticas EFIBS S.A.

846

9.3 ¿Cuando utilizar un Session Beans?
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.

Copyright Formación y Soluciones Informáticas EFIBS S.A.

847

9.4 Cuando utilizar un Stateful
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.

Copyright Formación y Soluciones Informáticas EFIBS S.A.

848

9.5 Cuando utilizar un Stateless
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).

Copyright Formación y Soluciones Informáticas EFIBS S.A.

849

9.6 Ejemplo de Session-Bean Interfaz Remota
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; }

Copyright Formación y Soluciones Informáticas EFIBS S.A.

850

9.6 … Ejemplo de Session-Bean Interfaz Remota
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; }

Copyright Formación y Soluciones Informáticas EFIBS S.A.

851

9.7 Ejemplo de Session-Bean Clase Bean.
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) { } }
Copyright Formación y Soluciones Informáticas EFIBS S.A.

852

9.8 Ejemplo de Session-Bean ejb.jar.xml
<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>

Copyright Formación y Soluciones Informáticas EFIBS S.A.

853

9.9 Ejercicio Práctico
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.

Copyright Formación y Soluciones Informáticas EFIBS S.A.

854

10. Entity Beans
1. Introducción 1. Introducción 2. Definición de Enterprise Java Beans 2. Definición de Enterprise Java Beans 3. Tecnología de Enterprise Java Beans 3. Tecnología de Enterprise Java Beans 4. Contenedor de Enterprise Java Beans 4. Contenedor de Enterprise Java Beans 5. Beneficios y Características 5. Beneficios y Características 6. Mecanismos de Interacción 6. Mecanismos de Interacción

Copyright Formación y Soluciones Informáticas EFIBS S.A.

855

10. Entity Beans
7. Conceptos Básicos J2EE 7. Conceptos Básicos J2EE 8. Tipos de los Enterprise Java Beans 8. Tipos de los Enterprise Java Beans 9. Session Beans 9. Session Beans 10. Entity Beans 10. Entity Beans 11. Message-Driven Beans 11. Message-Driven Beans 12. Formas de Acceso 12. Formas de Acceso 13. Ejercicio Práctico 13. Ejercicio Práctico

Copyright Formación y Soluciones Informáticas EFIBS S.A.

856

10.1 Entity Beans
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:

Copyright Formación y Soluciones Informáticas EFIBS S.A.

857

10.2 Archivos de Especificación
Clase
Interfaz Remota

Nombre de Archivo
Nombre.java

Descripción
En esta interfaz se definen los encabezados de los métodos del negocio. Deben arrojar la excepción remoteException obligatoriamente 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 debe implementar 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.

Copyright Formación y Soluciones Informáticas EFIBS S.A.

858

10.3 Ciclo de de vida de un Entity
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>).

Copyright Formación y Soluciones Informáticas EFIBS S.A.

859

10.4 Diferencia entre los Entity y los Session Beans
Los Entity Bean son Persistentes. Permiten el Acceso Compartido. Trabajan por medio de Llaves Primarias. Pueden participar en relacion con otros Entity Beans.

Copyright Formación y Soluciones Informáticas EFIBS S.A.

860

10.5 Tipos de Entity
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)

Copyright Formación y Soluciones Informáticas EFIBS S.A.

861

10.6 Cuando utilizar los Entity Beans
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 Bean termine o si se cierra el servidor de Aplicaciones, el estado del Bean aún existe en el almacenaje persistente (una base de datos).

Copyright Formación y Soluciones Informáticas EFIBS S.A.

862

10.7 Ejemplo de Entity Beans
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; }
Copyright Formación y Soluciones Informáticas EFIBS S.A.

863

10.7 … Ejemplo de Entity Beans
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; }
Copyright Formación y Soluciones Informáticas EFIBS S.A.

864

10.7 … Ejemplo de Entity Beans

Copyright Formación y Soluciones Informáticas EFIBS S.A.

865

10.7 … Ejemplo de Entity Beans

Copyright Formación y Soluciones Informáticas EFIBS S.A.

866

10.8 Ejercicio Práctico
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.

Copyright Formación y Soluciones Informáticas EFIBS S.A.

867

11. Message-Driven Beans
1. Introducción 1. Introducción 2. Definición de Enterprise Java Beans 2. Definición de Enterprise Java Beans 3. Tecnología de Enterprise Java Beans 3. Tecnología de Enterprise Java Beans 4. Contenedor de Enterprise Java Beans 4. Contenedor de Enterprise Java Beans 5. Beneficios y Características 5. Beneficios y Características 6. Mecanismos de Interacción 6. Mecanismos de Interacción

Copyright Formación y Soluciones Informáticas EFIBS S.A.

868

11. Message-Driven Beans
7. Conceptos Básicos J2EE 7. Conceptos Básicos J2EE 8. Tipos de los Enterprise Java Beans 8. Tipos de los Enterprise Java Beans 9. Session Beans 9. Session Beans 10. Entity Beans 10. Entity Beans 11. Message-Driven Beans 11. Message-Driven Beans 12. Formas de Acceso 12. Formas de Acceso 13. Ejercicio Práctico 13. Ejercicio Práctico

Copyright Formación y Soluciones Informáticas EFIBS S.A.

869

11.1 Message-Driven Beans
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 instanciados de 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.

Copyright Formación y Soluciones Informáticas EFIBS S.A.

870

11.2 Diferencia entre MessageDriven,Session y Entity Beans
La diferencia radica en que los cliente no pueden tener acceso al MessageDriven 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.

Copyright Formación y Soluciones Informáticas EFIBS S.A.

871

11.3 Características de los Message-Driven Bean
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.

Copyright Formación y Soluciones Informáticas EFIBS S.A.

872

12. Formas de Acceso
1. Introducción 1. Introducción 2. Definición de Enterprise Java Beans 2. Definición de Enterprise Java Beans 3. Tecnología de Enterprise Java Beans 3. Tecnología de Enterprise Java Beans 4. Contenedor de Enterprise Java Beans 4. Contenedor de Enterprise Java Beans 5. Beneficios y Características 5. Beneficios y Características 6. Mecanismos de Interacción 6. Mecanismos de Interacción

Copyright Formación y Soluciones Informáticas EFIBS S.A.

873

12. Formas de Acceso
7. Conceptos Básicos J2EE 7. Conceptos Básicos J2EE 8. Tipos de los Enterprise Java Beans 8. Tipos de los Enterprise Java Beans 9. Session Beans 9. Session Beans 10. Entity Beans 10. Entity Beans 11. Message-Driven Beans 11. Message-Driven Beans 12. Formas de Acceso 12. Formas de Acceso 13. Ejercicio Práctico 13. Ejercicio Práctico

Copyright Formación y Soluciones Informáticas EFIBS S.A.

874

12.1 Formas de Acceso
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.

Copyright Formación y Soluciones Informáticas EFIBS S.A.

875

12.2 Contenido de un EJB

Copyright Formación y Soluciones Informáticas EFIBS S.A.

876

13. Ejercicio Práctico
1. Introducción 1. Introducción 2. Definición de Enterprise Java Beans 2. Definición de Enterprise Java Beans 3. Tecnología de Enterprise Java Beans 3. Tecnología de Enterprise Java Beans 4. Contenedor de Enterprise Java Beans 4. Contenedor de Enterprise Java Beans 5. Beneficios y Características 5. Beneficios y Características 6. Mecanismos de Interacción 6. Mecanismos de Interacción

Copyright Formación y Soluciones Informáticas EFIBS S.A.

877

13. Ejercicio Práctico
7. Conceptos Básicos J2EE 7. Conceptos Básicos J2EE 8. Tipos de los Enterprise Java Beans 8. Tipos de los Enterprise Java Beans 9. Session Beans 9. Session Beans 10. Entity Beans 10. Entity Beans 11. Message-Driven Beans 11. Message-Driven Beans 12. Formas de Acceso 12. Formas de Acceso 13. Ejercicio Práctico 13. Ejercicio Práctico

Copyright Formación y Soluciones Informáticas EFIBS S.A.

878

13 Ejercicio Práctico
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.
Copyright Formación y Soluciones Informáticas EFIBS S.A.

879

13 … Ejercicio Práctico
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 session beans 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.

Copyright Formación y Soluciones Informáticas EFIBS S.A.

880

Modelo del Sistema de Ordenes
Cliente
id: int nombe: String direccion: String telefono: String getNombre() setNombre() setDireccion() getDireccion() id: int fechaOrden: Date totalOrden: double agregarItem() eliminarItem() setFechaOrden() getFechaOrden() setTotalOrden() getTotalOrden()

Orde n

ItemOrden
NumLinea: int cantidad: int precio: double getCantidad() setCantidad() setPrecio() getPrecio() getTotalItem()

Empres a contacto: String
descuento: double getContacto() setContacto() . .
Copyright Formación y Soluciones Informáticas EFIBS S.A.

Producto
id: int nombre: String descripcion: String precio: double getPrecio() :

881

Sign up to vote on this title
UsefulNot useful