Edoc - Pub Java Intermediopdf
Edoc - Pub Java Intermediopdf
Edoc - Pub Java Intermediopdf
Descripción breve
Al final de este curso el estudiante aprenderá las técnicas básicas de
programación Orientada a Objetos, Bases dede datos y diseño de
de aplicaciones
aplicaciones
Web, mediante el uso de Java como lenguaje de programación.
Introducción al curso
curso
Requisitos
Tabla de contenido
Introducción
Introducción al
a l MVC ........................................................................................................ 6
Proceso de invocación en el VMC ..................................................................................... 7
Ventajas de la Arquitectura
Arquitectura por Capas............................................................................
Capas............................................................................ 8
Inconvenientes de la arquitectura por Capas ..................................................................
.................................................................. 8
Principios de bases
b ases de datos ............................................................................................. 9
Sobre el concepto de los datos ....................................................................................... 9
Sobre las bases de datos ............................................................................................... 9
Sobre las tablas ........................................................................................................... 10
Tipos de datos ............................................................................................................. 11
Consultas DML............................................................................................................... 1 1
Insertar datos a una tabla....................................................................................... 12
Eliminar datos a una tabla ..................................................................................... 13
Modificar datos a una tabla .................................................................................... 14
Consultar datos a una tabla .................................................................................... 15
Consultas DDL ............................................................................................................... 15
Objetos de JDBC ............................................................................................................ 16
Cargar el controlador JDBC ....................................................................................... 17
Conectar con el SGBD................................................................................................. 17
Crear y ejecutar instrucciones SQL............................................................................ 18
Recuperar conjuntos a alto nivel ................................................................................
................................................................................ 19
Mapeo de datos Java contra SQL ............................................................................... 21
Objetos de tipo Statement .............................................................................................. 21
El objeto Statement
Sta tement .................................................................................................... 21
Ejemplo del uso del Statement ............................................................................... 22
El objeto PreparedStateme
P reparedStatement nt ..................................................................................... 22
Manejo de transacciones
transacciones ................................................................................................ 24
Ejemplos de URL para la conexión ................................................................................ 26
Esquema de las URLs ............................................................................................. 26
Ejemplos de URLs conformadas ............................................................................. 27
Ejemplos de controladores JDBC ............................................................................ 28
Asociar el puente
puente JDBC/ODBC con la la base de datos..................................................... 29
Introducción
Introducción a HTML ..................................................................................................... 30
4
Capítulo 1
Arquitectura N capas
En el presente capítulo se trataran temas, referentes a como diseñar y distribuir una
aplicación Java, para tener las mejores prácticas en un diseño de un software de
mediana a gran escala. Supongamos un sistema de gran escala, en donde todo el
código relacionado con la presentación, validación, reglas de negocios, conexión a bases
de datos y demás niveles se encuentre programado en un solo nivel; queda claro que
esta práctica dificulta considerablemente la legibilidad, portabilidad, mantenibilidad e
incluso la seguridad del código.
Esta es la razón principal por la que los programadores deciden utilizar el Modelo
Vista Controlador, con el fin de facilitar el trabajo de programación.
Introducción al MVC
Unos de los modelos de desarrollo de software más utilizados es el denominado Modelo
Vista Controlador (MVC). La idea detrás de este modelo es separar el código en
diferentes capas o niveles.
Ilustración MVC 1
El modelo MVC se puede programar en compañía con otros patrones de diseño como el
patrón Observador, permitiéndole extender la facilidad de notificarle a toda la
aplicación cambios en el estado del modelo. MVC resulta realmente importante para
desarrollar aplicaciones que tengan un nivel de complejidad de mediano a gran
sistema. El patrón tiene tres componentes principales:
El modelo representa las reglas del negocio, es decir los algoritmos y procesos que
tiene que llevarse a cabo para que la aplicación funcione adecuadamente. Pongamos
los siguientes ejemplos: se cuenta con un sistema de facturación, el modelo de la
7
2. La vista una vez se han cargado todos los códigos de barras de los productos
que se quieren facturar, debe invocar al controlador la solicitud para procesar
este evento.
Capítulo 2
Uso del JDBC para acceso a BD
Los grandes sistemas de cómputo, tiene algo en común. Todos y cada uno de ellos por
detrás son soportados por una base de datos que les permite almacenar de forma
persistente la información del sistema. Imaginemos un sistema perfectamente bien
diseñado, pero que fuera incapaz de recuperar la información cuando la computadora
se reinicie, serie en un buen sentido una gran obra ingenieril sin funcionalidad.
En el presente capitulo, se van a explorar los conceptos básicos de bases de datos. Así
como los códigos fuentes de Java para conectarse a una base de datos. Para efectos de
esta guía se va utilizar MySQL como herramienta de bases de datos.
1 Consistenciase refiere a que todas las transacciones de una base de datos, son transacciones
completas y por lo tanto no hay información incorrecta entre los datos.
11
Tipos de datos
Como lo ha notado previamente, la tupla anterior está construida por números enteros
(05, 02), literales (“Gabriela”, “Avalos Chavarría”) y decimales ( 500000.0). Los SGBD
tienen una gran cantidad de tipos de datos. En la siguiente tabla se expresan los tipos
de datos de MySQL.
Consultas DML
Existen lenguajes especiales para comunicarse con las bases de datos, estos lenguajes
reciben el nombre de SQL. Estos son lenguajes que son invocados a través de un
conector, permitiendo modificar el estado de una base de datos.
Podemos ver el paso de consultas SQL como una acción hacia una caja negra, la cual
nos garantiza el cumplimiento del ACID, por lo que la labor del programador de
aplicaciones consiste en la manipulación de la parte visual (vista), el desarrollo del
12
Pero queremos agregarle un nuevo registro, puesto que la aplicación necesita registrar
un nuevo empleado en el sistema. El nuevo empleado tiene la siguiente estructura:
(07, “Rafa”, “Mata Calderón ”, 01, 46664.6).
Ahora se nos ha solicitado eliminar a todos los empleados que tengan el campo ID
menor o igual que 2 o que tengan el campo nombre igual a ‘Xinia’ . Y que el salario NO
sea mayor a 550000.
En términos generales la sintaxis para eliminar un registro es:
DELETE <nombre_tabla> WHERE <condición1> <expresionLogica> …
Donde la condición, debe ser una expresión booleana valida. Las siguientes son
expresiones validas:
A = 4, A igual a 4
A < 4, A menor que 4
A <= 4, A menor o igual que 4
A <> 4, A diferente que 4
A > 4, A mayor que 4
A >= 4, A mayor o igual que 4
Ahora se nos ha solicitado modificare el salario a todos los empleados que tangan un
salario menor que 55000000, para ello súmele 10.000 colones a todos los empleados.
En términos generales la sintaxis para eliminar un registro es:
UPDATE FROM <nombre_tabla> SET <columna> = <valor> WHERE
[<condición1><expresionLogica> …]
La expresión quedaría:
UPDATE FROM personas
SET salario = salario + 10000
WHERE salario <= 550000
Ahora se nos ha solicitado crear un informe, el cual debe mostrar todos los subalternos
del jefe 01. Es decir, los que tengan como campo jefe = 01. Además, lo que interesa en
el informe es el ID, nombre y apellido.
En términos generales la sintaxis para obtener un(os) registro es:
SELECT {*|<columnas>} FROM <tabla> WHERE <condicion1>…
Como resultado se crea una tabla en memoria que es una sub-relación (podría ser el
mismo conjunto original) a la tabla en la que se le invoca la consulta.
PERSONAS
ID Nombre Apellidos
02 Ezzio Auditore
03 Nicolas Brenes Alvares
Consultas DDL
Las consultas DDL permiten modificar la base de datos a nivel de estructura “lógica”,
esto es agregar una tabla, eliminar la tabla, agregarle columnas, removerle columnas,
crear procedimientos, cambiar dominios (o tipos de datos) a las columnas entre
muchas otras funcionalidades. Para efectos de este curso, los DDL no serán
estudiados.
16
Objetos de JDBC
Prácticamente todas las aplicaciones J2EE almacenan, recuperan y manipulan
información que reside en las bases de datos. Existe para ello una facilidad en Java
para establecer conexión con las bases de datos, y ejecutar cualquier DDL y DML que
soporte la base de dato en cuestión.
Existe muchos SGBD comerciales, que van desde Oracle, DB2, Sysbase y SQL Server.
Sin mencionar las alternativas libres como MySQL, Postgress. La idea que nació en los
años noventa fue desarrollar algún mecanismo para conectarse a las bases de datos
más populares; la primera barrera que debieron romper los investigadores de Sun
Microsystems fue la enorme cantidad de lenguajes de programación, pues cada SGBD
tiene su propio lenguaje y sus propios estándares de conexión; esto significa que se
debía reescribir todo el código de bajo nivel que se tenía para conectarse a una base de
datos Oracle, si queríamos cambiar de bases por Sysbase.
La solución de Sus Microsystem fue el desarrollo en 1996, del paquete para
desarrolladores Java Developer Kit (JDK) y de la API Java Data Base Conector
(JDBC); estos controladores fueron incorporados por necesidad, puesto que antes de la
introducción de estos controladores a Java no se le consideraba un lenguaje
empresarial (puesto que no existían forma de conectarse a la base de datos).
El JBDC de hecho no era un controlador, era una serie de normas y estándares de
como deberá funcionar el conector en Java, la idea fue incentivar a desarrolladores de
bases de dato y a terceras personas a construir su conector propio; con el fin
claramente de explotar todo el surgimiento de Java.
Como resultado del desarrollo de muchos conectores JDBC, se podría utilizar objetos
de alto nivel de Java en consultas de bajo nivel en las bases de datos. Esto permitía a
los desarrollares simplificar el desarrollo de aplicaciones.
El controlador JDBC hace que los componentes J2EE sean independientes de la base
de datos, lo cual se ajusta a la filosofía Java de independencia entre plataformas. Las
consultas se envían sin ninguna validación, esto significa que es labor de la base de
datos validar y comprobar la correcta ejecución de las consultas y procedimientos.
Proceso para establecer conexión
package ejemplo.pkg1;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public ConexionBD(){
try {
Class.forName("jdbc.odbc.JdbcOdbcDriver");
bd = DriverManager.getConnection(url, usuario, clave);
} catch (ClassNotFoundException | SQLException ex) {
}
}
}
18
Una de las formas que se pueden cargar los datos del DataSet es mediante un número
entero que va desde 0…n, así por ejemplo la consulta:
Podrían ser cargada con la siguiente igualdades: nombre (0), apellidos (1), salario (2).
Sin embargo el problema de este modelo, se da cuando se cambia el esquema de la
consulta o se cambia la estructura de la tabla; ambas situaciones podrían darse sin
que el desarrollador se dé cuenta del cambio. Es por ello que la recomendación oficial
consiste en cargar los elementos indicándoles explícitamente el nombre del campo,
como se detalla mediante las siguientes líneas de programación:
String nombre = resultados.getString("nombre");
String apellidos = resultados.getString("apellidos");
21
En la siguiente tabla se estarán mapeando los datos desde el SGBD contra los datos de
Java.
TIPO SQL TIPO JAVA
CHAR String
VARCHAR String
LONGCHAR String
Numeric Java.math.BigDecimal
Decimal Java.math.BigDecimal
BIT Boolean
TINYINT Byte
Smallint Short
Integer Integer
Bigint Long
Real Float
Float Float
Double Double
Binary Byte[]
Varbinary Byte[]
longvarbinary Byte[]
BLOB Java.sql.Blob
CLOB Java.sql.Clob
2 Un procedimiento almacenados en los SGBD, son equivalentes a las funciones en JAVA. Son
bloques de código escrito en una extensión de SQL.
22
El objeto PreparedStatement
Antes de ejecutar una consulta el SGDB tiene que compilar la consulta, con el objetivo
de obtener la mejor ruta para acceder a los datos. A este proceso se le llama
simplemente path y tiene por objeto identificar la forma más eficiente de responder a
la consulta.
3 Elpatrón iterador permite manipular colecciones de datos de forma más simple para el
programador, existe típicamente el método next() el cual retorna el dato actual.
23
Observe que modificar el método para eliminar o actualizar una persona de una tabla,
consiste simplemente en cambiar la consulta SQL.
24
Manejo de transacciones
Una de las características del ACID, es la consistencia. En torno a la consistencia, las
bases de datos deben estar en un estado donde todos los datos son correctos. Para
asegurar el proceso de transacción en Java es necesario explicar nuevos métodos que
nos permiten definir las reglas del todo o del nada.
Cuando se plantean transacciones en Java, es importante tener claro la idea central.
Se define una transacción atómica como aquella transacción en donde al fallar al
menos uno de los procesos, toda la transacción se debe deshacer. Al proceso de
deshacer en bases de datos, se le denota como “ rollback” mientras que al proceso de
hacer permanente los cambios se le llama “commit”.
Correctamente Rollback
• Transacción Agrega
•
modificado1 = comando1.executeUpdate();
modificado2 = comando2.executeUpdate();
if(modificado1 == 0 || modificado2 == 0){
// rollback pues alguna de las 2 cuentas no existe
bd.rollback();
terminoBien = false;
}
else{
bd.commit();
}
comando1.close();
comando2.close();
bd.close();
} catch (Exception ex) {
bd.rollback();
bd.close();
terminoBien = false;
} finally {
return terminoBien;
}
}
Ponga mucha atención al código anterior, esta con negrita resaltado lo nuevos
aprendizajes en torno al manejo de transacciones. Observe que hay que definirle al
26
conector que el parámetro autoCommit va ser false, de otra forma cada operación
execute ejecutaría un Commit implícito. También es importante que observe cuando se
debe invocar el commit (cuando las 2 operaciones fueran completadas correctamente).
Desde luego, observe también el momento que se ejecuta el Rollback, el mismo es
ejecutado en dos situaciones: la primera cuando alguna (o ambas) de las cuentas no
existan, o cuando la ejecución falle (por ejemplo una violación a una regla de
integridad).
De esta forma, se ejecutan todas y cada una de las operaciones creando una
transacción atómica, que garantiza que no existan débitos sin créditos a las diversas
cuentas.
Oracle
jdbc:oracle:thin:@ nombre_host: puerto:nombre_base_datos
MySQL
27
jdbc:mysql:// nombre_host: puerto
puerto/nombre_base_datos
DB2
"jdbc:db2:// nombre_host: puerto/nombre_base_datos:currentSchema=NCIM;"
SQL Server
jdbc:sqlserver://nombre_host\\nombre_base_datos;puerto
PostgreSQL
jdbc:postgresql://nombre_host:puerto/ nombre_base_datos
Esta URL de ejemplo conecta a una base de datos de Oracle con las siguientes
propiedades:
1. La dirección IP del host de servidor de base de datos es 192.168.1.2.
2. La base de datos se ejecuta en el puerto 1521.
15 21. Este es el puerto predeterminado
predeterminado
para Oracle.
3. El nombre de la base de datos de Oracle es bdVentas
MySQL
jdbc:mysql://192.168.1.2:3306/bdVentas
Esta URL de ejemplo conecta a una base de datos de MySQL con las siguientes
propiedades:
1. La dirección IP del host de servidor de base de datos es 192.168.1.2.
2. La base de datos se ejecuta en el puerto 3306.
330 6. Este es el puerto predeterminado
predeterminado
para MySQL.
3. El nombre del esquema de la base de datos de topología
topología es bdVentas.
DB2
jdbc:db2://192.168.1.2:50000/itnm:NCIM
Esta URL de ejemplo conecta a una base de datos de DB2 con las propiedades
siguientes:
1. La dirección IP del host de servidor de base de datos es 192.168.1.2.
28
SQL Server
jdbc:sqlserver://192.168.1.2\\sqlexpress;50000;user=sa
jdbc:sqlserver://192.168.1.2\\sqlexpress;50000;user=sa;password=se
;password=se
cret
Esta URL de ejemplo conecta a una base de datos de SQL Server con las propiedades
siguientes:
1. La dirección IP del host de servidor de base de datos es 192.168.1.2.
2. La base de datos se ejecuta en el puerto 50000.
3. El nombre de la base de datos de SQL Server es sqlexpress.
sqlexpress.
PostgreSQL
jdbc:postgresql://localhost:5432/testdb
Esta URL de ejemplo conecta a una base de datos de PostgreSQL con las propiedades
siguientes:
1. La dirección IP del host de servidor de base de datos es localhost
2. La base de datos se ejecuta en el puerto 5432.
3. El nombre de la base de datos es testdb
Capítulo 3
Hyper Text Markup Language
La construcción de sitios web ha traído a muchas empresas y sectores del gobierno
poder crear portales para realizar trámites en línea. De esta posibilidad técnica es
como surgen la idea en Costa
Costa Rica de crear un GobiernoDigital
GobiernoDigital el cual tiene
tiene como
metada poder realizar todos los tramites en línea; para ello los programadores
programado res han
recurido a muchos lenguajes de programación como ASP.net, en el caso particular de
Java; existe todo una sub-especificación del lenguaje llamado JSP que permite crear
portales web con con funcionalidades
funcionalidades (sitios transaccionales).
transaccionales). En este capítulo
aprenderemos los
los fundamentos básicos del HTML, el cual se toma como base a la hora
de crear paginas JSP.
Introducción a HTML
HTML es la abreviatura de HyperText Markup Language, y es el lenguaje que todos
los navegadores usan para crear las páginas que visitamos.
Es un lenguaje de programación muy simple, que utiliza etiquetas anidadas para
expresar la semántica de los objetos a mostrar, el texto que se ingresa entre los
paréntesis angulares (<… >) tiene un descriptor que le permite al programador
identificar el tipo de objeto que se está declarando. Por ejemplo el siguiente código
“hola mundo”.
representa un texto: “hola
<i>hola <b>mundo</b></i>
<b>mundo</b></i>
Todo documento HTML tiene como estructura básica las siguientes líneas, estas
confirman un esqueleto básico que permite separar dos grande grupos. Los metadatos
(head) y el cuerpo (body). Los metadatos ayudan a al navegador a interpretar
correctamente el código que se encuentra en el body, mientras que el body se usa para
definir propiamente la página.
<html>
<head>
…
</head>
<body>
…
</body>
</html>
El título de nuestra página web viene especificado por las etiquetas: <TITLE> y
</TITLE>. Todo elemento es opcional, pero se recomienda utilizar siempre la etiqueta
<title>, esta etiqueta permite definir el nombre de la página, en la siguiente imagen
se ha ejecutado como title: “Java Intermedio – ICAI”.
32
<html>
<head>
<title>Java Intermedio - ICAI</title>
</head>
<body>
<i>hola <b>mundi</b></i>
</body>
</html>
Indicador de refresco del documento
<META http-equiv="refresh" content="número_segundos;url=URL_destino">
Esta etiqueta permite redireccionar desde una página a otra página (o la misma).
Supongamos que nuestro sitio se actualiza cada 5 minutos con información nueva,
entonces queremos que de forma automática el navegador refresque consigo misma. El
siguiente código hace que después de 1 minutos (60 segundos) el sitio nos lleve
automáticamente a la página oficial del ICAI: http//www.icai.ac.cr
<html>
<head>
<title>Java Intermedio - ICAI</title>
<META http-equiv="refresh"
content="4;url=http://www.icai.ac.cr">
</head>
<body>
<i>hola <b>mundi</b></i>
</body>
</html>
Definición de colores
Antes de seguir, se debe explicar cómo se conforman los colores en los documentos
HTML, estos colores se pueden identificar mediante dos maneras. La primera es
utilizando el nombre (name) el cual se puede verificar en la siguiente tabla, primera
columna. La segunda forma es mediante un código RGB (Red, Green, Blue) escrito en
hexadecimal, mediante el siguiente formando: (#rrggbb) así por ejemplo el rojo
#FF0000 en RGB quedaría (255, 0, 0).
33
La etiqueta <BODY> presenta una serie de atributos que van a afectar a todo el
documento en su conjunto. Estos atributos nos van a permitir definir los colores del
texto, del fondo, y de los hiperenlaces del documento. Incluso nos permitirán insertar
una imagen de fondo en nuestra página.
<BODY background="URL" bgcolor="#rrggbb"
text="name" link="name" vlink="name" >
Caracteres especiales
Se estarán preguntando cómo se podría escribir los caracteres especiales como el
menor que o mayor que, puesto que estos son elementos propios de las etiquetas.
También se estarán como se podría poner tildes si el HTML solamente soporta código
ASCII. Para todos estos caracteres especiales existen códigos; así por ejemplo cuando
se necesite insertar un menor que se debe escribir el código “<”.
Símbolo Código
< (menor que) <
> (mayor que) >
& (ampersand) &
" (comillas) "
Lo mismo sucede con las tildes y las eñes. Es necesario utilizar símbolos especiales
para poder escribir el código respectivo, de esta forma si queremos escribir el apellido
“Chavarría” es necesario escribir el código “Chavarrií” . La siguiente tabla se
detallan los caracteres especiales para tildes, eñes y otros símbolos del español.
¡ ¡
navegadores solamente van interpretar los espacios, saltos de línea y demás elementos
de espacios una única vez:
<html>
<head></head>
<body>
<p>
Hola mundo
como
le va a usted
</p
</body>
</html>
Para resolver estas características del HTML se han introducido, símbolos que
permiten agregar espacios en blanco o saltos de línea.
EJEMPLO RESULTADO
Ejemplo Resultado
<hr>
37
<hr size=5
width=50%
align=right>
<hr size=10
width=50%
align=center>
Cabeceras: <h1>
En un documento HTML podemos incluir seis tipos distintos de cabeceras, que van a
constituir normalmente el título y los distintos temas que forman el documento,
aunque podremos utilizarlas en el punto que queramos del documento para resaltar
cualquier texto. Estas cabeceras son definidas por las etiquetas
<H1><H2><H3><H4><H5> y <H6>. La cabecera <H1>será la que muestre el texto de
mayor tamaño, este tamaño irá disminuyendo hasta llegar a la cabecera </H6>. Como
podemos ver en la siguiente.
Ejemplo Resultado
Cabecera 1
<H1>Cabecera 1</H1>
<H2>Cabecera 2</H2>
Cabecera 2
<H3>Cabecera 3</H3> Cabecera 3
<H4>Cabecera 4</H4> Cabecera 4
<H5>Cabecera 5</H5> Cabecera 5
<H6>Cabecera 6</H6> Cabecera 6
Existen otras etiquetas que nos van a servir para especificar, de manera diferenciada,
unidades lógicas de nuestro documento HTML tales como citas, direcciones de correo,
etc. En algunos casos el formato obtenido con estas etiquetas de estilo lógico va a ser el
mismo que con las anteriores, a las que se les denomina también etiquetas de estilo
físico.
Ejemplo Resultado
Ejemplo Resultado
Listas
Podemos representar elementos en forma de lista dentro de nuestros documentos de
una forma muy sencilla y con una gran versatilidad. Estas listas podrán incluir
cualquiera de los elementos HTML e incluso podemos definir listas anidadas, es decir,
listas dentro de listas. HTML nos permite crear tres tipos distintos de listas:
• Listas no numeradas
• Listas numeradas
• Listas de definiciones
Hiperenlaces
Los hiperenlaces son enlaces de hipertexto que nos van a permitir acceder de manera
directa a otros documentos HTML independientemente de su ubicación, o a otras
zonas dentro de nuestro propio documento.
41
Si nos creamos una página HTML con distintos capítulos, podríamos crear una sección
para cada uno de ellos, de forma que si pinchamos en el hiperenlace correspondiente al
Capítulo 1, el navegador saltaría directamente a la sección correspondiente al Capítulo
1.
Tablas
HTML nos va a permitir la inclusión de cualquiera de los elementos de nuestra página
(texto, imágenes, hiperenlaces, listas, etc.), dentro de una tabla. Gracias a lo cual
conseguiremos dar una mayor y mejor estructuración a los contenidos de nuestros
documentos. Además, la definición de las tablas en HTML es muy abierta, pudiendo en
42
Mi primera tabla
Ejemplo Resultado
Ejemplo Resultado
Formularios
El formulario es el elemento de HTML que nos va a permitir interactuar con los
visitantes de nuestras páginas web, de forma que podemos solicitarle información al
usuario y procesarla. De esta forma, podremos crear en nuestras páginas: encuestas
para solicitar la opinión del visitante sobre algún tema e incluso sobre el contenido de
nuestra propia página web, cuestionarios para evaluar la asimilación de contenidos
sobre un tema concreto que se trate en la página, etc.
El contenido de la información introducida por medio del formulario será enviado a la
dirección URL donde resida el programa que se encargará de procesar los datos. A este
tipo de programas externos se les denomina programas CGI (Common Gateway
Interface).
La etiqueta HTML que nos va a permitir la creación de formularios es <FORM>. Su
formato es el siguiente:
<FORM action ="URL_CGI " method ="post/get" >
..... Elementos del formulario .....
</FORM>
Los argumentos rows y cols nos van a permitir especificar, respectivamente, el número
de filas de texto visibles y el número de columnas de texto visibles en el campo.
Introducción a JavaScript
JavaScript es un lenguaje de programación el cual fue desarrollado para programar
páginas web dinámicas. Una página web dinámica es una página que se construye de
forma dinámica. Pensemos en una página estática como Google, es al final y al ca bo un
sitio donde la apariencia no cambia. Si analizamos Facebook, nos damos cuenta que la
misma se construye de forma personalizada por cada usuario, además las
notificaciones son actualizadas periódicamente sin intervención del usuario (a esto se
le llama Ajax y es una aplicación del código JavaScript).
JavaScript es un lenguaje interpretado, eso significa que dicho lenguaje se ejecuta por
primera vez cuando se consume el código del lado del cliente, esto permite que no
47
Capítulo 4
Applets
Los applets son aplicaciones escritas en Java, las cuales se pueden empotrar dentro de
una ventana. La ilusión final de este proceso es tener una aplicación funcional, en una
ventana web. Podemos encontrar Applets en diversos sitios, un ejemplo muy común es
el Banco Nacional de Costa Rica, el cual utiliza un Applet para verificar la clave de
ingreso al sitio transaccional.
Lo que significa que un Applet, hereda los métodos clásicos de los objetos, pero
además de un panel, con esto se logra que dicho Applet sea un panel grafico
donde podamos modificar y agregar controles como se vio en el curso de Java
Introductorio del ICAI.
La clase Applet
La siguiente tabla muestra métodos definidos por la clase Applet en Java2, y
proporcionan todo lo necesario para ejecutar un applet desde su inicio hasta su
finalización, así como los métodos para cargar y exhibir imágenes y reproducir sonidos.
void destroy( ) Este método es llamado por el navegador
justamente antes de que el applet termine su
ejecución. Su función es liberar la memoria
asignada a la aplicación.
AppletContext Devuelve el contexto asociado con el applet, lo
getAppletContext( ) que le permite consultar y afectar el medio
ambiente en el cual se ejecuta.
String getAppletInfo( ) Devuelve una cadena que describe el applet.
5. El navegador llama el método init() del applet. Para el caso del applet
SimpleApplet.class se tiene el siguiente:
Finalizamos el proceso.
54
El siguiente paso consiste en crear un elemento de tipo Applet Form, eso lo puedes
encontrar dándole click derecho al proyecto, nuevo, Applet Form. Si no aparece aquí
usted deberá buscarlos en otros, AWT GUI Forms, Applet Form.
55
Creamos la ventana Applet Form, con el no mbre de “Calculadora”. Dele Finalizar para
crear la clase Applet.
Ahora NetBeans creará una ventana donde usted podrá arrastrar botones, cajas de
texto y demás elementos. Para tener un mejor control del espacio se recomienda
habilitar es estilo libre al BorderLayout. Esto lo puede habilitar desde la pestaña
Navegator ubicada a la izquierda; click derecho Free Design.
56
Procesamos a crear la siguiente inteface de usuario, para ello usted tendrá una paleta
de objeto ubicado a la derecha de su ventana del IDE. Arrastre un título, dos cajas de
texto (jField), un botón y el objeto para mostrar el resultado (jText).
Tendrá una paleta de objeto ubicado a la derecha de su ventana del IDE. Arrastre un
título, dos cajas de texto (jField), un botón y el objeto para mostrar el resultado (jText).
Implemente la lógica del botón, para ello lo que se quiere es poder multiplicar dos
simples campos de texto, y dejar el valor en el campo de salida respectivo. Utilice como
ejemplo base el siguiente código:
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
try{
jLabel4.setText(Integer.toString(
Integer.parseInt(jTextField1.getText())
*
Integer.parseInt(jTextField2.getText())));
}
catch (Exception ex) {
jLabel4.setText("Escriba valores numericos validos.");
}
}
57
Es justamente esta línea lo que convierte la clase, en un applet que se pueda empotrar
en un navegador. El siguiente paso es compilar el Applet, para ello usted deberá en
NetBeans ejecutar el código, dándole click derecho a Calculadora y Run File.
Una vez que tengamos el Applet compilado, vamos a empotrarlo en una página web.
Para ello usted deberá agregar un HTML File en NetBeans, el procedimiento es
simple; deberá agregar elemento, otros, y bajas hasta donde dice otros como se ve en la
siguiente imagen.
Con ella ya podremos ejecutar nuestra aplicación Java en cualquier navegador web,
donde se tenga instalado la máquina virtual de Java.
Capítulo 5
Uso e instalación de Servidores Web
Definición de servidor web
Un servidor web es un software que procesa una aplicación del lado del servidor, en el
caso de las aplicaciones Web, como las que utiliza Java es necesario instalar un
servidor de aplicaciones.
Las funciones de dicho servidor consiste en la administración de las conexiones
bidireccionales unidireccionales- Sincrónicas y asincrónicas, con el cliente (navegador)
la idea es que las paginas se construyan del lado del servidor, una vez que se crea la
página la misma será enviada al cliente en formato HTML.
Supongamos que entramos al sitio transaccional de un banco, está claro que la
información no la tiene el cliente, en vez de ello la tiene el servidor en una base de
datos. Una vez que el servidor recibe la solicitud de la persona, la página se construye
59
en el servidor, el servidor creará la página web utilizando algún lenguaje (PHP, JSP,
.net, etc) la cual posteriormente será enviada al cliente en formato HTML.
Para desarrollar en JSP se pueden instalar cualquiera de los siguientes servidores:
1. Apache Tomcat
2. Glassfish
Para ambos casos, el instalador de NetBeans nos preguntara cuál de los dos (pueden
ser ambos simultáneamente) queremos instalar en nuestra máquina. La instalación de
ellos es fundamental para poder ejecutar la aplicación escrita en JSP.
Nos saldrá los términos y condiciones, a las que después de leer podremos continuar
con la instalación.
Nos pregunta, que se instalar todo, por default NO se incluye la opción de SERVICE
(que solo debemos de activar si queremos que arranque el Tomcat junto con Windows),
tampoco incluye la opción de NATIVE (que instala el TOMCAT por medio de DLLs,
que supuestamente brindan al TOMCAT un mejor desempeño, si estamos en
desarrollo, pues esto no interesa tanto, pero si estamos en un ambiente de producción,
podría ser una opción que queramos activar.
61
Creamos una carpeta en C:\ para seleccionarle con el instalador. La razón por la que
crear una carpeta en vez de utilizar la ruta por defecto, es porque la ruta por defecto
nos solicita permisos de administrador cada vez que la maquina se reinicie, sería
mucho mejor disponer de una ruta donde iniciar automáticamente.
Capítulo 6
Introducción a los Servlets
Cuando se vio el patrón MVC, se ha resaltado que en la programación web, no es
posible crear una clase controladora tan formal como si es el caso de la programación
de aplicaciones locales. Los servlets serán análogamente equivalentes al controlador
de las aplicaciones, la vista serán las páginas JSP; dicho esto procedemos a ampliar el
tema de Servlets.
Definición de Servlets
Un servlet es una clase de Java que tiene las siguientes características.
1. No importa el servidor que utiliza para ejecutar el Servlet, siempre se va tener
el mismo comportamiento sin importar si se usa Tomcat, Glassfish, o cualquier
otro servidor. También es independiente del sistema operativo.
2. Los servlets pueden llamar a otros servlets, esto permite invocar por ejemplo
servlets especializados para la comunicación de la base de datos.
3. Los servlets pueden obtener información en concreto de la maquina cliente, por
ejemplo dirección IP, versión del navegador, entre muchos demás detalles
mediante el protocolo HTTP.
4. Los servlets permiten el uso de Cookies y Sessiones, para tener paginas
personalizadas del cliente. Un ejemplo de ello puede ser la lista de un carrito de
compras, el cual puede estar en memoria hasta que el usuario del sistema
decida comprarlos o eliminar la compra.
5. Los servlets pueden servir de comunicación con la base de datos, permitiéndole
funcionar como un controlador.
6. Los servlets permiten generar código HTML. Es así como se puede usar un
servlets para crear una página de forma dinámica. Sin embargo, esta forma de
trabajar resulta en código excesivo por lo que la mayoría de programadores
prefieren no utilizar esta funcionalidad.
65
Una vez creado el proyecto, nos vamos a ir a la izquierda donde se encuentran los
proyectos, con un click derecho le damos agregar y luego nuevo Servlet.
67
En la ventana creada le damos a Class Name el nombre del Servlet, escojamos para
esta práctica el nombre de “Multiplicar”. Es altamente recomendado separar la
ubicación de los Servlets en packages, para este ejemplo le hemos puesto “código”.
out.println("</body>");
out.println("</html>");
} finally {
out.close();
}
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
@Override
public String getServletInfo() {
return "Short description";
}// </editor-fold>
}
Lo que hace es leer parámetros de entrada, como puede ver la URL que se ha
introducido, se ve que el parámetro n=4.
http//matemática/Multuplicar?n=4
Para poder pasarle multiples parámetros, es necesario aplicar una concatenación como
se observa en la siguiente URL:
http//matemática/Multuplicar?n=4&idioma=ingles&precio=78.5
Las siguientes líneas permiten crear la tabla creada por la construcción del HTML.
out.println("<table border =1>");
for(int i = 1; i <= 10; i++){
out.println("<tr>");
out.println("<td>");
out.println(i + " x " + numero + " =");
out.println("</td>");
out.println("<td>");
out.println(Integer.toString(i * numero));
out.println("</td>");
out.println("</tr>");
}
out.println("</table>");
La ejecución del URL con diferentes parámetros permite que se crean cualquier tabla
de multiplicar, para el ejemplo siguiente se ha utilizado n = 4, n = 6 y n = 13.
70
El nombre que se ponga es muy importante, ahora debemos crear un Servlet con el
mismo nombre “RegistrarFormulario”.
72
De estas líneas, lo nuevo es la forma en como nos desplazamos entre las páginas. La
instrucción response.sendRedirect("formulario.html"); permite una vez
ejecutado el servlet, realizar una redirección a la URL que este dentro del método
anterior.
Para hacer persistente el cambio se invoca el método guardarRegistro, en el siguiente
tema se implementará dicho método.
Servlets y JDBC
Todo Servlet puede ejecutar instrucciones Java, y por ende también puede ejecutar
instrucciones de bases de datos. El método que faltaba explicar anteriormente se
implementa en las siguientes líneas:
boolean guardarRegistro (String r1, String r2, String r3){
int modificado = 0;
try {
Class.forName("jdbc.odbc.JdbcOdbcDriver");
bd = DriverManager.getConnection(url, usuario, clave);
String sql = "INSERT INTO personas VALUES(“ + r1 + “,”+r2 + “,”+ r3 + “ )";
Statement comando = bd.createStatement();
modificado = comando.executeUpdate(sql);
comando.close();
bd.close();
} catch (Exception ex) {
}
finally {
return modificado == 1;
}
}
Estos métodos son usados para establecer, recuperar, remover objetos desde la sesión
del usuario. Veremos en ejemplos posteriores como utilizarlos.
getId()
Cada sesión que se crea en el servidor, tiene un único identificador asociado al cliente.
Por lo que es imposible que una persona ingrese a los datos de otra persona. Este
método retorna el id de la sesión creada.
getCreationTime()
Este método retorna un long con el valor que índica la fecha y hora en la que fue
creada la sesión, este método es útil para saber por ejemplo cuando fue la primera vez
que se conectó, podríamos limitar el tiempo de estadía en la aplicación como por
ejemplo en las instituciones bancarias.
74
getLastAccessedTime()
Retorna un long con la fecha de la última vez que el usuario accedió a algún recurso
del servidor, podría ser utilizada para expulsar a usuarios que estén inactivos en cierto
tiempo.
getMaxInactiveInterval(), setMaxInactiveInterval()
Recupera y establece el valor en segundos del tiempo máximo en el que se invalida una
sesión. Cuando una sesión se invalida, los datos contenidos en el servidor se
destruyen, es así como modificando el valor del setMaxInactiveInterval por un valor,
digamos 10 minutos (10*60 segundos) lograremos que si un usuario no accede al
servidor, será expulsado automáticamente.
isNew()
Este método retorna true cuando el usuario visita por primera vez algún contenido del
servidor. Si se cuenta con 3 paginas, y accedemos a la primera entonces este método
retornara false para las restantes 2 paginas.
invalidate()
Este método invalida la sesión, típicamente se utiliza este método para hacer logout,
con lo que se termina la sesión y se borran todos los elementos almacenados. Si el
mismo usuario ingresa al sistema, se le creará una nueva sesión para reemplazar a la
anterior.
Código de ejemplo de Sesiones
Utilizaremos el ejemplo del carrito de compras, para ello es necesario especificar las
clases Productos y Carrito. La clase Producto nos va interesar almacenar el nombre,
precio y dirección URL del mismo.
Mientras la clase Carrito lo que tiene, es una lista de productos. Además, el carrito nos
interesa saber el total a pagar de todos los productos.
public class Producto {
private String nombre;
private double precio;
private String direccion;
return direccion;
}
}
public Carrito() {
productos = new ArrayList<Producto>();
}
Una vez desarrollado estas dos clases, se procede a crear los Servlets que
administraran en memoria la creación de productos del usuario. Se debe crear un
sevlet que se llame AgregarProducto que va tener la siguiente implementación:
Capítulo 7
Java Server Pages (JSP)
El último capítulo de este libro, termina con Java Server Pages, la idea de estas
páginas es crear contenido dinámico mediante código Java.
Definición de JSP
Java Server Pages (JSP) es una tecnología que nos permite mezclar HTML estático
con HTML generado dinámicamente, la generación dinámica se logra mediante código
Java.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD><TITLE>Titulo estatico</TITLE></HEAD>
<BODY>
<SMALL>Welcome,
<%
for(int i= 0; i < 10; i++) {
out.println(i);
}
%>
</BODY></HTML>
Directivas
Una directiva de JSP es una sentencia que proporciona la información que debe ser
cargada. Existen muchas posibles directivas:
Declaraciones
Una declaración de JSP, puede definirse como una definición de variables y métodos a
nivel de clase que son usadas en la página. Un bloque de declaraciones típico sería <%!
declaración %> Un ejemplo de declaración de script sería el siguiente:
<HTML>
<HEAD>
<TITLE>Página simple JSP</TITLE>
</HEAD>
<BODY>
<%!
String strCadena = "x";
int intContador = 0;
%>
</BODY>
</HTML>
Esta línea siguiente incorpora elementos de clases Java, como cuando se realizan los
imports en código Java, en JSP es posible incluirlos en el documento.
<%@ page import='java.util.*' %>
Scripts de JSP
Los Scripts son bloques de código Java residentes entre los tags <% y %>. Estos bloques de
código estarán dentro del servlets generado. También hay algunos objetos implícitos
disponibles para los Scripts desde entorno del Servlet. Vamos a verlos a continuación.
El siguiente fragmento de código muestra cómo obtener el valor de una parámetro mediante
el objeto request, y como pasarlo a una cadena para mostrarlo en pantalla.
<%
String strNombre = request.getParameter("nombre");
out.println(strNombre);
%>
Expresiones de JSP
Las expresiones son una magnifica herramienta para insertar código embebido dentro de
la página HTML. Cualquier cosa que este entre los tags <%= y %> será evaluado,
convertido a cadena y posteriormente mostrado en pantalla. La conversión desde el tipo
inicial a String es manejada automáticamente.
<% for (int i=0;i<5;i++) { %>
<BR>El valor del contador es <%=i%>
<% } %>
Si queremos almacenar el nombre de una persona sus métodos respectivos van ser:
getNombre, y setNombre.
Como se puede deducir, una clase JavaBeans es una clase normal que cumple las
definiciones anteriores, la idea es desarrollar este componente fuera de las paginas JSP.
Casi en todos los casos los Beans son usados para encapsular elementos de la GUI visuales
y no visuales. Los JavaBeans no tienen sitio en JSP, al menos no si los tenemos en cuenta
con el objetivo para lo que fueron diseñados. Si pensamos en ellos como componentes,
como simple encapsulación de código Java, entonces su propósito está más claro. Los
Beans hacen que nuestras páginas no estén aisladas.
JSP proporciona instrucciones especiales para trabajar más cómodamente con Java
Beans. Para ello se utiliza la etiqueta jsp:useBean . Si el bean aún no existe en el
contexto se declara, crea e inicializa el bean. Crea una referencia al bean con el
nombre dado por id.
Si el bean ya existe en el contexto: Obtiene una referencia al mismo con el nombre
dado por id.
81