Está en la página 1de 881

Desarrollo de Aplicaciones Empresariales

Formacin y Soluciones Informticas EFIBS S.A Derechos Reservados - 2007.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

1 Introduccin a Java

Copyright Formacin y Soluciones Informticas EFIBS S.A.

1. Introduccin a Java
1. Introduccin a Java 1. Introduccin 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 Bsicos en Java 6. Conceptos Bsicos en Java 7. Trabajando con Clases 7. Trabajando con Clases

Copyright Formacin y Soluciones Informticas EFIBS S.A.

1. Introduccin a Java
8. Utilizacin de Interfaces 8. Utilizacin de Interfaces 9. Estndares de Desarrollo 9. Estndares 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 Formacin y Soluciones Informticas EFIBS S.A.

Objetivos

Introducir al estudiante en el lenguaje de programacin Java.

Implementar ejemplos por captulo, que le permita al estudiante reafirmar sus conocimientos.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

1. Introduccin
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 captulos subyacentes estarn basados en el mismo.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

1.1 Introduccin a Java


Java es un lenguaje de programacin creado en 1995 por los ingenieros de SUN Microsystems. Fue creado en sus inicios para el desarrollo de componentes electrnicos, especialmente en equipos domsticos. Es un lenguaje Orientado a Objetos. Mejora la velocidad de desarrollo de las aplicaciones por su facilidad de uso.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

1.1 Introduccin 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 inalmbricos, etc.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

