Desarrollo Java
Desarrollo Java
1 Introduccin a Java
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
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
Objetivos
Implementar ejemplos por captulo, que le permita al estudiante reafirmar sus conocimientos.
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.
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).
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.
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.
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.
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.
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.
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.
15
16
17
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.
19
20
21
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).
22
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.
24
25
26
27
java version.
28
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.
29
Compila
Ejecuta
30
31
32
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.
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.
35
36
37
38
http://www.netbeans.org/community/releases/50/relnotes.html#system_requirements
Copyright Formacin y Soluciones Informticas EFIBS S.A.
39
http://www.netbeans.org/community/releases/50/relnotes.html#system_requirements
Copyright Formacin y Soluciones Informticas EFIBS S.A.
40
http://www.netbeans.org/community/releases/50/relnotes.html#system_requirements
Copyright Formacin y Soluciones Informticas EFIBS S.A.
41
42
43
44
rea de Navegacin
Salida correspondiente.
45
46
47
48
Dentro de los proyectos que se pueden crear estn: Los generales, web y los empresariales.
49
50
51
Se pueden crear aplicaciones de tipo: General, Web y empresarial. Para efectos del curso sera General.
52
Se escribe el nombre del proyecto que se desea crear, en este caso MiPrimerPrograma
Una vez que est todo configurado se procede a digitar el botn de finalizar
53
54
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.
55
2.9 Compilacin-EjecucinEdicin
Compilacin : Consiste en la revisin sintctica del cdigo fuente. Si hay errores se marcan cuales
Cdigo sin errores.
56
2.9 Compilacin-EjecucinEdicin
Ejecucin del Proyecto: Se ve el programa en ejecucin:
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.
59
La pestaa que est activa es la general, donde se puede entre otras cosas cambiar informacin referente a: paquetes java, proxy y actualizaciones.
60
La pestaa del editor, representa configuraciones relacionadas al mismo, tales como: import, mtodos, clases internas, javadoc, etc.
61
Dentro de los botones se pueden encontrar: debuger, comentarios, retroceso de lneas escritas, etc
62
63
Dentro de sta pestaa, se puede encontrar la herramienta ANT de java y un administrador del classpath.
64
Se encuentra: el Editor, configuracin del IDE, look and Feel, barra de men y dems mecanismos y opciones soportada por NetBeans 5.0.
65
66
67
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.
68
Implementacin en el Editor
69
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
71
Por ltimo, debe suministrar un nombre al proyecto sobre el cual ha realizado todos los cambios anteriores.
72
3 El Lenguaje Java
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
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
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.
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.
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 */
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:
La forma bsica de una declaracin de una variable, por ejemplo, sera Tipo identificador [ = valor] [, identificador [ = valor] ....];
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.
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
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:
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.
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.
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
85
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
86
87
88
89
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.
91
92
93
Ejemplo:
boolean verdadero = true; boolean falso = false;
94
En el caso del char es un tipo simple o atmico, mientras que el String es un tipo compuesto.
95
96
String cadena = Ejemplar de una Declaracin y asignacin; String cadena = Cambio de Lnea !! \n; String str1, str2; // Declaracin de dos variables String
97
98
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.
100
4.2 Operadores
Los operadores se pueden categorizar de la siguiente manera: Aritmticos. Relacinales y condicionales. Lgicos. De desplazamiento. De Asignacin.
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
102
4.2 Operadores
Aritmticos:
Existen formas abreviadas para incrementar y decrementar:
Operador ++ ++ ---
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
103
4.2 Operadores
Aritmticos:
Ejemplos:
d = b / 2;
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
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 y op2 son verdaderos uno de los dos es verdadero op1 es falso
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
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);
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
109
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
110
111
112
import package
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.
114
byte
short
int
long long
byte
short
int
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
116
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.
117
118
119
5 Control de Flujo
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
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
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.
123
Seleccin
Iteracin
Transferencia
124
125
126
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; }
127
128
129
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; }
130
131
sentencia1; sentencia N; }
Copyright Formacin y Soluciones Informticas EFIBS S.A.
132
Iniciacin
Trmino
... int cont=0; while (cont<10) { System.out.println(Valor Contador = " + cont); cont++; }
Variacin
133
134
135
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
137
Iniciacin
... int cont=0; do{
Trmino
Variacin
138
Termina el ciclo
139
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; }
140
141
142
143
144
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.
146
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.
147
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).
148
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
149
Objeto: Lapicero
Operacin: Escribir
150
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.
151
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
// Declaracin Instanciacin.
153
Por ejemplo:
154
155
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.
156
157
158
159
Ejemplo:
160
161
...
getId
getNombre
Copyright Formacin y Soluciones Informticas EFIBS S.A.
setNombre
Solicitante
162
[ modificadores ] class NombredeClase [ extends NombredeSuperclase ] [ implements NombredeInterface ] { . . .// Ambito de la clase }
Lo que est entre corchetes es opcional.
163
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);
elCliente
Atributos + Mtodos
165
166
Atributos
Referencia a Objetos
167
168
public
public
protected
private
169
170
171
172
173
Ejemplo:
class Cliente { volatile String nombre; ... }
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() { ... } }
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(){} ... }
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.
177
6.17 SobreCarga
Un Ejemplo:
public void consultar() { . . .} public void consultar(int x) { . . .} public int comprar() { . . .} public int comprar(int a) { . . .}
178
Por ejemplo:
179
180
Tipo de Dato Retorno Declaracin Variables del Mtodo Estatutos del mtodo
Retorno
181
182
183
184
185
186
//
// Cliente.java public class Cliente{ ... public abstract void saludar(); // se define abstract y sin // implementacin ... }
187
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.
189
6.24 Encapsulamiento
Cliente setId getId() ... id nombre telefono direccion getId Mensaje
getNombre
setNombre
Solicitante
190
191
192
193
194
195
Objetivos
Explicar el manejo de clases, as como la manipulacin tanto de atributos como de mtodos.
196
197
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.
199
7.2 Definiciones
Otro ejemplo de herencia es el siguiente:
Producto
Hardware
Software
Manual
200
class Hardware extends Producto { ... } class Software extends Producto { ... } class Manual extends Producto { ... }
201
202
public class Producto { private String id; private String nombre; } public class Hardware extends Producto{ private int periodoDeGarantia; }
elHardware
id nombre
periodoDeGarantia
203
204
205
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.
206
207
208
Los ltimos tres son crticos cuando se escriben programas Java con mltiples thread. Estos mtodos ayudan a asegurarse que los thread estn sincronizados.
209
210
SuperClase Abstracta
Cliente
SubClases Concretas
Compaia
Individuo
211
212
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.
213
214
215
216
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
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
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
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.
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.
223
224
225
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.
226
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".
227
228
229
230
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.
231
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.
232
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(); }
233
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.
234
235
236
237
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
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
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.
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.
243
244
245
246
247
248
Variables instanciadas
249
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.
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.
252
253
if ((condition1 && condition2) || (condition3 && condition4) ||!(condition5 && condition6)) { doSomethingAboutIt(); } alpha = (aLongBooleanExpression) ? beta : gamma;
254
9.5 Comentarios
/* * Bloque */ /** Aqu esta el bloque de comentarios con formato especial * que quiero indentar para ignorar. * * * * */ uno dos tres
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 */
256
9.5 Comentarios
if (foo > 1) { // Hacer un doble-flip ... } else { return false; } // Explicar porqu
257
258
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; }
260
261
262
Dos lneas en blanco se utilizan en las siguientes circunstancias Entre secciones de un fichero fuente. Entre definiciones de clases o interfases.
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
264
9.9 Nomenclaturas
Tipo de Identificador
INTERFASES
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
265
266
267
268
269
10 Manejo de Excepciones
Copyright Formacin y Soluciones Informticas EFIBS S.A.
270
271
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.
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.
274
Throwable
Error
Exception
RuntimeException
275
276
277
278
public String pruebaException(int contador) throws Exception { if (contador < 0) { throw new Exception(); } else { throw new Exception(El Contador es mayor que cero); } }
279
280
281
282
283
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.
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.
286
Utilizando el Constructor
String empName = new String("Joe Smith");
287
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 );
288
289
290
291
Eliminar espacios:
String trim(); // En ambos lados String nospaces = str.trim();
292
293
294
Quantity: Price:
17 425.00
String cantidadVal = campoCant.getText(); String precioVal = campoPrecio.getText(); int cantidad = Integer.parseInt(cantidadVal); float precio = Float.parseFloat(precioVal);
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");
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(); }
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 );
298
299
300
301
nul l
302
0 0 0
303
var 0
int[] var; array var = new int[4]; //Crea un objeto array // Declara una variable
0 0 0
304
1
nomArray[indice] = valor; items[0] = 1; items
305
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
306
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());
307
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();
309
personas.insertElementAt(nombre, 0);
personas.removeElementAt(0);
310
311
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");
312
313
11.22 Colecciones
Desde la clase admClientes.java, cree una variable de instancia denominada listaCliente de tipo Vector.
Cree un nuevo mtodo sobre esta misma clase llamado cargarCliente, el cual recibir como parmetro un Objeto de tipo Cliente.
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
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();
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.
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
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.
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.
320
11.22 Colecciones
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... }
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.
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.
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().
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.
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.
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.
329
330
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"));
331
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.
332
333
334
12 Clases Java
335
336
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.
338
339
http://java.sun.com/j2se/1.5.0/docs/relnotes/features.html#math
340
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
342
343
344
345
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
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 );
347
348
Ejemplos:
349
350
351
352
353
354
355
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
356
12.10 Traslaciones
Traslaciones de Caracteres.
Traslaciones de carcter/digito.
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).
358
Comprobaciones
boolean b = Float.isNaN( f ); // El mtodo isNaN() comprueba si f es un No-Nmero boolean b = Float.isInfinite( f );
359
360
Valores de Double:
361
362
Valores de int:
Integer.MAX_VALUE Integer.MIN_VALUE SIZE(ver 5.0). TYPE(ver 5.0).
363
364
365
Valores de Long:
Long.MAX_VALUE Long.MIN_VALUE SIZE(ver 5.0) TYPE(ver 5.0)
366
367
368
369
370
371
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.
372
373
374
375
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.
376
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.
377
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.
378
379
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] ); }
380
381
382
383
384
385
13 SWING
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
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
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.
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.
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.*
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.
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 );}}
393
13.2 Bordes
La clase JComponent tambin contiene un mtodo llamado setBorder(), que permite colocar diferentes bordes a un componente visible.
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 );}}
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.
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 );} }
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.
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 );} }
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 );} }
400
401
402
403
404
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 ); }
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 ); } }
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 ); } }
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.
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 ); }
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 ); }
411
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
412
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.
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 );
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.
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
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 ); }
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 ); }
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 ); }}
419
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.
420
421
422
423
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:
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 );
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:
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] ); } }
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 );}}
430
13.16 Pestaas
JTabbedPane, puede manejar directamente todas las fichas, a base de pestaas y permite cambiar a cualquiera de ellas.
431
432
433
434
435
String respuesta = JOptionPane.showInputDialog( this,"Nombre ", "Tutorial de Java, Swing",JOptionPane.DEFAULT_OPTION ); System.out.println( "Respuesta: "+respuesta );
Y observe Ficheros.
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.
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 ); }
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(); } }
439
440
441
442
443
444
Archivo
Clientes
Productos
Ordenes
445
446
447
448
449
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.
450
Anexo
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
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
453
Objetivos
Dar a conocer las nuevas caractersticas del J2SE. Mostrar ejemplos de algunas de las caractersticas ms relevantes.
454
455
456
457
458
459
460
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));
461
public class ejemploDeAutoboxinInboxing { public static void main(String args[]){ Integer a = new Integer(20); int b=0; b=a; // AutoBoxing a=b; // Unboxing }
462
463
464
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()); }
465
import static java.lang.Math.*; public class ejemploImportacionesEstaticas { public static void main(String args[]){ double r = cos(PI * 10); } }
466
public class salidasConFormato { public static void main(String args[]){ int id = 20; String nombre = new String("Jose"); System.out.printf("%d,%s",id,nombre ); } }
467
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(); } }
468
469
470
471
472
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.
473
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
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.
477
478
479
480
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.
481
482
483
484
485
486
487
488
489
490
491
492
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
495
496
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
497
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
498
499
500
Procesa el resultado
501
502
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
504
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/
505
506
507
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.
508
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.
509
510
Database
511
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();
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
514
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();
515
516
Statement stmt = null; ResultSet rset = null; stmt = conn.createStatement(); rset = stmt.executeQuery("SELECT nombre FROM persona");
517
col1
col2
518
519
520
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");
521
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.
522
pueden
lanzar
excepciones
de
tipo
523
El control de las transacciones cuando no se encuentra el modo autocommit, se debe utilizar: conn.commit(); conn.rollback();
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
525
Navegacin en el Resultado
526
527
528
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
530
531
532
Ejecutar el estatuto
pstmt.executeQuery(); pstmt.executeUpdate(); int idPersona = 06771; PreparedStatement pstmt = conn.prepareStatement("UPDATE persona SET nombre = ? WHERE id = ? ");
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
535
536
Ejecutar el estatuto
cstmt.execute();
Por Ejemplo
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
539
540
541
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.
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
545
546
547
548
549
550
551
<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.
552
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).
553
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
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.
556
557
558
559
560
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.
561
<SELECT NAME="variable" MULTIPLE> <OPTION VALUE=1> Opcin Primera <OPTION SELECTED VALUE=2> Opcin Segunda <OPTION VALUE=3> Opcin Tercera </SELECT>
562
563
564
565
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
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).
568
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.
569
570
571
572
573
574
Internet
Firewall jsp jsp jsp
servlets servlets
servlets servlets
Firewall
575
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.
576
577
578
579
580
581
582
583
584
585
586
587
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); }
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>");
588
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>
589
590
591
592
593
594
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
597
598
599
600
601
602
603
604
605
...
606
607
608
609
610
611
612
9.2 Threading
Multi-thread Model Single-thread Model
Cliente 1
613
614
615
616
617
618
619
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.
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);
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()); } }
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);
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"); } } }
625
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
628
629
630
631
632
633
Servidor de Web
3
Ciclo de Vida del Servlet
2
Compilar Servlet demo.class
634
635
636
637
En XML, se puede usar una sintaxis alternativa para las expresiones JSP: <jsp:expression>Expresin Java</jsp:expression>
638
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>
639
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>
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
642
643
644
645
Cliente 2
646
647
648
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".
649
Debemos usarla con extrema precaucin, ya que el servidor podra utilizar una superclase personalizada.
650
651
652
653
654
655
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.
656
657
658
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.
661
<!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.
662
663
664
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
665
beanName
666
667
668
669
<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>
670
671
672
\"
%\> <\%
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
675
676
677
678
679
680
FRAMEWORK STRUTS
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.
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
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.
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).
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
686
2 Modelo 3 Capas
Esquema General
Presentacin
Explorer JSP, HTML
Lgica de Negocio
Cdigo JAVA
Base de Datos
687
2 Modelo 3 Capas
Detalle del esquema en tres capas
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
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.
690
2 Modelo 3 Capas
Capa de Lgica de Negocio Contiene: Clases JAVA Helpers Session Beans EJBs
691
2 Modelo 3 Capas
Capa de Datos
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
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
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
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
696
3 Framework STRUTS
Esquema
Cliente ( Browser )
View (JSP)
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.
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.
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.
700
3 Framework STRUTS
Como funciona esto en aplicaciones WEB ? 2.Acciones 1. Solicitud
Controller ( Servlet)
3. Resultados 4. Redireccionamiento
6. Resultado
5. Consulta
701
3 Framework STRUTS
Como funciona esto en aplicaciones WEB ?
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).
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
.jsp
forward action mapping add form errors display errors invoke / replay
Entity Beans
Struts-config.XML
Errors.java
add logic errors
704
3 Framework STRUTS
VIEW con JSPs
Permite mezclar cdigo HTML esttico con HTML generado dinmicamente ( cdigo JAVA ). Se ejecutan en cualquier servidor WEB
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.
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
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>
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.
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.
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" %>
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 -->
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>
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.
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.
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.
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.
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; }
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.
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.
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")).
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.
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.
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>
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).
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; }
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; }
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; }
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
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
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.
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.
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>
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.
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.
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>
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>
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.
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.
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.
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
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.
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.
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.
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)
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.*;
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
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.
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())); }
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()); }
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.
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"); }
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")); } }
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"));
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.
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.
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); }
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; }
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; } }
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.
761
3 Framework STRUTS
MODEL --- Tipos de EJB
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
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.
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
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.
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.
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.
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
Cliente
create lookup destroy
Descriptores de despliegue
Entorno
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
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
771
4 Estructura de la Aplicacin
View Controller Model EJB Database
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.
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)
774
4 Estructura de la Aplicacin
Estructura Principal
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
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
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
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
779
4 Estructura de la Aplicacin
WAR ARCHIVO FORM JSP
780
4 Estructura de la Aplicacin
WAR ARCHIVO JSP WAR STRUTS - FORM STRUTS - ACTION
WAR
WAR HELPER
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
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.
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)); !
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>
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>
786
INTRODUCCION A J2EE
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).
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
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
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.
791
792
793
794
795
796
797
798
799
800
801
Lgica de Negocio Servidor de Aplicaciones Entity Beans Session Beans Java Beans
ejb ejb ejb
Acceso BD
http://www.efibs.com
Internet
Firewall jsp jsp jsp
servlets servlets
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
803
804
805
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
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
808
809
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.
810
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
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
813
814
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.
816
817
818
819
820
821
822
823
824
825
826
827
/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.
828
829
830
831
832
833
834
835
836
837
<home>org.sica.cxc.dedpla.listas.ListasHome</home>
</ejb-jar>
838
839
840
Message-Driven
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
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
843
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
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.
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.
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.
845
846
847
848
849
850
851
852
853
854
855
856
857
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.
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.
NombreEJB.java
Debe definir los encabezados y su contenido. Esta interfaz debe implementar la clase javax.ejb.EntityBean.
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.
858
859
860
861
862
public Long getPerIdPerfil() throws RemoteException; public void setPerIdPerfil(String perIdPerfil) throws RemoteException;
public String getPerDescripcion() throws RemoteException; public void setPerDescripcion(String perDescripcion) throws RemoteException;
863
public Perfil create(String idPerfil, String perDescripcion) throws RemoteException, CreateException, FinderException;
864
865
866
867
868
869
870
871
872
873
874
875
876
877
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.
880
Orde n
ItemOrden
NumLinea: int cantidad: int precio: double getCantidad() setCantidad() setPrecio() getPrecio() getTotalItem()
Producto
id: int nombre: String descripcion: String precio: double getPrecio() :
881