1.2 Caractersticas
Sencillo: Elimina muchas caractersticas de otros lenguajes para reducir a un 50% los errores ms comunes: Aritmtica de punteros. No existen referencias. Registros (structs). Definicin de tipos (typedef). Macros (#define). Necesidad de Liberar memoria (free).

Copyright Formacin y Soluciones Informticas EFIBS S.A.

1.2 Caractersticas
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 caractersticas esenciales del paradigma orientado a objetos:
Herencia. Polimorfismo. Encapsulamiento.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

10

1.2 Caractersticas
Distribuido: Es un lenguaje orientado a Web, con grandes capacidades de interconexin TCP/IP. Se puede, a travs de libreras 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 Formacin y Soluciones Informticas EFIBS S.A.

11

1.2 Caractersticas
Robusto: Lleva a cabo chequeos de tipos, tanto en tiempo de compilacin como ejecucin. Obliga a la declaracin explcita de mtodos, reduciendo as las posibilidades de error. Administra la memoria, eliminando la preocupacin del programador en tener que liberar la misma.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

12

1.2 Caractersticas
Portable: Debido a que compila su cdigo en un fichero objeto con formato independiente al sistema operativo al que se est ejecutando la aplicacin. Multitarea: Al ser multitarea o multihilo, permite realizar muchas tareas simultneas en un programa. Los Miltithread son pequeos procesos o piezas independientes de un gran proceso.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

13

1.2 Caractersticas
Seguro: El cdigo Java, pasa por muchas validaciones antes de ejecutarse en una estacin. 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 Formacin y Soluciones Informticas EFIBS S.A.

14

1.2 Caractersticas
Dinmico: Java es un lenguaje totalmente Orientado a Objetos. Por lo que construye los objetos y la conexin entre ellos en el momento en que se va a ejecutar la aplicacin.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

15

1.3 Orientacin a Objetos


Es un paradigma que busca como representar la realidad a travs 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 reutilizacin de cdigo, portabilidad, facilidad de desarrollo y mantenimiento.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

16

1.4 Mquina 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 ejecucin.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

17

1.4 Mquina Virtual Java(JVM).


Versin 1.4 Versin 5.0 Tiger Proyect

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

Copyright Formacin y Soluciones Informticas EFIBS S.A.

18

1.5 Qu es el JRE?

Java Runtime Environment (JRE) es el entorno mnimo 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 aadido 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 Formacin y Soluciones Informticas EFIBS S.A.

19

1.6 Plataforma Independiente?

El cdigo fuente Java es almacenado en un archivo con la extensin *.java

El archivo .java es compilado y se convierte en un archivo con la extensin *.class

Copyright Formacin y Soluciones Informticas EFIBS S.A.

20

1.6 Plataforma Independiente?

Los Bytecodes son interpretados por el runtime.

El archivo .class se convierte en un cdigo ejecutable.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

21

1.7 Cmo 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 tecnologa JIT(Just in Time). El manejador de memoria regresa toda la memoria al sistema operativo. Finalmente, se realiza el proceso de administracin de memoria GC (Garbage Collection).

Copyright Formacin y Soluciones Informticas EFIBS S.A.

22

1.7 Cmo trabaja la JVM?

Copyright Formacin y Soluciones Informticas EFIBS S.A.

23

1.8 Comparaciones
Comparacin con otras tecnologas: Java es portable, confiable, seguro y de fcil aprendizaje. Java es independiente tanto del hardware como del software. Es de libre acceso (cdigo abierto) Presenta una mayor seguridad frente a virus informticos que otros lenguajes.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

24

1.9 Ejercicio Prctico


El instructor realizar una explicacin detallada del ejercicio a realizar. Instalacin del Java Software Development Kit(Java SDK).
Doble click en el archivo llamado jdk-1_5_0_08-windows-i586-p. Acepte los trminos de la licencia. Instale los siguientes componentes. Development Tools. Demos. Source Code. Public Java Runtime Environment. Verifique la instalacin manualmente donde se instal la JVM(C:\ jdk1_5_0_08-windows-i586-p).

Copyright Formacin y Soluciones Informticas EFIBS S.A.

25

1.9 Ejercicio Prctico


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

Ubicar las variables de entorno de sistema

Copyright Formacin y Soluciones Informticas EFIBS S.A.

26

1.9 Ejercicio Prctico


Modificar variables de ambiente (continuacin): 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 Formacin y Soluciones Informticas EFIBS S.A.

27

1.9 Ejercicio Prctico


Probando la instalacin y configuracin del ambiente para el JDK: Abra una ventana MS-DOS y digite la siguiente instruccin:

java version.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

28

1.9 Ejercicio Prctico


Compilacin y Ejecucin
Con un editor de notas, digite el siguiente cdigo Java, con el fin de poder llevar a cabo una compilacin y ejecucin de la misma.

Notas: 1. 2.

El mtodo main es el punto de inicio de una clase principal en Java. La instruccin System.out.println() se utiliza para desplegar en consola lo que se encuentre entre comillas dobles.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

29

1.9 Ejercicio Prctico


Una vez que se ha escrito el cdigo en el editor de texto, debe salvar con el mismo nombre de la clase y con la extensin *.java

En el caso del ejemplo sera: Principal.java

Compila

Ejecuta

Copyright Formacin y Soluciones Informticas EFIBS S.A.

30

Entorno de Desarrollo Integrado

Copyright Formacin y Soluciones Informticas EFIBS S.A.

31

2. Entorno de Desarrollo Integrado


1. Introduccin a Java 1. Introduccin 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 Bsicos en Java 6. Conceptos Bsicos en Java 7. Trabajando con Clases 7. Trabajando con Clases

Copyright Formacin y Soluciones Informticas EFIBS S.A.

32

2. Entorno de Desarrollo Integrado


8. Utilizacin de Interfaces 8. Utilizacin de Interfaces 9. Estndares de Desarrollo 9. Estndares 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 Formacin y Soluciones Informticas EFIBS S.A.

33

Objetivos
Explicar que es un Entorno de Desarrollo Integrado (IDE). Listar ejemplos de IDEs actuales. Explicar un IDE en especfico, con el fin de que los estudiantes aprendan a crear proyectos empresariales bajo la tecnologa java.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

34

2. Qu es un IDE?

Los IDEs, son herramientas con las cuales el programador podr llevar a cabo la implementacin de proyectos en tiempos realmente cortos.

Se caracterizan por facilitar las labores de implementacin ya que ofrecen una serie de herramientas que hacen el trabajo ms fcil y sencillo.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

35

2.1 Entornos de Desarrollo Integrado


Entre los IDEs, destacan los siguientes: NetBeans. Sun Java Studio Enterprise. Eclipse. Oracle JDeveloper. Visual Age. Pramatic. Para efectos de este curso, se utilizar la versin de NetBeans 5.0.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

36

2.2 NetBeans versin 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 ms utilizado por la comunidad de programadores Java, dada la necesidad de los mismos de ser ms y ms productivos.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

37

2.2 NetBeans versin 5.0


El NetBeans versin 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. Integracin de otros Servidores de Aplicaciones.

Copyright Formacin y Soluciones Informticas 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 Formacin y Soluciones Informticas 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 Formacin y Soluciones Informticas EFIBS S.A.

40

2.4 Presentacin NetBeans


Presentacin 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 descripcin de estas partes, las cuales se utilizarn 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 Formacin y Soluciones Informticas EFIBS S.A.

41

2.4 Presentacin NetBeans


Cada vez que ingrese al IDE, la siguiente pantalla se presentar:

Copyright Formacin y Soluciones Informticas EFIBS S.A.

42

2.5 Componentes NetBeans


Componentes del IDE: El IDE cuenta con una serie de componentes para colaborar en el desarrollo rpido de aplicaciones Java. Entre estos componentes se encuentran:

Copyright Formacin y Soluciones Informticas 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 Formacin y Soluciones Informticas 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 cdigo fuente

rea de Navegacin

Salida correspondiente.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

45

2.7 Secciones NetBeans


Secciones del IDE (continuacin): Proyecto: Pueden existir uno o varios proyectos.

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

Nombre del paquete

Copyright Formacin y Soluciones Informticas EFIBS S.A.

46

2.7 Secciones NetBeans


Secciones del IDE (continuacin): 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, mtodos y constructores.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

47

2.7 Secciones NetBeans


Secciones del IDE (continuacin): Runtime: Se pueden encontrar los Procesos Activos, Servidores Activos, as como Drivers entre otros.

Corresponde a todas las estructuras propias del IDE.

Copyright Formacin y Soluciones Informticas 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 estn: Los generales, web y los empresariales.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

49

2.7 Secciones NetBeans


Secciones de clases: Conforme se van creando las clases se irn agregando al entorno de desarrollo como se aprecia a continuacin:

rea para digitar el cdigo fuente

Copyright Formacin y Soluciones Informticas EFIBS S.A.

50

2.8 Proyectos en NetBeans


Creacin de proyectos: Para crear un proyecto haga clic sobre la opcin New Project. S ya existe, debe hacer clic en Open Project.

Apertura de proyectos Creacin de proyectos

Copyright Formacin y Soluciones Informticas 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 sera General.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

52

2.8 Proyectos en NetBeans


Creacin de proyectos: Para crear un proyecto siga los siguientes pasos:
Se selecciona la ubicacin en disco dnde estar el proyecto

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

Se selecciona el flder, dnde se pretende guardar el proyecto

Una vez que est todo configurado se procede a digitar el botn de finalizar

Copyright Formacin y Soluciones Informticas EFIBS S.A.

53

2.8 Proyectos en NetBeans


Estandarizacin de proyectos: Es la forma en como se debera crear un proyecto a nivel de clases. La jerarqua que se conforme depender del proyecto y los fuentes estarn en el ltimo nivel de la misma.
La modularidad nos conduce a tener mayor orden y claridad de la ubicacin de nuestros archivos fuentes.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

54

2.8 Proyectos en NetBeans


Construccin del Proyecto: Genera toda la estructura del proyecto, en lo que respecta a fuentes y dems archivos propios del proyecto.

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

Opcin que se aplica, cuando el proyecto ya existe y se desea construir uno haciendo una limpieza del anterior.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

55

2.9 Compilacin-EjecucinEdicin
Compilacin : Consiste en la revisin sintctica del cdigo fuente. Si hay errores se marcan cuales
Cdigo sin errores.

son y la lnea donde se produjo.

Cdigo con errores.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

56

2.9 Compilacin-EjecucinEdicin
Ejecucin del Proyecto: Se ve el programa en ejecucin:

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 Formacin y Soluciones Informticas EFIBS S.A.

57

2.9 Compilacin-EjecucinEdicin
Edicin de Cdigo Fuente: El editor de cdigo se utiliza para visualizar, crear y editar cdigo fuente Java. Con el editor, el programador podr fcilmente escribir cada una de las lneas del programa que ocupe implementar. El editor permite adems de poder escribir el cdigo fuente y poder depurar el mismo, presentar los errores. Se debe considerar a la hora de escribir el cdigo fuente, una indentacin adecuada para facilitar la lectura del cdigo y por ende la facilidad de poder detectar errores de una forma ms rpida y sencilla.
Copyright Formacin y Soluciones Informticas EFIBS S.A.

58

2.9 Compilacin-EjecucinEdicin
Editor de Texto: Presenta una serie de botones que facilitan la escritura del cdigo fuente:

Dentro de los botones se pueden encontrar: debuger, comentarios, retroceso de lneas escritas, etc.

Permite hacer una abreviacin de los mtodos especficamente en la seccin del mbito. Lo anterior, facilita la bsqueda de errores en el cdigo.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

59

2.10 Otras Opciones de NetBeans


Opciones: Las opciones del IDE se encuentran ubicadas en el men Tools. A continuacin una imagen de la pestaa general:

La pestaa que est activa es la general, donde se puede entre otras cosas cambiar informacin referente a: paquetes java, proxy y actualizaciones.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

60

2.10 Otras Opciones de NetBeans


Opciones: A continuacin una imagen de la pestaa editor:

La pestaa del editor, representa configuraciones relacionadas al mismo, tales como: import, mtodos, clases internas, javadoc, etc.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

61

2.10 Otras Opciones de NetBeans


Opciones: A continuacin una imagen de la pestaa fuentes y colores:

Dentro de los botones se pueden encontrar: debuger, comentarios, retroceso de lneas escritas, etc

Copyright Formacin y Soluciones Informticas EFIBS S.A.

62

2.10 Otras Opciones de NetBeans


Opciones: A continuacin una imagen de la pestaa keymap, donde se tienen las teclas abreviadas:

La pestaa de keymap contienen una serie de carpetas propias del IDE.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

63

2.10 Otras Opciones de NetBeans


Opciones: A continuacin una imagen de la pestaa Miscelneo:

Dentro de sta pestaa, se puede encontrar la herramienta ANT de java y un administrador del classpath.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

64

2.10 Otras Opciones de NetBeans


Opciones Avanzadas: mediante el botn de opciones avanzadas se puede visualizar la siguiente pantalla.

Se encuentra: el Editor, configuracin del IDE, look and Feel, barra de men y dems mecanismos y opciones soportada por NetBeans 5.0.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

65

2.10 Otras Opciones de NetBeans


Opciones Avanzadas: mediante el botn de opciones avanzadas se puede visualizar la siguiente pantalla.

La seccin de la Edicin, presenta asuntos relacionados con la publicacin del proyecto.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

66

2.10 Otras Opciones de NetBeans


Opciones Avanzadas: mediante el botn de opciones avanzadas se puede visualizar la siguiente pantalla.

La seccin de la Edicin, presenta asuntos Relacionados con la publicacin del proyecto.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

67

2.10 Otras Opciones de NetBeans


Debug: El NetBeans 5.0, permite debugear paso a paso el cdigo.

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

Copyright Formacin y Soluciones Informticas 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 especficamente en RUN

Pantalla de salida de los argumentos que se estn utilizando

Implementacin en el Editor

Copyright Formacin y Soluciones Informticas EFIBS S.A.

69

2.11 Ejercicio Prctico

El instructor realizar una explicacin detallada del ejercicio a realizar. Crear una estructura de carpetas tal y como se aprecia a continuacin:

Integrar la clase que fue elaborada en la prctica anterior dentro de la jerarqua. Compile utilizando el IDE y ejecute.
Copyright Formacin y Soluciones Informticas EFIBS S.A.

70

2.11 Ejercicio Prctico


Lleve a cabo una navegacin sobre los diferentes tabs del men, especficamente en Tool Options para ver todas las opciones posibles que hay en l, especficamente la que se muestra a continuacin:

Copyright Formacin y Soluciones Informticas EFIBS S.A.

71

2.11 Ejercicio Prctico


Una vez cumplido con los puntos anteriores, a la clase llamada Principal.java se le deben de enviar tres parmetros 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 Formacin y Soluciones Informticas EFIBS S.A.

72

3 El Lenguaje Java

Copyright Formacin y Soluciones Informticas EFIBS S.A.

73

3. El Lenguaje Java
1. Introduccin a Java 1. Introduccin 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 Bsicos en Java 6. Conceptos Bsicos en Java 7. Trabajando con Clases 7. Trabajando con Clases

Copyright Formacin y Soluciones Informticas EFIBS S.A.

74

3. El Lenguaje Java
8. Utilizacin de Interfaces 8. Utilizacin de Interfaces 9. Estndares de Desarrollo 9. Estndares 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 Formacin y Soluciones Informticas 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 slidos conocimientos en sintaxis. Ejemplificar cada uno de los tipos de datos.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

76

3.1 Comentarios
Existen tres tipos de comentarios: Comentarios de una sola lnea: Semejante a otros lenguajes. Comentarios de una o ms lneas: Semejante a otros lenguajes. Comentarios de documentacin, de una o ms lneas: Este comentario ser colocado en la documentacin que se genera automticamente cuando se utiliza la herramienta Java, javadoc, la cual no se encuentra disponible en otros lenguajes de programacin.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

77

3.1 Comentarios
Ejemplos:
// comentarios para una sola lnea /* comentarios de una o ms lneas */ /** * Comentario para documentacin (JavaDoc), * de una o ms lneas */

Copyright Formacin y Soluciones Informticas 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 bsica de una declaracin de una variable, por ejemplo, sera Tipo identificador [ = valor] [, identificador [ = valor] ....];

int contadorPrincipal; char listaDeFicheros; float precioProducto;

Copyright Formacin y Soluciones Informticas EFIBS S.A.

79

3.3 Separadores
Los separadores definen la forma y funcin del cdigo. Los separadores admitidos en Java son: () Parntesis: Para contener listas de parmetros en la definicin y llamada a mtodos. Tambin 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 automticamente. Tambin utilizadas para definir un bloque de cdigo, para clases, mtodos y mbitos locales. [] Corchetes: Para declarar y referenciar tipos de matriz. ; - Punto y Coma: Separa sentencias. , - Coma: Separa identificadores consecutivos en una declaracin de variables o encadenar sentencias entre bucles (for) . Punto: Para separar nombre de paquete de subpaquetes y clases.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

80

3.4 Variables

Las variables se utilizan en la programacin Java para almacenar datos que varan durante la ejecucin del programa. Para utilizar una variable, se debe de indicar al compilador el tipo y nombre de la variable, lo que se conoce como declaracin de la variable. El tipo de la variable determinar el conjunto de valores que se podrn almacenar en la variable y el tipo de operaciones que se podrn realizar.
int i; char letra; boolean flag; // Declaracin de un entero // Declaracin de un carcter // Declaracin de un booleano

Copyright Formacin y Soluciones Informticas 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 acta sobre un operando es un operador unario. Un operador que acta sobre dos operandos es un operador binario. En la siguiente tabla aparecen los operadores que se utilizan en Java, por orden de precedencia:

Copyright Formacin y Soluciones Informticas EFIBS S.A.

82

3.6 Expresiones
Una expresin es una determinada combinacin de operadores y operandos que se evalan para obtener un resultado en particular. Los operandos pueden ser variables, constantes o llamadas a mtodos. 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 programacin, en Java se puede controlar el orden de evaluacin de las expresiones mediante el uso de parntesis. En caso de no proporcionarse estos parntesis, el orden estar determinado por la precedencia de operadores.

Copyright Formacin y Soluciones Informticas 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 travs de la clase String y StringBuffer, a las cuales se dedicar un amplio estudio ms adelante.

1. 2. 3. 4.

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

Copyright Formacin y Soluciones Informticas 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 manipulacin (sobrepasar el lmite definido para el arreglo). Al igual que los dems objetos en Java, la declaracin 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 Formacin y Soluciones Informticas EFIBS S.A.

85

3.9 Ejercicio Prctico


El instructor realizar una explicacin detallada del ejercicio a realizar:

Dentro del mtodo main de la clase Principal, realice los siguientes puntos:
Crear una variable de tipo entera (int) denominada contador. Crear una constante de tipo entera asignndole 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 Formacin y Soluciones Informticas EFIBS S.A.

86

3.9 Ejercicio Prctico


Imprimir en consola el contenido de la variable personas que se encuentre en la posicin contador y luego, asigne este valor a una nueva variable de tipo String. Este valor, se debe desplegar en consola en mayscula, minscula y adems obtener su tamao. Finalmente realice los procesos de compilacin y ejecucin de la aplicacin.

Recuerde documentar aquel cdigo que no est utilizando.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

87

4 Tipos de Datos y Operadores


Copyright Formacin y Soluciones Informticas EFIBS S.A.

88

4. Tipos de Datos y Operadores


1. Introduccin a Java 1. Introduccin 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 Bsicos en Java 6. Conceptos Bsicos en Java 7. Trabajando con Clases 7. Trabajando con Clases

Copyright Formacin y Soluciones Informticas EFIBS S.A.

89

4. Tipos de Datos y Operadores


8. Utilizacin de Interfaces 8. Utilizacin de Interfaces 9. Estndares de Desarrollo 9. Estndares 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 Formacin y Soluciones Informticas 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 slidos conocimientos en sintaxis. Ejemplificar cada uno de los tipos de datos, para adquirir mayor dominio del tema.

Copyright Formacin y Soluciones Informticas 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 categoras de datos principales en el lenguaje Java: Los Tipos primitivos o atmicos Lgico: boolean Textual: char. Integral: byte,short,int,long. Punto Flotante: double, float. Enum: Enumeraciones (versin 5.0). Los Tipos compuestos.

Copyright Formacin y Soluciones Informticas 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 seran:


elEstudiante; elProfesor; elLibro;

Copyright Formacin y Soluciones Informticas 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 Formacin y Soluciones Informticas 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 atmico, mientras que el String es un tipo compuesto.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

95

4.1.2 Tipo Textual


char:
Representa a 16-bits un solo carcter. Requiere estar entre comillas simples ( ). Utiliza la siguiente notacin:
char primerLetra = a; char ch1, ch2; \n: \t: \b: \r: \uxxx: //La Letra a //Declaracin de dos variables char Salto de lnea Tabulador Backspace. Retorno de carro Donde xxxx es el cdigo Unicode del carcter. Por ejemplo \u0027 es el apostrofe (')

Copyright Formacin y Soluciones Informticas 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 notacin:

String cadena = Ejemplar de una Declaracin y asignacin; String cadena = Cambio de Lnea !! \n; String str1, str2; // Declaracin de dos variables String

Copyright Formacin y Soluciones Informticas 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

Tamao 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 Formacin y Soluciones Informticas 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 agregndole una F o f al valor Adems: E e Agregar un valor exponencial F f (Float) D d (Double)

Nombre o Tipo float double

Tamao 32 bits 64 bits

Copyright Formacin y Soluciones Informticas 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 acta sobre un operando es un operador unario. Un operador que acta sobre dos operandos es un operador binario.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

100

4.2 Operadores
Los operadores se pueden categorizar de la siguiente manera: Aritmticos. Relacinales y condicionales. Lgicos. De desplazamiento. De Asignacin.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

101

4.2 Operadores
Aritmticos:
Son aquellos con los que podemos hacer operaciones aritmticas: 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

Descripcin 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 Formacin y Soluciones Informticas EFIBS S.A.

102

4.2 Operadores
Aritmticos:
Existen formas abreviadas para incrementar y decrementar:

Operador ++ ++ ---

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

Descripcin Incrementa op en 1; evala el valor antes de incrementar Incrementa op en 1; evala el valor despus de incrementar Decrementa op en 1; evala el valor antes de decrementar Decrementa op en 1; evala el valor despus de decrementar

Copyright Formacin y Soluciones Informticas EFIBS S.A.

103

4.2 Operadores
Aritmticos:
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 // Multiplicacin // Resta // divisin

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

d = b / 2;

e = b % 2; // devuelve el residuo de la divisin.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

104

4.2 Operadores
Relacionales:
Son aquellos donde se procede a una comparacin entre dos operandos y sta, produce un resultado verdadero o falso.
Operador Uso Descripcin

> >= < <= == !=

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 Formacin y Soluciones Informticas EFIBS S.A.

105

4.2 Operadores
Condicionales:
Son aquellos donde se procede a una evaluacin que produce un valor de verdad o de falsedad basado en las tablas de verdad.
Operador Uso Descripcin

AND OR NEGACION

&& || !

op1 && op2 op1 || op2 ! op1

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

Copyright Formacin y Soluciones Informticas 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 Formacin y Soluciones Informticas 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 Formacin y Soluciones Informticas EFIBS S.A.

108

4.2 Operadores
Asignacin:
Se asigna un valor a otro a travs del =, recuerde que el == es para comprar, mientras que el = es para asignar. Ejemplos:
Operador += -= *= /= %= Asignacin op1 += op2 op1 -= op2 op1 *= op2 op1 /= op2 op1 %= op2 Equivale a: op1 = op1 + op2 op1 - op2 op1 * op2 op1 / op2 op1 % op2

Copyright Formacin y Soluciones Informticas EFIBS S.A.

109

4.3 Resumen Operadores


Tipos
Enteros

Grupos de Operadores
Operadores de comparacin que devuelven un valor boolean Operadores numricos, que devuelven un valor int o long

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

Punto Flotante

Operadores de comparacin que devuelven un valor boolean Operadores numricos, que devuelven un valor float o double

Booleanos

Operadores booleanos

Copyright Formacin y Soluciones Informticas 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= Descripcin 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 Formacin y Soluciones Informticas 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 Formacin y Soluciones Informticas 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 Formacin y Soluciones Informticas EFIBS S.A.

113

4.6 Expresiones
Una expresin es una determinada combinacin de operadores y operandos que se evalan para obtener un resultado en particular. Los operandos pueden ser variables, constantes o llamadas a mtodos. 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 programacin, en Java se puede controlar el orden de evaluacin de las expresiones mediante el uso de parntesis. En caso de no proporcionarse estos parntesis, el orden estar determinado por la precedencia de operadores.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

114

4.7 Conversiones y Casting


Conversin 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 conversin. Ejemplo: int a = 3,14; float b = 5;

byte

short

int

long long

byte

short

int

Copyright Formacin y Soluciones Informticas EFIBS S.A.

115

4.8 Concatenacin
Concatenacin:
Es la accin de unir dos o ms hileras tal y como se ve a continuacin:

String nombre = Jos "; String apellido = "Daz"; String nomCompleto; nombre = nombre + apellido ; // Ahora nombre es igual a Jos Daz nombre += apellido; nomCompleto = nombre ; // otra forma para obtener el mismo resultado

Copyright Formacin y Soluciones Informticas EFIBS S.A.

116

4.9 Ejercicio Prctico


El instructor realizar una explicacin detallada del ejercicio a realizar.

En el mtodo main() de Principal. java, envi dos parmetros cuyos valores sern 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 mantendrn el valor recibido por parmetro:
nombre = (nombre == null) ? : nombre; apellido = (apellido == null) ? : apellido;

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

Copyright Formacin y Soluciones Informticas EFIBS S.A.

117

4.9 Ejercicio Prctico


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 mtodo 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 aritmtico correspondiente e imprima su resultado en consola.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

118

4.9 Ejercicio Prctico


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 cdigo que no est utilizando.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

119

5 Control de Flujo

Copyright Formacin y Soluciones Informticas EFIBS S.A.

120

5. Control de Flujo
1. Introduccin a Java 1. Introduccin 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 Bsicos en Java 6. Conceptos Bsicos en Java 7. Trabajando con Clases 7. Trabajando con Clases

Copyright Formacin y Soluciones Informticas EFIBS S.A.

121

5. Control de Flujo
8. Utilizacin de Interfaces 8. Utilizacin de Interfaces 9. Estndares de Desarrollo 9. Estndares 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 Formacin y Soluciones Informticas EFIBS S.A.

122

Objetivos
Profundizar en el manejo del control de flujo del lenguaje, con el fin de que el estudiante adquiera conocimientos slidos en manejo de instrucciones de control y repeticin. Ejemplificar el uso de cada una de las estructuras de control de flujo propuestas en el objetivo anterior.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

123

5. Estructuras de Control y Repetitivas


Secuencial

Seleccin

Iteracin

Transferencia

Copyright Formacin y Soluciones Informticas 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 tambin tiene el, ifelse {}. El if evalua una expresin, la cual puede ser falsa o verdadera.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

125

5.1 Control de Flujo


Ejemplo de condicional simple y compuesto son los siguientes:

Si se cumple la expresin se lleva a cabo el bloque del if

if (expresin_booleana){ sentencia1 sentencia N; }

Si no se cumple la expresin se lleva a cabo el bloque del else

if (expresin_booleana) { sentencia1; sentencia N; } else { sentencia1; sentencia N; ... }

Copyright Formacin y Soluciones Informticas EFIBS S.A.

126

5.1 Control de Flujo


Otro tipo de condicional es el switch, el cual evala que la expresin se asocie con algn valor correspondiente a los casos a analizar.
La expresin 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 ( expresin_entera ) { case valor_entero: sentencia; break; case valor_entero: sentencia; break; ... default: sentencia; }

Copyright Formacin y Soluciones Informticas EFIBS S.A.

127

5.2 Consideraciones del Switch


Cuidado: en el switch la expresin que se evala no es una expresin booleana como en el if-else, sino una expresin 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 expresin proporcionada a la sentencia switch. Otro punto de inters en la sentencia switch son las sentencias break despus de cada case.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

128

5.2 Consideraciones del Switch


La sentencia break hace que el control salga de la sentencia switch y contine con la siguiente lnea. La sentencia break es necesaria porque las sentencias case se siguen ejecutando hacia abajo. Esto es, sin un break explcito, el flujo de control seguira secuencialmente a travs 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 explcitamente por una de las sentencias case.

Copyright Formacin y Soluciones Informticas 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 accin segn 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 Formacin y Soluciones Informticas EFIBS S.A.

130

5.4 Sentencias de Repeticin


Los tres tipos bsicos en java son: While do-while For for each(ver 5.0). Los tres primeros tienen tres partes: Condicin de iniciacin Cuerpo Condicin Iniciacin Terminacin

Copyright Formacin y Soluciones Informticas EFIBS S.A.

131

5.4.1 Sentencia while


Se caracteriza por evaluar primero la condicin 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. Tambin se utilizan cuando cabe la posibilidad de que me pueda salir del ciclo por medio de alguna expresin booleana. while (expresin){

sentencia1; sentencia N; }
Copyright Formacin y Soluciones Informticas EFIBS S.A.

132

5.4.1 Sentencia while


El siguiente es un ejemplo de su uso, que nos permite ver como adems de incrementar un contador, tambin se desea imprimir el contador cada vez que se genera un carcter.

Iniciacin

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

Variacin

Copyright Formacin y Soluciones Informticas EFIBS S.A.

133

5.4.2 Sentencia for


Se utiliza este bucle cuando se conoce los lmites del bucle (su instruccin de inicializacin, su criterio de terminacin y su instruccin de incremento). Inicializacin es la sentencia que inicializa el bucle -- se ejecuta una vez al iniciar el bucle. Terminacin es una sentencia que determina cuando se termina el bucle. Esta expresin se evala al principio de cada iteracin en el bucle. Cuando la expresin se evala a false el bucle se termina. Finalmente, Incremento es una expresin que se invoca en cada interaccin del bucle. Cualquiera (o todos) de estos componentes pueden ser una sentencia vaca (un punto y coma).

Copyright Formacin y Soluciones Informticas EFIBS S.A.

134

5.4.2 Sentencia for


La estructura del ciclo for es:

for (inicializacin; terminacin; incremento){ sentencia 1; sentencia N; }

Copyright Formacin y Soluciones Informticas 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

Iniciacin

Trmino

Variacin

// 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 Formacin y Soluciones Informticas 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 adems deseamos que las sentencias del mbito se ejecuten al menos una vez. En muchas oportunidades se utiliza para validaciones.

do{ sentencia1; sentencia N; }while (expresin);

Copyright Formacin y Soluciones Informticas EFIBS S.A.

137

5.4.3 Sentencia do-while


El siguiente es un ejemplo de su uso, que nos permite ver como adems de incrementar un contador, tambin se desea imprimir el contador cada vez que se genera un carcter.

Iniciacin
... int cont=0; do{

Trmino

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

cont++; }while (cont<10)

Variacin

Copyright Formacin y Soluciones Informticas 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 Formacin y Soluciones Informticas 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 iteracin pero no se sale o termina. while(cont<10){
if(cont==5){ continue; } cont++; }

Finalmente, el return tambin 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 Formacin y Soluciones Informticas EFIBS S.A.

140

5.6 Ejercicio Prctico


El instructor realizar una explicacin detallada del ejercicio a realizar: Con el objetivo de determinar el nmero de das de un mes, en el mtodo 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 ao y otra que contendr el ao. En base al mes se debe de determinar los das que tiene un mes y asgnele a una variable de tipo entera la cantidad de das que tiene el mes. Recuerde que: Setiembre, Abril, Junio y Noviembre tienen 30 das. Todos los dems tienen 31 das excepto Febrero que puede tener 28 o 29 das dependiendo si el ao es bisiesto o no. (por el momento asuma 29 das). Una vez realizados los pasos anteriores se debe de desplegar la fecha de la siguiente manera:27/1/2000 y este mes tiene 31 das.
Copyright Formacin y Soluciones Informticas EFIBS S.A.

141

5.6 Ejercicio Prctico


Utilizando la sentencia for imprima todas las fechas que se encuentran entre la fecha resultante en el punto anterior y la cantidad de das que tiene el mes. Por ejemplo: Si el da es 27 y el mes 1 y el ao 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 cdigo que no est utilizando.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

142

6 Conceptos Bsicos en Java


Copyright Formacin y Soluciones Informticas EFIBS S.A.

143

6. Conceptos Bsicos en Java


1. Introduccin a Java 1. Introduccin 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 Bsicos en Java 6. Conceptos Bsicos en Java 7. Trabajando con Clases 7. Trabajando con Clases

Copyright Formacin y Soluciones Informticas EFIBS S.A.

144

6. Conceptos Bsicos en Java


8. Utilizacin de Interfaces 8. Utilizacin de Interfaces 9. Estndares de Desarrollo 9. Estndares 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 Formacin y Soluciones Informticas EFIBS S.A.

145

Objetivos
Explicar cules son las caractersticas de Java que lo hacen ser un lenguaje orientado a objetos. Estudiar a profundidad conceptos tales como: objeto, clase, polimorfismo, encapsulamiento, sobrecarga, etc.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

146

6.1 Concepto de Objeto

Java es un lenguaje orientado a objetos ya que la unidad bsica es el objeto. Una posible definicin de objeto es: Es todo aquello que tiene: estado, comportamiento e identidad(Grady Booch). Los objetos pueden ser tangibles o intangibles.

Copyright Formacin y Soluciones Informticas 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: laTransaccin, elPrestamo, laReservacin, etc. Uno de los grandes beneficios de los objetos es la encapsulacin, la cual se describe como la capacidad de ocultar la implementacin y dar al exterior solo lo que queremos que se muestre (la interfaz).

Copyright Formacin y Soluciones Informticas 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 sera miLapicero y en el caso de la clase Cliente podemos tener elCliente.

Objeto: Lapicero

Objeto: Cliente

Copyright Formacin y Soluciones Informticas EFIBS S.A.

149

6.1 Concepto de Objeto


Los mensajes son simples llamadas a las funciones o mtodos del objeto con el se quiere comunicar para decirle que haga cualquier cosa. Para poder crear una aplicacin se requieren ms de un objeto, y estos objetos no pueden estar aislados unos de otros, pues bien, para comunicarse esos objetos se envan mensajes.

Objeto: Lapicero

Operacin: Escribir

Copyright Formacin y Soluciones Informticas 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 (mtodos) comunes.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

151

6.1 Concepto de Objeto

En Java un objeto es visto como: DATOS(con estado) + OPERACIONES dnde los datos corresponden a los atributos, pero con estado (valores).Por ejemplo el objeto cliente podra modelarse as:

Cliente

setId
id nombre telefono direccion

...

getId

getId() Mensaje

getNombre
Copyright Formacin y Soluciones Informticas 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 especfico de esa clase. En Java, la creacin de un objeto se hace de la siguiente manera:
Cliente elCliente;
// Solo declaracin

Cliente elCliente = new Cliente();

// Declaracin Instanciacin.

Cliente elCliente = new Cliente(123,Douglas, Alajuela,4445678); // Declaracin Instanciacin - Inicializacin

Copyright Formacin y Soluciones Informticas EFIBS S.A.

153

6.3 Utilizar Objetos


Los objetos, nos permiten poder acceder a los atributos y a los mtodos.

Por ejemplo:

Se recomienda el uso de mtodos 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 Formacin y Soluciones Informticas 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 cdigo 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 (slo limitados por los que el sistema pueda manejar) pero nunca tienen que ser destruidos. El entorno de ejecucin Java borra los objetos cuando determina que no se van a utilizar ms. Este proceso es conocido como recolector de basura (garbage collection).

Copyright Formacin y Soluciones Informticas EFIBS S.A.

155

6.4 Eliminar Objetos


Un objeto es elegible para el recolector de basura cuando no existen ms 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 explcitamente un objeto referencia mediante la seleccin de un valor cuyo tipo de dato es una referencia a null.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

156

6.5 Recolector de Basura


El entorno de ejecucin de Java tiene un recolector de basura que peridicamente libera la memoria ocupada por los objetos que no se van a necesitar ms. El recolector de basura de Java es un barredor de marcas que escanea dinmicamente la memoria de Java buscando objetos, marcando aquellos que han sido referenciados.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

157

6.5 Recolector de Basura


El recolector de basura funciona en un thread (hilo) de baja prioridad y funciona tanto sincrnica como asincrnicamente dependiendo de la situacin y del sistema en el que se est ejecutando el entorno Java. El recolector de basura se ejecuta sincrnicamente cuando el sistema funciona fuera de memoria o en respuesta a una peticin 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 Formacin y Soluciones Informticas EFIBS S.A.

158

6.6 Finalizacin 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 mtodo finalize() del propio objeto. Este proceso es conocido como finalizacin. Durante la finalizacin de un objeto se podran liberar los recursos del sistema como son los ficheros, etc. y liberar referencias en otros objetos para hacerse elegible por la recoleccin de basura. El mtodo finalize() es un miembro de la clase java.lang.Object. Una clase debe sobrescribir el mtodo finalize() para realizar cualquier finalizacin necesaria para los objetos de ese tipo.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

159

6.6 Finalizacin de los Objetos

Ejemplo:

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

Copyright Formacin y Soluciones Informticas EFIBS S.A.

160

6.7 Concepto de Clase


Las Clases son las abstracciones de los objetos, son grupos de objetos que comparten caractersticas (atributos) y conductas (mtodos) 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 analoga del concepto de clase, es que son el plano por medio del cual sern construidos los objetos.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

161

6.7 Concepto de Clase


En Java una clase es vista como: DATOS + OPERACIONES dnde los datos corresponden a los atributos, es decir las caractersticas, mientras que las operaciones corresponden a los mtodos. Por ejemplo la clase cliente podra modelarse as:

Cliente setId getId() Mensaje

...

id nombre telefono direccion

getId

getNombre
Copyright Formacin y Soluciones Informticas 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 Formacin y Soluciones Informticas EFIBS S.A.

163

6.8 Declaracin de Clase


Recuerde! Para poder instanciar un objeto, antes tuvo que hacerse necesario la creacin de una clase que tenga las caractersticas y conductas de ese objeto. Por ejemplo:
class Cliente { // Atributos private int iid; private String nombre,direccion,telefono; // Mtodos public void comprar(){} public void consultar(){} public void caminar(){} public void correr(){} }

Es privado para mantener la encapsulacin

Son parte de la interfaz Por eso son pblicos

Copyright Formacin y Soluciones Informticas EFIBS S.A.

164

6.9 La Instanciacin
Recuerde! Para poder instanciar un objeto, antes tuvo que hacerse necesario la creacin de una clase que tenga las caractersticas y conductas de ese objeto. Por ejemplo:
Cliente elCliente = new Cliente(123,Juan,Alajuela,4445678);

(Referencia a la clase Cliente, la instancia)

elCliente

Atributos + Mtodos

Copyright Formacin y Soluciones Informticas EFIBS S.A.

165

6.10 Convencin del Nombres


Los nombres de archivos Persona.java Mecnico.java Los nombres de clases Persona Mecnico Los nombres de los mtodos 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 Formacin y Soluciones Informticas EFIBS S.A.

166

6.11 Contenido de una Clase


Objetos Mtodos

Paquetes Contenido de una Clase

Atributos

Referencia a Objetos
167

Copyright Formacin y Soluciones Informticas 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 mtodos pblicos y esos mtodos pueden construir un objeto y devolverlo, pero nada ms. protected Slo 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 Formacin y Soluciones Informticas EFIBS S.A.

168

6.12 Tipos de acceso a una Clase


acmevideo acmetools

public

public

protected

private

Copyright Formacin y Soluciones Informticas 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 encapsulacin. Se tienen tres tipos de accesos para los atributos:
public private protected

Copyright Formacin y Soluciones Informticas 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, slo se podr accesar a lo interno de la clase y no desde el exterior, almenos que se haga a travs de la interfaz(conjunto de mtodos pblicos). 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 Formacin y Soluciones Informticas EFIBS S.A.

171

6.13 Atributos de una Clase


El siguiente, es un esquema para declaracin de variables: [especificadordeAcceso] [static] [final] [transient] [volatile] tipo nombredeVariable

Recuerde, la informacin entre corchetes es opcional.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

172

6.14 Atributos Persistentes


La mayora de los atributos que trabajamos en Java mantienen su persistencia, sin embargo podemos quitarle sta caracterstica con la palabra clave transient.
class Cliente { transient int id; ... }

Basado en este ejemplo, id sera un atributo no persistente de la clase.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

173

6.15 Variables voltiles


Si una clase contiene una variable miembro que es modificada de forma asncrona, mediante la ejecucin 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 Formacin y Soluciones Informticas EFIBS S.A.

174

6.16 Mtodos
Los nombres de los mtodos deben ser significativos no solo por facilidad al usuario sino al programador. Junto con el nombre del mtodo, la declaracin lleva informacin como el tipo de retorno del mtodo, el nmero y el tipo de los argumentos necesarios, y qu otras clases y objetos pueden llamar al mtodo. Los nicos elementos necesarios para una declaracin de mtodo son el nombre y el tipo de retorno del mtodo. Por ejemplo, el cdigo siguiente declara un mtodo llamado estaVacio() en la clase Pila que devuelve un valor booleano (true o false).
class Pila { ... boolean estaVacio() { ... } }

Copyright Formacin y Soluciones Informticas EFIBS S.A.

175

6.16 Mtodos
La sintaxis general de un mtodo es: TipoDeAcceso + TipoDeRetorno + nombreDelMetodo +[parmetrosFormales] Ejemplos:
public class Cliente{ ... public boolean consultar() {} public void esperar(){} public void comprar(){} ... }

Copyright Formacin y Soluciones Informticas EFIBS S.A.

176

6.17 SobreCarga

Un mtodo est sobrecargado, cuando cumple que tiene igual nombre pero diferente cantidad o tipos de parmetros. Se dice que para que el mtodo est sobrecargado debe existir una firma nica, es decir que difiera ya sea en cantidad o en tipos de los parmetros. El compilador, se dar cuenta cual es el mtodo a invocar por la cantidad y tipo de los parmetros.

Copyright Formacin y Soluciones Informticas 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 Formacin y Soluciones Informticas EFIBS S.A.

178

6.18 Valor de Retorno


Los mtodos 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 Formacin y Soluciones Informticas EFIBS S.A.

179

6.19 Estructura de la Clase


Tipo de Acceso Bloques de Cdigo Declaracin public class Cliente { // Atributos caractersticas int id; String nombre, direccion , telefono; // Mtodos Operaciones int getId() { } } Mtodos de la Instancia Variables de la Instancia

Copyright Formacin y Soluciones Informticas EFIBS S.A.

180

6.20 Estructura de un mtodo


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

Tipo de Dato Retorno Declaracin Variables del Mtodo Estatutos del mtodo

Retorno

Copyright Formacin y Soluciones Informticas EFIBS S.A.

181

6.21 Clases-Mtodos-Atributos final


Una variable final es una constante y no puede ser modificada. Es muy utilizada para inicializar y declarar Constantes. Un mtodo 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 Formacin y Soluciones Informticas EFIBS S.A.

182

6.22 Resumen de Conceptos


Una Clase es una definicin de un nuevo Tipo, al que se le da un nombre. Una Clase contiene atributos y mtodos que configuran el estado y las operaciones que puede realizar. Un Objeto es la materializacin (instanciacin) de una clase. Puede haber tantos Objetos de una Clase como la memoria lo permita.

Copyright Formacin y Soluciones Informticas 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 travs de su interfaz y no en forma directa, con el fin de mantener el encapsulamiento.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

184

6.23 Polimorfismo en Java


Es cuando existen mltiples formas de llevar a cabo una accin. Un ejemplo sera la forma en que saluda cada cliente en particular y puede ir basado en su lenguaje Natal o pas donde se hospeda. As por ejemplo, un Ingls podra decir: Hello! Mientras que un Francs, podra decir: Cava!

Copyright Formacin y Soluciones Informticas EFIBS S.A.

185

6.23 ... Polimorfismo en Java


// Ingls-Francs: // 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 Formacin y Soluciones Informticas EFIBS S.A.

186

6.23 ... Polimorfismo en Java


Cliente:

//

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

Copyright Formacin y Soluciones Informticas 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 Formacin y Soluciones Informticas 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 detrs de una interface y aumenta el nivel de abstraccin.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

189

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

getNombre

setNombre

Solicitante

Copyright Formacin y Soluciones Informticas EFIBS S.A.

190

6.25 Ejercicio Prctico


Analice con el instructor el siguiente diagrama:

Copyright Formacin y Soluciones Informticas EFIBS S.A.

191

6.25 Ejercicio Prctico


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 mtodos, aplicando el concepto de encapsulamiento para cada una de ellas: Orden.java Cliente.java OrdenItem.java Producto.java
Copyright Formacin y Soluciones Informticas EFIBS S.A.

192

7 Trabajando con Clases


Copyright Formacin y Soluciones Informticas EFIBS S.A.

193

7. Trabajando con Clases


1. Introduccin a Java 1. Introduccin 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 Bsicos en Java 6. Conceptos Bsicos en Java 7. Trabajando con Clases 7. Trabajando con Clases

Copyright Formacin y Soluciones Informticas EFIBS S.A.

194

7. Trabajando con Clases


8. Utilizacin de Interfaces 8. Utilizacin de Interfaces 9. Estndares de Desarrollo 9. Estndares 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 Formacin y Soluciones Informticas EFIBS S.A.

195

Objetivos
Explicar el manejo de clases, as como la manipulacin tanto de atributos como de mtodos.

Estudiar el mecanismo de reutilizacin de cdigo(herencia).

Copyright Formacin y Soluciones Informticas EFIBS S.A.

196

7.1 Concepto de Herencia


La herencia es el mecanismo de la orientacin a objetos, que permite la reutilizacin de cdigo que est repetido en dos o ms clases. Por lo que todo aquello que tenga la super clase, lo tendr tambin 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 Formacin y Soluciones Informticas 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 compaa son tipos de Clientes

Copyright Formacin y Soluciones Informticas 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 trmino super clase se refiere al ancestro ms directo, as como a todas las clases ascendentes.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

199

7.2 Definiciones
Otro ejemplo de herencia es el siguiente:

Producto

Hardware

Software

Manual

Copyright Formacin y Soluciones Informticas EFIBS S.A.

200

7.3 Creacin de subclases


Un ejemplo de herencia es el siguiente:

class Hardware extends Producto { ... } class Software extends Producto { ... } class Manual extends Producto { ... }

Copyright Formacin y Soluciones Informticas 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 estn 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 Formacin y Soluciones Informticas 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 Formacin y Soluciones Informticas EFIBS S.A.

203

7.5 Herencia de mtodos


Regla para la Herencia de Mtodos: Una subclase hereda todos los mtodos de su superclase que son accesibles para la subclase (a menos que el mtodo sea sobrescrito por la subclase). Esto es, una Subclase.
Hereda aquellos mtodos declarados como public o protected Hereda aquellos mtodos sin especificador de acceso, siempre que la subclase est en el mismo paquete que la clase. No Hereda un mtodo de la superclase si la subclase declara un mtodo que utiliza el mismo nombre.Se dice que el mtodo de la subclase sobrescribe al mtodo de la superclase. No Hereda los mtodos private.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

204

7.6 Clase Object


La clase Object est situada en la parte ms 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 bsicos que todos los objetos deben tener, como la posibilidad de: Compararse unos con otros, De convertirse a cadenas, De esperar una condicin variable, De notificar a otros objetos que la condicin variable ha cambiado. Devolver la clase del objeto.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

205

7.7 Mtodos de la clase Object


El mtodo equals() se utiliza para comparar si dos objetos son iguales. Este mtodo 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 cdigo que compara dos enteros. Individuo elIndividuo = new Individuo(), Individuo otroIndividuo = new Individuo(); if (elIndividuo.equals(otroIndividuo)) System.out.println("Los Individuos son Iguales");

Este cdigo 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 deberan sobrescribir este mtodo proporcionando la comprobacin de igualdad apropiada. Un mtodo equals() debera comparar el contenido de los objetos para ver si son funcionalmente iguales y devolver true si es as.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

206

7.8 Mtodos de la clase Object


El mtodo getClass() es un mtodo final (no puede sobrescribirse). Devuelve una representacin en tiempo de ejecucin de la clase del objeto. Este mtodo devuelve un objeto Class al que se le puede pedir varia informacin sobre la clase, como por ejemplo: Su nombre, El nombre de su superclase y los nombres de los interfaces que implementa. El siguiente mtodo obtiene y muestra el nombre de la clase de un objeto:

Copyright Formacin y Soluciones Informticas EFIBS S.A.

207

7.8 Mtodos 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 Formacin y Soluciones Informticas EFIBS S.A.

208

7.8 Mtodos de la clase Object


Otros mtodos de la clase object son:
finalize(); Anteriormente estudiado notify(); notifyAll(); wait();

Los ltimos tres son crticos cuando se escriben programas Java con mltiples thread. Estos mtodos ayudan a asegurarse que los thread estn sincronizados.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

209

7.9 Clases Abstractas


Una clase abstracta es una clase que slo puede tener subclases y no puede ser instanciada. En la programacin orientada a objetos, se podran 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 debera ser abstracta ya que no tiene sentido instanciarla, por el grado de generalidad que presenta. En su lugar, la clase Persona slo tiene sentido como superclase de otras clases como Estudiante y Profesor que implementan nmeros de tipos especficos. Clases como Persona, que implementan conceptos abstractos y no deben ser instanciadas, ya que son muy generales.

Copyright Formacin y Soluciones Informticas 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

Compaia

Individuo

Copyright Formacin y Soluciones Informticas EFIBS S.A.

211

7.9 Clases Abstractas


Una clase abstracta puede contener muchos mtodos abstractos, los cuales no tienen implementacin. Por lo tanto, una clase abstracta puede definir una interfaz de programacin completa. El sentido de los mtodos abstractos, es poder darle la implementacin respectiva en las clases derivadas.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

212

7.9 Clases Abstractas

Por ejemplo, en el caso de Individuo y Compaia ambos pueden ser sub-clases de Cliente y ambos podran compartir una conducta como calcularMonto() que se procedera a implementar de diferente manera. Por lo tanto, en la super clase Cliente calcularMonto() no tendra implementacin sino que la implementacin se dara en cada una de las subclases. El clculo del monto vara segn el cliente, por lo que la frmula no puede ser la misma.

Copyright Formacin y Soluciones Informticas 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 Compaia extends Cliente { private String numeroLic; ...

Copyright Formacin y Soluciones Informticas 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 Formacin y Soluciones Informticas EFIBS S.A.

215

7.10 Ejercicio Prctico


Analice con el instructor el siguiente diagrama:

Copyright Formacin y Soluciones Informticas EFIBS S.A.

216

7.10 Ejercicio Prctico


El instructor realizar una explicacin detallada del ejercicio a realizar: En base al diagrama anterior, cree las siguientes clases con cada uno de sus atributos y mtodos, 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 Formacin y Soluciones Informticas EFIBS S.A.

217

7.10 Ejercicio Prctico


Desde el mtodo main() del programa Principal.java, cree una instancia del Cliente, Individuo y Compannia y envele como parmetros los que requiera en el constructor sobre cargado. Lleve a cabo lo mismo pero con: Producto, Hardware, Software y Manual. Sobrescriba el mtodo toString() tanto de Cliente como de Productos e imprima desde Principal.java el contenido de cada uno de los objetos creados.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

218

8 Utilizacin de Interfaces
Copyright Formacin y Soluciones Informticas EFIBS S.A. Copyright Formacin y Soluciones Informticas EFIBS S.A.

219 219

8. Utilizacin de Interfaces
1. Introduccin a Java 1. Introduccin 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 Bsicos en Java 6. Conceptos Bsicos en Java 7. Trabajando con Clases 7. Trabajando con Clases

Copyright Formacin y Soluciones Informticas EFIBS S.A.

220

8. Utilizacin de Interfaces
8. Utilizacin de Interfaces 8. Utilizacin de Interfaces 9. Estndares de Desarrollo 9. Estndares 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 Formacin y Soluciones Informticas EFIBS S.A.

221

Objetivos
Entender la diferencia entre interfaces y clases. Implementar ejercicios, donde se ponga en prctica el uso de las interfaces, esto con el fin de que se pueda adquirir un slido entendimiento.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

222

8. Interfaces
Una posible definicin para las interfaces es la siguiente: Una interface es una coleccin de definiciones de mtodos (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 Formacin y Soluciones Informticas EFIBS S.A.

223

8.1 Utilidades de las Interfaces


Las interfaces son tiles para: Capturar similitudes entre clases no relacionadas sin forzar una relacin entre ellas. Declarar mtodos que una o varias clases necesitan implementar. Revelar la interface de programacin de un objeto sin recelar sus clases (los objetos de este tipo son llamados objetos annimos y pueden ser tiles cuando comparta un paquete de clases con otros desarrolladores).

Copyright Formacin y Soluciones Informticas EFIBS S.A.

224

8.2 Las interfaces Vs herencia mltiple


Algunas veces se trata a las interfaces como una alternativa a la herencia mltiple en las clases. En realidad, lo que hacen es simularlas. No se pueden heredar variables desde una interface. No se pueden heredar implementaciones de mtodos 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 travs del rbol de clases.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

225

8.3 Definir una Interface


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

declaraciondeInterface { cuerpodeInterface }
La Declaracin 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 mtodos del Interface.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

226

8.4 Declaraciones de Interfaces


Como mnimo, una declaracin de interface contiene la palabra clave interface y el nombre de la interface que se va a crear.

interface Texable { ... }

Nota: Por convencin, los nombres de interfaces empiezan con una letra mayscula al igual que las clases. Frecuentemente los nombres de interfaces terminan en "able" o "ible".

Copyright Formacin y Soluciones Informticas EFIBS S.A.

227

8.4 Declaracin de Interfaces


La declaracin 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 slo puede extender de una superclase, las interfaces pueden extender de cualquier nmero de interfaces.
[public] interface Nombredenterface [extends listadeSuperInterfaces] { ... }

Copyright Formacin y Soluciones Informticas EFIBS S.A.

228

8.4 Declaracin de Interfaces


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

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

Copyright Formacin y Soluciones Informticas 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 clusula extends es similar a la utilizada en la declaracin de una clase, sin embargo, una interface puede extender de varias interfaces (mientras una clase slo puede extender una), y una interface no puede extender clases. Una interface hereda todas las constantes y mtodos de sus superinterfaces a menos que la interface oculte una constante con el mismo nombre o redeclare un mtodo con una nueva declaracin.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

230

8.6 Cuerpo de la Interfaz


El cuerpo de la interface contiene las declaraciones de mtodos para los mtodos definidos en la interface. Adems de las declaraciones de los mtodos, 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 podrn utilizar transient, volatile, o synchronized en una declaracin de miembro en una interface. Tampoco se podr utilizar los especificadores private y protected cuando se declaren miembros de un interface.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

231

8.7 Acceso de las Interfaces

Todos los valores constantes definidos en una interface son implcitamente pblicos, estticos y finales.

Todos los mtodos declarados en una interface son implcitamente pblicos y abstractos.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

232

8.7 Acceso de las Interfaces

El siguiente cdigo define una nueva interface llamada Taxable con un mtodo para calcular el impuesto.

interface Taxable { Static final double porcentaje = 20.78; public double getTax(); }

Copyright Formacin y Soluciones Informticas 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 declaracin de clase. Para declarar que una clase implementa una o ms interfaces, se utiliza la palabra clave implements seguida por una lista delimitada por comas con las interfaces implementadas por la clase.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

234

8.9 Ejemplo de las interfaces


interface coleccin { int MAXIMO = 500; void aadir(Object obj); void borrar(Object obj); Object buscar(Object obj); int contadorActual(); }
Observa que las firmas de los mtodos de la interface coleccin implementados en la clase PilaFIFO deben corresponder exactamente con las firmas de los mtodos declarados en la interface coleccin. } class PilaFIFO implements coleccin { ... void aadir(Object obj) { ... } void borrar(Object obj) { ... } Object buscar(Object obj) { ... } int contadorActual() { ... }

Copyright Formacin y Soluciones Informticas EFIBS S.A.

235

8.10 Uso del instanceof


public class Cliente extends Object public class Compaia extends Empleado public class Individuo extends Empleado public void ejemplo(Cliente e) { if (e instanceof Compaia) { // Procesa un Administador } else if (e instanceof Individuo) { // Procesa un Administador } else { // Procesa cualquier otro tipo de Cliente } }

Copyright Formacin y Soluciones Informticas EFIBS S.A.

236

8.11 Ejercicio Prctico


El instructor realizar una explicacin detallada del ejercicio. En base al siguiente diagrama:

Copyright Formacin y Soluciones Informticas EFIBS S.A.

237

8.11 ... Ejercicio Prctico


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 mtodo getTax(...) de las clases creadas en punto 2 de sta prctica y cree un mtodo donde pueda procesar ambas clases utilizando el operador intanceof. Converse con el instructor y dems participantes la correcta ubicacin del mtodo que se encargue de procesar ambas clases.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

238

9 Estndares de Desarrollo
Copyright Formacin y Soluciones Informticas EFIBS S.A.

239

9. Estndares de Desarrollo
1. Introduccin a Java 1. Introduccin 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 Bsicos en Java 6. Conceptos Bsicos en Java 7. Trabajando con Clases 7. Trabajando con Clases

Copyright Formacin y Soluciones Informticas EFIBS S.A.

240

9. Estndares de Desarrollo
8. Utilizacin de Interfaces 8. Utilizacin de Interfaces 9. Estndares de Desarrollo 9. Estndares 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 Formacin y Soluciones Informticas EFIBS S.A.

241

Objetivos
Entender la importancia del uso de estndares de desarrollo. Definir, implementar y crear ejercicios, donde se ponga en prctica el uso de estndares de desarrollo, esto con el fin de que se pueda adquirir un slido entendimiento sobre el tema.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

242

9. Uso de Estndares
El desarrollo de aplicaciones actuales requiere una estandarizacin a nivel de programacin para poder hacer conciencia del trabajo de las distintas personas involucradas en la codificacin de los distintos servicios. El mantenimiento futuro de la aplicacin 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 estndares deben ser respetados durante el desarrollo de toda la aplicacin.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

243

9.1 Nomenclatura de la Aplicacin


Nombre de atributos y variables Las variables se definirn con el nombre de la columna de la tabla del que se lee su valor. Los nombres se inician en minscula. Para las variables que crea el propio programador y son usadas durante el desarrollo de la aplicacin, 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 mayscula. No debe de contener espacios entre sus palabras. Los nombres de los constructores deben ser idnticos al nombre de la clase.
Copyright Formacin y Soluciones Informticas EFIBS S.A.

244

9.1 Nomenclatura de la Aplicacin


Dentro de un archivo, cada una de las secciones deben estar separadas por lneas en blanco y se podr incluir un comentario opcional identificando cada seccin. Archivos con ms de 2000 lneas son muy pesados para la aplicacin, se recomiendan separarlos. Ficheros fuentes de Java Cada archivo fuente de JAVA contiene una clase o interface pblica. Los ficheros fuente de JAVA tienen la siguiente estructura: comentarios iniciales, lneas de importacin de clases y paquetes Java y declaracin de clases e interfaces

Copyright Formacin y Soluciones Informticas EFIBS S.A.

245

9.2 Nombre de Ficheros


El software de Java utiliza las siguientes extensiones: Tipo Fichero Extensin Java fuente Java bytecode (compilado) .java .class

Copyright Formacin y Soluciones Informticas EFIBS S.A.

246

9.3 Organizacin 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 cul, lista el nombre de la clase, la versin, la fecha y el copyrigth: /* * Nombre de la clase * Version * Fecha * Copyright */

Copyright Formacin y Soluciones Informticas EFIBS S.A.

247

9.3 Organizacin de los archivos


Lneas de importacin de clases y paquetes de Java La primera lnea no comentada de la mayora de los ficheros fuentes de Java es la definicin del paquete. Despus de ste, le sigue la definicin de los imports. Por ejemplo: package java.awt; import java.awt.peer.CanvasPeer;

Copyright Formacin y Soluciones Informticas EFIBS S.A.

248

9.3 Organizacin de los archivos


Partes Ordenadas a declarar en una Clase/Interface Comentarios en una Clase/interfase (/**...*/) Declaracin de la Clase o Interface Implementacin de la Clase o Interfase con comentarios (/*...*/), si es necesario Estos comentarios suelen contener informacin sobre el contexto de la clase o el interfase. Aqu definimos el alcance de la clase o interfase. Primero definimos las variables pblicas de la clase, despus las protegidas, despus las variables a nivel del paquete (sin modificador) y despus las variables privadas. Primero las pblicas, despus las protegidas, despus las variables a nivel del paquete (sin modificador) y despus las variables privadas. Notas

Variables (estticas) de la Clase

Variables instanciadas

Copyright Formacin y Soluciones Informticas EFIBS S.A.

249

9.3 ... Organizacin de los archivos


Partes Ordenadas a declarar en una Clase/Interface Constructores Mtodos Estos mtodos deben estar agrupados por funcionalidades y no por alcance del mtodo o accesibilidad. Por ejemplo, un mtodo de una clase privada puede ser definida entre dos instancias de mtodos pblicos. La meta de este orden es hacer ms legible y entendible el cdigo. Notas

Copyright Formacin y Soluciones Informticas EFIBS S.A.

250

9.4 Indentacin
Cuatro espacios suelen ser la unidad de indentacin. La exacta construccin de una indentacin (espacios con tabulador) no est especificada. Los tabuladores deben ser accionados cada 8 espacios (no 4).

No escribir lneas de ms 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 documentacin no suelen sobrepasar los 70 caracteres.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

251

9.4 Indentacin
Cuando una expresin no quepa en una lnea simple, se separa acorde a los siguientes principios generales: Separar despus de una coma. Separar despus de un operador. Separar a un nivel alto es mejor que separar a un nivel bajo. Alinear la nueva lnea con el principio de la expresin del mismo nivel de la lnea anterior. Si las reglas superiores confunden el entendimiento del cdigo, indentar 8 espacios.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

252

9.4.1 Ejemplo de Indentacin


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 Formacin y Soluciones Informticas EFIBS S.A.

253

9.4.1 Ejemplo de Indentacin

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

Copyright Formacin y Soluciones Informticas 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 Formacin y Soluciones Informticas EFIBS S.A.

255

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

Copyright Formacin y Soluciones Informticas EFIBS S.A.

256

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

Copyright Formacin y Soluciones Informticas EFIBS S.A.

257

9.6 Declaracin de Variables


int level; // nivel de indencin int size; // tamao 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 mtodo

Copyright Formacin y Soluciones Informticas EFIBS S.A.

258

9.6 Declaracin de Variables


class Sample extends Object { int ivar1; int ivar2; Sample(int i, int j) { ivar1 = i; ivar2 = j; } int emptyMethod() {} } ...

Los mtodos son separados por una lnea en blanco.

Copyright Formacin y Soluciones Informticas 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; condicin; accin) { statements; } while (condicin) { statements; }

Copyright Formacin y Soluciones Informticas EFIBS S.A.

260

9.7.1 Declaracin de Estructuras


switch (condicin) { caso ABC: statements; /* break */ caso DEF: statements; break; caso XYZ: statements; break; default: statements; break; }

Copyright Formacin y Soluciones Informticas EFIBS S.A.

261

9.8 Manipulacin de Ejemplo


Una lnea en blanco debe ser siempre usada bajo las siguientes circunstancias: Entre mtodos. Entre variables locales en un mtodo y su primera declaracin. Antes de un bloque o una lnea simple de comentario. Entre secciones lgicas dentro de un mtodo que mejoran su comprensin.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

262

9.8 Manipulacin de Ejemplo


Las lneas en blanco mejoran la lectura y entendimiento separando secciones de cdigo que estn lgicamente relacionadas.

Dos lneas en blanco se utilizan en las siguientes circunstancias Entre secciones de un fichero fuente. Entre definiciones de clases o interfases.

Copyright Formacin y Soluciones Informticas 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 minsculas y cdigo ASCII y suele usar nomenclaturas como com, edu, gov, mil, net, org, o uno de los cdigos ingleses de dos dgitos identificando pases 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 varan segn la organizacin interna usada para la nomenclatura. Dichas convenciones deben definir conceptos como nombre del directorio, departamento, proyecto, mquina... La nomenclatura usada en las clases suelen ser nombres, con la primera letra del nombre en mayscula. Se debe tratar de mantener definiciones de clases lo ms class Raster; simples y descriptibles. Usar palabras class ImageSprite; completas. Eliminar abreviaturas y siglas, a no ser que haga la definicin ms entendible.

CLASES

Copyright Formacin y Soluciones Informticas 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 mayscula como la definicin de clases. Para la nomenclatura de mtodos suelen usarse verbos, con la primera letra en minscula, y la letra inicial de la segunda palabra en mayscula.

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

MTODOS

VARIABLES

Excepto para variables, todas las instancias, y las constantes son definidas con la primera letra en minscula. Las palabras internas empiezan en mayscula. Los nombres de variables no deberan empezar con underscore _ o con el smbolo dlar $, aunque est permitido. Los nombres de variables deberan ser cortos int i; para su uso. La eleccin del nombre suele ser char c; mnemnico el nombre de la variable indica float myWidth; para que ser usada. Variables definidas con un solo carcter 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 maysculas con las palabras separadas por underscores ("_"). (Constantes ANSI deberan ser eliminadas, para facilitar la depuracin.) static final int MIN_WIDTH = 4; static final int MAX_WIDTH = 999; static final int GET_THE_CPU = 1;

CONSTANTES

Copyright Formacin y Soluciones Informticas EFIBS S.A.

265

9.10 Prcticas de Programacin


/* * @(#)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 informacin es propiedad de Sun * Microsystems, Inc. ("Confidential Information"). */ package java.blah; import java.blah.blahdy.BlahBlah; /** * La descripcin de la clase se situa aqu * * @version * @author */ 1.82 18 Mar 1999 Firstname Lastname 1.82 99/03/18

Copyright Formacin y Soluciones Informticas EFIBS S.A.

266

9.10 Prcticas de Programacin


public class Blah extends SomeClass { /* Comentario acerca de la implementacin de la clase puede ir aqu*/ /** classVar1 Comentario de documentacin */ public static int classVar1; /** * classVar2 Comentario de documentacin que * ocupa ms de una lnea */ private static Object classVar2; /** instanceVar1 Comentario de documentacin */ public Object instanceVar1; /** instanceVar2 Comentario de documentacin */ protected int instanceVar2; /** instanceVar3 Comentario de documentacin */ private Object[] instanceVar3;

Copyright Formacin y Soluciones Informticas EFIBS S.A.

267

9.10 ... Prcticas de Programacin


/** * ...constructor Blah Comentario de documentacin... */ public Blah() { // ...la implementacin se empieza aqu... } /** * ...method doSomething Comentario de documentacin */ public void doSomething() { // ... la implementacin se empieza aqu... } /** * ...method doSomethingElse Comentario de document. * @param someParam description */ public void doSomethingElse(Object someParam) { // ... la implementacin se empieza aqu... }

Copyright Formacin y Soluciones Informticas EFIBS S.A.

268

9.11 Ejercicio Prctico


El instructor realizar una explicacin 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 capacitacin y verificar que en cada uno de ellos se cumplan los estndares establecidos anteriormente.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

269

10 Manejo de Excepciones
Copyright Formacin y Soluciones Informticas EFIBS S.A.

270

10. Manejo de Excepciones


1. Introduccin a Java 1. Introduccin 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 Bsicos en Java 6. Conceptos Bsicos en Java 7. Trabajando con Clases 7. Trabajando con Clases

Copyright Formacin y Soluciones Informticas EFIBS S.A.

271

10. Manejo de Excepciones


8. Utilizacin de Interfaces 8. Utilizacin de Interfaces 9. Estndares de Desarrollo 9. Estndares 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 Formacin y Soluciones Informticas EFIBS S.A.

272

Objetivos
Entender la importancia del uso de las excepciones. Definir, implementar y crear ejercicios, donde se ponga en prctica el uso de excepciones, esto con el fin de que se pueda adquirir un slido entendimiento sobre el tema.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

273

10 Excepciones en Java
Una excepcin es un evento que ocurre durante la ejecucin de un programa y detiene el flujo normal de la secuencia de instrucciones del programa. Las excepciones en Java estn destinadas para la detencin y correccin de errores.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

274

10.1 Excepciones y Errores


Todas las excepciones y errores extienden de la clase Throwable

Throwable

Error

Exception

RuntimeException

Copyright Formacin y Soluciones Informticas 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 Formacin y Soluciones Informticas EFIBS S.A.

276

10.3 Capturando mltiples 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 Formacin y Soluciones Informticas 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 Formacin y Soluciones Informticas 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 Formacin y Soluciones Informticas EFIBS S.A.

279

10.6 Creacin de Excepciones Propias


/** * Indica que se ha procucido algn 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 cdigo asociado al error. * @return Cdigo de error. */ public int getCodeError() { return codeError; }

Copyright Formacin y Soluciones Informticas EFIBS S.A.

280

10.7 Ejercicio Prctico


El instructor realizar una explicacin detallada del ejercicio a realizar: Cree un paquete llamado: org.efibs.sistemaDeOrdenes.Exepciones El objetivo de este ejercicio es el de crear una Excepcin llamada OrderException.java. Esta excepcin deber ser lanzada en caso de que una Orden no contenga tems y adems deber ser capturada por el mtodo que la invoca e imprimir en consola el valor del mensaje enviado.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

281

11 Utilizando Cadenas, Arreglos y Colecciones

Copyright Formacin y Soluciones Informticas EFIBS S.A.

282

11. Utilizando Cadenas,Arreglos y Colecciones


1. Introduccin a Java 1. Introduccin 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 Bsicos en Java 6. Conceptos Bsicos en Java 7. Trabajando con Clases 7. Trabajando con Clases

Copyright Formacin y Soluciones Informticas EFIBS S.A.

283

11. Utilizando Cadenas,Arreglos y Colecciones


8. Utilizacin de Interfaces 8. Utilizacin de Interfaces 9. Estndares de Desarrollo 9. Estndares 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 Formacin y Soluciones Informticas 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 prctica el uso vectores y cadenas, esto con el fin de que se pueda adquirir un slido entendimiento sobre el tema.

Copyright Formacin y Soluciones Informticas 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 Formacin y Soluciones Informticas EFIBS S.A.

286

11.2 Creacin 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 Formacin y Soluciones Informticas EFIBS S.A.

287

11.3 Constructores de un String?


La clase String proporciona varios constructores, a continuacin se presentan algunos de los constructores ms 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 Formacin y Soluciones Informticas EFIBS S.A.

288

11.4 Concatenacin de String


Java utiliza el operador + para concatenar cadenas (String) El mtodo concat() pertenece a la clase String y es otra manera de concatenar Strings A continuacin se presenta ejemplares de cdigos equivalentes:
String nombre = "Sam Wong"; String nombre = "Sam " + "Wong"; String nombre = "Sam ".concat("Wong");

Copyright Formacin y Soluciones Informticas EFIBS S.A.

289

11.4 Concatenacin de String


Los tipos de datos primitivos se pueden concatenar con un String. Los tipos de datos primitivos son implcitamente convertidos a String. Para concatenar mltiples lneas 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 Formacin y Soluciones Informticas EFIBS S.A.

290

11.5 Operaciones con String


Obtener el tamao de un String
int length(); String str = "Comedy"; int len = str.length();

Localizar un carcter 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 Formacin y Soluciones Informticas EFIBS S.A.

291

11.5 Operaciones con String


Convertir a mayscula o minscula:
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 Formacin y Soluciones Informticas EFIBS S.A.

292

11.6 Comparar Strings


Utilizacin del mtodo equals()

String clave = fgHPUw; if (clave.equals("fgHPUw")) // Las maysculas son Importantes

Utilizacin del mtodo equalsIgnoreCase()

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

Copyright Formacin y Soluciones Informticas EFIBS S.A.

293

11.7 Mtodo Value Of


Es un mtodo esttico de la clase String representacin de un String en un tipo Primitivo. que retorna la

Cuando un primitivo es concatenado a un String, automticamente se invoca a String.valueOf()


int contador; System.out.println(contador); String nueve = String.valueOf(9); String unoFloat = String.valueOf(1.0f);

Copyright Formacin y Soluciones Informticas EFIBS S.A.

294

11.8 Mtodo 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 Formacin y Soluciones Informticas 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 ms 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 Formacin y Soluciones Informticas EFIBS S.A.

296

11.9 StringBuffer
A continuacin se muestra un ejemplo de cmo 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 ms eficiente y elegante puede ser la siguiente:


public String reverseIt(String s) { StringBuffer sb = new StringBuffer(s); return sb.reverse().toString(); }

Copyright Formacin y Soluciones Informticas 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 Formacin y Soluciones Informticas EFIBS S.A.

298

11.10 Ejercicio Prctico


Pruebe los siguientes fragmentos de cdigo:
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 Formacin y Soluciones Informticas EFIBS S.A.

299

11.10 Ejercicio Prctico


Pruebe los siguientes fragmentos de cdigo:

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 Formacin y Soluciones Informticas EFIBS S.A.

300

11.10 Ejercicio Prctico


Un arreglo es una coleccin 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 declaracin de un arreglo crea una referencia que se referiere a l.

[0] [1] [2]

Orden Cliente Producto

Copyright Formacin y Soluciones Informticas EFIBS S.A.

301

11.11 Creacin de Arreglos


Declaracin: Crea la variable que se refiere al arreglo.
1. 2. 1. 2. tipo[] nombre; tipo nombre[]; int[] nombre; float nombre[]; nombre

nul l

Copyright Formacin y Soluciones Informticas EFIBS S.A.

302

11.11 Creacin de Arreglos


Creacin: Crea un objeto array, que requiere un tipo y un tamao, 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 Formacin y Soluciones Informticas EFIBS S.A.

303

11.12 Inicializacin por Defecto


Todos los elementos en un nuevo arreglo de primitivos son inicializados automticamente 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 Formacin y Soluciones Informticas 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

Copyright Formacin y Soluciones Informticas EFIBS S.A.

305

11.14 Arreglos - Objetos


categoras

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

null
categoras

null null

String[] categoras; categoras = new String[3]; categoras // Lo anterior es igual que: String[] categoras = new String[3];

null

Accin Drama Msica

Copyright Formacin y Soluciones Informticas EFIBS S.A.

306

11.15 Asignar valores - Arreglos


A continuacin se presenta un ejemplo que crea un arreglo para cuatro Strings vacos
String[] arr = new String[4]; for (int i = 0; i < arr.length; i++) { arr[i] = new String(); }

Otro ejemplo, donde se visualiza el tamao 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 Formacin y Soluciones Informticas EFIBS S.A.

307

11.16 Arreglos y Excepciones


La siguiente Excepcin: java.lang.ArrayIndexOutOfBoundsException ocurre cuando un ndice del arreglo es invalido:

String[] list = new String[4]; System.out.println(list[5]);

Copyright Formacin y Soluciones Informticas 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 instruccin: import java.util.Vector;

La creacin de un Vector vaci se realiza de la siguiente manera: La creacin de un Vector con tamao especifico se realiza de la siguiente manera:
Vector personas = new Vector();

Vector personas = new Vector(20);

Copyright Formacin y Soluciones Informticas 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 posicin

personas.insertElementAt(nombre, 0);

Eliminar un elemento del Vector por medio de un ndice

personas.removeElementAt(0);

Copyright Formacin y Soluciones Informticas EFIBS S.A.

310

11.19 Otros mtodos de un vector


Obtener el primer elemento del Vector
String s = (String) personas.firstElement();

Obtener un elemento en una posicin especifica


String s = (String) personas.elementAt(2);

Localizar un objeto en un Vector


int posicion = personas.indexOf(name);

Obtener el tamao de un Vector


int tamanno = personas.size();

Copyright Formacin y Soluciones Informticas 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 Formacin y Soluciones Informticas 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 Formacin y Soluciones Informticas 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 mtodos set/get para la variable listaCliente.

Cree un nuevo mtodo sobre esta misma clase llamado cargarCliente, el cual recibir como parmetro un Objeto de tipo Cliente.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

314

11.22 Colecciones
Las colecciones son una de las cosas ms importantes que se han aportado a la plataforma Java desde la presentacin de la versin 1.2 del JDK y ayudaron enormemente a llevar a Java a la primera lnea de los lenguajes de presentacin. Una coleccin es un grupo de elementos individuales, siempre con alguna regla que se les pueda aplicar. Se redimensionan automticamente por lo que se puede colocar en ellas cualquier nmero de objetos

Copyright Formacin y Soluciones Informticas EFIBS S.A.

315

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

Copyright Formacin y Soluciones Informticas EFIBS S.A.

316

11.22 Colecciones
Los principales mtodos de las colecciones son los siguientes:

boolean add( Object ) Asegura que la coleccin contiene el argumento. Devuelve false si no se puede aadir el argumento a la coleccin. boolean addAll( Collection ) Aade todos los elementos que se pasan en el argumento. Devuelve true si es capaz de incorporar a la coleccin cualquiera de los elementos del argumento. void clear() Elimina todos los elementos que componen la coleccin.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

317

11.22 Colecciones

boolean contains( Object ) Devuelve True, si la coleccin contiene el argumento que se pasa como parmetro. boolean isEmpty() Devuelve true, si la coleccin est vaca, no contiene elemento alguno. Iterator iterator() Devuelve un Iterator que se puede utilizar para desplazamientos a travs de los elementos que componen la coleccin

Copyright Formacin y Soluciones Informticas EFIBS S.A.

318

11.22 Colecciones
boolean remove( Object ) Si el argumento est en la coleccin, se elimina una instancia de ese elemento y se devuelve true si se ha conseguido boolean removeAll( Collection ) Elimina todos los elementos que estn contenidos en el argumento. Devuelve true si consigue eliminar cualquiera de ellos boolean retainAll( Collection ) Mantiene solamente los elementos que estn contenidos en el argumento, es lo que sera una interseccin en la teora de conjuntos. Devuelve verdadero en caso de que se produzca algn cambio.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

319

11.22 Colecciones
int size() Devuelve el nmero de elementos que componen la coleccin Object[] toArray() Devuelve un array conteniendo todos los elementos que forman parte de la coleccin. Este es un mtodo opcional, lo cual significa que no est implementado para una Collection determinada. Si no puede devolver el array, lanzar una excepcin de tipo UnsupportedOperationException.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

320

11.22 Colecciones

Copyright Formacin y Soluciones Informticas EFIBS S.A.

321

11.22 Colecciones
En la versin 5.0, se ha variado la forma en que se trabajan los tipos de datos y tambin, 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 Genricos Uso del for each
Copyright Formacin y Soluciones Informticas EFIBS S.A.

322

11.22 Colecciones
Otros ejemplos son los siguientes:

Hasta Java 1.4 para iterar por una coleccin o array hacamos lo siguiente: // numbers es una lista de nmeros for (Iterator it = numbers.iterator(); it.hasNext(); ) { Integer number = (Integer) it.next(); // Hacer algo con el nmero... } Lo mismo en Java 5 puede hacerse del siguiente modo: for(Integer number: numbers) { // Se hace algo con el nmero... }

Copyright Formacin y Soluciones Informticas EFIBS S.A.

323

11.23 Listas
List (interfaz) La Lista incorpora una serie de mtodos a la Coleccin que permiten la insercin 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 propsito general. Permite un acceso aleatorio muy rpido a los elementos, pero realiza con bastante lentitud las operaciones de insertado y borrado de elementos en medio de la Lista.

Copyright Formacin y Soluciones Informticas 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 rpidas. Sin embargo es bastante lento el acceso aleatorio, en comparacin con el ArrayList. Dispone adems de los mtodos addLast(), getFirst(), getLast(), removeFirst() y removeLast(), que no estn definidos en ningn interfaz o clase base y que permiten utilizar la Lista Enlazada como una Pila, una Cola o una Cola Doble.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

325

11.24 Sets
Set (interfaz) Cada elemento que se aada a un Set debe ser nico, ya que el otro caso no se aadir porque el Set no permite almacenar elementos duplicados. Los elementos incorporados al Conjunto deben tener definido el mtodo 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 eleccin ms habitual, excepto en Sets que sean muy pequeos. Debe tener definido el mtodo hashCode().

Copyright Formacin y Soluciones Informticas EFIBS S.A.

326

11.24 Sets
ArraySet Un Set encajonado en un Array. Esto es til para Sets muy pequeos, especialmente aquellos que son creados y destruidos con frecuencia. Para estos pequeos Sets, la creacin e iteracin 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 fcil extraer una secuencia ordenada a partir de un Set de este tipo.

Copyright Formacin y Soluciones Informticas 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 implementacin 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 travs 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 iteracin. Est diseado para su utilizacin con Mapas muy pequeos, especialmente con aquellos que se crean y destruyen muy frecuentemente.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

328

11.25 Mapas
TreeMap Es una implementacin basada en un rbol balanceado. Cuando se observan las claves o los valores, Se comprueba que estn colocados en un orden concreto, determinado por Comparable o Comparator, que ya se vern. Lo importante de un TreeMap es que se pueden recuperar los elementos en un determinado orden. TreeMap Es el nico mapa que define el mtodo subMap(), que permite recuperar una parte del rbol solamente.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

329

11.26 Ejercicio Prctico


El instructor realizar una explicacin 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 defnala como de tipo Cliente Cree los correspondientes mtodos set/get para la variable listaClientes. El mtodo set, servir para asignar un objeto de tipo Cliente, mientras que get servir para obtener un objeto de tipo cliente en una posicin dada, la cual no podr ser menor a CERO ni mayor a la cantidad de elementos del vector.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

330

11.26 Ejercicio Prctico


Desde Principal.java, invoque al mtodo set, al menos cuatro veces, envindole como parmetro 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 Daz", "Cartago", "386-2424")); losClientes. setCliente(new Cliente(3, Fernando Mora", "Espana", "00340001133232")); losClientes. setCliente(new Cliente(4, Carlos Miranda", "Cartago", "320-4323"));

Copyright Formacin y Soluciones Informticas EFIBS S.A.

331

11.26 Ejercicio Prctico

Modifique o sobrescriba el mtodo toString() de la clase Cliente utilizando la clase StringBuffer para retornar toda la informacin del cliente. Nota: Para los campos o variables de tipo cadena transfrmelas a maysculas y sin espacios en ninguno de los extremos.

Cree un mtodo en la clase AdminClientes llamado cantidadClientes() que retorne el tamao del Vector, puede utilizar el mtodo size.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

332

11.26 Ejercicio Prctico


Basado en los dos puntos anteriores, muestre la informacin con el mtodo toString de cada uno de los Clientes existentes. Recuerde utilizar el mtodo cantidadClientes previamente creado, para conocer el limite del Vector a recorrer. Implemente los mtodos de busqueda de un cliente en particular basado en su id, el cual retorne la posicin en la que se encontr. Si no lo encontr devolver -1. Implemente un mtodo para eliminar un cliente (lleve a cabo las validaciones necesarias). Pruebe cada uno de los mtodos de la instancia de AdminClientes para ver que funcionen adecuadamente.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

333

11.26 Ejercicio Prctico


Finalmente, en el mismo Principal.java, cree una instancia de Orden y asignele cinco ItemOrden. Utilice el constructor sobre cargado y haga uso del mtodo toString para desplegar la informacin. Muestre la informacin de los ItemOrden de la Orden que a caba de crear.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

334

12 Clases Java

Copyright Formacin y Soluciones Informticas EFIBS S.A.

335

12. Clases en Java


1. Introduccin a Java 1. Introduccin 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 Bsicos en Java 6. Conceptos Bsicos en Java 7. Trabajando con Clases 7. Trabajando con Clases

Copyright Formacin y Soluciones Informticas EFIBS S.A.

336

12. Clases en Java


8. Utilizacin de Interfaces 8. Utilizacin de Interfaces 9. Estndares de Desarrollo 9. Estndares 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 Formacin y Soluciones Informticas EFIBS S.A.

337

Objetivos
Estudiar algunas de las clases ms importantes del lenguaje. Ensear al estudiante como obtener el mximo provecho de los APIS. Analizar la diferencia entre una clase Java y una clase hecha por el usuario.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

338

12.1 Clase Math


La clase Math representa la librera matemtica de Java. Las funciones que contiene son las de todos los lenguajes, parece que se han metido en una clase solamente a propsito de agrupacin, por eso se encapsulan en Math, y lo mismo sucede con las dems 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 continuacin se presentan una tabla con algunas de las funcionesmatematicas de la clase Math

Copyright Formacin y Soluciones Informticas EFIBS S.A.

339

12.1 Clase Math


En la versin 5.0 los siguientes son los cambios: Se da mayor precisin en cuanto al punto flotante en la clase BigDecimal. Tanto la biblioteca Math como StrictMath funciones con capacidades hiperblicas (sinh, cosh, tanh), raz cbica y algoritmo en base 10. Un soporte para punto flotante hexadecimal. Mtodos de precisin de punto flotante, tanto en Float como en Double.

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

Copyright Formacin y Soluciones Informticas 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 Formacin y Soluciones Informticas 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 raz cuadrada de x devuelve el nmero completo ms pequeo 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 nmero completo ms 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 Formacin y Soluciones Informticas 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 raz cbica de a Devuelve el logaritmo en base 10 de a Devuelve el valor hiperblico del seno de x Devuelve el valor hiperblico del tan de x Devuelve el valor hiperblico 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 Formacin y Soluciones Informticas EFIBS S.A.

343

12.2 La Clase Math(ver 5.0)


Math.signum(float f) Math.ulp(float f) Retorna la funcin signum del argumento f. Retorna el tamao de un ulp del argumento.

Copyright Formacin y Soluciones Informticas 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 Formacin y Soluciones Informticas EFIBS S.A.

345

12.4 Precisin Arbitraria


La inclusin 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 precisin absoluta.

Como resultado surgieron las clases BigDecimal y BigInteger, que permiten trabajar con precisin arbitraria, para representar datos que son habituales de las Bases de Datos. La clase BigInteger tambin resulta til cuando los tipos primitivos de Java (byte, int, long) no proporcionan sificiente precisin. Por ejemplo, cuando se est construyendo una clave pblica para encriptacin que involucra operaciones exponenciales muy grandes y a manipular nmeros primos de cientos de bits, esta clase es ideal para estas acciones
Copyright Formacin y Soluciones Informticas EFIBS S.A.

346

12.5 Mtodos de la clase BigDecimal


El constructor ms sencillo es el que construye un BigDecimal a partir de su representacin 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 ningn signo no numrico, ni siquiera espacios en blanco, ya que de lo contrario se produce una excepcin de tipo NumberFormatException. Un mtodo interesante es el que permite fijar la precisin que se desea tener, es decir, el nmero de dgitos significativos que hay despus de la coma decimal, y el tipo de redondeo que se va a utilizar:
setScale( int precision,int redondeo );

Copyright Formacin y Soluciones Informticas EFIBS S.A.

347

12.6 Operadores - Clase BigDecimal


Los operadores que se utilizan con estas clases no son los clsicos, sino que estn disponibles mtodos especiales para sumar, restar, multiplicar dividir y para desplazar la coma decimal un nmero 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 Formacin y Soluciones Informticas EFIBS S.A.

348

12.7 La Clase Character


Al trabajar con caracteres se necesitan muchas funciones de comprobacin y traslacin. Estas funciones estn 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 esttica. Se encuentra disponible en el paquete java.lang Declaracin:
char c; Character C; La primera sentencia crear una variable carcter y la segunda un objeto Character C = new Character( 'J' ); char c = C.charValue(); String s = C.toString();

Ejemplos:

Copyright Formacin y Soluciones Informticas EFIBS S.A.

349

12.8 Mtodos(ver 5.0)

Copyright Formacin y Soluciones Informticas EFIBS S.A.

350

12.8 Mtodos(ver 5.0)

Copyright Formacin y Soluciones Informticas EFIBS S.A.

351

12.8 Mtodos(ver 5.0)

Copyright Formacin y Soluciones Informticas EFIBS S.A.

352

12.8 Mtodos(ver 5.0)

Copyright Formacin y Soluciones Informticas EFIBS S.A.

353

12.8 Mtodos(ver 5.0)

Copyright Formacin y Soluciones Informticas EFIBS S.A.

354

12.8 Mtodos(ver 5.0)

Copyright Formacin y Soluciones Informticas EFIBS S.A.

355

12.9 Comprobaciones Booleanas


En este caso, si contramos un objeto Character C , no se podra 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 carcter es una letra minscula devuelve true si el carcter es una letra mayscula devuelve true para caracteres numricos devuelve true para espacios en blanco

Copyright Formacin y Soluciones Informticas EFIBS S.A.

356

12.10 Traslaciones
Traslaciones de Caracteres.

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

convierte entre mayscula y minscula convierte entre minscula y mayscula

Traslaciones de carcter/digito.

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

Copyright Formacin y Soluciones Informticas EFIBS S.A.

357

12.11 Float
Cada tipo numrico 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 mtodos de la clase Float. Declaracin:
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 Formacin y Soluciones Informticas 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 mtodo isNaN() comprueba si f es un No-Nmero boolean b = Float.isInfinite( f );

Copyright Formacin y Soluciones Informticas EFIBS S.A.

359

12.13 Mtodos(ver 5.0)

Copyright Formacin y Soluciones Informticas EFIBS S.A.

360

12.14 Clase Double


Cada tipo numrico 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 prctico, con una representacin tipo String del valor.
Declaracin: 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 Formacin y Soluciones Informticas EFIBS S.A.

361

12.15 Mtodos(ver 5.0)

Copyright Formacin y Soluciones Informticas EFIBS S.A.

362

12.16 Clase Integer


Cada tipo numrico tiene su propia clase de objetos. As el tipo int tiene el objeto Integer. Declaracin:
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 Formacin y Soluciones Informticas EFIBS S.A.

363

12.17 Mtodos(ver 5.0)

Copyright Formacin y Soluciones Informticas EFIBS S.A.

364

12.17 Mtodos(ver 5.0)

Copyright Formacin y Soluciones Informticas EFIBS S.A.

365

12.18 Clase Long


Cada tipo numrico tiene su propia clase de objetos. As el tipo long tiene el objeto Long. Declaracin:
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 Formacin y Soluciones Informticas EFIBS S.A.

366

12.19 Mtodos(ver 5.0)

Copyright Formacin y Soluciones Informticas EFIBS S.A.

367

12.19 Mtodos(ver 5.0)

Copyright Formacin y Soluciones Informticas EFIBS S.A.

368

12.20 Clase Random


La clase Random es un generador de nmero pseudo-aleatorios. El algoritmo que se utiliza para la obtencin de estos nmeros, es el que Donald Knuth presenta en su libro The Art of Computer Programming. Son nmeros no realmente aleatorios porque son secuencias distribuidas uniformemente, obtenidas a partir de una semilla inicial.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

369

12.20 Clase Random


Cuando se inicializa un objeto Random con una semilla, se puede obtener a continuacin 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 nmeros repetidas. De un objeto Random se pueden extraer varios tipos de nmeros aleatorios a travs de sus mtodos.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

370

12.20 Mtodos(ver 5.0)

Copyright Formacin y Soluciones Informticas EFIBS S.A.

371

12.21 String Tokenizer

La clase StringTokenizer proporciona uno de los primeros pasos para realizar un anlisis gramatical de una cadena de entrada, extrayendo los smbolos que se encuentren en esa cadena. Si se tiene una cadena de entrada cuyo formato es regular y se desea extraer la informacin 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 delimitacin. Los delimitadores marcan la separacin entre los smbolos que se encuentran en la cadena de entrada.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

372

12.21 String Tokenizer


Se considera que todos los caracteres de la cadena son delimitadores vlidos; 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, lnea nueva y retorno de carro. Una vez que se ha creado un objeto StringTokenizer, se utiliza el mtodo nextToken() para ir extrayendo los smbolos consecutivamente. El mtodo hasMoreTokens() devuelve true cuando todava quedan smbolos por extraer. Se encuentra sobre el paquete java.util

Copyright Formacin y Soluciones Informticas EFIBS S.A.

373

12.22 Mtodos(ver 5.0)

Copyright Formacin y Soluciones Informticas 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 Formacin y Soluciones Informticas EFIBS S.A.

375

12.24 Clase Runtime


Esta clase encapsula el proceso del intrprete 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 mtodo esttico Runtime.getRuntime().

Los applets y otros fragmentos de cdigo de los que se desconfe habitualmente no pueden llamar a ninguno de los mtodos de la clase Runtime sin activar una SecurityException, excepcin de seguridad.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

376

12.24 Clase Runtime


Aunque Java es un sistema de recogida de basura automtica, o liberacin de memoria automtica, se podra desear el conocer la cantidad de objetos y el espacio libre que hay, para comprobar la eficiencia del cdigo escrito.

Para proporcionar esta informacin, la clase Runtime dispone de los mtodos totalMemory(), que devuelve la memoria total en la Mquina Virtual Java, y freeMemory(), que devuelve la cantidad de memoria libre disponible.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

377

12.25 Mtodos 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 mtodo exec() que permiten que se indique el nombre del programa que se va a ejecutar, junto con los parmetros de entrada.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

378

12.25 Mtodos de la clase Runtime


El mtodo exec() devuelve un objeto Process, que se puede utilizar para controlar la interaccin del programa Java con el nuevo proceso en ejecucin. Hay varias formas alternativas de exec(), pero esta es la ms habitual. El proceso que devuelve exec() se puede manipular despus de que el nuevo programa haya comenzado a ejecutarse. Se puede eliminar el subproceso con el mtodo destroy(). El mtodo waitFor(), esperar a, provoca que el programa espere hasta que el subproceso termine, y el mtodo exitValue(), valor de salida, devuelve el valor que ha devuelto el subproceso cuando termin.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

379

12.26 Ejemplo Prctico


El siguiente segmento de cdigo invoca al programa Notepad, del sistema operativo windows, enviando adems 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 Formacin y Soluciones Informticas EFIBS S.A.

380

12.26 Ejemplo Prctico


El siguiente segmento de cdigo presenta el mismo cdigo del ejemplo anterior, modificado para que espere a que termine el proceso en ejecucin
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 Formacin y Soluciones Informticas 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 modificacin 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 estndar de entrada/salida static PrintStream err; static InputStream in; static PrintStream out;

Copyright Formacin y Soluciones Informticas EFIBS S.A.

382

12.28 Mtodos(ver 5.0)

Copyright Formacin y Soluciones Informticas EFIBS S.A.

383

12.28 Mtodos(ver 5.0)

Copyright Formacin y Soluciones Informticas EFIBS S.A.

384

12.29 Ejercicio Prctico


El instructor realizar una explicacin 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 mtodos de cada una de las clases o APIs que se presentan en el actual captulo. Comente con el instructor, el uso de los mtodos estticos.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

385

13 SWING

Copyright Formacin y Soluciones Informticas EFIBS S.A.

386

13. Swing
1. Introduccin a Java 1. Introduccin 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 Bsicos en Java 6. Conceptos Bsicos en Java 7. Trabajando con Clases 7. Trabajando con Clases

Copyright Formacin y Soluciones Informticas EFIBS S.A.

387

13. Swing
8. Utilizacin de Interfaces 8. Utilizacin de Interfaces 9. Estndares de Desarrollo 9. Estndares 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 Formacin y Soluciones Informticas EFIBS S.A.

388

Objetivos
Explicar cada uno de los componentes grficos del swing. Definir, implementar y crear ejercicios, donde se ponga en prctica el uso del swing, esto con el fin de que se pueda adquirir un slido entendimiento sobre el tema.

Copyright Formacin y Soluciones Informticas 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, adems, 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 creacin de las interfaces grficas de usuario. Son muchas las ventajas que ofrece el uso de Swing. Por ejemplo, la navegacin con el teclado es automtica, cualquier aplicacin Swing se puede utilizar sin ratn, sin tener que escribir ni una lnea de cdigo adicional. Las etiquetas de informacin, o "tool tips", se pueden crear con una sola lnea de cdigo. Adems, Swing aprovecha la circunstancia de que sus Componentes no estn renderizados sobre la pantalla por el sistema operativo para soportar lo que llaman "pluggable look and feel", es decir, que la apariencia de la aplicacin se adapta dinmicamente al sistema operativo y plataforma en que est corriendo.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

390

13.1 Swing
Es muy importante entender y asimilar el hecho de que Swing es una extensin 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 decisin de no volver a utilizar jams un botn de AWT, pero, la funcionalidad bsica de Swing descansa sobre el AWT. Todo esto es para evitar que el lector salte directamente a Swing, ya que sera conveniente que primero entendiese el AWT y cmo Swing mejora al AWT. El paquete que Swing utiliza es javax.swing.*

Copyright Formacin y Soluciones Informticas EFIBS S.A.

391

13.1 Swing
En este cdigo se crean dos botones JButton y un JTextField, donde su funcionalidad ser que cuando se pulse algn botn se despliegue en el JTextField el nombre del botn pulsado.

Copyright Formacin y Soluciones Informticas 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( "Prctica 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 Formacin y Soluciones Informticas EFIBS S.A.

393

13.2 Bordes
La clase JComponent tambin contiene un mtodo llamado setBorder(), que permite colocar diferentes bordes a un componente visible.

Copyright Formacin y Soluciones Informticas 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( "Prctica 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 Formacin y Soluciones Informticas EFIBS S.A.

395

13.3 Etiquetas
Las etiquetas, junto con los botones y las cajas de seleccin, son uno de los componentes ms bsicos 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 ms verstil que la clase correspondiente del AWT.

Copyright Formacin y Soluciones Informticas 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( "Prctica 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 Formacin y Soluciones Informticas EFIBS S.A.

397

13.4 Botones
Swing aade varios tipos de botones y cambia la organizacin de la seleccin de componentes: todos los botones, cajas de seleccin, botones de seleccin y cualquier opcin de un men deben derivar de AbstractButton.

Copyright Formacin y Soluciones Informticas 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( "Prctica EFIBS" ); ventana.setVisible( true );} }

Copyright Formacin y Soluciones Informticas 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( "Prctica EFIBS" ); ventana.setVisible( true );} }

Copyright Formacin y Soluciones Informticas EFIBS S.A.

400

13.5 Grupos de Botones


Si se quieren botones de seleccin nica, los conocidos como botones radio, que tienen la particularidad de que solamente puede haber uno seleccionado, hay que crearse un grupo de botones, aadiendo botones a ese grupo uno a uno. Pero, Swing permite que cualquier AbstractButton pueda ser aadido a un ButtonGroup.

Copyright Formacin y Soluciones Informticas 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 dinmico al que se pasa una cadena como argumento Constructor ctor = bClass.getConstructor( new Class[] { String.class } ); // Se crea un nuevo objeto del tipo del botn 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 Formacin y Soluciones Informticas 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( "Prctica 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 Formacin y Soluciones Informticas EFIBS S.A.

403

13.6 Listas y Cajas Combinadas


Las lista y cajas "combo" en Swing funcionan del mismo modo que lo hacan en el AWT, aunque tienen incrementada la funcionalidad a travs 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 Formacin y Soluciones Informticas 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( "Prctica EFIBS" ); vntana.setVisible( true ); } }

Copyright Formacin y Soluciones Informticas 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 Bsicos de Java" }; /* Creamos una lista con un controlador propio, que va a permitir la personalizacin en la presentacin 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 Formacin y Soluciones Informticas 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 Formacin y Soluciones Informticas EFIBS S.A.

407

13.7 Listas

public static void main( String args[] ) { JFrame ventana = new JFrame( "Prctica 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 Formacin y Soluciones Informticas EFIBS S.A.

408

13.8 Textos
Swing tambin introduce nuevos componentes dentro de la manipulacin de textos. As la clase JTextArea acta 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 mtodo setEchoChar(), y la clase JTextPane que permite que se presente el texto con diferentes fuentes de caracteres, colores, tamaos, etc.

Copyright Formacin y Soluciones Informticas 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 Formacin y Soluciones Informticas 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 Formacin y Soluciones Informticas EFIBS S.A.

411

13.8 ... Textos

public static void main( String argv[] ) { JFrame ventana = new JFrame( "Prctica 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 Formacin y Soluciones Informticas 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 mtodo llamado setToolTipText( String ). Se puede indicar un texto de informacin virtualmente en cualquier lugar y lo nico que se necesita es invocar a este mtodo, 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 ratn permanezca sobre cada JButton, durante un periodo de tiempo predeterminado, una pequea cajita conteniendo el texto aparecer al lado del puntero del ratn, tambin en este caso, indicando el botn sobre el cual se encuentra situado el cursor del ratn.

Copyright Formacin y Soluciones Informticas 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 Formacin y Soluciones Informticas EFIBS S.A.

414

13.11 Mens
Los mens estn mucho mejor desarrollados y son ms 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 Formacin y Soluciones Informticas EFIBS S.A.

415

13.11 Mens
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 mens 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 seleccin 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 mens como si se // tratara de los tpicos recursos de X

Copyright Formacin y Soluciones Informticas EFIBS S.A.

416

13.11 Mens
public Object menuArchivo[][] = { { "Archivo",new Character('A') }, // Nombre del men y tecla rpida asociada // Nombre,tipo,tecla rpida,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 Formacin y Soluciones Informticas EFIBS S.A.

417

13.11 Mens
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 Formacin y Soluciones Informticas EFIBS S.A.

418

13.11 Mens
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( "Prctica EFIBS" ); ventana.setVisible( true ); }}

Copyright Formacin y Soluciones Informticas EFIBS S.A.

419

13.12 Mens Popup

La implementacin de JPopupMenu resulta un tanto extraa, antes que, nada hay que llamar al mtodo enableEvents() y seleccionar los eventos del ratn, en vez de utilizar un receptor de eventos como sera de esperar.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

420

13.12 Mens 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 Formacin y Soluciones Informticas EFIBS S.A.

421

13.12 Mens 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( "Prctica 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 Formacin y Soluciones Informticas 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 informacin en forma de una barra parcialmente llena, o parcialmente vaca, para que pueda tener una perspectiva visual de los datos.

Copyright Formacin y Soluciones Informticas 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( "Prctica 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 Formacin y Soluciones Informticas 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 ms complejo.

Copyright Formacin y Soluciones Informticas 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 botn 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 Formacin y Soluciones Informticas EFIBS S.A.

426

13.14 rboles
/*Se aade el rbol y se hace sobre un ScrollPane, para que se controle automticamente 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 aade el botn 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 seleccin 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 automticamente modelo.insertNodeInto( rama,seleccion,0 );}} } ); JPanel panel = new JPanel(); // Se crea un panel para contener al botn panel.add( botonPrueba ); add( panel,BorderLayout.SOUTH ); } public static void main( String args[] ) { JFrame frame = new JFrame( "Prctica 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 Formacin y Soluciones Informticas 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 travs 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 Formacin y Soluciones Informticas 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 nmero de columnas de la tabla return( datos[0].length ); } public int getRowCount() { // Devuelve el nmero 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 Formacin y Soluciones Informticas 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 aade a un ScrollPane para que sea ste el que controle automticamente en tamao 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( "Prctica 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 Formacin y Soluciones Informticas EFIBS S.A.

430

13.16 Pestaas
JTabbedPane, puede manejar directamente todas las fichas, a base de pestaas y permite cambiar a cualquiera de ellas.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

431

13.16 ... Pestaas


public class Pestaas 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 Pestaas() { 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( "Prctica EFIBS" ); frame.addWindowListener( new WindowAdapter() { public void windowClosing( WindowEvent evt ) { System.exit( 0 );}} ); frame.getContentPane().add( new Pestaas(),BorderLayout.CENTER ); frame.setSize( 460,350 ); frame.setVisible( true ); } }

Copyright Formacin y Soluciones Informticas EFIBS S.A.

432

13.17 Selector de Ficheros


Normalmente, la ventana de seleccin de ficheros se utiliza para presentar una lista de ficheros y permitir al usuario seleccionar cul de ellos debe abrir la aplicacin; o, por el contrario, permitir al usuario la introduccin de un nombre o seleccin del fichero con que se quieren salvar datos.

Copyright Formacin y Soluciones Informticas 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( "Prctica EFIBS" ); ventana.setVisible( true );}}

Copyright Formacin y Soluciones Informticas 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", "Prctica 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 Formacin y Soluciones Informticas EFIBS S.A.

435

13.17 Selector de Ficheros


Del cdigo anterior, elimine el cdigo de la funcin actionPerformed y sustityalo por las siguientes lneas

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 podra utilizar un Selector de

Copyright Formacin y Soluciones Informticas EFIBS S.A.

436

13.18 Teclado
Algunas de las clases de Java proporcionan mtodos de conveniencia para permitir realizar acciones a travs del teclado. Por ejemplo, la clase AbstractButton dispone del mtodo setMnemonic(), que permite especificar el carcter, que en combinacin con una de las teclas de modificacin, hace que se ejecuten las acciones asociadas a los botones. El siguiente ejemplo es muy sencillo pero se muestra como se utilizan estos mtodos utilizando las direccionales del teclado.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

437

13.18 Teclado
public class Teclado2 extends JFrame implements ActionListener { protected JButton botones[] = new JButton[9]; public Teclado2() { super( "Prctica 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 Formacin y Soluciones Informticas 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 Formacin y Soluciones Informticas EFIBS S.A.

439

13.19 Paneles de Desplazamiento


En anteriores programas se ha utilizado la clase JScrollPane para proporcionar una forma automtica de desplazar el contenido de una ventana por parte del sistema. Esta clase permite dejar las manos libres al programador para centrarse en el cdigo de su aplicacin, sin tener que estar pendiente de tener que controlar la visibilidad de todo o parte del contenido de la ventana.

Copyright Formacin y Soluciones Informticas 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 posicin 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 Formacin y Soluciones Informticas 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 Formacin y Soluciones Informticas 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 Formacin y Soluciones Informticas EFIBS S.A.

443

13.22 Swing en ver 5.0


Dentro de las caractersticas ms relevantes est la nueva apariencia del escritorio a travs de nuevas opciones en Look and Feels. Ver imgenes. Se ha adicionado un soporte de impresin para Jtable.

El jFrame.add se ha vuelto equivalente jFrame.getContentPane().add().

Copyright Formacin y Soluciones Informticas EFIBS S.A.

444

13.23 Ejercicio Prctico


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 Formacin y Soluciones Informticas EFIBS S.A.

445

13.23 Ejercicio Prctico


Agrguele a la opcin 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 Cdula y un campo de texto . Una etiqueta Telfono y un campo de texto . Una etiqueta Direccin y un campo de texto . Un botn Ingresar. Cree un nuevo mtodo en la clase Utilitarios.java ingresarCliente() que recibe dos parmetros: Nombre de archivo. Y un objeto de tipo Cliente. llamado

Copyright Formacin y Soluciones Informticas EFIBS S.A.

446

13.23 Ejercicio Prctico


Este mtodo debe obtener el archivo y agregar al final del mismo, todos los datos del cliente recibido como parmetro y separados por coma (,). Una vez realizada esta operacin, limpie los valores de las cajas de texto de mencionado Frame, para que de esta forma se pueda realizar nuevamente el proceso de insercin. Agregue un botn Cancelar para cerrar dicha ventana.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

447

13.23 Ejercicio Prctico

Copyright Formacin y Soluciones Informticas EFIBS S.A.

448

13.23 Ejercicio Prctico


El instructor realizar una explicacin 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,direccin y telfono. Y los botones: Insertar, Modificar, Eliminar y Buscar. En el mtodo windowsOpened invoque el mtodo leer de la clase AdminArchivos que se implement en Cap13.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

449

13.23 Ejercicio Prctico


En el mtodo windowsClosed invoque el AdminArchivos que se implement en Cap13. mtodo 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 Formacin y Soluciones Informticas EFIBS S.A.

450

Nuevas Caractersticas de J2SE

Anexo

Copyright Formacin y Soluciones Informticas EFIBS S.A.

451

Anexo
1. Introduccin a Java 1. Introduccin 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 Bsicos en Java 6. Conceptos Bsicos en Java 7. Trabajando con Clases 7. Trabajando con Clases

Copyright Formacin y Soluciones Informticas EFIBS S.A.

452

Anexo
8. Utilizacin de Interfaces 8. Utilizacin de Interfaces 9. Estndares de Desarrollo 9. Estndares 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 Formacin y Soluciones Informticas EFIBS S.A.

453

Objetivos

Dar a conocer las nuevas caractersticas del J2SE. Mostrar ejemplos de algunas de las caractersticas ms relevantes.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

454

Qu incluye el J2SE (Java 2 Standard Edition) ?


La actual versin 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 ms ordenada. Da mayor seguridad. Proporciona un soporte lingstico para idiomas comunes. Nota: Los ejemplos de las nuevas caractersticas se analizarn en los siguientes captulos segn correspondan.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

455

Qu incluye el J2SE (Java 2 Standard Edition) ?


Dentro de la facilidad de desarrollo de la ver 5.0 estn las siguientes: Metadatos. Tipos genricos. Autoboxing. Ciclos aumentados. Tipos enumerados. Importaciones estticas. Enumeracin de tipos seguros.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

456

Qu incluye el J2SE (Java 2 Standard Edition) ?


Utilidades concurrentes. Auto-empaquetado Desempaquetado. Generacin de interfaces RMI ms simples. Argumentos variables. Salida formateada. Entrada mejorada.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

457

Qu incluye el J2SE (Java 2 Standard Edition) ?


Metadatos: Poseen la habilidad de asociar informacin 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 comn y que reduzcan el esfuerzo requerido para la programacin y el despliegue. Las herramientas pueden utilizar los metadatos para generar cdigo fuente adicional o proveer informacin adicional en el debugueo.

Copyright Formacin y Soluciones Informticas 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 declaracin de los mtodos no deben tener ningn parmetro o clusula de lanzamiento.

Copyright Formacin y Soluciones Informticas 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 mtodos pueden tener valores default. Pueden ser vistas como un especial tipo de modificador. Puede ser utilizado aunque se estn utilizando modificadores tales como: public, static y final.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

460

Qu incluye el J2SE (Java 2 Standard Edition) ?


Tipos Genricos: Permiten a un tipo o mtodo operar sobre objetos de varios tipos. Provee compilacin segura. Elimina el casting o conversin de tipos(ver captulo 3), que debe llevar a cabo un elemento fuera de la coleccin. 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 Formacin y Soluciones Informticas 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 Formacin y Soluciones Informticas 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 Formacin y Soluciones Informticas EFIBS S.A.

463

Qu incluye el J2SE (Java 2 Standard Edition) ?


Enumeracin de Tipos: Los enums de la nueva versin son mucho ms poderosos, ya que se pueden agregar mtodos y campos a un tipo de enum. Se pueden implementar interfaces. Los tipos enum, proveen implementacin de todos los mtodos de los objetos. Son comparables y serializables.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

464

Qu incluye el J2SE (Java 2 Standard Edition) ?


Ejemplo de implementacin 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 Formacin y Soluciones Informticas EFIBS S.A.

465

Qu incluye el J2SE (Java 2 Standard Edition) ?


Importaciones estticas: Se refiere a las constantes estticas 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 Formacin y Soluciones Informticas EFIBS S.A.

466

Qu incluye el J2SE (Java 2 Standard Edition) ?


Salidas formateadas: Se puede generar salidas con formato, a travs del uso de instrucciones tales como: %s, %5d%n,etc.. Facilita la emigracin del cdigo 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 Formacin y Soluciones Informticas 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 Formacin y Soluciones Informticas EFIBS S.A.

468

Qu incluye el J2SE (Java 2 Standard Edition) ?


Argumentos variables: Permite que mltiples argumentos, sean pasados a los mtodos como parmetros. 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 Formacin y Soluciones Informticas EFIBS S.A.

469

Qu incluye el J2SE (Java 2 Standard Edition) ?


Utilidades concurrentes: Se caracteriza por proveer un alto desempeo en la construccin de hilos. Cada uno de los hilos estn conformados por ejecutores que son los encargados de llevar a cabo ciertas tareas en el framework. Se hacen uso de los semforos como medios para dejar pasar o no el uso de algo.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

470

Qu incluye el J2SE (Java 2 Standard Edition) ?


Utilidades concurrentes (continuacin): Mayor capacidad de procesamiento. Uso ms adecuado de los hilos. Incluye cerrojos y otras primitivas de sincronizacin. Incluye clases para la manipulacin de semforos.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

471

Qu incluye el J2SE (Java 2 Standard Edition) ?


Utilidades concurrentes (continuacin): 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 travs de los mtodos getStackTrace y getAllStackTraces. En el mtodo sleep() se pueden tener tiempos menores a un milisegundo.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

472

Qu incluye el J2SE Resumen.


El principal objetivo de esta versin JDK 5 es la facilidad de desarrollo con las nuevas caractersticas como tipos de datos genricos, el loop for-each, autoboxing/unboxing, enums, varargs, static imports y anotaciones.

El JDK 5 est diseado para hacer que los programas se estructuren de manera ms ordenada, ms corta y fortificando la seguridad. Adems, proporciona un soporte lingstico para idiomas comunes.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

473

Introduccin a Java Data Base Conectivity(JDBC)

Copyright Formacin y Soluciones Informticas 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 Formacin y Soluciones Informticas EFIBS S.A.

475

1 Introduccin
1. Introduccin 1. Introduccin 2. Interfaces JDBC 2. Interfaces JDBC 3. Preparacin de la Base de Datos 3. Preparacin de la Base de Datos 4. Procesamiento de Resultados 4. Procesamiento de Resultados 5. Manipulacin de Resultados 5. Manipulacin de Resultados 6. El Objeto PreparedStatement 6. El Objeto PreparedStatement 7. Procedimientos Almacenados 7. Procedimientos Almacenados 8. Ejercicios Prcticos 8. Ejercicios Prcticos

Copyright Formacin y Soluciones Informticas EFIBS S.A.

476

1.1 Introduccin
JDBC es una especificacin de un conjunto de clases (API) y mtodos de operacin que permiten a cualquier programa Java acceder a sistemas de bases de datos de forma homognea. Incluye: El JDBC 1.0 API, que proporciona la funcionalidad bsica para el acceso de los datos. El JDBC 2.0 API suple el API bsico con caractersticas ms avanzadas y proporciona una manera estndar de tener acceso a las ltimas caractersticas objeto-relacional. Adems, el nuevo API incluye caractersticas tales como el funcionamiento mejorado de las actualizaciones de los resultados y el scrollable. Tambin incorpora la tecnologa de JDBC para aplicaciones clienteservidor con el pool de conexiones y transacciones distribuidas.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

477

1.2 JDBC 2.0 API Caractersticas


El JDBC 2.0 incluye todo lo del API del Java 2 Standard Edition, y tambin el API JDBC de extensin estndar. La API JDBC es una parte integral de la plataforma Java. Incluye manejo de conexiones a base de datos, ejecucin de sentencias SQL, store procedures, soporte de transacciones, etc. JDBC provee una interfaz de programacin nica, que independiza a las aplicaciones del motor de base de datos usado y del mecanismo de conexin. JDBC generaliza las funciones de acceso a datos ms comunes. Las clases estn contenidos en los paquetes: java.sql y javax.sql

Copyright Formacin y Soluciones Informticas EFIBS S.A.

478

1.3 JDBC 2.0 API Otras Caractersticas


Un driver JDBC es usado por la JVM para traducir las invocaciones JDBC genricas en invocaciones que la DB propietaria entiende. Los drivers son clases Java que se cargan en ejecucin. Existen drivers JDBC para la mayora de los motores de base de datos. Tpicamente, los fabricantes de bases de datos proveen el driver JDBC para su motor, aunque tambin es posible encontrarlos en Internet. Los drivers al estar escritos en Java son automticamente instalables, portables y seguros.

Copyright Formacin y Soluciones Informticas 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 Formacin y Soluciones Informticas EFIBS S.A.

480

1.5 Modelo de dos Capas


Este modelo se basa en que la conexin entre la aplicacin Java o el applet que se ejecuta en el navegador, se conectan directamente a la base de datos.

Esto significa que el driver JDBC especfico para conectarse con la base de datos, debe residir en el sistema local. La base de datos puede estar en cualquier otra mquina y se accede a ella mediante la red. Esta es la configuracin tpica Cliente/Servidor: el programa cliente enva instrucciones SQL a la base de datos, sta las procesa y enva los resultados de vuelta a la aplicacin.

Copyright Formacin y Soluciones Informticas 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 travs de la red, con la mquina 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 adems, est la ventaja adicional de que los drivers JDBC no tienen que residir en la mquina cliente, lo cual libera al usuario de la instalacin de cualquier tipo de driver.
Copyright Formacin y Soluciones Informticas EFIBS S.A.

482

1.7 Tipos de Drivers


Un driver JDBC puede pertenecer a una de cuatro categoras diferentes en cuanto a la forma de operar. Estas categoras son las siguientes: Puente JDBC ODBC. Java / Binario. 100% Java / Protocolo Nativo. 100% Java / Protocolo Independiente.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

483

1.8 Tipos de Drivers Puente JDBC-ODBC


La primera categora 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 conversin correspondiente de los resultados.

Copyright Formacin y Soluciones Informticas 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 configuracin adicional aparte de la ya existente. No obstante, tiene dos desventajas muy importantes: por un lado, la mayora de los drivers ODBC a su vez convierten sus llamadas a una librera nativa del fabricante DBMS, con lo cual la lentitud del driver JDBC-ODBC puede ser exasperante, al llevar dos capas adicionales que no aaden funcionalidad alguna y por otra parte, el puente JDBC-ODBC requiere una instalacin ODBC ya existente y configurada.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

485

1.8 Tipos de Drivers Puente JDBC-ODBC


Lo anterior implica que para distribuir con seguridad una aplicacin Java que use JDBC habra 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 solucin transitoria, porque el desarrollo de drivers totalmente en Java har innecesario el uso de estos puentes.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

486

1.9 Tipos de Driver Java/Binario


Este driver se salta la capa ODBC y habla directamente con la librera 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 an as necesita la existencia de un cdigo binario (la librera DBMS) en la mquina del cliente, con las limitaciones y problemas que esto implica.

Copyright Formacin y Soluciones Informticas 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 solucin 100% Java y por lo tanto, independiente de la mquina en la que se va a ejecutar el programa.

Copyright Formacin y Soluciones Informticas 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 configuracin 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 mayora 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 Formacin y Soluciones Informticas EFIBS S.A.

489

1.11 Tipos de Driver 100% Java/Protocolo Independiente


Esta es la opcin ms 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 Formacin y Soluciones Informticas EFIBS S.A.

490

1.11 Tipos de Driver 100% Java/Protocolo Independiente


La ventaja de este mtodo es inmediata: el programa que se ejecuta en el cliente, y aparte de las ventajas de los drivers 100% Java, tambin presenta la independencia respecto al sistema de bases de datos que se encuentra en el servidor.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

491

1.11 Tipos de Driver 100% Java/Protocolo Independiente


De esta forma, si una empresa distribuye una aplicacin 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 aplicacin, sino que nicamente debe reconfigurar la aplicacin 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 mtodo ms eficiente de acceso a BD.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

492

1.11 Tipos de Driver 100% Java/Protocolo Independiente


No requiere de ninguna librera adicional. La mayora 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 clsicas con los conceptos de programacin orientada a objetos.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

493

2 Interfaces JDBC
1. Introduccin 1. Introduccin 2. Interfaces JDBC 2. Interfaces JDBC 3. Preparacin de la Base de Datos 3. Preparacin de la Base de Datos 4. Procesamiento de Resultados 4. Procesamiento de Resultados 5. Manipulacin de Resultados 5. Manipulacin de Resultados 6. El Objeto PreparedStatement 6. El Objeto PreparedStatement 7. Procedimientos Almacenados 7. Procedimientos Almacenados 8. Ejercicios Prcticos 8. Ejercicios Prcticos
Copyright Formacin y Soluciones Informticas 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 interrelacin entre estas clases segn el modelo de objetos de la especificacin de JDBC.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

495

2.1 Interfaces JDBC

Copyright Formacin y Soluciones Informticas 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 aplicacin puede utilizar DriverManager para obtener un objeto de tipo conexin, Connection, con una base de datos. La conexin se especifica siguiendo una sintaxis basada en la especificacin ms 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 an ms el protocolo.
jdbc:postgresql//desarrollo:5432/nomina

Copyright Formacin y Soluciones Informticas EFIBS S.A.

497

2.3 Descripcin de Clases e Interfaces


La siguiente tabla muestra la lista de clases e interfaces junto con una breve descripcin:

Clase / Interface Driver DriverManager DriverPropertyInfo Connection

Descripcin 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 informacin acerca de un driver. Representa una conexin con una base de datos. Una aplicacin puede tener ms de una conexin a ms de una base de datos Proporciona informacin acerca de una Base de Datos, como las tablas que contiene, etc.

DatabaseMetadata

Copyright Formacin y Soluciones Informticas EFIBS S.A.

498

2.3 Descripcin de Clases e Interfaces


Clase / Interface Statement PreparedStatement CallableStatement ResultSet ResultSetMetadata Descripcin Permite ejecutar sentencias SQL sin parmetros Permite ejecutar sentencias SQL con parmetros de entrada Permite ejecutar sentencias SQL con parmetros de entrada y salida, tpicamente procedimientos almacenados Contiene las filas o registros obtenidos al ejecutar un SELECT Permite obtener informacin sobre un ResultSet, como el nmero de columnas, sus nombres, etc.

Copyright Formacin y Soluciones Informticas 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 Formacin y Soluciones Informticas 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 Formacin y Soluciones Informticas EFIBS S.A.

501

3. Preparacin de la Base de Datos


1. Introduccin 1. Introduccin 2. Interfaces JDBC 2. Interfaces JDBC 3. Preparacin de la Base de Datos 3. Preparacin de la Base de Datos 4. Procesamiento de Resultados 4. Procesamiento de Resultados 5. Manipulacin de Resultados 5. Manipulacin de Resultados 6. El Objeto PreparedStatement 6. El Objeto PreparedStatement 7. Procedimientos Almacenados 7. Procedimientos Almacenados 8. Ejercicios Prcticos 8. Ejercicios Prcticos
Copyright Formacin y Soluciones Informticas EFIBS S.A.

502

3.1 Preparacin de la Base de Datos


Una vez conocidas las principales caractersticas de un driver JDBC, nos concentraremos en trabajar con conexiones a la base de datos Postgresql. Antes de iniciar con la manipulacin 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 configuracin de la base de datos. (var/lib/pgsql/data/) tcpip_socket = true

Copyright Formacin y Soluciones Informticas EFIBS S.A.

503

3.1 Preparacin de la BD
Una vez localizado este archivo, se debe modificar el siguiente parmetro para que acepte dichas conexiones: Tipo BaseDatos usuario DireccionIP Mascara Metodo

Tambin, se debe modificar el archivo pg_hba.conf para autenticar al cliente que realizar la peticin de comunicacin. host all all 10.1.1.205 255.255.255.0 trust

Copyright Formacin y Soluciones Informticas 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 comunicacin 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 conexin. Por ejemplo:
/var/opt/SUNWappserver/domains/domain1/efibs/lib/

Copyright Formacin y Soluciones Informticas 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 mtodos disponibles para realizar este proceso y depende del cdigo que desee utilizar: En el primer mtodo el cdigo carga implcitamente el driver utilizando el mtodo Class.forName(). Para PostgreSQL se realiza de la siguiente manera:
Class.forName("org.postgresql.Driver");

Copyright Formacin y Soluciones Informticas EFIBS S.A.

506

3.3 Cargando el Driver


Esto carga el driver, y mientras lo carga, el driver automticamente se registrara con el JDBC. El mtodo forName() puede lanzar la excepcin ClassNotFoundException en caso de que el driver no este disponible. Este mtodo es el mas comnmente utilizado, pero tiene la desventaja que ata el cdigo a una base de datos en particular, por este motivo surge el segundo mtodo como solucin alterna.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

507

3.3 Cargando el Driver


El segundo mtodo pasa como parmetro 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 inicializacin. Por lo tanto, este mtodo es el mejor a utilizar porque permite que su cdigo sea utilizado con otros paquetes de la base de datos sin necesitar recompilar el cdigo.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

508

3.3 Cargando el Driver


Por el momento no nos preocupemos como enviar la direccin (Url) de donde se realizar la conexin, ya que ser tratado ms delante de este manual

Cuando desde su cdigo intenta abrir una conexin, y no se puede establecer la comunicacin, se lanzara la excepcin SQLException. Esto puede ser producto de que el driver no se encuentra en el CLASSPATH o que los parmetros de entrada son errneos.

Copyright Formacin y Soluciones Informticas 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 conexin:
jdbc:postgresql:database jdbc:postgresql://host/database jdbc:postgresql://host:port/database

Copyright Formacin y Soluciones Informticas EFIBS S.A.

510

3.4 Conectando a la Base de Datos


donde: host Port Es el nombre del Servidor, por defecto es localhost Nmero de Puerto donde el servidor de la base de datos escucha. Por defecto en PostgreSQL es el puerto nmero 5432. Nombre de la Base de Datos

Database

Copyright Formacin y Soluciones Informticas 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 conexin (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 conexin, un mtodo importante para cerrar la conexin con la base es el close();
db.close();

Copyright Formacin y Soluciones Informticas EFIBS S.A.

512

4 Procesamiento de Resultados
1. Introduccin 1. Introduccin 2. Interfaces JDBC 2. Interfaces JDBC 3. Preparacin de la Base de Datos 3. Preparacin de la Base de Datos 4. Procesamiento de Resultados 4. Procesamiento de Resultados 5. Manipulacin de Resultados 5. Manipulacin de Resultados 6. El Objeto PreparedStatement 6. El Objeto PreparedStatement 7. Procedimientos Almacenados 7. Procedimientos Almacenados 8. Ejercicios Prcticos 8. Ejercicios Prcticos
Copyright Formacin y Soluciones Informticas 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 declaracin JDBC son creados a partir de una instancia de una conexin Se utiliza el mtodo createStatement(), este proporciona un contexto para ejecutar declaraciones SQL.

Copyright Formacin y Soluciones Informticas 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 implementacin del mtodo createStatement();

Copyright Formacin y Soluciones Informticas EFIBS S.A.

515

4.2 Ejecutar una declaracin SQL


La interfaz Statement proporciona tres mtodos 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 nmero 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 Formacin y Soluciones Informticas EFIBS S.A.

516

4.3 Ejecutando una Sentencia


A continuacin 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 Formacin y Soluciones Informticas 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 mtodos para recuperar los valores de las columnas.

col1

col2

Copyright Formacin y Soluciones Informticas EFIBS S.A.

518

4.5 Procesando resultados de la Sentencia


El mtodo executeQuery() retorna un ResultSet Utilizando el mtodo next() en un ciclo se puede interactuar a travs de las filas. Utilizando los mtodos getXXX() se obtienen los valores de las columnas seleccionadas. Estos valores se pueden obtener por medio del nombre de las columnas o su posicin en las sentencia.
stmt = conn.createStatement(); ResultSet rset = stmt.executeQuery("SELECT nombre FROM persona"); while (rset.next()) { System.out.println (rset.getString(" nombre")); }

Copyright Formacin y Soluciones Informticas EFIBS S.A.

519

4.6 Cerrando Objetos


Para cada uno de los recursos utilizados es explcitamente necesario realizar el cierre para cada uno de ellos. Esto se realiza invocando al respectivo mtodo close().
Connection conn = ...; Statement stmt = ...; ResultSet rset = stmt.executeQuery("SELECT nombre FROM persona"); ... // Cierre de Objetos rset.close(); stmt.close(); conn.close(); ...

Copyright Formacin y Soluciones Informticas 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 Formacin y Soluciones Informticas 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 Formacin y Soluciones Informticas 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 Formacin y Soluciones Informticas 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 Formacin y Soluciones Informticas EFIBS S.A.

524

5 Manipulacin de Resultados
1. Introduccin 1. Introduccin 2. Interfaces JDBC 2. Interfaces JDBC 3. Preparacin de la Base de Datos 3. Preparacin de la Base de Datos 4. Procesamiento de Resultados 4. Procesamiento de Resultados 5. Manipulacin de Resultados 5. Manipulacin de Resultados 6. El Objeto PreparedStatement 6. El Objeto PreparedStatement 7. Procedimientos Almacenados 7. Procedimientos Almacenados 8. Ejercicios Prcticos 8. Ejercicios Prcticos

Copyright Formacin y Soluciones Informticas EFIBS S.A.

525

5.1 Navegando en un ResultSet


SELECT col1, col2 FROM t1;
Llama JDBC Comandos Database Driver DDBB

Navegacin en el Resultado

Copyright Formacin y Soluciones Informticas EFIBS S.A.

526

5.2 Configurando la navegacin de un ResultSet


Statement stmt = conn.createStatement (ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);

ResultSet rset = stmt.executeQuery ("SELECT id, nombre FROM persona");

Copyright Formacin y Soluciones Informticas 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 Formacin y Soluciones Informticas EFIBS S.A.

528

5.4 Actualizando el ResultSet


Navegando localmente en la fila por actualizar Actualizando los valores utilizando los mtodos 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 Formacin y Soluciones Informticas EFIBS S.A.

529

6 El Objeto PreparedStatement
1. Introduccin 1. Introduccin 2. Interfaces JDBC 2. Interfaces JDBC 3. Preparacin de la Base de Datos 3. Preparacin de la Base de Datos 4. Procesamiento de Resultados 4. Procesamiento de Resultados 5. Manipulacin de Resultados 5. Manipulacin de Resultados 6. El Objeto PreparedStatement 6. El Objeto PreparedStatement 7. Procedimientos Almacenados 7. Procedimientos Almacenados 8. Ejercicios Prcticos 8. Ejercicios Prcticos

Copyright Formacin y Soluciones Informticas 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 ms de una vez. Hereda de Statement. Sujeta los SQLs precompilados. El Statement es compilado cada vez que se invoca, a lo contrario de PreparedStatement, el cual es ms eficiente porque solo se compila la primera vez que es invocado.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

531

6.2 Crear un PreparedStatement


Primero se debe de registrar el driver y crear la conexin a la base de datos. Luego se crea una variable de tipo PreparedStatement, identificando las variables que se enviarn como parmetros 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 Formacin y Soluciones Informticas 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 Formacin y Soluciones Informticas EFIBS S.A.

533

7 Procedimientos Almacenados
1. Introduccin 1. Introduccin 2. Interfaces JDBC 2. Interfaces JDBC 3. Preparacin de la Base de Datos 3. Preparacin de la Base de Datos 4. Procesamiento de Resultados 4. Procesamiento de Resultados 5. Manipulacin de Resultados 5. Manipulacin de Resultados 6. El Objeto PreparedStatement 6. El Objeto PreparedStatement 7. Procedimientos Almacenados 7. Procedimientos Almacenados 8. Ejercicios Prcticos 8. Ejercicios Prcticos
Copyright Formacin y Soluciones Informticas EFIBS S.A.

534

7.1 Procedimientos Almacenados


Para la manipulacin 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 parmetros cada vez que se ejecuta. Los procedimientos almacenados directamente en la base de datos. son escritos y compilados

Copyright Formacin y Soluciones Informticas EFIBS S.A.

535

7.2 Creacin de un CallableStatement


Primero se debe de registrar el driver y crear la conexin a la base de datos. Luego se crea una variable de tipo CallableStatemente, identificando las variables que se enviarn como parmetros 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 parmetros de Salida


cstmt.registerOutParameter(index,param_Type);

Copyright Formacin y Soluciones Informticas EFIBS S.A.

536

7.2 Creacin de un CallableStatement


Enviar los parmetros de entrada
cstmt.setXXX(index, value);

Ejecutar el estatuto
cstmt.execute();

Obtener los parmetros 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 Formacin y Soluciones Informticas EFIBS S.A.

537

8 Ejercicios Prcticos
1. Introduccin 1. Introduccin 2. Interfaces JDBC 2. Interfaces JDBC 3. Preparacin de la Base de Datos 3. Preparacin de la Base de Datos 4. Procesamiento de Resultados 4. Procesamiento de Resultados 5. Manipulacin de Resultados 5. Manipulacin de Resultados 6. El Objeto PreparedStatement 6. El Objeto PreparedStatement 7. Procedimientos Almacenados 7. Procedimientos Almacenados 8. Ejercicios Prcticos 8. Ejercicios Prcticos
Copyright Formacin y Soluciones Informticas EFIBS S.A.

538

8.1 Ejercicios Prcticos


El instructor le explicar la siguiente prctica:
Cree un paquete llamado: org.efibs.sistemaDeOrdenes.BD dentro del paquete, cree una clase que se llame Servicio Atributos: Objeto de tipo Conexin Mtodos: 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 Formacin y Soluciones Informticas EFIBS S.A.

539

8.1 Ejercicios Prcticos


Mtodos: 1) insertarCliente(recibe: objeto de tipo cliente no retorna ningn tipo (void)) Usar CallableStatement. 2) actualizarCliente(recibe: objeto de tipo cliente no retorna ningn 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 Formacin y Soluciones Informticas EFIBS S.A.

540

8.1 Ejercicios Prcticos


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, telfono y direccin. Liste los clientes. Busque el Cliente al cual a caba de hacerle cambios, muestre su informacin. Repita los pasos anteriores pero para producto Recuerde: documente las lneas que ya no ocupe.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

541

INTRODUCCIN A JAVA SERVLETS

Copyright Formacin y Soluciones Informticas 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 prctica los conceptos anteriores.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

543

1 Introduccin a Html
1. Introduccin a Html 1. Introduccin a Html 2. Arquitectura n Capas 2. Arquitectura n Capas 3. Definicin de Servlets Java 3. Definicin de Servlets Java 4. Arquitectura del Paquete Servlet 4. Arquitectura del Paquete Servlet 5. Mtodos Bsicos del Servlet 5. Mtodos Bsicos 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. Programacin de Servlets 8. Programacin de Servlets 9. Manejo del Objeto Session 9. Manejo del Objeto Session 10. Manejo del Objeto Cookie 10. Manejo del Objeto Cookie
Copyright Formacin y Soluciones Informticas EFIBS S.A.

544

1.1 Introduccin a Html


HTML es un lenguaje sencillo pensado para presentar informacin en la WWW. HTML (HyperText Markup Languaje), como su nombre indica es un lenguaje de marcas para la creacin de hipertextos. Por hipertexto entenderemos texto con una presentacin agradable, con inclusin de elementos multimedia (grficos, video, audio) y con la presencia de hiperenlaces que permiten relacionar otras fuentes de informacin en documentos hipertextos.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

545

1.1 Introduccin 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 definirn la estructura lgica del documento. Por tanto un documento HTML constar de texto que ser el contenido, la informacin del documento y de instrucciones HTML que resaltarn este contenido y le darn un formato fcil y agradable de leer y con la posibilidad de relacionar documentos y fuentes de informacin mediante hiperenlaces o hipervnculos. En este capitulo se definen las etiquetas bsicas y las estructuras de datos que forman el lenguaje.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

546

1.2 Estructuras bsicas 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 Formacin y Soluciones Informticas EFIBS S.A.

547

1.3 Comentarios en Html


Para insertar comentarios dentro de un documento HTML utilizaremos la etiqueta especial <!--, definindose un comentario de la forma:

<!-- Esto es un comentario -->

Copyright Formacin y Soluciones Informticas 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 incluirn las definiciones generales que afectarn a todo el documento. Todas sus etiquetas son opcionales y se utilizarn 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 continuacin se citan los distintos componentes que pueden formar la cabecera de un documento HTML.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

549

1.4 Cabecera en Html


<TITLE>: Ttulo del documento El ttulo 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 pgina en los bookmarks (marcadores o tambin conocidos como favoritos ) y las history list (lista de documentos accedidos) y tambin se utiliza por algunos servidores de bsqueda como resultado de una bsqueda para poder intuir el contenido del documento. El titulo deber guardar relacin 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 Formacin y Soluciones Informticas EFIBS S.A.

550

1.4 Cabecera en Html


<META>: Indicadores del documento Un meta tag es un elemento del encabezado que registra informacin a cerca de la pgina actual, tal como : el autor, copyright, o palabras claves (keywords). Estos tags pueden tambin ser muy tiles para dar informacin al servidor, tal como: fecha de expiracin, intervalos de refresco, y utilidades para mejorar la bsqueda hacia esta pgina. Los meta se componen de la siguiente manera:
Attribute ( Atributo ) : especifica si la etiqueta de la meta contiene la informacin descriptiva sobre la pgina (el nombre) o HTTP ttulo informacin (el http-equiv) Value ( Valor ) : especifica el tipo de informacin que usted est proporcionando en esta etiqueta. Algunos valores, como la descripcin, las palabras claves, y el refresco. Content (contenido) : informacin complementaria o de utilidad, que puede servir como parmetro al meta.

Copyright Formacin y Soluciones Informticas 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 pgina, en este caso, contenido en formato HTML, utilizando el set de caracteres iso-8859-1 Muchos robot motores-de-bsqueda (programas que automticamente navegan el web recopilando informacin para indexar en el motor de bsqueda) leen el contenido del meta tag KeyWord y usan la informacin para indexar las pginas 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 pgina, en vez de utilizar un trozo del texto de ella.

<meta name="description" content="Capacitacin de tecnologas de internet, lenguajes de programacin para el web, estudio de servicios en la internet"> <meta http-equiv="refresh" content="5;URL=http://www. efibs.com">

Se indica el nmero 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 transicin entre uno y otro documento ser inmediata. Si no se indica URL el documento actual se refrescar. Este sistema es altamente utilizado en la implementacin de la webcam. Pues una misma pgina se debe estar refrescando, para mostrar la nueva fotografa.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

552

1.5 Creacin de Tablas


Permite la representacin de datos por filas y columnas, en forma tabular. La definicin es muy flexible indicando solo los elementos que forman cada fila y columna, calculndose de forma automtica el tamao que deben tener las celdas. En una tabla podemos introducir todo tipo de elementos del lenguaje HTML como imgenes, enlaces, texto, listas, cabeceras, formularios, etc.
<TABLE> Definicin de la Tabla Para definir una tabla usaremos la etiqueta <TABLE>, que tiene el siguiente formato: <TABLE BORDER="tamao del borde" > ... Definicin de la tabla ... </TABLE>

En la etiqueta inicial TABLE definiremos los atributos que afectarn a toda la tabla, todos los atributos son opcionales. Todo lo que se incluya dentro de la instruccin de tabla se considerar como tal, pudiendo definir tablas anidadas (tablas dentro de tablas).

Copyright Formacin y Soluciones Informticas 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 Formacin y Soluciones Informticas EFIBS S.A.

554

1.7 Formularios
Los formularios son plantillas que permiten la creacin de documentos HTML con peticiones de datos. La principal utilidad de los formularios es la posibilidad de crear cuestionarios, encuestas, pginas de comentarios o cualquier documento en la que se desee una interaccin por parte del usuario. Se podrn definir distintos tipos de recuadros de dialogo, botones de seleccin, mens de mltiples opciones, ... Para permitir obtener los datos de una manera ms intuitiva. <FORM> Definicin de formularios

Copyright Formacin y Soluciones Informticas EFIBS S.A.

555

1.7 Formularios
Existe una instruccin HTML para la creacin 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 definirn los distintos elementos de peticin de datos. Estas instrucciones que se explicarn a continuacin definirn los tipos de botones, cajas de dialogo y ventanas para la introduccin de datos. Y definirn las variables que almacenarn los datos introducidos por el usuario. Estas etiquetas se incluirn entre la de definicin del formulario y la etiqueta de final de formulario.

Copyright Formacin y Soluciones Informticas 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 algn lenguaje de programacin. A este programa se pasar como parmetros los datos introducidos en el formulario y retornar un cdigo HTML que se mostrar tras procesar el formulario. METHOD: Indica el protocolo usado para el envo de los datos. Con POST enva los datos en la entrada estndar del programa que trata el formulario y con GET los datos se pasan por parmetro, en la lnea de comandos, al programa. El mtodo de uso ms normal ser POST. Una vez definidas las caractersticas globales del formulario incluiremos los distintos botones y cajas de dialogo que lo constituyen.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

557

1.8 Atributos de las Etiquetas


METHOD: Dentro de la instruccin del formulario podrn 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 Formacin y Soluciones Informticas EFIBS S.A.

558

1.8 Atributos de las Etiquetas


<INPUT> Entrada bsica de datos La etiqueta INPUT se utiliza para definir gran variedad de tipos de campos de entrada de datos. Por lo general sern entradas de texto corto (a lo sumo una frase) o opciones. El formato bsico es el siguiente: Sintaxis: < INPUT TYPE = ( TEXT | PASSWORD | CHECKBOX | RADIO | HIDDEN | SUBMIT | IMAGE | RESET ) NAME = "Variable que toma el valor" VALUE = "Valor de Inicializacin" > Ejemplo: < INPUT TYPE=TEXT NAME="variable" VALUE="valor inicial" SIZE="tamao" MAXLENGTH="longitud mxima" >

Copyright Formacin y Soluciones Informticas EFIBS S.A.

559

1.8 Atributos de las Etiquetas


<TEXTAREA> Texto en mltiples lneas Permite la introduccin de un texto que puede abarcar varias lneas, introduciendo este en forma de prrafo. 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 Formacin y Soluciones Informticas EFIBS S.A.

560

1.8 Atributos de las Etiquetas


<SELECT> Eleccin entre mltiples opciones Se usa para mens simple o mltiples. Define mens de tipo pop-up (men de barras) y ofrece una alternativa ms compacta al uso de botones RADIO o CHECKBOX. Su formato es el siguiente:
<SELECT NAME="variable"> < OPTION SELECTED VALUE=valor1> Opcin Primera < OPTION VALUE=valor2> Opcin Segunda ... < OPTION VALUE=valorn> Opcin Ensima</SELECT>

Si se desea que sea un men mltiple, se deber incluir el atributo MULTIPLE en la etiqueta de SELECT, en este caso se mostrarn todas las opciones en forma de tabla, en el otro caso se mostrar la opcin activa y un botn para poder modificar esta opcin. En ambos casos solo podr seleccionarse una de las opciones. Cuando se enva el resultado del formulario la variables NAME tomar el valor de la opcin que este activa.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

561

1.8 Atributos de las Etiquetas


<SELECT> Ejemplos <SELECT NAME="variable"> <OPTION VALUE=1> Opcin Primera <OPTION SELECTED VALUE=2> Opcin Segunda <OPTION VALUE=3> Opcin Tercera </SELECT>

<SELECT NAME="variable" MULTIPLE> <OPTION VALUE=1> Opcin Primera <OPTION SELECTED VALUE=2> Opcin Segunda <OPTION VALUE=3> Opcin Tercera </SELECT>

Copyright Formacin y Soluciones Informticas EFIBS S.A.

562

1.9 Ejercicio Prctico

Copyright Formacin y Soluciones Informticas EFIBS S.A.

563

1.9 Ejercicio Prctico


Crear una pgina web (html) en la cual se debe de poner en prctica la utilizacin de formularios y tablas en formato html. El nombre que se le dar al formulario es de cliente, y su accin por el momento ser un signo de numeral (#) y su mtodo ser de tipo GET. Verifique los resultados de los puntos anteriores, es importante observar como viajan los datos en base al mtodo utilizado ya que el siguiente paso es modificar el mtodo del formulario de tipo POST y verificar nuevamente. Como informacin adicional del curso se presenta a continuacin un script para realizar validaciones a nivel de formularios, para que de esta manera la informacin que viaje al realizar la accin sea valida antes de ser procesada.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

564

1.9 Ejercicio Prctico


<head> <script languaje=javascript> function validar(cliente){ if (cliente.id.value == "") { alert("Por favor ingrese la identificacin del usuario"); cliente.id.focus(); return; } cliente.submit(); </script> </head>

Copyright Formacin y Soluciones Informticas EFIBS S.A.

565

1.9 Ejercicio Prctico


Una vez validados los campos requeridos, se debe de invocar la funcin validacin, en el momento de que el usuario de click sobre el botn de procesar orden. La manera en que se invocar esta funcin ser utilizando el evento onclick en el botn de submit de la siguiente manera:

<INPUT NAME =accion TYPE="BUTTON" VALUE=Insertar onClick="return validar(this.form)">

Copyright Formacin y Soluciones Informticas EFIBS S.A.

566

2 Arquitectura n Capas
1. Introduccin a Html 1. Introduccin a Html 2. Arquitectura n Capas 2. Arquitectura n Capas 3. Definicin de Servlets Java 3. Definicin de Servlets Java 4. Arquitectura del Paquete Servlet 4. Arquitectura del Paquete Servlet 5. Mtodos Bsicos del Servlet 5. Mtodos Bsicos 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. Programacin de Servlets 8. Programacin de Servlets 9. Manejo del Objeto Session 9. Manejo del Objeto Session 10. Manejo del Objeto Cookie 10. Manejo del Objeto Cookie
Copyright Formacin y Soluciones Informticas EFIBS S.A.

567

2.1 Arquitectura n Capas


La arquitectura n Capas es una metodologa para el diseo de sistemas distribuidos.

Consiste en dividir la funcionalidad del sistema en capas lgicas para interactuar entre ellas a alto nivel. Dichas capas lgicas pueden ser encapsuladas como componentes.

Esta funcionalidad provoca un gran dinamismo en la gestin de la informacin requerida (Presentacin, Negocio, Datos).

Copyright Formacin y Soluciones Informticas 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 inversin en software se puede mantener mientras el sistema crece.

Las n capas pueden estar contenidas en una misma mquina o tener una diferente para cada capa. Tambin pueden ser configuradas en cluster de aplicaciones.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

569

2.2 Ventajas de la Arquitectura por Capas


Al separar la capa de presentacin de las dems capas, un cambio de diseo no supone el cambio de toda la aplicacin. Se pueden reutilizar las aplicaciones ya existentes para diferentes dispositivos slo cambiando la capa de presentacin, 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 diseo para asegurar que la arquitectura planteada es la idnea y, como consecuencia, se obtiene una mayor complejidad de la aplicacin en cuanto a nmero de componentes y comunicacin entre ellos.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

570

2.3 Representacin Grfica

Copyright Formacin y Soluciones Informticas EFIBS S.A.

571

3 Definicin de Servlets Java


1. Introduccin a Html 1. Introduccin a Html 2. Arquitectura n Capas 2. Arquitectura n Capas 3. Definicin de Servlets Java 3. Definicin de Servlets Java 4. Arquitectura del Paquete Servlet 4. Arquitectura del Paquete Servlet 5. Mtodos Bsicos del Servlet 5. Mtodos Bsicos 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. Programacin de Servlets 8. Programacin de Servlets 9. Manejo del Objeto Session 9. Manejo del Objeto Session 10. Manejo del Objeto Cookie 10. Manejo del Objeto Cookie
Copyright Formacin y Soluciones Informticas EFIBS S.A.

572

3.1 Definicin de Servlets Java


Los Servlets son la respuesta de la tecnologa Java a la programacin CGI (Common Gateway Interfase). Son programas que se ejecutan en un servidor Web y construyen pginas Web dinmicamente. 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 grfica de usuario.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

573

3.1 Definicin de Servlets Java


Se debern utilizar pginas dinmicas cuando:
El contenido de la pgina es a peticin del cliente, es decir, la pgina Web est basada en datos enviados por el usuario. Las pginas de resultados de los motores de bsqueda se generan de esta forma, y los programas que procesan pedidos desde sites de comercio electrnico tambin. Los datos cambian frecuentemente. Un informe sobre el tiempo o las pginas de cabeceras de noticias se podran construir dinmicamente, por ejemplo devolviendo una pgina previamente construida y luego actualizndola, con lo que slo cambiara el contenido, no el diseo. La pgina Web usa informacin de bases de datos corporativas u otras fuentes. Por ejemplo una pgina web construida para una tienda online a partir de los datos de los precios actuales y el nmero de artculos en stock.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

574

3.2 Otros usos de los Servlets


Permitir la colaboracin entre usuarios. Un servlet puede manejar mltiples 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 lgico en varios servidores, de acuerdo con los tipos de tareas o la organizacin compartida. Presentacin Lgica 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 Formacin y Soluciones Informticas EFIBS S.A.

575

3.3 Orientacin de los Servlets


Los Servlets son mdulos que extienden los servidores web y que estn orientados a resolver peticin-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 estn utilizando ampliamente dentro de servidores HTTP.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

576

3.4 Ejercicio Prctico


El objetivo de esta prctica, 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 especficamente proyecto WEB. Pngale un nombre representativo a el content type (carpeta donde se publicar la pgina).

Copyright Formacin y Soluciones Informticas EFIBS S.A.

577

3.4 Ejercicio Prctico


El objetivo de esta prctica, 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 finalizacin.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

578

3.4 Ejercicio Prctico


El objetivo de esta prctica, es que el estudiante aprenda a crear html desde el IDE. Siga las instrucciones del instructor para poder tomar la pgina de mantenimiento de clientes hecha en la prctica anterior e incorporarla en el IDE

Siga la siguiente ruta y agregue el cdigo html hecho en la prctica anterior.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

579

4 Arquitectura del Paquete Servlet


1. Introduccin a Html 1. Introduccin a Html 2. Arquitectura n Capas 2. Arquitectura n Capas 3. Definicin de Servlets Java 3. Definicin de Servlets Java 4. Arquitectura del Paquete Servlet 4. Arquitectura del Paquete Servlet 5. Mtodos Bsicos del Servlet 5. Mtodos Bsicos 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. Programacin de Servlets 8. Programacin de Servlets 9. Manejo del Objeto Session 9. Manejo del Objeto Session 10. Manejo del Objeto Cookie 10. Manejo del Objeto Cookie
Copyright Formacin y Soluciones Informticas 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 continuacin. La interfaz Servlet. La abstraccin central en el API Servlet es la interfaz Servlet. Todos los servlets implementan esta interfaz, bien directamente o, ms comnmente, extendiendo una clase que lo implemente como HttpServlet. La interfaz Servlet declara pero no implementa mtodos que manejan el Servlet y su comunicacin con los clientes. Al programar un Servlet se han de codificar algunos de esos mtodos.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

581

4.1 Arquitectura del Paquete Servlet


Interaccin con el cliente Cuando un servlet acepta una llamada de un cliente, recibe dos objetos, Un ServletRequest, que encapsula la comunicacin desde el cliente al servidor. Un ServletResponse, que encapsula la comunicacin de vuelta desde el servlet hacia el cliente. ServletRequest y ServletResponse son interfaces definidas en el package javax.servlet.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

582

4.1 Arquitectura del Paquete Servlet


La Interfaz ServletRequest La interfaz ServletRequest permite al servlet acceder a : Informacin referente a los nombres de los parmetros pasados por el cliente, el protocolo (esquema) que est siendo utilizado por el cliente, y los nombres del host remote que ha realizado la peticin 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 mtodos POST y PUT de HTTP. Las interfaces, que extienden de la interfaz ServletRequest permiten al servlet recibir ms datos especficos del protocolo. Por ejemplo, la interfaz HttpServletRequest contiene mtodos para acceder a informacin de cabecera especfica HTTP.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

583

4.1 Arquitectura del Paquete Servlet


La interfaz ServletResponse La interfaz ServletResponse le da al servlet los mtodos 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 travs del cual el servlet puede responder datos. Las interfaces que extienden de ServletResponse le dan a los servlets ms capacidades especficas del protocolo. Por ejemplo, la interfaz HttpServletResponse contiene mtodos que permiten al servlet manipular informacin de cabecera especfica HTTP.

Copyright Formacin y Soluciones Informticas 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 bsico. Para el caso de los servlets http, se tienen algunos objetos adicionales que proporcionan: Capacidades de seguimiento de sesin. Posibilidades de mantenimiento del estado entre el servlet y el cliente persistente a travs de mltiples conexiones durante un periodo de tiempo. para cliente. Capacidades de gestin de cookies. El API cookie se utiliza guardar y recuperar datos dentro del

Copyright Formacin y Soluciones Informticas EFIBS S.A.

585

5 Mtodos Bsicos del Servlet


1. Introduccin a Html 1. Introduccin a Html 2. Arquitectura n Capas 2. Arquitectura n Capas 3. Definicin de Servlets Java 3. Definicin de Servlets Java 4. Arquitectura del Paquete Servlet 4. Arquitectura del Paquete Servlet 5. Mtodos Bsicos del Servlet 5. Mtodos Bsicos 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. Programacin de Servlets 8. Programacin de Servlets 9. Manejo del Objeto Session 9. Manejo del Objeto Session 10. Manejo del Objeto Cookie 10. Manejo del Objeto Cookie
Copyright Formacin y Soluciones Informticas EFIBS S.A.

586

5.1 Mtodos Bsicos del Servlet


Init(): El cdigo de este mtodo se ejecuta solamente cuando se carga el servlet, es decir, se ejecuta una sola vez independientemente del nmero de veces que llamemos al servlet. Service(): El cdigo se ejecuta en respuesta a las peticiones del cliente (GET, POST, PUT, DELETE,...) Destroy(): Cuando el servlet es "desmontado" se invoca este mtodo. Es utilizado para hacer limpieza. DoGet() y doPost(): Son mtodos idnticos excepto que uno atiende las peticiones GET y el otro las POST. Son refinamientos del mtodo service() en los HttpServlets.

Copyright Formacin y Soluciones Informticas 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() { // Cdigo antes de destruir el Servlet }

out.println("</body>"); out.println("</html>"); */ out.close(); }


}

Copyright Formacin y Soluciones Informticas EFIBS S.A.

588

5.3 Ejercicio Prctico


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 opcin

Modifique el mtodo processRequest del servlet, el cual forma una pgina html con un mensaje de bienvenida. Compile el servlet. Ejecutar el Servlet: Para realizar la ejecucin 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 Formacin y Soluciones Informticas EFIBS S.A.

589

5.3 Ejercicio Prctico


A continuacin se presenta la estructura e informacin 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 Formacin y Soluciones Informticas EFIBS S.A.

590

5.3 Ejercicio Prctico


<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 Formacin y Soluciones Informticas EFIBS S.A.

591

6. Diagrama UML del Objeto Servlet


1. Introduccin a Html 1. Introduccin a Html 2. Arquitectura n Capas 2. Arquitectura n Capas 3. Definicin de Servlets Java 3. Definicin de Servlets Java 4. Arquitectura del Paquete Servlet 4. Arquitectura del Paquete Servlet 5. Mtodos Bsicos del Servlet 5. Mtodos Bsicos 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. Programacin de Servlets 8. Programacin de Servlets 9. Manejo del Objeto Session 9. Manejo del Objeto Session 10. Manejo del Objeto Cookie 10. Manejo del Objeto Cookie
Copyright Formacin y Soluciones Informticas EFIBS S.A.

592

6.1 Diagrama UML del Objeto Servlet


En esta imagen vemos un diagrama UML con los mtodos ms utilizados y la jerarqua bsica de las clases que implementan la interfaz Servlet.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

593

7. Ciclo de Vida de un Servlet


1. Introduccin a Html 1. Introduccin a Html 2. Arquitectura n Capas 2. Arquitectura n Capas 3. Definicin de Servlets Java 3. Definicin de Servlets Java 4. Arquitectura del Paquete Servlet 4. Arquitectura del Paquete Servlet 5. Mtodos Bsicos del Servlet 5. Mtodos Bsicos 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. Programacin de Servlets 8. Programacin de Servlets 9. Manejo del Objeto Session 9. Manejo del Objeto Session 10. Manejo del Objeto Cookie 10. Manejo del Objeto Cookie
Copyright Formacin y Soluciones Informticas 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 ms peticiones de cliente. El servidor elimina el servlet. (Algunos servidores slo cumplen este paso cuando se desconectan).
SE CARGA SE INICIALIZA SE EJECUTA SE DESTRUYE

Copyright Formacin y Soluciones Informticas EFIBS S.A.

595

8. Programacin de Servlets
1. Introduccin a Html 1. Introduccin a Html 2. Arquitectura n Capas 2. Arquitectura n Capas 3. Definicin de Servlets Java 3. Definicin de Servlets Java 4. Arquitectura del Paquete Servlet 4. Arquitectura del Paquete Servlet 5. Mtodos Bsicos del Servlet 5. Mtodos Bsicos 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. Programacin de Servlets 8. Programacin de Servlets 9. Manejo del Objeto Session 9. Manejo del Objeto Session 10. Manejo del Objeto Cookie 10. Manejo del Objeto Cookie
Copyright Formacin y Soluciones Informticas EFIBS S.A.

596

8.1 Programacin de Servlets


Servlets: Peticiones y Respuestas Los mtodos 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 Formacin y Soluciones Informticas EFIBS S.A.

597

8.2 Objetos HttpServletRequest


Un objeto HttpServletRequest proporciona acceso a los datos de cabecera HTTP. El objeto HttpServletRequest tambin permite obtener los argumentos que el cliente enva como parte de la peticin. Para acceder a los datos del cliente. El mtodo getParameter devuelve el valor de un parmetro nombrado. El mtodo getParameterValues devuelve un arreglo de valores del parmetro nombrado.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

598

8.2 Objetos HttpServletRequest


Para peticiones GET de HTTP, el mtodo getQueryString devuelve en un String una lnea de datos desde el cliente. Para peticiones POST, PUT, y DELETE de HTTP: Si esperamos los datos en formato texto, el mtodo getReader devuelve un BufferedReader. Si esperamos datos binarios, el mtodo getInputStream devuelve un ServletInputStream.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

599

8.3 Objetos HttpServletResponse


Un objeto HttpServletResponse proporciona dos formas de devolver datos al usuario. El mtodo getWriter devuelve un Writer El mtodo getOutputStream devuelve un ServletOutputStream Se utiliza el mtodo getWriter para devolver datos en formato texto al usuario y el mtodo getOutputStream para devolver datos binarios. Si se cierra el Writer o el ServletOutputStream despus 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 mtodos para acceder a los datos de la cabecera. Por ejemplo, el mtodo setContentType selecciona el tipo del contenido. (Normalmente esta es la nica cabecera que se selecciona manualmente).
Copyright Formacin y Soluciones Informticas 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 Formacin y Soluciones Informticas EFIBS S.A.

601

8.5 Estructura de un Servlet


/** * Maneja el mtodo GET de HTTP para construir una sencilla pgina 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 Mtodo doGet(...) }

Copyright Formacin y Soluciones Informticas EFIBS S.A.

602

8.6 Interactuar con Clientes


Despus de la inicializacin, el servlet puede manejar peticiones de clientes. Un Servlet HTTP maneja peticiones de cliente a travs de su mtodo service. Los mtodos en los que delega el mtodo 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 mtodos, por defecto devuelven el error BAD_REQUEST (400).

Copyright Formacin y Soluciones Informticas EFIBS S.A.

603

8.7 Problemas con los Threads


Los servlets HTTP normalmente sirven a mltiples clientes concurrentemente. Si los mtodos de nuestro servlet trabaja con clientes que acceden a recursos compartidos, se puede manejar la concurrencia creando un servlet que maneje slo una peticin de cliente a la vez. Para hacer que el servlet maneje slo un cliente a la vez, se tiene que implementar de la interfaz SingleThreadModel adems de extender de la clase HttpServlet. Implementar de SingleThreadModel no implica escribir ningn mtodo extra. Slo se declara que el servlet implementa la interfaz, y el servidor se asegura de que nuestro servlet slo ejecute un mtodo service cada vez.
public class ReceiptServlet extends HttpServlet implements SingleThreadModel { public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ... } ... }
Copyright Formacin y Soluciones Informticas EFIBS S.A.

604

8.8 Cmo destruir un Servlet?


Para destruir un Servlet, se debe sobrescribir el mtodo destroy como se presenta a continuacin:
public class BookDBServlet extends GenericServlet { private BookstoreDB books; public void destroy() { compartidos books = null; } } // En el mtod init(..) // Eliminar la instancia y recursos

Copyright Formacin y Soluciones Informticas EFIBS S.A.

605

8.9 Invocacin de un Servlet


Un servlet puede ser invocado de la siguiente manera: Desde un Navegador http://nombre-de-mquina:puerto/servlet/nombre-servlet donde nombre-servlet se corresponde con el nombre con el que se registra nuestro servlet en el servidor. Desde una pgina HTML <a href="servlet/demo>Demostracin 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 Formacin y Soluciones Informticas EFIBS S.A.

...

606

8.10 Ejercicio Prctico

Copyright Formacin y Soluciones Informticas EFIBS S.A.

607

8.10 Ejercicio Prctico


El objetivo de esta prctica es el de crear un Sistema de Ordenes utilizando tecnologa de servlets para las principales operaciones de mantenimiento para el mdulo de Clientes y Productos. El sistema deber presentar al ingresar una pantalla de bsqueda para cada uno de los mdulos. Una vez que el usuario digite los parmetros requeridos y presione el botn de submit, esta informacin viajar por el request a un servlet llamado Clientes y Productos respectivamente. Estos servlets debern capturar dichos parmetros y realizar la opcin de bsqueda para cada mdulo.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

608

8.10 Ejercicio Prctico


En base al grfico 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 interactan directamente con la base de datos que se encuentra referencia en el servidor de aplicaciones. Los servlets deber recibir como parmetro adicional una bandera llamada accin, para controlar el tipo de operacin que el usuario ha seleccionado (insertar, modificar, eliminar, consultar y listar). El flujograma del mdulo de clientes ser semejante al que se presenta a continuacin.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

609

8.10 Ejercicio Prctico

Copyright Formacin y Soluciones Informticas EFIBS S.A.

610

9. Manejo del Objeto Session


1. Introduccin a Html 1. Introduccin a Html 2. Arquitectura n Capas 2. Arquitectura n Capas 3. Definicin de Servlets Java 3. Definicin de Servlets Java 4. Arquitectura del Paquete Servlet 4. Arquitectura del Paquete Servlet 5. Mtodos Bsicos del Servlet 5. Mtodos Bsicos 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. Programacin de Servlets 8. Programacin de Servlets 9. Manejo del Objeto Session 9. Manejo del Objeto Session 10. Manejo del Objeto Cookie 10. Manejo del Objeto Cookie
Copyright Formacin y Soluciones Informticas EFIBS S.A.

611

9.1 Manejo del Objeto Session


El seguimiento de sesin 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 sesin se debe: Obtener una sesin (un objeto HttpSession) para un usuario. Almacenar u obtener datos desde el objeto HttpSession. Invalidar la sesin (opcional).

Copyright Formacin y Soluciones Informticas 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 Formacin y Soluciones Informticas EFIBS S.A.

9.3 Obtener una sesin


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 Formacin y Soluciones Informticas EFIBS S.A.

614

9.4 Almacenar y Obtener datos de una sesin


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 Formacin y Soluciones Informticas EFIBS S.A.

615

9.5 Invalidar una sesin


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 Formacin y Soluciones Informticas EFIBS S.A.

616

10. Manejo del Objeto Cookie


1. Introduccin a Html 1. Introduccin a Html 2. Arquitectura n Capas 2. Arquitectura n Capas 3. Definicin de Servlets Java 3. Definicin de Servlets Java 4. Arquitectura del Paquete Servlet 4. Arquitectura del Paquete Servlet 5. Mtodos Bsicos del Servlet 5. Mtodos Bsicos 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. Programacin de Servlets 8. Programacin de Servlets 9. Manejo del Objeto Session 9. Manejo del Objeto Session 10. Manejo del Objeto Cookie 10. Manejo del Objeto Cookie
Copyright Formacin y Soluciones Informticas 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) enve informacin al cliente para almacenarla, y para que el servidor pueda posteriormente recuperar esos datos desde el cliente. Los servlet envan cookies al cliente aadiendo campos a las cabeceras de respuesta HTTP. Los clientes devuelven las cookies automticamente aadiendo campos a las cabeceras de peticiones HTTP. Las cookies que un cliente almacena para un servidor slo pueden ser devueltas a ese mismo servidor.

Copyright Formacin y Soluciones Informticas 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 Formacin y Soluciones Informticas 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 Formacin y Soluciones Informticas 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 Formacin y Soluciones Informticas EFIBS S.A.

621

10.5 Cookie-Resumen
Declararla: Cookie laCookie = new Cookie(id,valor); valor: de tipo String unicamente. Duracin de la cookie: laCookie.setMaxAge(60*60*7*24); para que queden durante un rato Adicionar la cookie: response.addCookie(laCookie);

Copyright Formacin y Soluciones Informticas 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 Formacin y Soluciones Informticas EFIBS S.A.

623

10.5 Cookie-Resumen
Obtener ms 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 Formacin y Soluciones Informticas EFIBS S.A.

624

10.5 Cookie-Resumen
Obtener ms 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 Formacin y Soluciones Informticas EFIBS S.A.

625

INTRODUCCIN A JAVASERVER PAGES (JSP)

Copyright Formacin y Soluciones Informticas EFIBS S.A.

626

1 Introduccin y Objetos
1. Introduccin y Objetivos 1. Introduccin y Objetivos 2. Caractersticas Principales de JSPs 2. Caractersticas 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 Implcitos 6. Variables Predefinidas u Objetos Implcitos 7. Acciones 7. Acciones 8. Comentarios --Caracteres Escape 8. Comentarios Caracteres Escape 9. Sumario de Sintaxis 9. Sumario de Sintaxis 10. Ejercicios Prcticos 10. Ejercicios Prcticos
Copyright Formacin y Soluciones Informticas EFIBS S.A.

627

1.1 Introduccin y Objetos


Objetivos Especficos: Describir como cargar, inicializar y ejecutar un JavaServer Pages (JSPs). Listar las principales caractersticas de un JSP. Construir, generar y probar aplicaciones basadas en JSPs.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

628

2. Caractersticas Principales de JSPs


1. Introduccin y Objetivos 1. Introduccin y Objetivos 2. Caractersticas Principales de JSPs 2. Caractersticas 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 Implcitos 6. Variables Predefinidas u Objetos Implcitos 7. Acciones 7. Acciones 8. Comentarios --Caracteres de Escape 8. Comentarios Caracteres de Escape 9. Sumario de Sintaxis 9. Sumario de Sintaxis 10. Ejercicios Prcticos 10. Ejercicios Prcticos
Copyright Formacin y Soluciones Informticas EFIBS S.A.

629

2.1 Caractersticas Principales de JSPs


Varias de las principales caractersticas de los JSP son: Estn basados en la tecnologa de servlets Permiten separar la parte dinmica de nuestras pginas Web del HTML esttico. Fcil creacin de pgina. Por medio de compilacin se convierten en Servlets. Utilizan tags XML, para una mayor gestin. Invocacin de JavaBeans, EJBs, XML

Copyright Formacin y Soluciones Informticas EFIBS S.A.

630

2.2 Ventajas de los JSP


Contra Active Server Pages (ASP). ASP es una tecnologa similar de Microsoft. Las ventajas de JSP estn duplicadas. Primero, la parte dinmica est escrita en Java, no en Visual Basic, otro lenguaje especfico de MS, por eso es mucho ms poderosa y fcil de usar. Segundo, es portable a otros sistemas operativos y servidores Web. Contra los Servlets. JSP no nos da nada que no pudiramos en principio hacer con un servlet. Pero es mucho ms conveniente escribir (y modificar!) HTML normal que tener que hacer un billn de sentencias out.println que generen HTML. Adems, separando el formato del contenido podemos poner diferentes personas en diferentes tareas: nuestros expertos en diseo de pginas Web pueden construir el HTML, dejando espacio para que nuestros programadores de servlets inserten el contenido dinmico.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

631

2.2 Ventajas de los JSP


Contra Server-Side Includes (SSI). SSI es una tecnologa ampliamente soportada que incluye piezas definidas externamente dentro de una pgina Web esttica. JSP es mejor porque nos permite usar servlets en vez de un programa separado para generar las partes dinmicas. Adems, SSI, realmente est diseado 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 dinmicamente en el cliente. Esta es una capacidad til, pero slo maneja situaciones donde la informacin dinmica est basada en el entorno del cliente. Con la excepcin de las cookies, el HTTP y el envi de formularios no estn 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, catlogos, informacin de precios, etc.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

632

3. Ciclo de Vida de un JSP


1. Introduccin y Objetivos 1. Introduccin y Objetivos 2. Caractersticas Principales de JSPs 2. Caractersticas 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 Implcitos 6. Variables Predefinidas u Objetos Implcitos 7. Acciones 7. Acciones 8. Comentarios --Caracteres Escape 8. Comentarios Caracteres Escape 9. Sumario de Sintaxis 9. Sumario de Sintaxis 10. Ejercicios Prcticos 10. Ejercicios Prcticos
Copyright Formacin y Soluciones Informticas 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

3
Ciclo de Vida del Servlet

2
Compilar Servlet demo.class

Copyright Formacin y Soluciones Informticas EFIBS S.A.

634

4. Elemento Script JSP


1. Introduccin y Objetivos 1. Introduccin y Objetivos 2. Caractersticas Principales de JSPs 2. Caractersticas 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 Implcitos 6. Variables Predefinidas u Objetos Implcitos 7. Acciones 7. Acciones 8. Comentarios --Caracteres de Escape 8. Comentarios Caracteres de Escape 9. Sumario de Sintaxis 9. Sumario de Sintaxis 10. Ejercicios Prcticos 10. Ejercicios Prcticos
Copyright Formacin y Soluciones Informticas EFIBS S.A.

635

4.1 Elemento Script JSP


Los elementos de script permiten insertar cdigo Java dentro del servlet que se generar desde la pgina JSP. Hay tres formas de hacer esto: Mediante expresiones de la forma <%= expresin %>: son evaluadas e insertadas en la salida. Mediante scriptlets de la forma <% cdigo %> : se insertan dentro del mtodo service del servlet. Mediante declaraciones de la forma <%! cdigo %> : se insertan en el cuerpo de la clase del servlet, fuera de cualquier mtodo existente.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

636

4.2 Objetos Implcitos


El Objeto request El Objeto response El Objeto session El Objeto out El Objeto exception El Objeto application

Copyright Formacin y Soluciones Informticas EFIBS S.A.

637

4.3 Expresiones JSP


Una expresin JSP se usa para insertar valores Java directamente en la salida y tiene la siguiente forma: <%= expresin Java %> Ejemplo: Fecha Actual: <%= new java.util.Date() %>

En XML, se puede usar una sintaxis alternativa para las expresiones JSP: <jsp:expression>Expresin Java</jsp:expression>

Copyright Formacin y Soluciones Informticas EFIBS S.A.

638

4.4 Scriplets JSP


Si se desea realizar algo ms complejo que insertar una simple expresin, los scriptlets JSP nos permiten insertar cdigo arbitrario dentro del mtodo servlet que ser construido al generar la pgina. Los Scriptlets tienen la siguiente forma: <% Cdigo 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 <% Cdigo Java %> es:
<jsp:scriptlet>Cdigo</jsp:scriptlet>

Copyright Formacin y Soluciones Informticas EFIBS S.A.

639

4.5 Declaraciones JSP


Una declaracin JSP nos permite definir mtodos o campos que sern insertados dentro del cuerpo principal de la clase servlet (fuera del mtodo service que procesa la peticin). Tienen la siguiente forma:
<%! Cdigo 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 <%! Cdigo %> es:
<jsp:declaration>Cdigo</jsp:declaration>

Copyright Formacin y Soluciones Informticas EFIBS S.A.

640

5. Directivas JSP
1. Introduccin y Objetivos 1. Introduccin y Objetivos 2. Caractersticas Principales de JSPs 2. Caractersticas 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 Implcitos 6. Variables Predefinidas u Objetos Implcitos 7. Acciones 7. Acciones 8. Comentarios --Caracteres de Escape 8. Comentarios Caracteres de Escape 9. Sumario de Sintaxis 9. Sumario de Sintaxis 10. Ejercicios Prcticos 10. Ejercicios Prcticos
Copyright Formacin y Soluciones Informticas EFIBS S.A.

641

5.1 Directivas JSP


Habilita la declaracin de Variables globales. Empieza con la secuencia <%@ Termina con la secuencia %> Existen los siguientes tipos: Directiva page Directiva include Directiva taglib

Copyright Formacin y Soluciones Informticas EFIBS S.A.

642

5.2 Directiva Page


La directiva page nos permite definir uno o ms de los siguientes atributos sensibles a las maysculas:

import contentType isThreadSafe session buffer autoflush

extends info errorPage isErrorPage languaje

Copyright Formacin y Soluciones Informticas EFIBS S.A.

643

5.3 Directiva import


import="package.class" import="package.class1,...,package.classN". Esta especificar los paqutes que deberan ser importados. Por ejemplo: <%@ page import="java.util.*" %> El atributo import es el nico que puede aparecer mltiples veces. instruccin o permite

Copyright Formacin y Soluciones Informticas EFIBS S.A.

644

5.4 Directiva contentType


contentType="MIME-Type" o contentType="MIME-Type; charset=Character-Set". Esta instruccin 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 Formacin y Soluciones Informticas EFIBS S.A.

645

5.5 Directiva isThreadSafe


isThreadSafe="true|false". Un valor de true (por defecto) indica un procesamiento del servlet normal, donde mltiples peticiones pueden procesarse simultneamente con un slo ejemplar del servlet (bajo la suposicin de que el autor sincroniza las variables de ejemplar). Un valor de false indica que el servlet debera implementar SingleThreadModel, con peticiones enviadas de forma serializada o con peticiones simultneas siendo entregadas por ejemplares separados del servlet.

Multi-thread Model (true)

Single-thread Model (false)

Cliente 1 Instancia del Servlet Cliente 1

Copyright Formacin y Soluciones Informticas 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) debera unirse a la sesin existente si existe una, y si no existe, se debera crear una nueva sesin para unirla. Un valor de false indica que no se usarn sesiones y los intentos de acceder a la variable session provocarn errores en el momento en que la pgina JSP sea traducida a un servlet.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

647

5.7 Directiva buffer


buffer="sizekb|none". Esto especifica el tamao del buffer para el JspWriter out. El valor por defecto es especfico del servidor y debera ser de al menos 8kb.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

648

5.8 Directiva autoflush


autoflush="true|false". Un valor de true (por defecto) indica que el buffer debera descargarse cuando est lleno.

Un valor de false, raramente utilizado, indica que se debe lanzar una excepcin cuando el buffer se sobrecargue. Un valor de false es ilegal cuando usamos buffer="none".

Copyright Formacin y Soluciones Informticas 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 precaucin, ya que el servidor podra utilizar una superclase personalizada.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

650

5.10 Directiva info


info="message". Define un string que puede usarse para ser recuperado mediante el mtodo getServletInfo.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

651

5.11 Directiva errorPage


errorPage="url". Especifica la pgina JSP que se debera procesar si se lanzar cualquier Throwable.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

652

5.12 Directiva isErrorPage


isErrorPage="true|false". Indica si la pgina actual acta o no como pgina de error de otra pgina JSP. El valor por defecto es false.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

653

5.13 Directiva language


language="java". Esta instruccin 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 opcin legal. Por ejemplo, el equivalente XML de: <%@ page import="java.util.*" %> es: <jsp:directive.page import="java.util.*" />

Copyright Formacin y Soluciones Informticas 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 Formacin y Soluciones Informticas EFIBS S.A.

655

5.15 Directiva include


Esta directiva nos permite incluir ficheros en el momento en que la pgina JSP es traducida a un servlet.

<%@ include file="url relativa" %>

La URL especificada normalmente se interpreta como relativa a la pgina 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 esttico, elementos de script, directivas y acciones.

Copyright Formacin y Soluciones Informticas 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 Formacin y Soluciones Informticas EFIBS S.A.

657

6. Variables Predefinidas u Objetos Implcitos


1. Introduccin y Objetivos 1. Introduccin y Objetivos 2. Caractersticas Principales de JSPs 2. Caractersticas 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 Implcitos 6. Variables Predefinidas u Objetos Implcitos 7. Acciones 7. Acciones 8. Comentarios --Caracteres Escape 8. Comentarios Caracteres Escape 9. Sumario de Sintaxis 9. Sumario de Sintaxis 10. Ejercicios Prcticos 10. Ejercicios Prcticos
Copyright Formacin y Soluciones Informticas EFIBS S.A.

658

6.1 Variables Predefinidas u Objetos Implcitos


El Objeto request El Objeto response El Objeto out El Objeto session El Objeto application El Objeto config El Objeto pageContext especficas del : HttpServletRequest : HttpServletResponse : PrintWriter : HttpSession : Es el ServletContext obtenido mediante getServletConfig().getContext(). : Es el objeto ServletConfig para la pgina. : PageContext para encapsular caractersticas de uso servidor como JspWriters de alto rendimiento.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

659

7. Acciones
1. Introduccin y Objetivos 1. Introduccin y Objetivos 2. Caractersticas Principales de JSPs 2. Caractersticas 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 Implcitos 6. Variables Predefinidas u Objetos Implcitos 7. Acciones 7. Acciones 8. Comentarios --Caracteres de Escape 8. Comentarios Caracteres de Escape 9. Sumario de Sintaxis 9. Sumario de Sintaxis 10. Ejercicios Prcticos 10. Ejercicios Prcticos
Copyright Formacin y Soluciones Informticas 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 dinmicamente. Reutilizar componentes JavaBeans. Reenviar al usuario a otra pgina o generar HTML para el plug-in Java.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

661

7.2 Accin jsp:include


Esta accin nos permite insertar ficheros en una pgina 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 Formacin y Soluciones Informticas EFIBS S.A.

resumen de la ms recientes noticias:

662

7.2 Accin jsp:include


<LI><jsp:include page="EjemploJSP/noticia4.htm" flush="true"/> </UL> </BODY> </HTML>

Copyright Formacin y Soluciones Informticas EFIBS S.A.

663

7.3 Accin jsp:useBean


Esta accin nos permite cargar y utilizar un JavaBean en la pgina JSP. Esta es una capacidad muy til porque permite practicar la reusabilidad de las clases Java. La sintaxis ms 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 Formacin y Soluciones Informticas 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 debera estar disponible. Hay cuatro posibles valores: page, request, session, y application. El valor por defecto, page, indica que el bean est slo disponible para la pgina actual (almacenado en el PageContext de la pgina actual). Un valor de request indica que el bean slo est disponible para la peticin actual del cliente (almacenado en el objeto ServletRequest). Un valor de session indica que el objeto est disponible para todas las pginas durante el tiempo de vida de la HttpSession actual. Un valor de application indica que est disponible para todas las pginas que compartan el mismo ServletContext.

class scope

Copyright Formacin y Soluciones Informticas 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 ingresara en el mtodo instantiate de Beans. Esta permitido suministrar un type y un beanName, y omitir el atributo class.

beanName

Copyright Formacin y Soluciones Informticas EFIBS S.A.

666

7.5 Accin jsp:forward


Esta accin permite reenviar la peticin a otra pgina. Tiene un slo atributo, page, que debera consistir en una URL relativa. ste podra ser un valor esttico o podra ser calculado en el momento de la peticin. 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 Formacin y Soluciones Informticas EFIBS S.A.

667

7.6 Accin jsp:param


Cuando se invoca un elemento include o forward, el objeto request original es enviado a la pgina 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 Formacin y Soluciones Informticas EFIBS S.A.

668

7.7 Accin jsp:plugin


Esta accin nos permite insertar un elemento OBJECT o EMBED especfico del navegador para indicar que el navegador debera 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 Formacin y Soluciones Informticas EFIBS </jsp:plugin> S.A.

669

7.7 Accin 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 Formacin y Soluciones Informticas EFIBS S.A.

670

7.7 Accin jsp:plugin


<jsp:fallback> <p>No se ha podido arrancar el plugin.</p> </jsp:fallback> </jsp:plugin>

Copyright Formacin y Soluciones Informticas EFIBS S.A.

671

8. Comentarios Caracteres de Escape


1. Introduccin y Objetivos 1. Introduccin y Objetivos 2. Caractersticas Principales de JSPs 2. Caractersticas 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 Implcitos 6. Variables Predefinidas u Objetos Implcitos 7. Acciones 7. Acciones 8. Comentarios --Caracteres de Escape 8. Comentarios Caracteres de Escape 9. Sumario de Sintaxis 9. Sumario de Sintaxis 10. Ejercicios Prcticos 10. Ejercicios Prcticos
Copyright Formacin y Soluciones Informticas EFIBS S.A.

672

8.1 Comentarios Caracteres de Escape


Sintaxis <%-- comment --%> <!-- comment --> <\% %\> \' Propsito 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 esttico) 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 sern 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 sern caracteres regulares. %> en un atributo <% en un atributo.

\"

%\> <\%

Copyright Formacin y Soluciones Informticas EFIBS S.A.

673

9. Sumario de Sintaxis
1. Introduccin y Objetivos 1. Introduccin y Objetivos 2. Caractersticas Principales de JSPs 2. Caractersticas 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 Implcitos 6. Variables Predefinidas u Objetos Implcitos 7. Acciones 7. Acciones 8. Comentarios --Caracteres de Escape 8. Comentarios Caracteres de Escape 9. Sumario de Sintaxis 9. Sumario de Sintaxis 10. Ejercicios Prcticos 10. Ejercicios Prcticos
Copyright Formacin y Soluciones Informticas EFIBS S.A.

674

9.1 Sumario de Sintaxis


Sumario de Sintaxis Sumario de Sintaxis

Copyright Formacin y Soluciones Informticas EFIBS S.A.

675

10. Ejercicios Prcticos


1. Introduccin y Objetivos 1. Introduccin y Objetivos 2. Caractersticas Principales de JSPs 2. Caractersticas 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 Implcitos 6. Variables Predefinidas u Objetos Implcitos 7. Acciones 7. Acciones 8. Comentarios --Caracteres de Escape 8. Comentarios Caracteres de Escape 9. Sumario de Sintaxis 9. Sumario de Sintaxis 10. Ejercicios Prcticos 10. Ejercicios Prcticos
Copyright Formacin y Soluciones Informticas EFIBS S.A.

676

10.1 Ejercicios Prcticos


El instructor le explicar la siguiente prctica:
Convierta en JSPs todas las pginas html que se hicieron en la prctica anterior. Crear una pgina llamada login.jsp, la cual debe contener un formulario con los siguientes datos:
login Usuario Contrasea

Copyright Formacin y Soluciones Informticas EFIBS S.A.

677

10.1 Ejercicios Prcticos


La pgina anterior deber de redireccionarse por medio de un mtodo post a un servlet, el cual se llamar validarLogin.java. El Servlet validarLogin.java, recibir como parmetros todos los valores enviados en el punto 2. Una vez completado el punto anterior, el servlet debe validar la integridad de la informacin, as como tambin, si el usuario existe o no en la base de datos. De existir errores, la coleccin generada se deber almacenar en un objeto de session, para que luego sea desplegado en la pgina login.jsp. En caso contrario al punto 6, se debe generar una cookie con el nombre del usuario y deber aparecer en la pgina sistemaOrdenes.jsp, la cual nicamente tendr dos enlaces, uno a mantenimientoClientes.jsp y otro a mantenimientoProductos.jsp.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

678

10.1 Ejercicios Prcticos


De ingresar a cualquiera de las dos pginas, 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 transaccin satisfactoria o bien el mensaje de error que haya ocurrido. En el caso de consultar deber aparecer la informacin del cliente o bien un mensaje de no existencia del mismo. Para el caso de listar, cree un objeto session donde estn todos los cliente provenientes en de la base de datos y presntelo en otra pgina de despliegue tanto para los clientes como para los productos. Pruebe exhaustivamente la pgina hasta que haya sido totalmente validada y que est funcionalmente correcta. Haga exactamente los mismos pasos para el mdulo de productos.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

679

10.1 Ejercicios Prcticos


La pgina debera quedar como la siguiente:

Copyright Formacin y Soluciones Informticas EFIBS S.A.

680

FRAMEWORK STRUTS

Copyright Formacin y Soluciones Informticas EFIBS S.A.

681

Objetivos
Explicar los principales componentes del framework ,especficamente 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 Formacin y Soluciones Informticas EFIBS S.A.

682

1 Introduccin
1. Introduccin 1. Introduccin 2. Modelo 3 Capas 2. Modelo 3 Capas 3. Framework STRUTS 3. Framework STRUTS 4. Estructura Aplicacin 4. Estructura Aplicacin 5. Ejercicios Prcticos 5. Ejercicios Prcticos

Copyright Formacin y Soluciones Informticas EFIBS S.A.

683

1.1 Introduccin
Que es un framework ? Es la implementacin de un grupo de componentes y servicios basados en patrones, estndares, y prcticas disponibles para web. La plataforma J2EE es un sistema multi-capas, as pues, un framework que sigue el estndar de J2EE debe adaptarse a ese mismo esquema presentacin, negocio e integracin. Basado en el lineamiento anterior, han surgido variedades de frameworks para el desarrollo de aplicaciones web, siendo uno de estos Struts.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

684

1.1 Introduccin
Generalidades Struts es un framework J2EE que: Parte del proyecto Jakarta, el cual fu patrocinado por la fundacin 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 tecnologa Java Server Pages (JSP).

Copyright Formacin y Soluciones Informticas EFIBS S.A.

685

2 Modelo 3 Capas
1. Introduccin 1. Introduccin 2. Modelo 3 Capas 2. Modelo 3 Capas 3. Framework STRUTS 3. Framework STRUTS 4. Estructura Aplicacin 4. Estructura Aplicacin 5. Ejercicios Prcticos 5. Ejercicios Prcticos

Copyright Formacin y Soluciones Informticas EFIBS S.A.

686

2 Modelo 3 Capas
Esquema General

Presentacin
Explorer JSP, HTML

Lgica de Negocio
Cdigo JAVA

Base de Datos

Copyright Formacin y Soluciones Informticas EFIBS S.A.

687

2 Modelo 3 Capas
Detalle del esquema en tres capas

Copyright Formacin y Soluciones Informticas EFIBS S.A.

688

2 Modelo 3 Capas
Porqu el desarrollo en tres capas ? Estructura bien diferenciada La lgica de negocio no se mezcla con la presentacin de la aplicacin El acceso a los datos se realiza en un bloque diferenciado de la lgica de negocio Cada desarrollador se especializa en una capa de la aplicacin. Mantenimiento de la aplicacin mucho ms fcil y eficaz

Copyright Formacin y Soluciones Informticas EFIBS S.A.

689

2 Modelo 3 Capas
Capa de Presentacin Requiere: Los ms utilizados son Netscape o Explorer. Browser: Permite visualizar la aplicacin. Contiene: Imgenes. HTML: Cdigo que el browser entiende para dibujar componentes en la ventana. JSP.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

690

2 Modelo 3 Capas
Capa de Lgica de Negocio Contiene: Clases JAVA Helpers Session Beans EJBs

Copyright Formacin y Soluciones Informticas EFIBS S.A.

691

2 Modelo 3 Capas
Capa de Datos

Contiene Estructura de la base de datos Tablas

Copyright Formacin y Soluciones Informticas EFIBS S.A.

692

3 Framework STRUTS
1. Introduccin 1. Introduccin 2. Modelo 3 Capas 2. Modelo 3 Capas 3. Framework STRUTS 3. Framework STRUTS 4. Estructura Aplicacin 4. Estructura Aplicacin 5. Ejercicios Prcticos 5. Ejercicios Prcticos

Copyright Formacin y Soluciones Informticas EFIBS S.A.

693

3 Framework STRUTS
FRAMEWORK:

Qu es ?

Extensin de un lenguaje mediante jerarquas de clases que implementan una funcionalidad y que pueden ser extendidas. Struts: Framework para desarrollar aplicaciones Java Cdigo abierto Pertenece a Apache Tiene dos aos en el mercado

Copyright Formacin y Soluciones Informticas 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 presentacin Manejo del flujo de la aplicacin Manejo de la lgica de la aplicacin

Struts permite que el desarrollo y mantenimiento de las aplicaciones complejas o que crecen en el tiempo sea mucho ms fcil

Copyright Formacin y Soluciones Informticas EFIBS S.A.

695

3 Framework STRUTS
Como poner en funcionamiento Struts ?
Struts consiste en una librera 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 Formacin y Soluciones Informticas EFIBS S.A.

696

3 Framework STRUTS
Esquema

MODEL VIEW CONTROLLER


Controller (Servlet)

Cliente ( Browser )

Model (Java Beans)

View (JSP)

Copyright Formacin y Soluciones Informticas EFIBS S.A.

697

3 Framework STRUTS
Cliente Estndar Web Browser Controller Su funcin es la de manejar el workflow de la aplicacin: La sesin. Flujo de las peticiones del cliente. Realiza el Mapping de requests a las clases que gestionan la lgica de negocio. El controlador maneja las peticiones dirigidas hacia un Action class.

Copyright Formacin y Soluciones Informticas 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 lgica del negocio. La forma de ligar ste con los dems archivos, es a travs del archivo de configuracin struts-config.xml. View

El Form Class, que corresponde a la vista (view, siguiendo el modelo MVC), constituye un grupo de libreras que funcionan en concordancia con el controlador para conectar un .JSP con dichas libreras. Las pginas JSP pertenecientes a la capa de presentacin utilizan librerias de marcas para mostrar el estado del Model.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

699

3 Framework STRUTS
MODEL VIEW CONTROLLER

Invocacin a mtodos

Model
Encapsula el estado de la aplicacin Da respuesta a las queries Notificacin Se encarga de la lgica de negocio de Cambio Notifica cambios en la capa de presentacin

Peticin de Estado

Cambio de Estado

Eventos

View
Presenta pginas al usuario Actualiza peticiones del Model Manda al Controller peticiones del usuario Permite al Controller seleccionar la view

Controller
Seleccin de la View Define el comportamiento de la aplicacin Mapea las acciones del usuario al model Selecciona views para la respuesta Uno para cada funcionalidad.

Gestiones del Usuario

Copyright Formacin y Soluciones Informticas 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 Formacin y Soluciones Informticas 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 configuracin que se le ha programado en su XML y llama al Action correspondiente pasndole los parmetros enviados. El Action instancia y/o utilizar los objetos de negocio para concretar la tarea. (3) Segn el resultado que retorne el Action, (4) el Controller derivar la generacin de interfaz a una o ms JSPs, (5) las cuales podrn consultar los objetos del Model a (6) fines de realizar su tarea.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

702

3 Framework STRUTS
Caractersticas Principales Separacin del workflow de la aplicacin del modelo de objetos de negocio y de la generacin 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 generacin de interfaz se soporta mediante un conjunto de Tags predefinidos por Struts. Logsticamente, permite desarrollar la interfaz del workflow y la lgica de negocio conjuntamente o con personal especializado en cada capa. Potencia la reutilizacin, soporte de mltiples interfaces ( Html).

Copyright Formacin y Soluciones Informticas 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 Formacin y Soluciones Informticas EFIBS S.A.

704

3 Framework STRUTS
VIEW con JSPs

Es la parte fundamental de la capa de presentacin.

Permite mezclar cdigo HTML esttico con HTML generado dinmicamente ( cdigo JAVA ). Se ejecutan en cualquier servidor WEB

Copyright Formacin y Soluciones Informticas EFIBS S.A.

705

3 Framework STRUTS
VIEW con JSPs

Al realizar el usuario una accin, la JSP llama al ActionServlet que contiene la clase Form que ha de llamarse para validar los datos. Cualquier aplicacin con pginas dinmicas en respuesta a las acciones realizadas por el usuario es susceptible de usar JSPs.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

706

3 Framework STRUTS
Para que usar JSPs ? Estructura visual de la pgina, junto con HTML. Acceder a objetos del servidor. Modificar los datos.

Para que no usar JSPs ? Para incluir cdigo de acceso a la base de datos. Para incluir cdigo de lgica de negocio

Copyright Formacin y Soluciones Informticas 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 Formacin y Soluciones Informticas 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 aplicacin en el servlet inicial. Aqu se definirn todas las etiquetas necesarias para la aplicacin.

Copyright Formacin y Soluciones Informticas 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 Formacin y Soluciones Informticas EFIBS S.A.

710

3 Framework STRUTS
Combinando elementos de Struts en un JSP A continuacin se muestra como utilizar los distintos elementos de Struts en una pgina JSP para generar un Form que enve una peticin y controle automticamente 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 Formacin y Soluciones Informticas 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 Formacin y Soluciones Informticas 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 Formacin y Soluciones Informticas EFIBS S.A.

713

3 Framework STRUTS
VIEW ---- ACTION FORM

Un form de struts se define como la agrupacin de informacin de entrada, encapsulada en una clase de java llamada Form y la misma se captura directamente de una sesin de usuario. La funcin principal de este componente es la validacin de los tipos de los datos. Cuando se trata la informacin 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 deseara tener el medio por el cual poder comunicarle al usuario que ha cometido un error en la digitacin. Esta es otra de las funciones del Form.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

714

3 Framework STRUTS
VIEW ---- ACTION FORM Cada formulario tiene su propio Form. Contiene la declaracin de todos los campos del formulario, sus mtodos get() y set() y los mtodos validate y reset. Las variables y sus mtodos deben usar el mismo nombre. Contiene las validaciones para que se pueda redireccionar la pgina a otra JSP o se devuelva un resultado en la misma ventana.

Copyright Formacin y Soluciones Informticas 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 lgica de negocio. Se trata de un firewall entre Cliente y Action. Si bien el ActionForm tiene caractersticas que corresponden al Model, pertenece a la View.

Copyright Formacin y Soluciones Informticas 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 Formacin y Soluciones Informticas EFIBS S.A.

717

3 Framework STRUTS
Como Crear un Action Form Definir Strings de tipo privado para cada una de las propiedades que compondrn este formulario. (Ej. Nombre, Apellido1, Apellido2, Salario, etc). Por cada uno de esas propiedades, definir dos mtodos:
Mtodo Get public String getPropiedad () { return propiedad; } Mtodo Set Public void setPropiedad (String propiedad) { this.propiedad = propiedad; }

Copyright Formacin y Soluciones Informticas EFIBS S.A.

718

3 Framework STRUTS
Como Crear un Action Form Ahora se debe sobreescribir el siguiente mtodo: public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) Por medio de este mtodo 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 Formacin y Soluciones Informticas EFIBS S.A.

719

3 Framework STRUTS
Dentro del mtodo validate se capturan los errores a travs de un objeto de errores (Ej. ActionErrors errors= new ActionErrors(); ser la primera variable local a declarar) que la funcin se encargar de devolver. Si no se encuentra ningn error, entonces se devuelve un null o una instancia de la clase ActionErrors de zero-length.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

720

3 Framework STRUTS
Como Crear un Action Form Si alguna validacin no se cumple, entonces se agrega un error nuevo a la instancia de ActionErrors, como sigue: errors.add("nombreError",new ActionError(Descripcin)); nombreError: Etiqueta identificando el error. Descripcin: La descripcin 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 aplicacin (Ej. New ActionError("error.descripcion")).

Copyright Formacin y Soluciones Informticas 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 travs de un tag de HTML (<html:errors/>) se desplegarn los errores una vez que el form se haya invocado.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

722

3 Framework STRUTS
Como Crear un Action Form Tambin se puede utilizar el siguiente mtodo que ser requerido cuando se utilicen checkbox: Public void reset(ActionMapping mapping, HttpServletRequest request) Este mtodo nicamente llevar la inicializacin de las variables.

Copyright Formacin y Soluciones Informticas 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 definicin de este form en el archivo de configuracin del Struts, struts-config.xml : <!===== Definicin de formas ====== --> <form-beans> <form-bean name="NombreForm" type="paquete.paquete2.paqueteN.nombreForm"/> </form-beans>

Copyright Formacin y Soluciones Informticas 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 travs de toda la aplicacin y paquete.paquete2.paqueteN.nombreForm que corresponde a la ruta fsica del archivo dentro de la aplicacin, de acuerdo a la especificacin de nombres de archivos de JAVA (fully qualified name).

Copyright Formacin y Soluciones Informticas 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 Formacin y Soluciones Informticas 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 Formacin y Soluciones Informticas EFIBS S.A.

727

3 Framework STRUTS
ActionForm Ejemplo (Cont.)

//Definicin del mtodo get() public String getTipDireccion() { return tipDireccion; } //Definicin del metodo set() public void setTipDireccion(String tipDireccion) { this.tipDireccion = tipDireccion; }

Copyright Formacin y Soluciones Informticas EFIBS S.A.

728

3 Framework STRUTS
CONTROLLER ---- ACTION SERVLET Comprende la funcionalidad involucrada desde que el usuario genera un estmulo (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 lgica de negocio y segn el resultado, ejecutar la JSP que deba generar la interfaz resultante

Copyright Formacin y Soluciones Informticas 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 Formacin y Soluciones Informticas EFIBS S.A.

730

3 Framework STRUTS
CONFIGURAR EL SERVLET INICIAL Para integrar struts a una aplicacin WEB es necesario inicializar el framework a travs del actionServlet. Esta clase representa el controlador en la estructura de MVC (Model View Controller). La inicializacin se realiza en el archivo web.xml y los elementos a configurar, se especifican a continuacin: Servlet-name: Nombre del Servlet. Application: Nombre de la Aplicacin. Config: Ruta donde se encuentra el archivo struts-config.xml.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

731

3 Framework STRUTS
CONFIGURAR EL SERVLET INICIAL

Debug y detail: Parmetros 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 configuracin.

Copyright Formacin y Soluciones Informticas 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 Formacin y Soluciones Informticas 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 Formacin y Soluciones Informticas EFIBS S.A.

734

3 Framework STRUTS
CONTROLLER ---- STRUTS-CONFIG.XML Fichero XML bsico para el funcionamiento de la aplicacin. En l se definen todos los ActionForm de cada uno de los formularios de la aplicacin. Tambin pueden definirse los redireccionamientos globales.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

735

3 Framework STRUTS
CONTROLLER ---- STRUTS-CONFIG.XML Y todos los action-mapping de la aplicacin. Si este fichero no se define correctamente, la aplicacin no pasar de este punto, o estar mal redireccionada.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

736

3 Framework STRUTS
Struts-Config - Ejemplo <?xml version="1.0" encoding="ISO-8859-1" ?> <struts-config> <! - - ==== Definicin de formas === - - > <form-beans> <form-bean name=NombreForm" </form-beans> -> type=paquete1.paquete2.nombreForm.java"/>

<!- - === Definicin de redireccionamientos globales === <global-forwards> <forward name="success" path="/main.jsp"/> </global-forwards>

Copyright Formacin y Soluciones Informticas 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 Formacin y Soluciones Informticas 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 informacin asociada con el actionclass de java: Path: Nombre del formulario. Este nombre es el que se utiliza en una pgina JSP para asociar un form de HTML con un form de Struts. De esta forma, al hacer el submit desde la pgina JSP, el Model View Controller de Struts manejar la solicitud en concordancia con el nombreForm.java y el nombreAction.java.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

739

3 Framework STRUTS
Elementos Struts-Config Tape: Nombre completo de la clase de java nombreAction.java. Corresponde a la ruta fsica del archivo dentro de la aplicacin, de acuerdo a la especificacin 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 sesin o en el objeto request. Posibles valores = REQUEST SESSIN.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

740

3 Framework STRUTS
Elementos Struts-Config Validate: Determina si el mtodo validate del form de struts ser invocado. Posibles valores = TRUE FALSE. Input: Ruta de la pgina JSP que invoc al form de struts. De esta manera, al haber un error, struts sabr a quien devolver el Foco para la correccin de ste. Forward-name: Corresponde a una etiqueta asociada a una ruta de una pgina JSP. Esto permitir que desde el action, con solo invocar a mapping.findForward(etiqueta) sea posible efectuar la llamada.

Copyright Formacin y Soluciones Informticas 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 Formacin y Soluciones Informticas EFIBS S.A.

742

3 Framework STRUTS
Descripcin 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 mtodo validate. (3a) Si retorna errores, (7)(8)(9) el Controller llamara 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 Formacin y Soluciones Informticas EFIBS S.A.

743

3 Framework STRUTS
(3b) Si todo estuviese bien, (4) llamara al mtodo perform del Action (tambin configurado en el struts-config.xml) pasndole el ActionForm Bean como parmetro 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 Formacin y Soluciones Informticas EFIBS S.A.

744

3 Framework STRUTS
MODEL ---- ACTION El action es la clase de java en donde se manipula la informacin recolectada en el form. Contiene los Objetos donde se implementa toda la lgica de negocio de la aplicacin (el how its done) y donde se soportan todos los requisitos funcionales del Sistema sin mezclarlo con el workflow (what to do) que corresponden al Controller.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

745

3 Framework STRUTS
MODEL ---- ACTION Se accede al Action si las validaciones del Form (usuario y sesin) 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 aplicacin a la nueva pgina JSP (Action Forward)

Copyright Formacin y Soluciones Informticas 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 Formacin y Soluciones Informticas EFIBS S.A.

747

3 Framework STRUTS
Como crear un Action Ahora se debe sobreescribir el mtodo: public ActionForward perform(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response) throws IOException, ServletException

Copyright Formacin y Soluciones Informticas 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 informacin contenida en el Form. Esta validacin ser de contenido y no de forma (Ej: El monto de un depsito que no pueda ser menor a cierta cantidad). Dependiendo del resultado de la validacin, se enviar al usuario a una pgina especfica.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

749

3 Framework STRUTS
Como crear un Action Si existiese algn error, basta con agregar la etiqueta de error y la descripcin a una instancia de la clase ActionError.(ver punto 6 de la seccin 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 Formacin y Soluciones Informticas EFIBS S.A.

750

3 Framework STRUTS
Como crear un Action
Inmediatamente despus de est fragmento de cdigo, se debe contemplar la posibilidad de que no exista ningn error, en cuyo caso , se debe remover la informacin del Action Form almacenada en la sessin o en el objeto request. if (mapping.getAttribute() != null) { if ("request".equals(mapping.getScope())) request.removeAttribute(mapping.getAttribute()); else session.removeAttribute(mapping.getAttribute()); }

Copyright Formacin y Soluciones Informticas EFIBS S.A.

751

3 Framework STRUTS
Como crear un Action
Finalmente para redireccionar el Form a una pgina desde el action class: mapping.findForward(nombreDireccionar) Donde el nombreDireccionar se reemplazar por el alias definido en el archivo struts-config.xml en la seccin de action-mappings para el action class en cuestin. Por ltimo, se debe definir el Action class en el atributo <actionmappings> del archivo de configuracin struts-config.xml visto con anterioridad.

Copyright Formacin y Soluciones Informticas 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 Formacin y Soluciones Informticas 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 Formacin y Soluciones Informticas 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 Formacin y Soluciones Informticas EFIBS S.A.

755

3 Framework STRUTS
MODEL ---- HELPER CLASS Invoca las clases que se ejecutan en el servidor de aplicaciones. Llama a los mtodos contenidos en los Session Beans y los EJBs. Contiene una instancia de la clase Home.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

756

3 Framework STRUTS
MODEL ---- HELPER CLASS

Debe ser serializable. Contiene mtodos get() y set() de las variables. Puede contener un VO que retorna los valores del Bean accedido.

Copyright Formacin y Soluciones Informticas 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 Formacin y Soluciones Informticas 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 Formacin y Soluciones Informticas 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 Formacin y Soluciones Informticas 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 lgica de negocio como componentes reusables, para poder usarlos en cualquier tipo de servidor que soporte la especificacin EJB. El programar EJBs en lugar de aplicaciones enteras en JAVA permite ahorrarse preocupaciones de seguridad, pool de conexiones, gestin transaccional, control de estado, persistencia o multithreading, ya que son caractersticas propias del servidor de aplicaciones.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

761

3 Framework STRUTS
MODEL --- Tipos de EJB

Session Beans Entity Beans

Copyright Formacin y Soluciones Informticas EFIBS S.A.

762

3 Framework STRUTS
Qu es un Session Bean ? Representacin 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 Formacin y Soluciones Informticas 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 informacin del cliente. Statefull Session Beans Guarda informacin del estado del cliente. Sus instancias no son reutilizables entre llamadas de diferentes clientes. No guarda datos ante una posible caida del servidor.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

764

3 Framework STRUTS
Qu es un Entity Bean ? Se pueden definir como Representaciones de datos del servidor. No estn ligados a ningn 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 Formacin y Soluciones Informticas EFIBS S.A.

765

3 Framework STRUTS
Ciclo de desarrollo de un EJB Se deben desarrollar tres partes: La clase en cuestin, su interfaz HOME y la interfaz remota. La Clase contiene la lgica de negocio. La interfaz Home contiene la interfaz de acceso a la clase Bean.

Copyright Formacin y Soluciones Informticas 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 Formacin y Soluciones Informticas EFIBS S.A.

767

3 Framework STRUTS
Arquitectura para EJBs 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 Formacin y Soluciones Informticas EFIBS S.A.

768

3 Framework STRUTS
Arquitectura para EJBs
Servidor de Aplicaciones EJB
Proporciona gestin 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 basndose en requisitos definidos en los descriptores de despliegue (ciclo de vida, estados, transacciones, seguridad, persistencia) Contexto
mtodos

mtodos

Objeto EJB (vista de cliente)

Cliente
create lookup destroy

Enterprise Bean EJB Home (ID del bean)


create lookup destroy

Descriptores de despliegue

Entorno

Copyright Formacin y Soluciones Informticas EFIBS S.A.

769

3 Framework STRUTS
Para que usar EJBs ? Se usan en proyectos internet de tipo medio grande, es decir, los que corran en servidores de aplicaciones. Se benefician de crear porciones de cdigo reutilizables en diversos proyectos

Copyright Formacin y Soluciones Informticas EFIBS S.A.

770

4. Estructura - Aplicacin
1. Introduccin 1. Introduccin 2. Modelo 3 Capas 2. Modelo 3 Capas 3. Framework STRUTS 3. Framework STRUTS 4. Estructura --Aplicacin 4. Estructura Aplicacin 5. Ejercicios Prcticos 5. Ejercicios Prcticos

Copyright Formacin y Soluciones Informticas EFIBS S.A.

771

4 Estructura de la Aplicacin
View Controller Model EJB Database

WAR ( Web Application Archive)

JAR (Java Archive)

EAR ( Enterprise Application Archive )


Copyright Formacin y Soluciones Informticas EFIBS S.A.

772

4 Estructura de la Aplicacin
JAR (Java Archives) Permite agrupar clases desarrolladas en el lenguaje Java. Otorga nivel de comprensin 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 distribucin del desarrollo de los EJBs. Modulariza el desarrollo de los EJBs.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

773

4 Estructura de la Aplicacin
WAR (Web Archives) Permite agrupar un conjunto de clases y documentos que conforman una aplicacin Web en Java . EAR (Enterprise Archives) Es simplemente un WAR y un EJB-JAR agrupados. La razn de su existencia es basicamente para seguir la estructura de un Java Application Server Un aplicacin Server contiene el Servlet Engine (ambiente usado para WARs) y el EJB Container (ambiente usado para EJB-JARs)

Copyright Formacin y Soluciones Informticas EFIBS S.A.

774

4 Estructura de la Aplicacin
Estructura Principal

Se necesitan ejecutables para generar el JAR, el WAR y el EAR de la aplicacin

Copyright Formacin y Soluciones Informticas EFIBS S.A.

775

4 Estructura de la Aplicacin
Estructura de Directorios
application.xml define si generamos entorno de produccin o de desarrollo ejb-jar.xml contiene el deployment descriptor utilizado en EJBs weblogic-ejb-jar archivo de configuracin utilizado por el Application Server (concretamente el EJBContainer) ccss.afiliacion.* contiene todas las clases Java necesarias para definir los distintos EJBs

Copyright Formacin y Soluciones Informticas EFIBS S.A.

776

4 Estructura de la Aplicacin
Estructura de Directorios

afiliacion --- interfaz Remota del EJB afiliacion afiliacionHome --- interfaz de creacion del EJB afiliacin afiliacionEJB --- clase Java que contiene la el acceso a los datos de la afiliacin afiliacinVO --- Value Object que contiene todos los campos del EJB afiliacin

Copyright Formacin y Soluciones Informticas EFIBS S.A.

777

4 Estructura de la Aplicacin
Estructura de Directorios
/*.html, *.jsp, *.css,*.gif --directorios que contienen los elementos comunmente utilizados web.xml contiene elementos de seguridad de la aplicacin as como detalles sobre los servlets que sern usados dentro de la misma weblogic-ejb-jar archivo de configuracin utilizado por el Application Server (concretamente el Servlet Engine) classes contiene las clases Java adicionales a las del JDK que sern empleadas por las JSPs lib Contiene los JARs que usar la aplicacin tlds clases que usa struts

Copyright Formacin y Soluciones Informticas EFIBS S.A.

778

4 Estructura de la Aplicacin
Estructura de Directorios

aportacionHelper --- clase Java de conexin entre el WAR y el JAR BusquedaAportacionAction --- clase Java que contiene la lgica de negocio de este formulario BusquedaAportacionForm --- Clase Java que valida y contiene todos los campos del formulario

Copyright Formacin y Soluciones Informticas EFIBS S.A.

779

4 Estructura de la Aplicacin
WAR ARCHIVO FORM JSP

WAR ARCHIVO CONTROLADOR JSP

JAR SESSION BEAN

JAR ARCHIVO FORM JAVA

Copyright Formacin y Soluciones Informticas EFIBS S.A.

780

4 Estructura de la Aplicacin
WAR ARCHIVO JSP WAR STRUTS - FORM STRUTS - ACTION

WAR

JAR SESSION BEAN

WAR HELPER

JAR ENTITY BEAN

Copyright Formacin y Soluciones Informticas EFIBS S.A.

781

4 Estructura - Aplicacin
1. Introduccin 1. Introduccin 2. Modelo 3 Capas 2. Modelo 3 Capas 3. Framework STRUTS 3. Framework STRUTS 4. Estructura --Aplicacin 4. Estructura Aplicacin 5. Ejercicios Prcticos 5. Ejercicios Prcticos

Copyright Formacin y Soluciones Informticas EFIBS S.A.

782

5 Ejercicios Prcticos
El instructor le explicar la siguiente prctica: 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 mtodos privados para mantener modularidad.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

783

5 Ejercicios Prcticos
Para hacer uso de la informacin del form-bean, deber utilizar la siguiente lnea: 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 = Insercin Satisfactoria! Utilice objetos de tipo: sesin y request , para poder enviar la informacin de un cliente o de varios clientes a la pgina 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 Formacin y Soluciones Informticas EFIBS S.A.

784

5 Ejercicios Prcticos
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 mdulo clientes los campos seran : id, nombre , direccin y telfono. Para el manejo automtico de los errores pueden agregarse las siguientes lneas de cdigo en el mtodo 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 Formacin y Soluciones Informticas EFIBS S.A.

785

5 Ejercicios Prcticos
Otros cambios en el struts.config.xml sern agregados automticamente 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 aplicacin. El siguiente cdigo, 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 Formacin y Soluciones Informticas EFIBS S.A.

786

INTRODUCCION A J2EE

Copyright Formacin y Soluciones Informticas EFIBS S.A.

787

Objetivos
Crear y aplicar todos los trminos y conceptos alrededor de la Tecnologa J2EE. Desplegar y construir Enterprise Java Beans Construir, generar y probar Componentes Java utilizando un Ambiente de desarrollo Integrado (IDE).

Copyright Formacin y Soluciones Informticas EFIBS S.A.

788

1 Introduccin
1. Introduccin 1. Introduccin 2. Definicin de Enterprise Java Beans 2. Definicin de Enterprise Java Beans 3. Tecnologa de Enterprise Java Beans 3. Tecnologa de Enterprise Java Beans 4. Contenedor de Enterprise Java Beans 4. Contenedor de Enterprise Java Beans 5. Beneficios y Caractersticas 5. Beneficios y Caractersticas 6. Mecanismos de Interaccin 6. Mecanismos de Interaccin

Copyright Formacin y Soluciones Informticas EFIBS S.A.

789

1 Introduccin
7. Conceptos Bsicos J2EE 7. Conceptos Bsicos 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 Prctico 13. Ejercicio Prctico

Copyright Formacin y Soluciones Informticas EFIBS S.A.

790

1.1 Introduccin
J2EE, es utilizado para crear aplicaciones empresariales y comerciales. Ha tenido gran auge y sobre todo brinda bastante seguridad y abstraccin en la implementacin de los sistemas. Es por este motivo, que durante este curso se le ensear al estudiante como poder crear y publicar los principales componentes de la arquitectura.

Es esencial, que el estudiante posea un conocimiento slido de tecnologas tales como: JSP, Servlets, JDBC y si es posible tambin Struts.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

791

2 Definicin de Enterprise Java Beans


1. Introduccin 1. Introduccin 2. Definicin de Enterprise Java Beans 2. Definicin de Enterprise Java Beans 3. Tecnologa de Enterprise Java Beans 3. Tecnologa de Enterprise Java Beans 4. Contenedor de Enterprise Java Beans 4. Contenedor de Enterprise Java Beans 5. Beneficios y Caractersticas 5. Beneficios y Caractersticas 6. Mecanismos de Interaccin 6. Mecanismos de Interaccin

Copyright Formacin y Soluciones Informticas EFIBS S.A.

792

2 Definicin de Enterprise Java Beans


7. Conceptos Bsicos J2EE 7. Conceptos Bsicos 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 Prctico 13. Ejercicio Prctico

Copyright Formacin y Soluciones Informticas EFIBS S.A.

793

2.1 Definicin de Enterprise Java Beans


De acuerdo a la definicin 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 especificacin de los EJB. Los Enterprise JavaBeans son escritos en el lenguaje de programacin Java. Son componentes del lado del servidor (server-side), los cuales encapsulan la lgica de Negocio de una aplicacin.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

794

3 Tecnologa de Enterprise Java Beans


1. Introduccin 1. Introduccin 2. Definicin de Enterprise Java Beans 2. Definicin de Enterprise Java Beans 3. Tecnologa de Enterprise Java Beans 3. Tecnologa de Enterprise Java Beans 4. Contenedor de Enterprise Java Beans 4. Contenedor de Enterprise Java Beans 5. Beneficios y Caractersticas 5. Beneficios y Caractersticas 6. Mecanismos de Interaccin 6. Mecanismos de Interaccin

Copyright Formacin y Soluciones Informticas EFIBS S.A.

795

3 Tecnologa de Enterprise Java Beans


7. Conceptos Bsicos J2EE 7. Conceptos Bsicos 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 Prctico 13. Ejercicio Prctico

Copyright Formacin y Soluciones Informticas EFIBS S.A.

796

3.1 Tecnologa de EJBs


La especificacin de Enterprise JavaBeans define una arquitectura para un sistema transaccional de objetos distribuidos basado en componentes. La especificacin contiene un modelo de programacin; es decir, convenciones o protocolos y un conjunto de clases e interfaces que crean el API EJB. Este modelo de programacin proporciona a los desarrolladores de Beans y a los vendedores de servidores EJB un conjunto de contratos que definen una plataforma de desarrollo comn. El objetivo de estos contratos es asegurar la portabilidad a travs de los vendedores y el soporte de un rico conjunto de funcionalidades.

Copyright Formacin y Soluciones Informticas 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 lgica de la aplicacin es dividida en componentes acorde a la funcionalidad.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

798

3.3 Comunicacin de Servidores

Copyright Formacin y Soluciones Informticas EFIBS S.A.

799

3.4 Componentes de Negocio

Copyright Formacin y Soluciones Informticas EFIBS S.A.

800

3.5 J2EE API Plataforma

Copyright Formacin y Soluciones Informticas EFIBS S.A.

801

3.6 J2EE - Escenario Simple


Presentacin Browser Presentacin / Gestin de Eventos Servidor de Web
Servidor HTTP JSP COMPILER/ SERVLETG ENGINE

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

Presentacin / Gestin de Eventos Utilizacin de framework para la gestin de eventos, errores y excepciones. Permite desarrollar aplicaciones muy estables, facilitando la gestin del interfaz grfico.
Copyright Formacin y Soluciones Informticas EFIBS S.A.

Lgica de Negocio Mediante la utilizacin de EJBs (Session y Entity Beans) o Java Beans se implementa la lgica de negocio, perfectamente aislada y controlada mediante el framework.

Acceso Datos En algunos casos mediante procedimientos almacenados en la BD se encapsula lgica de negocio.
802

4 Contenedor de Enterprise Java Beans


1. Introduccin 1. Introduccin 2. Definicin de Enterprise Java Beans 2. Definicin de Enterprise Java Beans 3. Tecnologa de Enterprise Java Beans 3. Tecnologa de Enterprise Java Beans 4. Contenedor de Enterprise Java Beans 4. Contenedor de Enterprise Java Beans 5. Beneficios y Caractersticas 5. Beneficios y Caractersticas 6. Mecanismos de Interaccin 6. Mecanismos de Interaccin

Copyright Formacin y Soluciones Informticas EFIBS S.A.

803

4 Contenedor de Enterprise Java Beans


7. Conceptos Bsicos J2EE 7. Conceptos Bsicos 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 Prctico 13. Ejercicio Prctico

Copyright Formacin y Soluciones Informticas 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 ejecucin incluyendo accesos remotos al bean, seguridad, persistencia, transacciones, concurrencia, y accesos a un almacn de recursos.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

805

4.1 Contenedor de EJBs


El contenedor asla al bean enterprise de accesos directos por parte de aplicaciones cliente. Cuando una aplicacin cliente invoca un mtodo 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 operacin que el cliente realiza en el Bean. El contenedor maneja estos aspectos de forma automtica, por eso el desarrollador no tiene que escribir este tipo de lgica dentro del propio cdigo del bean.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

806

5 Beneficios y Caractersticas
1. Introduccin 1. Introduccin 2. Definicin de Enterprise Java Beans 2. Definicin de Enterprise Java Beans 3. Tecnologa de Enterprise Java Beans 3. Tecnologa de Enterprise Java Beans 4. Contenedor de Enterprise Java Beans 4. Contenedor de Enterprise Java Beans 5. Beneficios y Caractersticas 5. Beneficios y Caractersticas 6. Mecanismos de Interaccin 6. Mecanismos de Interaccin

Copyright Formacin y Soluciones Informticas EFIBS S.A.

807

5 Beneficios y Caractersticas
7. Conceptos Bsicos J2EE 7. Conceptos Bsicos 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 Prctico 13. Ejercicio Prctico

Copyright Formacin y Soluciones Informticas EFIBS S.A.

808

5.1 Beneficios y Caractersticas


Simplifican los desarrollos largos y las aplicaciones distribuidas. El contenedor (Container) de EJB proporciona servicios a nivel de sistema. Se concentran en la solucin de problemas de negocio. El EJB-Container es responsable de la administracin de las transacciones y de la autorizacin de la seguridad, dando como beneficio, que el desarrollador de Bean no se preocupe por estos temas. Divisin de grupos de trabajo. La capa de presentacin puede ejecutarse en dispositivos pequeos. Los EJBs son componentes portables. Se pueden construir nuevos componentes en base a los existentes.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

809

5.1 Cundo utilizar EJBs?


Entre las caractersticas ms importantes, se encuentran las siguientes: Si se requiere la distribucin de componentes entre mltiples maquinas. Cuando las aplicaciones deben ser escalables. (Nmero 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 aplicacin tiene una gran cantidad de desarrolladores ya que con pocas lneas de cdigo, los clientes remotamente pueden localizar los componentes EJB desarrollados por otras personas.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

810

5.2 Otras Caractersticas


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, caractersticas, o ahorros. Portabilidad tambin significa que la destreza del desarrollador de beans puede influenciarse a travs de varios contenedores EJB, proporcionando mejores oportunidades para las organizaciones y los desarrolladores. La simplicidad del modelo de programacin 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 atencin en las reglas del negocio y en un modelo de programacin muy sencillo. Esto quiere decir que los beans pueden desarrollarse rpidamente sin necesidad de profundos conocimientos en objetos distribuidos, transacciones y otros sistemas enterprise.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

811

6 Mecanismos de Interaccin
1. Introduccin 1. Introduccin 2. Definicin de Enterprise Java Beans 2. Definicin de Enterprise Java Beans 3. Tecnologa de Enterprise Java Beans 3. Tecnologa de Enterprise Java Beans 4. Contenedor de Enterprise Java Beans 4. Contenedor de Enterprise Java Beans 5. Beneficios y Caractersticas 5. Beneficios y Caractersticas 6. Mecanismos de Interaccin 6. Mecanismos de Interaccin

Copyright Formacin y Soluciones Informticas EFIBS S.A.

812

6 Mecanismos de Interaccin
7. Conceptos Bsicos J2EE 7. Conceptos Bsicos 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 Prctico 13. Ejercicio Prctico

Copyright Formacin y Soluciones Informticas EFIBS S.A.

813

6.1 Mecanismos de Interaccin


Un Enterprise Bean depende del contenedor para todo lo que necesite. Si un Enterprise Bean necesita acceder a una conexin JDBC o a otro Enterprise Bean, lo hace a travs 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 travs de su contenedor. El Enterprise Bean interacta con su contenedor a travs de uno de los siguientes tres mecanismos:

Copyright Formacin y Soluciones Informticas EFIBS S.A.

814

6.1.1 Mtodos de Retrollamada


Todo bean implementa un subtipo del interface EnterpriseBean que define muchos mtodos, llamados mtodos de retrollamada. Cada uno de estos mtodos alerta al bean sobre un evento diferente en su ciclo de vida y el contenedor llamar a estos mtodos para notificar al bean cuando lo va a activar, persistir su estado a la base de datos, finalizar la transaccin, eliminar el bean de la memoria, etc. Los mtodos de retrollamada le dan al bean la oportunidad de hacer algn trabajo inmediatamente antes o despus de algn evento.

Copyright Formacin y Soluciones Informticas 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 mtodos para interactuar con el contenedor para que el bean pueda solicitar informacin sobre su entorno como la identidad de sus clientes, el estado de una transaccin, o para obtener referencias remotas a s mismo.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

816

6.1.3 Java Naming and Directory Interface (JNDI)


El Inteface Java de Nombres y Directorios (JNDI) es una extensin estndar de la plataforma Java para acceder a sistemas de nombrado como LDAP, NetWare, sistemas de ficheros, etc. Todo bean tiene automticamente 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 especficas para ese bean.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

817

7. Conceptos Bsicos J2EE


1. Introduccin 1. Introduccin 2. Definicin de Enterprise Java Beans 2. Definicin de Enterprise Java Beans 3. Tecnologa de Enterprise Java Beans 3. Tecnologa de Enterprise Java Beans 4. Contenedor de Enterprise Java Beans 4. Contenedor de Enterprise Java Beans 5. Beneficios y Caractersticas 5. Beneficios y Caractersticas 6. Mecanismos de Interaccin 6. Mecanismos de Interaccin

Copyright Formacin y Soluciones Informticas EFIBS S.A.

818

7. Conceptos Bsicos J2EE


7. Conceptos Bsicos J2EE 7. Conceptos Bsicos 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 Prctico 13. Ejercicio Prctico

Copyright Formacin y Soluciones Informticas EFIBS S.A.

819

7.1 Conceptos Bsicos J2EE


Una aplicacin de Java 2 Edicin Empresarial (Java 2 Enterprise Edition por sus siglas en ingls, J2EE) consiste en una arquitectura que contiene mdulos de: Conexin a base de datos y lgica de negocio. Mdulos de pginas WEB a ser desplegados en un navegador de Internet. Este tipo de aplicaciones constituye un estndar desarrollado por la empresa Sun Microsystems, Inc. Una aplicacin de J2EE, est definida bsicamente por tres archivos: Enterprise Archive (EAR) Java Archive (JAR) Web Archive (WAR) los cuales se detallan a continuacin:

Copyright Formacin y Soluciones Informticas EFIBS S.A.

820

7.1.1 Estructura Bsica del War


El archivo de Web (Web Archive, por sus siglas en Ingls) contiene la capa de presentacin o pginas web que se desplegarn en el browser del cliente. Todos los elementos relacionados con las pginas web deben ser incluidos en este archivo, como por ejemplo, imgenes, 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 aplicacin web est instalada. El archivo WAR debe contener un archivo principal (index.jsp o index.html) que servir de inicio a la aplicacin. En la raz de la estructura directorios que contendr este archivo, se distingue el archivo principal index.jsp o index.html.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

821

7.1.2 Estructura de Directorios War


/NombreWAR/: Carpeta que contendr toda la definicin de la capa de presentacin de la Aplicacin WEB. Nombre se refiere al nombre de la aplicacin. En la raz de esta carpeta pueden incluirse ciertos archivos, como por ejemplo un index.html. Se recomienda que los dems 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 crdito y dbito, etc. /NombreWAR/WEB-INF/: Carpeta estndar para aplicaciones web. Dentro de ella se incluirn archivos de configuracin (.xml) as como archivos java para validaciones o redireccionar archivos. Se recomienda colocar aqu cualquier archivo de dominio no pblico, esto quiere decir que esta carpeta no estar visible en el navegador o browser de internet.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

822

7.1.2 Estructura de Directorios War


/NombreWAR/WEB-INF/web.xml: Este archivo contendr la definicin del archivo principal, definicin de paquetes o servlets a utilizar, variables de ambiente, pgina 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 variacin del web.xml, y es necesario para ser interpretado por dicho servidor.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

823

7.1.2 Estructura de Directorios War


/NombreWAR/WEB-INF/classes/: Carpeta donde se ubicarn archivos .java para determinadas tareas. /NombreWAR/WEB-INF/lib/: Carpeta donde se encuentran distintas libreras para el funcionamiento de la aplicacin. /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 imgenes de la aplicacin.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

824

7.1.2 Estructura de Directorios War

Copyright Formacin y Soluciones Informticas EFIBS S.A.

825

7.1.3 Estructura Bsica JAR


El archivo de Java (Java Archive, por sus siglas en ingls) se refiere a la jerarqua de archivos que se encargar de soportar la conexin a la base de datos as como las clases conteniendo la lgica del negocio. Para una mejor agrupacin 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 aplicacin. Adems, existir otra carpeta denominada METAINF, en maysculas estrictamente. Aqu se ubicar el archivo ejb-jar.xml, el cual se refiere al estndar de configuracin de los objetos o componentes.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

826

7.1.3 Estructura Bsica JAR


Algunos de los elementos a definir dentro de este archivo son los siguientes: Descripcin del .JAR Declaracin de session beans. Declaracin de entity beans. Seguridad en los accesos a beans y Transacciones de base de datos por bean y por mtodo.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

827

7.1.4 Estructura de Directorios JAR


NombreJAR/: Carpeta principal del Archivo JAR. Dentro de ella se localizan descriptores de configuracin 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 ms 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. Tambin se definen aqu roles de seguridad en cuanto al acceso, as como los niveles de transaccin por Bean.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

828

7.1.4 Estructura de Directorios JAR


/NombreJAR/NombreAplicacion/: Dentro de esta carpeta se encuentran la definicin de las clases de los EJB. NombreAplicacion hace referencia a un nombre relacionado con la aplicacin y constituye el nombre del paquete base a especificar en cada clase java. Por cada EJB deber definirse una carpeta conteniendo, mnimo, las tres clases bsicas de las que se compone un Bean. /META-INF/NombreAplicacion/NombreBean: Se definirn tanto Beans como tablas o lgica de negocio se requieran. Como se mencion antes, cada Enterprise Java Bean contendr al menos 3 clases java.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

829

7.1.5 Ejemplo de Directorios

Copyright Formacin y Soluciones Informticas EFIBS S.A.

830

7.1.6 Estructura Bsica EAR


Dentro del archivo empresarial (Enterprise Archive, por sus siglas en ingls) se incluyen varias estructuras de directorio y archivos XML para configuracin. Los estndares de J2EE utilizan ciertos acrnicos para los nombres de los archivos (Ej. WAR, EAR, JAR). La estructura a seguir se describe a continuacin:

Copyright Formacin y Soluciones Informticas EFIBS S.A.

831

7.1.6 Estructura Bsica EAR


nombreAPP.ear Archivo de aplicacin que podr ser ejecutado en el servidor de aplicaciones Oracle 9IAS. Dependiendo del servidor a utilizar, as sern las modificaciones que habr que realizar en el .EAR, siendo estas mnimas en la programacin y la lgica. Este archivo contendr la siguiente estructura de archivos: Aplication.xml Aqu se incluye la configuracin de la aplicacin y servir de gua o referencia al servidor de aplicaciones en el momento de instalar la aplicacin. Algunos de los elementos bsicos ms importantes que deben ser configurados son: Nombre de despliegue de la aplicacin. Mdulos que contiene el .EAR y sus rutas. Carpeta raz de la aplicacin, etc. Este archivo estar localizado dentro de una carpeta llamada META-INF, estrictamente en mayscula.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

832

7.1.7 Estructura de Directorios EAR


NombreWAR.war Contiene los mdulos de las pginas WEB. Dichas pginas se desplegarn en el cliente y combinan llamadas a los objetos de lgica de negocio con elementos de HTML. La palabra Nombre debe ser reemplazada por el nombre genrico asociado a la aplicacin. Nota: debe tenerse en cuenta que el nombre asignado a la aplicacin a utilizar debe ser igual para todos los archivos de la aplicacin. NombreJAR.jar Archivo que contiene los mdulos de lgica de negocio, objetos reutilizables y conexin a base de datos. La palabra Nombre debe ser reemplazada por el nombre genrico asociado a la aplicacin. Nota: debe tenerse en cuenta que el nombre asignado a la aplicacin a utilizar debe ser igual para todos los archivos de la aplicacin.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

833

7.1.8 Definicin de los DTDs


Los archivos de definicin 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 sintcticas de un archivo XML. De esta forma, el parser que se utilice podr indicar errores cometidos en la definicin de un tag. Algunos ejemplos de errores a detectar son: Un tag mal escrito. Utilizacin de una propiedad en un lugar que no corresponde. Omisin de un elemento requerido.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

834

7.1.9 Referencias Locales DTDs


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 aplicacin web, las validaciones se realizarn 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 ubicacin 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 Formacin y Soluciones Informticas EFIBS S.A.

835

7.1.10 Tipos de Referencia Web a DTDs


Referencia Web En el caso de los EJB, Sun Microsystems dispone pblicamente de dtd que contiene la especificacin de los elementos, que debe contener el archivo ejbjar.xml. nicamente debe escribirse la direccin 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 Formacin y Soluciones Informticas 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 Formacin y Soluciones Informticas 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 Formacin y Soluciones Informticas EFIBS S.A.

838

8. Tipos de los Enterprise Java Beans


1. Introduccin 1. Introduccin 2. Definicin de Enterprise Java Beans 2. Definicin de Enterprise Java Beans 3. Tecnologa de Enterprise Java Beans 3. Tecnologa de Enterprise Java Beans 4. Contenedor de Enterprise Java Beans 4. Contenedor de Enterprise Java Beans 5. Beneficios y Caractersticas 5. Beneficios y Caractersticas 6. Mecanismos de Interaccin 6. Mecanismos de Interaccin

Copyright Formacin y Soluciones Informticas EFIBS S.A.

839

8. Tipos de los Enterprise Java Beans


7. Conceptos Bsicos J2EE 7. Conceptos Bsicos 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 Prctico 13. Ejercicio Prctico

Copyright Formacin y Soluciones Informticas 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 Propsito 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 asincrnicamente

Message-Driven

Copyright Formacin y Soluciones Informticas EFIBS S.A.

841

9. Sesion Beans
1. Introduccin 1. Introduccin 2. Definicin de Enterprise Java Beans 2. Definicin de Enterprise Java Beans 3. Tecnologa de Enterprise Java Beans 3. Tecnologa de Enterprise Java Beans 4. Contenedor de Enterprise Java Beans 4. Contenedor de Enterprise Java Beans 5. Beneficios y Caractersticas 5. Beneficios y Caractersticas 6. Mecanismos de Interaccin 6. Mecanismos de Interaccin

Copyright Formacin y Soluciones Informticas EFIBS S.A.

842

9. Sesion Beans
7. Conceptos Bsicos J2EE 7. Conceptos Bsicos 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 Prctico 13. Ejercicio Prctico

Copyright Formacin y Soluciones Informticas EFIBS S.A.

843

9.1 Session Beans


Los beans de sesin representan un proceso o tarea, que se realizan en beneficio de la aplicacin cliente Los session beans se dividen en dos categoras: Stateless (Sin Estado) Coleccin de funciones o mtodos encargados de realizar operaciones en la base de datos, comnmente 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 sern modificadas por los mtodos en invocaciones posteriores.

StateFull (Con Estado)

Cuando se completa una llamada a algn mtodo del bean, ste queda libre para satisfacer las necesidades de otro cliente.
Copyright Formacin y Soluciones Informticas EFIBS S.A.

844

9.1 Session Beans


Para crear un Session Bean se deben especificar los siguientes 3 archivos:
Clase Nombre del Archivo Descripcin

Interfaz Remota

Nombre.java

En esta interfaz se definen los encabezados de los mtodos del negocio que se presentan como pblicos para poder ser utilizado desde una clase java o desde un .JSP. Deben arrojar la excepcin remoteException obligatoriamente y extender la clase javax.ejb.EJBObject.

Clase Home Remota

NombreHome.java

Esta interfaz define el encabezado del mtodo create que ser definido en la clase del bean. Debe arrojar la excepcin remoteException obligatoriamente y extender la clase javax.ejb.EJBHome.

Clase del Bean

NombreEJB.java

Los mtodos del ciclo de vida del bean de tipo Sessin, son definidos en esta clase. Los encabezados definidos varan un poco con respecto a las interfaces anteriores. Por ejemplo, en esta clase el mtodo create se define ejbCreate y en la interfaz home se define como create. Esta interfaz debe implementar la clase javax.ejb.SessionBean.

Copyright Formacin y Soluciones Informticas 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 algn bean creado que est libre. De no ser as, se crea una nueva instancia y se invoca al mtodo create() que inicializa la interfaz remota. Posteriormente, cada uno de los mtodos de negocio definidos, podrn 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 ningn estado y las acciones que realiza en memoria son inmediatas y finales.
Stateful Session Bean Stateless Session Bean

Copyright Formacin y Soluciones Informticas 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 ejecucin.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

847

9.4 Cuando utilizar un Stateful


Cuando el estado del bean representa una interaccin entre el bean y un cliente en especifico. Cuando el Bean necesita llevar a cabo la informacin sobre el cliente a travs de invocaciones del mtodo. Cuando el Bean interviene entre el cliente y los otros componentes, presentando una visin simplificada del cliente. Cuando Bean maneja el flujo de trabajo de varios Beans de la empresa.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

848

9.5 Cuando utilizar un Stateless


Cuando el estado del bean no tiene ningn dato para un cliente en especifico. Cuando en una invocacin del mtodo, el Bean realiza una tarea genrica para todos los clientes. Por ejemplo: Enviar un correo que confirma una orden de compra. Cuando se requiere solicitud de informacin de la base de datos de registros en forma de solo lectura (SELECT).

Copyright Formacin y Soluciones Informticas 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 Formacin y Soluciones Informticas 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 Formacin y Soluciones Informticas 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 Formacin y Soluciones Informticas 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 Formacin y Soluciones Informticas EFIBS S.A.

853

9.9 Ejercicio Prctico


El objetivo de esta prctica es el de crear un Session Bean que retorne un mensaje de Bienvenida. Guindose 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 mtodos correspondientes a la base de datos utilizados en los cursos anteriores. Los resultados debern de visualizarce por pantalla.

El instructor le guiar en todo el proceso de creacin de estos componentes.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

854

10. Entity Beans


1. Introduccin 1. Introduccin 2. Definicin de Enterprise Java Beans 2. Definicin de Enterprise Java Beans 3. Tecnologa de Enterprise Java Beans 3. Tecnologa de Enterprise Java Beans 4. Contenedor de Enterprise Java Beans 4. Contenedor de Enterprise Java Beans 5. Beneficios y Caractersticas 5. Beneficios y Caractersticas 6. Mecanismos de Interaccin 6. Mecanismos de Interaccin

Copyright Formacin y Soluciones Informticas EFIBS S.A.

855

10. Entity Beans


7. Conceptos Bsicos J2EE 7. Conceptos Bsicos 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 Prctico 13. Ejercicio Prctico

Copyright Formacin y Soluciones Informticas EFIBS S.A.

856

10.1 Entity Beans


El Enterprise Java Bean de tipo Entity se caracteriza por ser una representacin robusta y persistente de la informacin contenida en una base de datos. Cada Entity Bean ser asociado a una tabla especfica y definir las cuatro instrucciones bsicas del Lenguaje de Consulta Simple para bases de datos (SQL, por sus referencias en ingls): SELECT, INSERT, UPDATE, DELETE. De todas las anteriores, es obligatorio definir el SELECT ya que cuando el Bean es inicializado, debe poblarse con la informacin 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 Formacin y Soluciones Informticas EFIBS S.A.

857

10.2 Archivos de Especificacin


Clase
Interfaz Remota

Nombre de Archivo
Nombre.java

Descripcin
En esta interfaz se definen los encabezados de los mtodos del negocio. Deben arrojar la excepcin remoteException obligatoriamente y extender la clase javax.ejb.EJBObject.

Clase Home Remota

NombreHome.java

Esta interfaz define encabezados de los mtodos del ciclo de vida de un Bean: para crearlo, modificarlo, eliminarlo, etc. Los mtodos 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 configuracin 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 Formacin y Soluciones Informticas 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 vara de vendedor a vendedor). Cada una de estas instancias estn 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 mtodos como el select, el load , el store u otros mtodos de negocio definidos por el desarrollador (ejbHome<METHOD>).

Copyright Formacin y Soluciones Informticas 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 Formacin y Soluciones Informticas EFIBS S.A.

860

10.5 Tipos de Entity


Bean-Managed Persistence (BMP) Con el cdigo con el que se escribe el programador debe preocuparse por las relaciones. Existe cdigo SQL. Container-Managed Persistence (CMP). El contenedor asume y ejecuta las relaciones. No Existe cdigo SQL. (EJBQL)

Copyright Formacin y Soluciones Informticas 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 sera la entidad, pero ValidarUsuarioBean sera 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 an existe en el almacenaje persistente (una base de datos).

Copyright Formacin y Soluciones Informticas 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 Formacin y Soluciones Informticas 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 Formacin y Soluciones Informticas EFIBS S.A.

864

10.7 Ejemplo de Entity Beans

Copyright Formacin y Soluciones Informticas EFIBS S.A.

865

10.7 Ejemplo de Entity Beans

Copyright Formacin y Soluciones Informticas EFIBS S.A.

866

10.8 Ejercicio Prctico


El objetivo de esta prctica 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 creacin de los mismos. Esta clase adems ser explicada detalladamente.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

867

11. Message-Driven Beans


1. Introduccin 1. Introduccin 2. Definicin de Enterprise Java Beans 2. Definicin de Enterprise Java Beans 3. Tecnologa de Enterprise Java Beans 3. Tecnologa de Enterprise Java Beans 4. Contenedor de Enterprise Java Beans 4. Contenedor de Enterprise Java Beans 5. Beneficios y Caractersticas 5. Beneficios y Caractersticas 6. Mecanismos de Interaccin 6. Mecanismos de Interaccin

Copyright Formacin y Soluciones Informticas EFIBS S.A.

868

11. Message-Driven Beans


7. Conceptos Bsicos J2EE 7. Conceptos Bsicos 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 Prctico 13. Ejercicio Prctico

Copyright Formacin y Soluciones Informticas EFIBS S.A.

869

11.1 Message-Driven Beans


El Message-Driven Bean es un Enterprise Bean que permite procesar mensajes asncronos. Normalmente acta 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 aplicacin Cliente. Desde otro Enterprise Java Bean. Desde un componente Web. Los Message-driven beans, pueden procesar mltiples JMS u otras clases de Mensajes.

Copyright Formacin y Soluciones Informticas 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 slo una clase. Los Message-Driven Bean se asemejan a los stateless session bean No conservan ningn dato o estado conversacional para un cliente. Todas las instancias son equivalentes, permitiendo al contenedor de EJBs asignar un mensaje a cualquier instancia del bean. Contiene un pool de instancias permitiendo el procesamiento concurrente. Se pueden procesar mensajes para mltiples clientes.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

871

11.3 Caractersticas de los Message-Driven Bean


Se invocan asincrnicamente. Son relativamente de una duracin breve. No representan datos directamente compartidos en la base de datos, sino que pueden tener acceso y actualizar al da a estos datos. Son Stateless. Se utilizan para recibir mensajes asincrnicamente.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

872

12. Formas de Acceso


1. Introduccin 1. Introduccin 2. Definicin de Enterprise Java Beans 2. Definicin de Enterprise Java Beans 3. Tecnologa de Enterprise Java Beans 3. Tecnologa de Enterprise Java Beans 4. Contenedor de Enterprise Java Beans 4. Contenedor de Enterprise Java Beans 5. Beneficios y Caractersticas 5. Beneficios y Caractersticas 6. Mecanismos de Interaccin 6. Mecanismos de Interaccin

Copyright Formacin y Soluciones Informticas EFIBS S.A.

873

12. Formas de Acceso


7. Conceptos Bsicos J2EE 7. Conceptos Bsicos 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 Prctico 13. Ejercicio Prctico

Copyright Formacin y Soluciones Informticas EFIBS S.A.

874

12.1 Formas de Acceso


Accesos Remotos. Pueden ejecutarse en diferentes mquinas y en diferentes JVM. Puede ser un componente del Web, una aplicacin cliente, u otro Enterprise Bean. Para un cliente remoto la localizacin 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 localizacin del Bean no es transparente. Utilizacin de CMP para comunicarse con otros Entity Beans.

Copyright Formacin y Soluciones Informticas EFIBS S.A.

875

12.2 Contenido de un EJB

Copyright Formacin y Soluciones Informticas EFIBS S.A.

876

13. Ejercicio Prctico


1. Introduccin 1. Introduccin 2. Definicin de Enterprise Java Beans 2. Definicin de Enterprise Java Beans 3. Tecnologa de Enterprise Java Beans 3. Tecnologa de Enterprise Java Beans 4. Contenedor de Enterprise Java Beans 4. Contenedor de Enterprise Java Beans 5. Beneficios y Caractersticas 5. Beneficios y Caractersticas 6. Mecanismos de Interaccin 6. Mecanismos de Interaccin

Copyright Formacin y Soluciones Informticas EFIBS S.A.

877

13. Ejercicio Prctico


7. Conceptos Bsicos J2EE 7. Conceptos Bsicos 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 Prctico 13. Ejercicio Prctico

Copyright Formacin y Soluciones Informticas EFIBS S.A.

878

13 Ejercicio Prctico
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 mtodos de insertar, modificar, eliminar, consultar y listar los cuales tendrn implementado los correspondientes finders del Entity.

Paso 3. Para el caso del listar, deber crear un findAll que retorne una coleccin con los elementos de la tabla. Solicite al instructor el ejemplo de usuario y tmelo como modelo.

Paso 4. Crear las clases correspondientes a nivel del war, las cuales servirn como helpers para poder pasar la informacin entre el war y jar.
Copyright Formacin y Soluciones Informticas EFIBS S.A.

879

13 Ejercicio Prctico
Paso 5. Cree las pginas 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 mdulos conforme los vaya terminando. Recuerde validar adecuadamente la aplicacin.

Paso 7. Finalmente, implemente el mdulo 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 Formacin y Soluciones Informticas 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 Formacin y Soluciones Informticas EFIBS S.A.

Producto
id: int nombre: String descripcion: String precio: double getPrecio() :

881

También podría gustarte