Tesis - Dirección General de Servicios Telemáticos

Anuncio
Universidad de Colima
Facultad de Telemática
"INTEGRACIÓN DE BASES DE DATOS EN INTERNET "
TESIS
PARA LA OBTENCIÓN DEL GRADO DE:
MAESTRO EN CIENCIAS, ÁREA TELEMÁTICA
PRESENTA
ING. CÉSAR EUGENIO OLMOS DÍAZ
ASESOR
M.C. JESÚS ALBERTO VERDUZCO RAMÍREZ
COLIMA, COL. NOVIEMBRE DE 1999.
Resumen
RESUMEN
El Web es un medio para localizar, enviar o recibir información de
diversos tipos. En el ámbito competitivo, es esencial conocer las ventajas que
esta vía electrónica proporciona para presentar la información, reduciendo
costos y el almacenamiento de la información, y aumentando la rapidez de
difusión de la misma.
Internet provee de un formato de presentación dinámico para ofrecer
campañas y mejorar negocios, además de que permite acceder a cada sitio
alrededor del mundo, con lo cual se incrementa el número de personas a las
cuales llega la información. Una gran porción de dicha información requiere
de un manejo especial, y puede ser provista por bases de datos.
En el pasado, las bases de datos sólo podían utilizarse al interior de
las instituciones o en redes locales, pero actualmente el Web permite
acceder a bases de datos desde cualquier parte del mundo. Estas ofrecen, a
través de la red, un manejo dinámico y una gran flexibilidad de los datos,
como ventajas que no podrían obtenerse a través de otro medio informativo.
El presente trabajo analiza las tecnologías de acceso a base de datos
más conocidas, como son JDBC, CGI y ASP, mediante características
comunes que permitan tener un mejor criterio de evaluación, como es:
acceso a Internet, programación , procesamiento y seguridad.
Así mismo se presenta un caso práctico a fin de poner a disposición
del lector el código fuente de una pequeña aplicación Internet con acceso a
base de datos, así como una descripción de las consideraciones necesarias
para desarrollar una aplicación de este tipo. Finalmente se analizan las
consideraciones del entorno donde se implantará las aplicaciones Internet.
I
Summary
SUMMARY
The web is a resource of finding, sending or receiving different kinds of
information. It is essencial to know the adventages that this electronic tool
gives to present the information, reducing costs and saving information as
well as the increase of swiftness to diffuse it in a competetive area.
Internet provides the dynamic presentation format to offer campaigns
and improve business besides it lets access to every site around the world
which permits the number of people who receive information increases.
A great part of information requires a special manage and it can be
provided by a data base.
In the past, data bases were exclusively used into the institutions or
local nets, but at the present time, the web permits access to data basic from
any part of the word. They offer a dynamic manage and a large flexibility of
data through the net. These adventages are not possible by other informative
mean.
The present work analyzes the most known access technologies to
data basis like JDBC, CGI and ASP. This work is done according to the most
common characteristics that permit to have a better evaluation criterios such
as the access to internet, programming, processing and safety.
Likewise, it is presented a practical case with the purpose that the
reader can have a source code available of a small internet application with
access to data basis such as a description of the necessary considerations to
develop an application of this type. Finally, the consideration of the
surrounding where the internet applications will be set are analyzed.
II
Contenido
CONTENIDO
1 Introducción
1.1
¿Por qué utilizar bases de datos en el Web?
1
1.1.1 Seguridad
2
1.1.2 Integración de bases de datos en el Web
3
1.1.2.1 ¿Cómo funciona la integración de bases de datos en
4
el Web?
1.1.2.2 Categorización de Interfaces Web/DBMS
5
1.2 Motivaciones del trabajo
7
1.3 Objetivo
8
1.3.1 Objetivo general
8
1.3.2 Objetivos específicos
8
1.4 Justificación
9
1.5 Alcances
10
1.5.1 Teóricos
10
1.5.2 Prácticos
11
1.6 Resultados esperados
11
1.7 Impacto socio-econónico
11
1.8 Metodología
12
2.
Análisis de herramientas de desarrollo y manejo de bases de
datos en páginas de Internet
2.1 Conectividad de bases de datos Java (JDBC)
13
2.1.1 Definición
13
2.1.2 JDBC sobre Internet
14
2.1.3 Para programadores
15
III
Contenido
2.1.4 Procesamiento
16
2.1.5 Seguridad
17
2.1.6 Resumen
17
2.2 Desarrollo de páginas dinámicas con Common Gateway Interfase
18
(CGI)
2.2.1 Definición
18
2.2.2 CGI sobre Internet
18
2.2.3 Para programadores
20
2.2.4 Procesamiento
23
2.2.5 Seguridad
23
2.2.6 Resumen
24
2.3 Active Server Pages (ASP).
26
2.3.1 Definición
26
2.3.2 ASP sobre Internet
26
2.3.3 Para programadores
27
2.3.4 Procesamiento
29
2.3.5 Seguridad
29
2.3.6 Resumen
30
2.4 Selección y justificación de herramienta de desarrollo
31
3. Acceso a bases de datos con Active Server Pages
3.1 Objetos y componentes
35
3.2 El archivo GLOBAL.ASA
36
3.3 Objetos de Active Server Pages
38
3.3.1 Objeto Application
38
3.3.2 Objeto Session
40
3.3.3 Objeto Request
42
3.3.4 Objeto Response
46
3.3.5 Objeto Server
49
IV
Contenido
3.4 Componentes de Active Server Pages
4.
49
3.4.1 Componentes de acceso a bases de datos
50
3.4.2 Componentes de acceso a archivos
56
3.4.3 Componente capacidad del navegador
58
3.4.4 Componente Ad Rotator
61
3.4.5 Componente de vinculación de contenidos
62
3.4.6 Empleo de otros componentes ActiveX
63
Consideraciones de implementación y desarrollo de una
aplicación
4.1
4.2
4.3
Consideraciones en diseño de bases de datos para Internet
64
4.1.1 Seguridad
64
4.1.2 Integridad de la base de datos
64
4.1.3 Control de acceso
65
Consideraciones en la definición de tablas de la base de datos
66
4.2.1 Evitar la redundancia de datos
66
4.2.2 Indexar las tablas
66
4.2.3 Utilizar restricciones referenciales
66
4.2.4 Preservación de la integridad de los datos
67
Aplicación de control de inventario en la Administración Regional
68
Jurídica de Ingresos de Occidente
4.3.1 Objetivo
68
4.3.2 Infraestructura utilizada
68
4.3.3 Manejador de base de datos
68
4.4 Descripción de la aplicación de control de insumos
70
4.4.1 Entrada de datos
72
4.4.2 Reportes
74
5. Elección de la tecnología más adecuada
V
Contenido
5.1 Consideraciones sobre la plataforma cliente
81
5.2 Compatibilidad con HTML
82
5.3 Compatibilidad con HTML Dinámico
83
5.4 Compatibilidad con programación
84
5.5 Compatibilidad con ActiveX
84
5.6 Java
85
5.7 Consideraciones del lado del servidor
85
6. Conclusiones
87
APENDICE A.- Propiedades y métodos de los objetos y
88
componentes Active Server Pages
APENDICE B.- Base de datos insumos
98
APENDICE C.- Código fuente de aplicación de control de insumos
101
APENDICE D.- Glosario de términos de Internet
114
BIBLIOGRAFÍA
119
VI
Contenido de tablas y figuras
ÍNDICE DE TABLAS
Tabla 2-1. Características de JDBC
31
Tabla 2-2. Características de CGI
32
Tabla 2-3. Características de ASP
33
Tabla 2-4. Comparación de JDBC, CGI, ASP
34
ÍNDICE DE FIGURAS
Figura 1-1.
Acceso a datos vía CGI.
Figura 4-1.
Página de la Administración Regional Jurídica de
4
70
Ingresos de Occidente.
Figura 4-2.
Capítulo de Informática de la Página de la
71
Administración Regional Jurídica de Ingresos de
Occidente.
Figura 4-3.
Control de Acceso a usuarios.
71
Figura 4-4.
Registro de movimientos al inventario.
73
Figura 4-5.
Inventario Regional de Jurídica de Ingresos de
75
Occidente.
Figura 4-6.
Impresión de Insumos.
75
Figura 4-7.
Impresión de Movimientos.
76
VII
1. Introducción
1 INTRODUCCIÓN
1.1 ¿POR QUÉ UTILIZAR BASES DE DATOS EN EL WEB?
El Web es un medio para localizar, enviar o recibir información de
diversos tipos. En el ámbito competitivo, es esencial conocer las ventajas que
esta vía electrónica proporciona para presentar la información, reduciendo
costos y el almacenamiento de la información, y aumentando la rapidez de
difusión de la misma.
Internet provee de un formato de presentación dinámico para ofrecer
campañas y mejorar negocios, además de que permite acceder a cada sitio
alrededor del mundo, con lo cual se incrementa el número de personas a las
cuales llega la información.
Millones de personas alrededor del mundo hacen uso de Internet, lo
cual demuestra el enorme potencial que esta red ha alcanzado, con lo cual
se puede decir que en un futuro no muy lejano, será el principal medio de
comunicación utilizado para distintos fines.
Pero, no sólo es una vía para hacer negocios, sino también una gran
fuente de información, siendo éste uno de los principales propósitos con que
fue creada.
Una gran porción de dicha información requiere de un manejo
especial, y puede ser provista por bases de datos.
En el pasado, las bases de datos sólo podían utilizarse al interior de
las instituciones o en redes locales, pero actualmente el Web permite
1
1. Introducción
acceder a bases de datos desde cualquier parte del mundo. Estas ofrecen, a
través de la red, un manejo dinámico y una gran flexibilidad de los datos,
como ventajas que no podrían obtenerse a través de otro medio informativo.
1.1.1 SEGURIDAD
La evaluación de este punto es uno de los más importantes en la
interconexión del Web con bases de datos. A nivel de una red local, se
puede permitir o impedir, a diferentes usuarios el acceso a cierta información,
pero en la red mundial de Internet se necesita de controles más efectivos en
este sentido, ante posible espionaje, copia de datos, manipulación de éstos,
etc.
La identificación del usuario es una de las formas de guardar la
seguridad, y permitiendo el acceso a distintos campos de una base de datos,
solamente a usuarios autorizados para ello.
En este sentido, los datos pueden ser presentados a través del Web
de una forma segura, y con mayor impacto en todos los usuarios de la red
mundial.
Para la integración de bases de datos en el Web es necesario contar
con un programa que realice las conexiones, extraiga la información de la
base de datos, le dé un formato adecuado de tal manera que puede ser
visualizada desde un navegador del Web, y permita lograr sesiones
interactivas entre ambos, dejando que el usuario haga elecciones de la
información que requiere.
2
1. Introducción
1.1.2 INTEGRACIÓN DE BASES DE DATOS EN EL WEB
En la actualidad, muchas organizaciones se han dado cuenta de la
importancia que el Web tiene en el desarrollo de sus potencialidades, ya que
con ello pueden lograr una mejor comunicación con personas o instituciones
situadas en cualquier lugar del mundo.
Gracias a la conexión con la red mundial Internet, poco a poco, cada
individuo o institución va teniendo acceso a mayor cantidad de información
de las diversas ramas de la ciencia.
La mayor parte de información es presentada de forma estática a
través de documentos HTML (siglas de HyperText Markup Language), lo cual
limita el acceso a los distintos tipos de almacenamiento en que ésta pueda
encontrarse.
Pero, en la actualidad surge la posibilidad de utilizar aplicaciones que
permitan acceder a información de forma dinámica, tal como a bases de
datos, con contenidos y formatos muy diversos.
Una de las ventajas de utilizar el Web para este fin, es que no existen
restricciones en el sistema operativo utilizado, permitiendo la conexión entre
si, de las páginas Web desplegadas en un navegador del Web que funciona
en una plataforma, con servidores de bases de datos alojados en otras
plataformas. Además, no hay necesidad de cambiar el formato o estructura
de la información dentro de las bases de datos.
3
1. Introducción
1.1.2.1 ¿Cómo funciona la integración de bases de datos en el Web?
Para realizar una requisición de acceso desde el Web hasta una base
de datos no sólo se necesita de un navegador del Web y de un servidor Web,
sino también de un software de procesamiento (aplicación CGI siglas de
Common Gateway Interface), el cual es el programa que es llamado
directamente desde un documento HTML en el cliente. Dicho programa lee la
entrada de datos que provienen del cliente y toma cierta información de
variables de ambiente. El método usado para el paso de datos está
determinado por la llamada CGI.
Una vez que se reciben los datos de entrada (sentencias SQL siglas
de Structured Query Language o piezas de ellas), el software de
procesamiento los prepara para enviarlos a la interfaz en forma de SQL, y
luego ésta procesa los resultados que se extraen de la base de datos.
Navegador
Web
Servidor
HTTP
Información Introducida por el usuario
Formulario
HTML
Interfaz de gateway común
Autentificación del usuario
Información Introducida por el usuario
Lista de
acceso
Programa
gateway
Fig. 1-1. Acceso a datos vía CGI
4
1. Introducción
La interfaz contiene las especificaciones de la base de datos
necesarias para traducir las solicitudes enviadas desde el cliente, a un
formato que sea reconocido por dicha base. Además, contiene toda la
información, estructuras, variables y llamadas a funciones, necesarias para
comunicarse con la base de datos.
El software de acceso usualmente es el software distribuido con la
base de datos, el cual permite el acceso a la misma, a través de solicitudes
con formato. Luego, el software de acceso recibe los resultados de la base
de datos, aún los mensajes de error, y los pasa hacia la interfaz, y ésta a su
vez, los pasa hasta el software de procesamiento.
Cualquier otro software (servidor HTTP siglas de HyperText Transfer
Protocol, software de redes, etc.) agrega enlaces adicionales a este proceso
de extracción de la información, ya que el software de procesamiento pasa
los resultados hacia el servidor Web, y éste hasta el navegador del Web (ya
sea directamente o a través de una red).
1.1.2.2 Categorización de Interfaces Web/DBMS
Tradicionalmente en el Web se han utilizado documentos HTML
estáticos para los cuales se creaban las posibles respuestas ante
requisiciones del cliente. Este método requiere de un gran desarrollo de
aplicaciones y de mantenimiento de las mismas. Al interactuar con las bases
de datos, este proceso se complica aún más.
Como la necesidad de acceder a bases de datos desde el Web se ha
incrementado, han sido creadas también interfaces que manipulan sus
5
1. Introducción
escritos para procesar la información, teniendo como punto común la
ejecución de sentencias SQL para requerir datos.
Aplicaciones de interfaz para la interacción de bases de datos con el
Web han surgido ya. Los productos iniciales son simplemente modelos del
ambiente cliente/servidor, con una capa adicional para crear resultados
HTML que pueden ser vistos a través del Web, por medio de un
procesamiento de los datos de la forma introducidos por el cliente. Además,
al usar estas interfaces se puede crear el programa principal de la aplicación.
Como puede observarse, estas herramientas permiten construir poderosas
aplicaciones
en
experimentados
el
logren
Web,
un
pero
se
desarrollo
requiere
a
gran
que
escala.
programadores
También,
el
mantenimiento de las mismas es significativamente más complejo y extenso.
Una de las estrategias más famosas para la creación de aplicaciones
de interacción con el Web, es la de descargar del Web, aplicaciones o
componentes funcionales que se ejecutarán dentro del navegador. Con ellas
se realizará un procesamiento complejo del lado del cliente, lo cual requiere
un gran esfuerzo para crear las piezas de la aplicación. Estas estrategias
poseen dos características principales: garantizan la seguridad tanto en los
sistemas de distribución como en la comunicación que se establece con tales
aplicaciones, a través de Internet.
También han aparecido bibliotecas que incluyen motores propios de
servidor que corren de forma conjunta con el servidor Web, lo cual facilita el
desarrollo de nuevas aplicaciones.
Una aplicación que posibilita interconectar al Web con una base de
datos tiene muchas ventajas, además de que las funciones que cumplen
actualmente los servidores Web y las herramientas de desarrollo de
6
1. Introducción
aplicaciones Web, hacen más fácil que nunca la construcción de aplicaciones
más robustas. Tal vez el mayor beneficio del desarrollo de estas aplicaciones
en el Web sea la habilidad de que sean para múltiples plataformas, sin el
costo de distribuir múltiples versiones del software.
Cada una de las interfaces para comunicar al Web con bases de
datos, ha sido creada basándose en una tecnología de integración especial,
a través de procesos de interconexión especiales, que serán descritos en el
siguiente apartado.
1.2 MOTIVACIONES DEL TRABAJO
?
El interés por la programación de sistemas de bases de datos aplicados
a una tecnología en auge como lo es Internet, con la fina lidad de que
este medio no sea un escaparate para presentar información, sino un
medio para consulta y actualización de bases de datos.
?
Conocer y comparar las diferentes tecnologías para manejo de bases
de datos en Internet, a fin de aplicar una de ellas en una aplicación
específica.
?
Desarrollar una aplicación de uso general que puede operarse en
Internet o en una Intranet derivada de la selección y estudio de las
tecnologías para integrar bases de datos en el Web.
?
Profundizar los conocimientos adquiridos durante la maestría en
Telemática en las materias orientadas a la programación, manejo de
bases de datos y redes de computadoras.
7
1. Introducción
1.3 OBJETIVO
1.3.1 OBJETIVO GENERAL
Analizar las tecnologías para integración de bases de datos en
Internet, afín de instrumentar una aplicación práctica.
1.3.2 OBJETIVOS ESPECÍFICOS
? Estudiar las tecnologías para la integración de bases de datos en el Web :
Java DBC, CGI y ASP.
? Comparar las tecnologías anteriores lo cual permitan seleccionar una de
ellas a fin de realizar una aplicación práctica
? Instrumentar la aplicación de control de inventario la cual permita:
controlar los inventarios de insumos informáticos para la Administración
Regional Jurídica de Ingresos de Occidente.
? Poder trasladar fácilmente una aplicación desarrollado para una Intranet a
Internet, de la cual se obtendrían los beneficios que ofrece la
internacionalización del acceso.
? Permitir el desarrollo de grupos colaborativos al contar con consultas y
actualización a bancos de información vía Internet.
? Cubrir el interés personal que existe por investigar el manejo de bases de
datos en el Web, a fin de mejorar los conocimientos en este ramo.
8
1. Introducción
1.4 JUSTIFICACIÓN
? Considérese que por motivos de crecimiento de información y de
utilización ya no es posible tener almacenada en una PC única con una
base de datos, se decide comprar otra PC y repartir la base de datos
entre las dos máquinas, pero pasado un tiempo se decide unir otra PC
según las necesidades; en un momento se da cuenta que ya tiene 10 PC,
donde cada una cuenta con una base de datos especial y las cosas van
bastante lentas por que están cargadas de datos. En éste momento quizá
se actualice el sistema con Windows NT y un servidor SQL y se desarrolle
un aplicación lo cual subsanará en gran parte las necesidades de
crecimiento. Pero en dos años el servidor SQL ya no es suficiente, por lo
que decide por una base datos mayor con un sistema operativo Unix pero
las aplicaciones en Visual Basic ya no funcionaran por lo que tendrá que
invertirse mucho dinero y tiempo para actualizar los sistemas. Este
escenario podrá repetirse mucha veces, por lo que lo ideal es un lenguaje
estándar que funcione igual en cualquier máquina, sin importar hacia
dónde se transfiera la base de datos, ni desde qué máquina se trate de
accesar. El WWW es una solución, ya que se puede accesar a la
información desde cualquier parte del mundo o simplemente desde una
red local, así mismo permite una estructura de aplicaciones en un
lenguaje estándar: HTML, interfaz gráfica de usuario (GUI de las siglas en
inglés), soporte de diferentes plataformas, así como soporte de red; con lo
que da al usuario potentes herramientas para accesar sus datos con un
mínimo de gasto y esfuerzo y, utilizando herramientas que funcionan sin
importar el tipo de base de datos, sistema operativo o equipo de cómputo
que se utilice.
9
1. Introducción
? El actualizar una página de Internet o mantener actualizados los datos de
la información presentada suele ser una tarea fácil, ya que en ocasiones
sólo se requiere de modificar dos a tres líneas; pero cuando éstos
cambios son constantes, suele convertirse en una tarea repetitiva, ya que
implica en mantener una persona probablemente todo el tiempo de su
trabajo realizando tal tarea o si la actualización se realiza en lapsos de
tiempo muy breves durante todo el día esto resultaría imposible. En
consecuencia con la utilización de páginas creadas a través de consultas
a bases de datos es una elección que disminuye considerablemente el
tiempo de actualización de páginas de Internet
1.5 ALCANCES
1.5.1 TEÓRICOS
? Documentar las tecnologías actuales para manejo de bases de datos.
? Documentar el análisis y diseño de una aplicación en el cual el acceso a
las bases de datos será a través de Internet.
? Presentar el código fuente de la aplicación desarrollada a fin de que sirva
de referencia bibliográfica.
10
1. Introducción
1.5.2 PRÁCTICOS
? Se realizará una aplicación de uso general, a fin de poner en práctica los
conocimientos adquiridos sobre las técnicas para integrar bases de datos
en el Web.
? Se instalará una red que permita la utilización de la aplicación
desarrollada como simulación de uso en una Intranet.
? Controlar los inventarios de insumos informáticos dentro de la
Administración Regional Jurídica de Ingresos de Occidente.
1.6 RESULTADOS ESPERADOS
? Despertar el interés en los usuarios de Internet e Intranet por aprovechar
los recursos con que cuentan y no solo crear páginas de consulta de
información, sino una página que permita consultar y modificar bases de
datos.
1.7 IMPACTO SOCIO-ECONÓNICO
Con la integración de bases de datos en el Web, los usuarios de
Internet o Intranet pueden obtener un medio que puede adecuarse a sus
necesidades de información, con un costo, inversión de tiempo, y recursos
mínimos. Asimismo, las bases de datos serán usadas para permitir el acceso
y manejo de la variada información que se encuentra a lo largo de la red.
11
1. Introducción
1.8 METODOLOGÍA
I.
Investigación bibliográfica
II.
Análisis de las tecnologías para manejo de bases de datos en
Internet.
III.
Selección de la tecnología de manejo de bases de datos en el
Web.
IV.
Selección de lenguaje de programación así como manejador de
bases de datos.
V.
Análisis y diseño de la aplicación de control de inventario de
insumos informáticos sobre Internet o una Intranet.
VI.
Desarrollo de la aplicación bajo las pautas establecidas en el
diseño.
VII.
Pruebas y correcciones.
VIII.
Implantación definitiva.
IX.
Presentación de resultados y discusión de resultados.
X.
Elaboración de material para presentación de los resultados de
la investigación.
12
2. Análisis de herramientas de desarrollo y manejo de bases de datos en páginas en Internet
2. ANALISIS DE HERRAMIENTAS DE DESARROLLO Y MANEJO DE
BASES DE DATOS EN PÁGINAS EN INTERNET
A continuación se analizan tres tecnologías de las más utilizadas a fin
de compararlas y elegir una de ellas como herramienta de implementación y
con esto, desarrollar una aplicación práctica. Las tecnologías a describir son :
? Java DBC
? CGI
? ASP
2.1 CONECTIVIDAD DE BASES DE DATOS JAVA (JDBC)
2.1.1 DEFINICION
El primer trabajo estandarizado en conectividad-DBMS de Java
aparece en el borrador de la especificación conocida como la especificación
de la API (siglas de Application Programming Interface) de Conectividad de
Bases de Datos Java (JDBC).
JDBC: crea una interfaz a nivel de programación para comunicaciones
con base de datos en una manera uniforme, similar en concepto al
componente ODBC de Microsoft, el cual se ha convertido en el estándar para
PCs y LANs. El estándar JDBC por sí mismo está basado en el nivel de
interfaz de llamadas X/Open SQL, la misma base del ODBC. Ésta es una de
las razones por las que el desarrollo inicial del JDBC está progresando tan
rápido.
Las clases objeto para las transacciones abiertas con estas bases de
datos son escritas completamente en Java para permitir una mayor y más
13
2. Análisis de herramientas de desarrollo y manejo de bases de datos en páginas en Internet
cercana interacción que se obtendrá incrustando llamadas a funciones en
lenguaje C en programas Java, como se tiene que hacer con ODBC. De ésta
manera se puede mantener la seguridad y robustez, y la potabilidad que
hace a Java tan interesante. De cualquier manera para promover su uso y
mantener un nivel de compatibilidad como respaldo, JDBC puede ser
implementada encima de ODBC y otras API comunes de SQL existentes.
2.1.2 JDBC SOBRE INTERNET
Una de las principales preocupaciones de JDBC es el como
funcionará sobre Internet. Sun está presionando para un intensivo uso
comercial de grandes redes como Internet, y los distribuidores de base de
datos también reconocen esa importancia.
Algunos tópicos acerca de la seguridad son mencionados en las
especificaciones del lenguaje Java, sin embargo, deben tomarse en cuenta
otros elementos como el direccionamiento de instancias específicas a través
de Internet. Por esta razón, JDBC “presta” la sintaxis URL (Uniform Resource
Locator) para bases de datos de direcciones globalmente únicas. La mayoría
de
los
usuarios
deberán
reconocer
esquemas
URL
como
http://www.javaworld.com, que indica una dirección WWW, JDBC sigue una
sintaxis similar. Revisemos todos los elementos de URL :
Una ULR completa consta de varios elementos como se puede
observar en el siguiente ejemplo :
http://host.domain.com:80/directory/directory/filename
http:
Indica el esquema URL, este ejemplo indica que es de
HyperText Transport Protocol.
14
2. Análisis de herramientas de desarrollo y manejo de bases de datos en páginas en Internet
Host.domain.com:
Es la dirección única del hosts Internet, único para
cada máquina.
80:
Indica el numero de puerto del host Internet en el que
los servicios están ubicados, el puerto número 80 es el
default para los servicios http.
/.../.../…/Filename:
Es la estructura de directorios donde reside el archivo
que ha de ser recuperado.
La estructura URL de JDBC es muy similar:
jdbc:odbc://host.domain.com:400/databasefile
Note que en adición al esquema principal JDBC, esta estructura
también incluye un subprotocolo para ODBC. El subprotocolo indica como el
manejador JDBC accesará a la base de datos, en este caso, el archivo de
base de datos es accesado a través del puente JDBC-ODBC. El resto es el
mismo para URL estándares, indicando el nombre del hosts, puerto, y
localización y nombre de la base de datos.
2.1.3 PARA PROGRAMADORES
Para auxiliar a los desarrolladores de Base de Datos a entender mejor
el JDBC, se proporcionan los siguientes detalles de la interfaz.
Las operaciones asíncronas que ocasionalmente son construidas
dentro de otras APIs de base de datos como instrucciones específicas de
SQL y mecanismos adicionalmente ya son cubiertos por la naturaleza
multifuncional de Java. EL programador puede crear hilos "threads" (como en
modo protegido) separados desde el principal para cada una de las
15
2. Análisis de herramientas de desarrollo y manejo de bases de datos en páginas en Internet
actividades asíncronas. De cualquier manera, todas las operaciones que
utilizan java.sql classes deberán ser escritas en código-multihilo "code
multithread", aún si los objetos mismos accesan a las operaciones a través
de hilos simples single threads. El cómo la implementación funciona se deja
al
controlador
(Driver).
Cada
transacción
inicia
con
un
método
BeginTransaction y puede ser volcado o abortado en caso de ser necesario.
Una vez volcado o abortado todos las instrucciones asociadas a esa
transacción se cerrarán.
SQL ha sido extendido para proveer la funcionalidad faltante en la
especificaciones de estándares originales. Para realizar esto, JDBC provee
un mecanismo para incrustar sentencias extendidas SQL similar como las
que están disponibles en ODBC. La sintaxis para esto es :
{keyword ... parameters ...}
Para compensar las características de bases de datos específicas, los
fabricantes están autorizados para extender las sentencias básicas para sus
propios diseños. De cualquier manera, las sentencias básicas deben de ser
soportados como mínimo para la compatibilidad con JDBC.
2.1.4 PROCESAMIENTO
Por lo general, las aplicaciones Web son procesadas completamente
en el lado del servidor, lo cual no es precisamente lo más apropiado, ya que
significa un uso excesivo de memoria, manteniendo al usuario en la espera
mientras termina de ejecutarse. Pero los na vegadores Java (del lado del
usuario) pueden ejecutar aplicaciones, y no sólo desplegar documentos
HTML, poniendo a correr el proceso en el lugar apropiado.
16
2. Análisis de herramientas de desarrollo y manejo de bases de datos en páginas en Internet
Las aplicaciones clásicas proveen de información acerca de los tipos
de formato (tipos MIME). Los navegadores del Web rápidos serán capaces
de aprender cómo tratar con nuevos protocolos y dar formato dinámicamente
a los datos.
2.1.5 SEGURIDAD
Java está diseñado para proveer la máxima seguridad posible en
redes públicas, con múltiples formas de seguridad ante virus, posibles
invasiones o accesos incorrectos, archivos basura, etc. Java es como una
versión de C++, en la cual no se puede causar cualquier daño. Es funcional
como C y modular como C++.
2.1.6 RESUMEN
JDBC sigue una especificación establecida y una implementación
probada para comunicación de base de datos en las aplicaciones. La
solución de puenteo hacia sistema actuales ODBC, permite a los usuarios
mantener compatibilidad con versiones anteriores que pueden no contar con
JDBC. Los mayores distribuidores están implementando componentes JDBC
para sus bases de datos disponible en relativamente poco tiempo.
JDBC aun esta en etapa de desarrollo. Es cierto que existe prisa en
todos los desarrollos de Java. Aparentemente la competencia se esta
gestando por Microsoft. Active X y Visual Basic compromete a Microsoft para
ofrecer los servicios de línea en el mundo de los Applet. El problema de la
neutralidad de plataforma es evidentemente en esta alternativa; de cualquier
modo, existen grandes desarro llos para Visual Basic esto detiene el potencial
para aplastar otros esfuerzos.
17
2. Análisis de herramientas de desarrollo y manejo de bases de datos en páginas en Internet
2.2 DESARROLLO DE PÁGINAS DINÁMICAS CON COMMON GATEWAY
INTERFASE (CGI)
2.2.1 DEFINICIÓN
CGI no es un lenguaje. Es solo un simple protocolo que puede
utilizarse para comunicar formas del Web y programas. Un programa CGI
puede ser escrito en cualquier lenguaje que pueda leer STDIN (siglas de
Standar Input, o entrada de datos estándar), escribir a STDOUT (siglas de
Standar Output, o salida de datos estándar ) y leer variables del ambiente,
por ejemplo; virtualmente cualquier lenguaje de programación, incluyendo C,
Perl, Clipper, Visual Basic y hasta scripts de Unix.
2.2.2 CGI SOBRE INTERNET
En la mayoría de los casos, lo que se desea saber es como llamar a
los programas. Cuando se necesita procesar información de una forma, se
necesita especificar el nombre del programa CGI dentro de la etiqueta
<FORM> de una página HTML. Los otros métodos para llamar programas
CGI son la etiqueta de liga <A> y la etiqueta de imagen <IMG>, y con Server
Side Includes (SSI), también requieren que se les especifique el nombre del
programa CGI en la etiqueta HTML. El nombre del programa CGI se incluye
en el atributo ACTION de la etiqueta <FORM>, como se muestra a
continuación :
<FORM
METHOD=POST
ACTION="http:/bciencias.ucol.mx/cgi-bin/nombre-del -
programa.cgi">
18
2. Análisis de herramientas de desarrollo y manejo de bases de datos en páginas en Internet
También se pueden llamar a los programas CGI asignándolos al
atributo HREF de una etiqueta <A>, como se muestra:
<A HREF = "http:/bciencias.ucol.mx/cgi-win/nombre-del-programa.cgi">
Enviar</A>
También se pueden llamar a los programas CGI desde una etiqueta
<IMG> de HTML. Si se incluye la trayectoria del programa CGI como el
atributo SRC, el servidor Web ejecutará el programa CGI y regresarán la
salida como una imagen. El programa CGI deberá regresar su salida en un
formato gráfico o redireccionando la salida a otra imagen.
<IMG SRC=""http:/bciencias.ucol.mx/cgi-win/nombre-del-programa.cgi">
La mayoría de los servidores Web son capaces de manejar los Server
Side Includes (SSI). Server Side Includes son comandos del servidor Web
que residen dentro de la etiqueta HTML. Cuando el servidor Web revisa el
archivo HTML, ejecuta todos los comandos Server Side Includes y incluye los
resultados en lugar de los comandos. Server Side Includes permiten incluir
otro objeto dentro de la página Web simplemente añadiendo una etiqueta
HTML. Estos objetos incluidos pueden ser muchas cosas diferentes, como
otro documento HTML, una imagen, o un programa CGI. Todos los
comandos Server Side Include son de la forma :
<!--#comando etiqueta1="valor1" etiqueta2="valor2" -->
Para ejecutar un programa CGI desde un Server Side Include, se
utiliza el comando EXEC . El comando EXEC tiene dos etiquetas validas,
CMD y CGI. La etiqueta CMD ejecuta el valor asociado con /bin/sh (el Bourne
shell de UNIX ). La etiqueta CGI llama el programa CGI el cual su trayectoria
19
2. Análisis de herramientas de desarrollo y manejo de bases de datos en páginas en Internet
esta asociada con el valor. A continuación la línea de código que ejecuta e
incluye la salida del programa CGI " incluyeme.cgi" :
<!--#exec cgi="/cgi-bin/incluyeme.cgi" -->
2.2.3 PARA PROGRAMADORES
La secuencia típica de pasos para elaborar un programa CGI son:
? Leer los datos de entrada comúnmente estos datos son introducidos por
una Forma.
? Procesar la información.
? Escribir la página HTML resultante al STDOUT
Cuando el usuario envía la forma, el programa recibe los datos en un
conjunto de pares nombre - valor . Los nombres son los que se definen en
las etiquetas INPUT (o etiquetas SELECT o TEXTAREA ), y los valores son
cualquier cosa que el usuario escribió o seleccionó.
Este conjunto de pares nombre - valor se envía al programa como una
sola cadena de caracteres, la cual se necesita separar. Este paso no es muy
complicado, y ya existen una gran cantidad de rutinas que lo implementan.
"nombre1=valor1&nombre2=valor2&nombre3=valor3"
Así que solo se necesita separar los ampersons y los signos de
igualdad. Así que, solo se necesita hacer dos cosas:
20
2. Análisis de herramientas de desarrollo y manejo de bases de datos en páginas en Internet
?
Convertir todas los signos de "+" a espacios, y convertir todas las
secuencias "%xx" al caracter cuyo valor ascii es "xx", en hexadecimal. Por
ejemplo, convertir "%3d" , ya que 3d hexadecimal es 61 en decimal
equivale a "=".
Es necesario este último paso por que la cadena original esta codificada
en URL, para permitir signos de igualdad, ampersons y otros símbolos,
puedan incluirse en los datos del usuario.
Pero, ¿De donde se obtiene esta cadena?. Eso depende del método
HTTP en que fue enviada la información de la forma:
? Si se utilizo el método GET , la cadena se encuentra en la
variable de ambiente QUERY_STRING.
? Si se utilizo el método POST , se obtiene del STDIN. El número
exacto de bytes que se deben leer se encuentra en la variable
de ambiente CONTENT_LENGTH.
Antes de comenzar el programa, se necesita escoger cual lenguaje de
programación utilizar. Para la mayo ría de los proyectos, escoger un lenguaje
es solo materia de preferencia. Mientras los amantes de Unix prefieren los
shell scripts, Perl o C, un usuario Windows preferirá utilizar Visual Basic, C o
tal vez un archivo por tareas de DOS. Se debe escoger un lenguaje de
programación que sea familiar, pero a su vez que sea una buena elección
para el sistema en que se correrá, y que pueda ejecutar las operaciones para
las cuales fue escrito el programa.
Al escoger cual lenguaje de programación utilizar, se deben de tomar
en consideración en que plataforma correrá. La mayoría de los lenguajes
21
2. Análisis de herramientas de desarrollo y manejo de bases de datos en páginas en Internet
comunes están disponibles para la mayoría de las plataformas para las
cuales existen servidores Web. El ejemplo mas obvio para la cual ésto no se
cumple es AppleScript. Esta claro que, si el servidor Web no corre en una
maquina Apple, no se debería de escribir los programas CGI en AppleScript,
aun si es el lenguaje de programación favorito. De cualquier manera, si el
Web Server corre en una maquina Apple Macintosh, AppleScript es una
opción poderosa ya que permite una interacción con otros programas en
Macintosh más fácilmente que C o C++.
Finalmente, asegurar que el lenguaje elegido sea apropiado para la
tarea que se quiere realizar. Para procesar información de una forma,
cualquiera de los lenguajes comunes trabajará bien, pero cuando se vuelven
programas más complicados, tales como acceso a bases de datos, Perl o C
son claramente la opción correcta en UNIX, y no un shell script.
Un programa CGI debe:
? Ser ejecutable (o en el caso de utilizar lenguajes interpretados
como Perl, incluir la llamada al intérprete)
? Estar ubicado en el directorio cgi-bin o win-cgi. La ubicación en
cada servidor puede variar y esta definida por el administrador del
servidor.
? Sea capaz de acceder a los archivos que necesita. Como la
aplicación corre desde el directorio cgi-bin o win-cgi, todas las
referencias relativas que hagan van a estar referenciadas al
mismo. Por las dudas, cuando se tenga que retornar una página
HTML completa, es más eficaz utilizar el URL completo (http://....) .
? Tener puestos los permisos del programa correctamente. El
programa debe de poder ser corrido por cualquier persona.
22
2. Análisis de herramientas de desarrollo y manejo de bases de datos en páginas en Internet
2.2.4 PROCESAMIENTO
En el momento en que accedemos a una página del tipo HTML,
podemos apreciar distintos elementos que permitirán que nuestros deseos o
necesidades puedan ser transmitidos a las personas que manejan esa
página. La mecánica es simple, la información es enviada a un programa, el
programa CGI, procesada y en consecuencia es generada una salida.
El script eventualmente retornará una página HTML o una imagen que
es mostrada como resultado de la ejecución. Este último caso es el de los
contadores, que a través de un pequeño programa en C, "pegan" los distintos
dígitos que representan la cantidad de accesos que ha tenido esa página en
una UNICA imagen .GIF . Para diferenciar estos dos tipos de salida se envía
un "header" al comienzo de la transmisión de la respuesta que las identifica
según la siguiente especificación (extensiones MIME):
Tipo de Información retornada
Texto
Una página HTMl
Content-type: text/html
Una imagen .GIF
Content-type: image/gif
2.2.5. SEGURIDAD
Muchos servidores los configura el administrador del sistema y se
ejecutan bajo un nombre de usuario inocuo, de manera que si un intruso
llega a conseguir entrada ilícita al sistema, no podrá hacer mucho daño
porque el nombre de usuario HTTP tiene acceso limitado. Sin embargo si se
está ejecutando un servidor HTTP bajo su nombre de usuario, debe tenerse
en cuenta que el servidor HTTP tiene los mismos privilegios.
Algunas precauciones básicas que deben tomarse en cuenta:
23
2. Análisis de herramientas de desarrollo y manejo de bases de datos en páginas en Internet
? Ningún programa CGI permitir a los visitantes transferir comandos para
ejecución directamente al sistema operativo.
? Poner un archivo index.html en todos los directorios disponibles para el
servidor HTTP; esto evitará que puedan ser listados los contenidos de los
directorios.
? Consultar frecuentemente los registros de entrada al servidor para
detectar a tiempo intentos de accesos sospechosos.
? Si no son necesarios los servicios ftp, nfs, uucp bórrelos archivos, o si
esto es requerido en el servidor, mantenga fuera del árbol de documentos
los archivos de datos y programas CGI usados, ya que esto evitará que
puedan ser accesados con GET o POST.
? Utilizar contra señas de acceso a programas CGI que tengan acceso a
bases de datos.
2.2.6 RESUMEN
? Un programa CGI puede ser escrito en cualquier lenguaje que pueda leer
STDIN (siglas de Standar Input, o entrada de datos estándar ), escribir a
STDOUT (siglas de Standar Output, o salida de datos estándar ) y leer
variables del ambiente
? La mayoría de los programas CGI están escritos en AppleScript, C, C++,
Perl, TCL, cualquier shell de Unix o Visual Basic. Estos no son los únicos
lenguajes a utilizar, pero son por mucho los más comunes.
Mientras se puede escoger cualquier lenguaje que se desee, existen
dos buenas razones para considerar alguno de los más comunes.
24
2. Análisis de herramientas de desarrollo y manejo de bases de datos en páginas en Internet
? Primero, será más rápido elaborar programas CGI ya que existen rutinas
disponibles. Muchos programadores del World Wide Web han escrito
programas CGI para tareas comunes. Algunos han hecho sus programas
disponibles gratuitamente a través de Internet. Se pueden encontrar estos
programas buscando en varios recetarios en el Web.
?
Segundo, si se utilizan uno de los lenguajes comunes de programación
CGI, es más fácil obtener ayuda para su depuración. Se pueden enviar
las preguntas y leer las respuestas en grupos como USENET o listas de
correo electrónico. Si se utiliza uno de los lenguajes populares, más
personas serán capaces de ayudarte con tus problemas.
25
2. Análisis de herramientas de desarrollo y manejo de bases de datos en páginas en Internet
2.3 ACTIVE SERVER PAGES (ASP).
2.3.1 DEFINICION
ASP, es esencialmente, código VBSCript
que se ejecuta en el
servidor. El código genera instrucciones HTML cuando un usuario accede a
la página que lo contiene. Esta es la clave de ASP: el cliente nunca ve el
código,
sólo
las
instrucciones
HTML
resultantes,
que
pueden
ser
relacionadas por cualquier navegador.
2.3.2 ASP SOBRE INTERNET
Para enviar datos a un servidor Web, el cliente utiliza un formulario
con etiquetas <FORM>. Estos formularios incluyen distintos campo de
entrada de datos similares a cuadros de texto. El programa cliente
empaqueta los datos y posteriormente los envía al servidor; el proceso de
envío de cualquier formulario está controlado por dos atri butos de la etiqueta
<FORM>: METHOD y ACTION. EL atributo METHOD determina la forma en
la que se envían los datos al servidor, el atributo cuanta con dos valores GET
y POST. El primero envía los datos como parte integrante del Localizador
Uniforme de Recursos (URL) de la página destino, y POST permite que el
navegador empaquete los datos contenidos en el formulario y que los envíe
al servidor. El atributo ACTION especifica cual será la página destino de los
datos que se han enviado. El siguiente ejemplo envía los datos a una página
denominada DATOS:ASP, utilizando el método POST:
<FORM METHOD="POST"
ACTION=http://www.ucol.mx/datos.asp">
<P><INPUT TYPE= "TEXT" NAME= "TXTnombre"> </P>
<P><INPUT TYPE= "TEXT" NAME= "TXTdomicilio"> </P>
<P><INPUT TYPE= "SUBMIT"></P>
</FORM>
26
2. Análisis de herramientas de desarrollo y manejo de bases de datos en páginas en Internet
El control denominado TYPE= "SUBMIT" es un botón que deberá ser
pulsado por el usuario para enviar los datos del formulario.
Otra forma de enviar los datos al servidor sobre Internet, es utilizando
la etiqueta <A>. La etiqueta <A> utiliza el atributo HREF para designar una
página destino y para transportar los datos cuando el usuario pulse sobre el
vínculo. Para separar el nombre de la página destino de los datos a enviar se
utiliza el signo de interrogación (?) separados por el carácter (&). Regresando
al ejemplo anterior don del formulario enviaba los campos TXTnombre y
TXTdomicilio ,
a continuación se muestra como se realiza utilizando un
hipervínculo:
<A HREF=
"http://www.ucol.mx/datos.asp?TXTnombre=Juan & TXTdomicilio=Colima">
Pulse aquí para enviar los datos al formulario ....
</A>
2.3.3 PARA PROGRAMADORES
La estructura del código ASP se encuentra encerrada entre caracteres
especiales (signos menor y mayor que y porcentajes) <%......%>, los cuales
definen al código para el servidor, lo que significa que el código se evaluará
antes de que la página se envíe al navegador. El siguiente código muestra
un ejemplo sencillo :
<%@ LANGUAGE="VBSCRIPT" %>
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
<head>
<meta HTTP-EQUIV="Content-Type" CONTENT="text/html; CHARSET=iso-8859-1">
<meta NAME="GENERATOR" CONTENT="Microsoft FrontPage 3.0">
<title>Ejemplo simple de código ASP</title>
</head>
27
2. Análisis de herramientas de desarrollo y manejo de bases de datos en páginas en Internet
<body BGCOLOR="#FFFFFF">
<%
Dim strSaludo
If Hour(Now) < 14 Then
strSaludo = "¡Buenos días!"
ElseIf Hour(Now) > 13 And Hour(Now) < 20 Then
strSaludo = "Buenas tardes"
ElseIf Hour(Now) > 19 Then
strSaludo = "¡Buenas noches!"
End If
%>
<h1><%=strSaludo%></h1>
</body>
</html>
La gran ventaja de utilizar ASP es que el código resultante es
simplemente HTML, por lo cual se puede apreciar en cualquier navegador y
se mostrará correctamente tanto en Netscape Navigator como en Internet
Explorer.
También resulta interesante la línea de código donde se genera las
instrucciones HTML, donde se utiliza una variable para escribir el saludo:
<h1><%=strSaludo%></h1>
La variable strSaludo está encerrada entre los signos mayor que y
porcentaje y, además, está precedida por un signo de igualdad. El signo de
igualdad juega un papel importante en ASP, le dice a ASP que inserte en la
página el valor actual de la variable como código HTML, por lo tanto, el valor
del saludo se inserta en este punto y se verá en el navegador como simple
texto, como se muestra a continuación (suponiendo que es más tarde de las
13:00 horas y antes de las ocho de la noche):
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
<head>
<meta HTTP-EQUIV="Content-Type" CONTENT="text/html; CHARSET=iso-8859-1">
<meta NAME="GENERATOR" CONTENT="Microsoft FrontPage 3.0">
28
2. Análisis de herramientas de desarrollo y manejo de bases de datos en páginas en Internet
<title>Ejemplo simple de código ASP</title>
</head>
<body BGCOLOR="#FFFFFF">
<h1><Buenas tardes</h1>
</body>
</html>
2.3.4 PROCESAMIENTO
Active Server Pages (ASP) incluye secuencias de comandos en sus
páginas HTML y crear así un contenido dinámico e interactivo en el sitio
Web. Anteriormente, las secuencias de comandos escritas en los lenguajes
VBScript y JScript se procesaban en los exploradores de Web preparados
para ello. Active Server Pages permite que sea el servidor Web el que
procese los comandos de VBScript y JScript. Cualquier explorador que
pueda establecer contacto con el servidor Web admitirá los resultados
dinámicos generados por ASP, tanto si admite VBScript o JScript
2.3.5 SEGURIDAD
El código es seguro: cada página puede utilizar las listas de control de
acceso (ACL) en el sistema de seguridad de Windows NT. También, dado
que el código se ejecuta en el servidor, el cliente de Web nunca ve el código
sólo los resultados. Esta propiedad le protege de usuarios que quieran mirar
o apropiarse de su código. Además, como puede administrar los servidores,
puede mantener código desautorizado fuera del servidor.
29
2. Análisis de herramientas de desarrollo y manejo de bases de datos en páginas en Internet
2.3.6 RESUMEN
La tecnología Active Server Pages o ASP, es la nueva tecnología
Internet más interesante ya que permite crear aplicaciones independientes
de la plataforma utilizada en cualquier navegador.
Una de las características más importantes es que la programación
ASP se realiza en el servidor, el código se evalúa dinámicamente cuando se
solicita el acceso a la página, y el código HTML resultante se envía al
navegador que se ha conectado. Esto hace que ASP sea una opción ideal
para cualquier aplicación que se desea ejecutar en Internet, donde cualquier
navegador puede acceder a sus páginas. Sin embargo, ASP no está limitado
al máximo común divisor, ya que puede añadir de programa, controles
ActiveX y HTML dinámico a la salida del ASP. Las páginas ASP son por lo
tanto tan flexibles y potentes como se desee.
30
2. Análisis de herramientas de desarrollo y manejo de bases de datos en páginas en Internet
2.4
SELECCIÓN
Y
JUSTIFICACIÓN
DE
HERRAMIENTA
DE
DESARROLLO
Para elegir la herramienta que nos permita de una manera mas
eficiente desarrollar nuestra aplicación, resumiremos brevemente cada una
de las características comunes en cada una de las tecnologías descritas en
las secciones anteriores :
JDBC:
Acceso a Internet Accesible ya que se realiza atraves de la dirección URL.
Jdbc:odbc://host.domain.com:400/databasefile
Programación.
Las operaciones de base de datos multifuncional de
Java, así mismo JDBC provee un mecanismo para
incrustar sentencias extendidas SQL
Procesamiento.
Se realiza en el cliente ya que los navegadores Java
pueden ejecutar aplicaciones, y no sólo desplegar
documentos HTML, poniendo a correr el proceso en el
lugar apropiado.
Seguridad.-
Proveer la máxima seguridad posible en redes públicas,
con múltiples formas de seguridad ante virus, posibles
invasiones o accesos incorrectos, archivos basura, etc
Tabla 2-1. Características de JDBC
31
2. Análisis de herramientas de desarrollo y manejo de bases de datos en páginas en Internet
CGI
Acceso a Internet Se accesan a través de las etiquetas <FORM>, <A>,
<HREF> y <IMG> de una página HTML.
Programación.
Un programa CGI puede ser escrito en cualquier
lenguaje que pueda leer STDIN, escribir a STDOUT y
leer variables del ambiente como C, C++, Perl, shell de
Unix o Visual Basic.
Procesamiento.
La información es enviada a un programa CGI, el
programa retorna una página HTML o una imagen que
es mostrada como resultado de la ejecución.
Seguridad.-
Contando precauciones en la configuración del servidor
y restringido acceso a los datos se considera segura.
Tabla 2-2. Características de CGI
32
2. Análisis de herramientas de desarrollo y manejo de bases de datos en páginas en Internet
ASP
Acceso a Internet Para enviar datos a un servidor Web, el cliente utiliza un
formulario con etiquetas <FORM>. El programa cliente
empaqueta los datos y posteriormente los envía al
servidor; el proceso de envío de cualquier formulario
está controlado por dos atributos de la etiqueta
<FORM>: METHOD y ACTION.
Programación.
La estructura del código ASP se encuentra encerrada
entre caracteres especiales (signos menor y mayor que
y porcentajes) <%......%>, los cuales definen al código
para el servidor, lo que significa que el código se
evaluará antes de que la página se envíe al navegador
Procesamiento.
Active Server Pages permite que sea el servidor Web el
que procese los comandos de VBScript y JScript.
Cualquier explorador que pueda establecer contacto con
el servidor Web admitirá los resultados dinámicos
generados por ASP, tanto si admite VBScript o JScript
Seguridad.-
El código se ejecuta en el servidor, el cliente de Web
nunca ve el código sólo los resultados.
Tabla 2-3. Características de ASP
33
2. Análisis de herramientas de desarrollo y manejo de bases de datos en páginas en Internet
En resumen : Se calificará marcando con Bueno, Regular y Malo
JDBC
CGI
ASP
Regular
Bueno
Bueno
Programación
Malo
Bueno
Bueno
Procesamiento
Bueno
Bueno
Bueno
Seguridad
Bueno
Regular
Bueno
Acceso a Internet
Tabla 2-4. Comparación de JDBC, CGI, ASP
En conclusión se selecciona como técnica de manejo de base de
datos a ASP para desarrollar una aplicación práctica, la cual se describirá en
los capítulos siguientes, así como describir claramente el acceso a los datos
utilizando esta técnica.
34
3. Acceso a bases de datos con Active Server Pages
3. ACCESO A BASES DE DATOS CON ACTIVE SERVER PAGES
Una vez seleccionada la tecnología Active Server Pages como forma
de acceso a bases de datos en el Web, se profundizará en esta herramienta,
a través de ejemplos simples, así como el de analizar el entorno requerido
para su implementación.
3.1 OBJETOS Y COMPONENTES
Al nivel más básico, crear una página ASP consiste sólo en escribir
código del lado del servidor para producir el resultado deseado. Sin embargo,
VBScript no es un lenguaje plenamente funcional, y se quedará corto cuando
se intenta crear páginas complejas, VBScript no cuenta con funciones
intrínsecas con las que se pueda acceder a ninguna fuente de datos externa,
por lo cual el lenguaje se complementa con objetos y componentes ASP.
Los objetos y componentes ASP no son más que componente s
ActiveX , algo similar a los DLL utilizados con Microsoft Visual Basic. La
diferencia existente entre objetos ASP y componentes ASP está relacionada
con la forma en que se encuentran empaquetados. Los objetos ASP son
elementos ActiveX que se encuentran siempre disponibles en VBScript. No
se tiene que crear explícitamente objetos ASP para su empleo. ASP puede
manejar los objetos Application, Session, Request, Response y Server.
Por otro lado, los componentes ASP son DLL que existen fuera del
mundo ASP. Estos componentes se pueden generar en cualquier lenguaje,
pero Microsoft ha incluido algunos disponibles componentes ASP de gran
utilidad en Visual InterDev. Los componentes ASP no estarán disponibles a
menos que se haya codificado expresamente. ASP puede manejar los
35
3. Acceso a bases de datos con Active Server Pages
componentes
denominados Database Access, File Access, Browser
Capabilities, Ad Rotator y Content Linking.
3.2 EL ARCHIVO GLOBAL.ASA
Al diseñar aplicaciones Internet independientemente de la tecnología
que se utilice, existe la dificultad para crear auténticas aplicaciones. La
interacción entre un navegador y un servidor Web es, básicamente, una
transación en la que el servidor pasa a una página Web al cliente y aquél se
olvida de que el cliente existe. Cuando, posteriormente, el cliente solicita otra
pagina Web, el servidor no recuerda la primera petición. En base a lo anterior
el problema esencial para todas las aplicaciones Web es el siguiente: ¿Como
se debe definir una aplicación?.
Definir una aplicación en el entorno de Microsoft Windows es
bastantes simple. La aplicación se ejecuta cuando se realiza una doble
pulsación sobre su icono asociado, y la aplicación finaliza cuando se
selecciona la opción salir del menú archivo. Entre estos dos sucesos los
datos se almacenarán en variables. Sin embargo el proceso no es mismo en
las aplicaciones Internet. ¿Cómo se determina cuando comienza o acaba
una aplicación? Si un usuario se conecta a un servidor y ve una página, se
podría decir que la aplicación ha comenzado. ¿ Pero que ocurre cuando el
usuario salta a otro servidor y vuelve al primero cinco minutos después?
¿Sigue estando viva la aplicación? ¿Qué ocurre si el usuario abandona el
primer servidor durante una hora? ¿y dos horas?.
Este problema de definir el principio y el final de una aplicación afecta
a la capacidad de gestionar correctamente variables y el flujo de trabajo.
Para evitar el problema mencionado, Active Server Pages proporciona una
36
3. Acceso a bases de datos con Active Server Pages
solución. ASP utiliza un archivo especial, denomiando GLOBAL.ASA, para
definir el principio y el final de una aplicación, así como el principio y el fina
de una sesión de usuario. GLOBAL.ASA es responsable de detectar cuatro
sucesos claves en su servidor: Aplication_OnStart. Aplication_OnEnd,
Session_OnStart y Session_OnEnd.
GLOBAL.ASA utiliza etiquetas <SCRIPT> para designar las distintas
secciones de programación. Estas tareas contienen un atributo especial,
denominado RUNAT=Server, que especifica que el VBSCript contenido
deberá ejecutarse en el servidor y no en el cliente. RUNAT=Server es similar,
en su función, a los signos mayor que, menor que y porcentaje utilizados en
la página Web para designar programación del lado del servidor. Los
sucesos contenidos en GLOBAL.ASA pueden ser atrapados en el lado del
servidor utilizando sintáxis estandar. Por ejemplo, para atrapar el comienzo
de una aplicacion se deberá utilizar las siguientes lineas de codigo:
<SCRIPT LANGUAGE=VBScript RUNAT=Server>
Sub Application_OnStart
‘ Código especifico de la aplicación
End Sub
</SCRIPT>
Una aplicación Internet se define como un directorio virtual y todas sus
páginas. Si un usuario solicita una página Web contenida en un directorio
virtual, denominado Librería, el usuario habrá puesto en marcha la aplicación
Librería,
y
los
sucesos
Application_OnStart
y
Session_OnStart
se
introducirán en GLOBAL.ASA.
Según
esta
definición,
una
aplicación
puede
ser
utilizada
simultáneamente por varios navegadores. El suceso Application_0nStart sólo
se dispara una vez (cuando el primer usuario solicita una página Web
contenida en el directorio virtual). Cuándo un segundo usuario solicite
37
3. Acceso a bases de datos con Active Server Pages
posteriormente, otras páginas contenidas en el mismo directorio, sólo se
disparará el suceso Session_OnStart.
Mientras que una aplicación puede englobar a varios navegadores que
acceden simultáneamente al mismo conjunto de páginas Web, una sesión se
refiere a cada navegador que accede a las mismas paginas Web. Una sesión
para un determinado navegador durará mientras que el usuario continúe
solicitando páginas Web contenidas en dicho directorio virtual. Si en veinte
minutos el usuario no vuelve a solicitar otras páginas Web, se considerará
que la sesión ha terminado y se disparará el suceso Session_OnEnd. Una
vez que hayan concluido todas las sesiones de usuario en el directorio
virtual, se disparará el suceso Application_OnEnd.
3.3 OBJETOS DE ACTIVE SERVER PAGES
ASP contiene un elevado número de objetos que permitirán gestionar
prácticamente todo, desde variables hasta envíos de formularios. Su empleo
es sencillo, y se les puede llamar directamente desde el código sin tener que
utilizar ninguna sintaxis especial. En este apartado se analizan los objetos
ASP disponibles en Visual InterDev para el diseñador de aplicaciones
Internet. En el apéndice A se describen las propiedades y métodos
manejados por estos objetos.
3.3.1 OBJETO APPLICATION
El objeto Application permite crear variables de aplicaciones, variables
que se encuentran disponibles para todos los usuarios de una aplicación.
Todos los usuarios que accedan a páginas Web contenidas en el mismo
38
3. Acceso a bases de datos con Active Server Pages
directorio virtual pueden compartir cualquier variable de aplicación definida
en dichas paginas.
El siguiente listado muestra un código ejemplo que utiliza el objeto
Applicition. En este ejemplo, se utiliza una variable de aplicación para
controlar c uando fue la última vez en que un usuario visitó la página.
<%@ LANGUAGE="VBScript"%>
<HTML>
<HEAD>
<TITLE>Variables de aplicación</TITLE>
<HEAD>
<BODY BGCOLOR="FFFFFF">
Esta página fue visitada por última vez el <%=Application("Time")%>
<%Application.Lock%>
<%Application("Time") = Now%>
<%Application.Unlock%>
</BODY>
</HTML>
Crear una variable de aplicación es tan sencillo como llamar al objeto
Aplication seguido del nombre de la nueva variable que se desee crear. Por
ejemplo, la siguiente instrucción crea una variable de aplicación denominada
Empresa y define su valor como NuevaTecnología:
Application("Empresa")= "NuevaTecnología"
El nombre es arbitrario, y la variable puede contener cualquier tipo de
información, ya sea números o te xto.
Debido a que la variable se encuentra disponible simultáneamente
para varios usuarios, por lo tanto para evitar la concurrencia; es decir, la
situación
que
se
produce
cuando
dos
usuarios
intentan
redefinir
simultáneamente la variable utilizando diferentes valores. Para evitar esta
situación, el objeto Application permite el empleo de los métodos Lock y
39
3. Acceso a bases de datos con Active Server Pages
Unlock. El método Lock bloquea todo objeto Application inmediatamente
después de modificar el valor de una variable:
Application.Lock
Application("Empresa")= "NuevaTecnología"
Application.Unlock
Aunque las variables de aplicación son útiles para almacenar
temporalmente los datos, no se pueden utilizar para almacenar datos de
forma permanente. El dato almacenado en una variable de aplicación se
destruye cuando se ejecuta el suceso Application-OnEnd. Tendrá que
trasladar las variables de aplicación a un sistema de almacenamiento
permanente, tal como una base de datos, si desea almacenar los valores
después de que finalice la aplicación.
3.3.2 OB JETO SESSION
ASP puede manejar variables para usuarios individuales mediante el
objeto Session, que permite crear variables de sesión definidas para su uso
por usuarios individualizados.
El listado siguiente muestra la forma en que el archivo GLOBAL.ASA
define variable de sesión. Definir variables de sesión es tan sencillo como
definir variables de aplicación. Solo se tiene que llamar al objeto Session
seguido por el nombre de la variable que se desea definir. La gran diferencia
existente entre una variable de aplicación y otra de sesión es la visibilidad de
la misma. Las variables de sesión están reservadas para un único usuario, y
existe durante todo el tiempo que mantenga el usuario la sesión Web.
Cuando el usuario deje de acceder a las páginas contenidas en un mismo
40
3. Acceso a bases de datos con Active Server Pages
directorio virtual por un período de tiempo superior a los 20 minutos, las
variables de sesión desaparecerán.
<SCRIPT LANGUAGE="VBScript" RUNAT="Server">
‘
‘
‘
‘
‘
‘
‘
‘
‘
‘
‘
‘
Puede añadir manejadores especiales de suceso en este archivo, el cual
se ejecutará automáticamente cuando tengan lugar sucesos especiales de
Active Server Pages. Para crear estos manejadores, añada
una subrutina con un nombre de la lista mostrada más abajo que se
corresponde con el suceso que desee utilizar. Por ejemplo,
si desea crear un manejador de suceso para Session_OnStart, deberá
introducir el siguiente código en este archivo (excluyendo los
comentarios):
‘
‘
‘
‘
‘
‘
‘
‘
‘
‘
‘
‘
Nombre del suceso
Session_OnStart
Sub Session_OnStart
**Introduzca su código aquí **
End Sub
Session_OnEnd
Application_OnStart
Application_OnEnd
Descripción
Se ejecuta por primera vez cuando un
usuario abre cualquier página de su
aplicación
Se ejecuta cuando finalice el tiempo
de se sión de un usuario o cuando éste
abandone su aplicación
Se ejecuta por primera vez cuando un
usuario entra en la primera página de
su aplicación por primera vez
Se ejecuta cuando el servidor Web se
apaga
</SCRIPT>
<SCRIPT LANGUAGE=VBScript RUNAT=Server>
Sub Session_OnStart
Session("Empresa") = "NuevaTecnología"
Session("Correo") = "[email protected]"
End Sub
</SCRIPT>
Las variables de sesión se pueden crear dentro de cualquier página
Web o en el archivo GLOBAL.ASA. El usuario podrá acceder a una variable
de sesión desde cualquier página Web contenida en la aplicación donde se
define originalmente dichas variables. Los valores asignados a las variables
de sesión definidas dentro del listado anterior muestran sus valores
asignados en campos de texto
41
3. Acceso a bases de datos con Active Server Pages
<FORM>
<P> <INPUT VALUE=> <%=Session ("EMPRESA")%>EMPRESA /P
<P> <INPUT VALUE= <%=Session ("correo")%>>E-Mail <P>
</FORM>
El cliente almacena el identificador denominado identificador único
global (GUID) y lo utiliza posteriormente para recuperar los datos
almacenados en el servidor. De esta forma cada cliente puede contar con
sus propios datos para cada una de las aplicaciones utilizadas en el Internet.
3.3.3 OBJETO REQUEST
Una aplicación Internet difiere ciertamente en muchos aspectos de
una típica aplicación cliente/servidor, pero también tienen sus similitudes; por
ejemplo, ambos tipos de aplicaciones dependen totalmente de la
transferencia de datos existentes entre el cliente y el servidor. Cuando un
servidor Web desea enviar datos a un cliente lleva a cabo esta tarea creando
una página Web y enviándola. Cuando un cliente desea devolver un dato a
un servidor Web, el navegador ejecuta un proceso denominado envío de
formularios.
Para enviar datos a un servidor Web, el cliente utiliza un formulario
con etiquetas <FORM>. Estos formularios incluyen distintos campos de
entrada de datos similares a cuadros de texto. El programa cliente
empaqueta los datos introducidos en los campos de datos y, posteriormente,
envía el paquete de datos a la computadora back-end.
El proceso de envío de cualquier formulario está controlado por dos
atributos de la etiqueta <FORM>: METHOD y ACTION. El atributo METHOD
de la etiqueta <FORM> determina la forma en la que se envían los datos al
42
3. Acceso a bases de datos con Active Server Pages
servidor. Este atributo cuenta con dos posibles valores: POST y GET. POST
le pide al navegador que empaquete todos los datos contenidos en el
formulario y que los envíe al servidor. GET, por otro lado, envía los datos
como una parte integrante del Localizador Uniforme de Recursos (URL) de la
página destino. El atributo ACTION especifica cuál será la página destino de
los datos que se han enviado.
Por ejemplo, las siguientes líneas de programas envían todos los
datos contenidos en los campos de texto a una página, denominada
DATOS.ASP, utilizando para ello el método POST:
<FORM METHOD= "POST"
ACTION= "http://www.colima.com/datos.asp">
<P> <INPUT TYPE= "TEXT" NAME= "TXTNombre"></P>
<P> <INPUT TYPE= "TEXT" NAME= "TXTEmail"> </P>
<P><INPUT TYPE= "SUBMIT"> </P>
</FORM>
El control especial denominado TYPE="SUBMIT" es un botón que
deberá pulsar el usuario cuando se encuentre listo para enviar el formulario.
Al pulsar el botón, se provocará que el navegador empaquete los datos
introducidos en los campos de texto y los envíe. El formato de los datos
remitidos se encuentra estrictamente definido, por lo que el servidor sabe
perfectamente lo que va a recibir del cliente. Los datos adoptarán la forma de
Campo=Valor; estos pares de información se enviarán al servidor en un
formato textual, claro. Si en el ejemplo anterior escribiera NuevaTecnología
dentro del campo txtNombre e informes en el campo txtEMail, el archivo
DATOS.ASP recibiría la siguiente cadena de texto:
txtNombre=NuevaTecnología&txtEMail=Informes.
En el lado del servidor, estos datos se dividirán de nuevo en campos y
en valores y, finalmente, se utilizarán con el fin previsto, incluyendo acceso a
43
3. Acceso a bases de datos con Active Server Pages
base de datos o creación y envío de correo electrónico. Es en este momento
cuando el objeto Request entra en acción. ASP utiliza al objeto Request para
esgajar los datos enviados por el programa cliente. Para utilizar el objeto
Request sólo se tendrá que proporcionar el nombre del campo que se desee
examinar, el objeto Request obtendrá el valor. Por ejemplo, la siguiente
instrucción devolverá el valor NuevaTecnología:
<%=Request.Form("txtNombre")%>
Request.Form se utiliza siempre que desee examinar el contenido de
un formulario enviado a una página ASP. El objeto Request sólo estará
disponible para páginas ASP, y sólo puede devolver datos desde un
formulario enviado directamente a su página. No podrá acceder a datos
contenidos en formularios que no hayan sido enviados a su página.
Muchas
aplicaciones
Internet
utilizan
envíos
secuenciales
de
formularios para llevar a cabo tareas tales como conexión a una base de
datos. Sin embargo en ocasiones puede suceder que un usuario no necesite
rellenar un formulario y enviarlo, Sino que sólo desee pulsar un hipervínculo
para acceder a nuevos datos. Este tipo de tareas también se puede realizar
utilizando el objeto Request.
Para crear un hipervínculo capaz de enviar datos necesitará utilizar un
ancla; es decir, la etiqueta <A>. La etiqueta ancla utiliza el atributo HREF
para designar una página destino y para transportar allí los datos cuando el
usuario pulse sobre el vínculo.
El signo de interrogación (?) separa el nombre de la pagina destino de
los datos. Volviendo al ejemplo en el que un formulario enviará a los campos
44
3. Acceso a bases de datos con Active Server Pages
txtNombre y txtCorreo. Si se desea enviar los mismos datos utilizando un
hipervínculo, se deberá introducir las siguientes líneas de código:
<A HREF=
"http://www.colima.com/datos.asp?
txtNombre=NuevaTecnología&txtCorreo=Informes">
¡Pulse aquí para enviar datos!
<A>
Obsérvese que los datos unidos al hipervínculo tiene el formato
Campo=Valor, al igual que sucede en un formulario que se ha enviado.
Siempre que proporcione los datos en este formato, el objeto Request será
capaz de subdividirlos y analizarlos. Sin embargo; no se podrá utilizar la
sintaxis Request.Form con los datos enviados mediante un hipervínculo. En
su lugar, se deberá utilizar Request.QueryString, que trabaja en la misma
forma que Request. Form, pero que se empleará con los datos enviados
mediante un hipervínculo. De esta forma, la siguiente instrucción devuelve el
valor NuevaTecnología desde el hipervínculo.
<%=Request.QueryString("txtNombre")%>
El objeto Request tiene otros usos además de los ya indicados. Se
podrá, por ejemplo, utilizar Request para recuperar toda clase de información
relacionada con la aplicación cliente. Podrá acceder a cualquier cosa, desde
recetas enviadas junto a la solicitud del cliente a cadenas de agente de
usuario del navegador. El siguiente listado muestra un ejemplo sencillo del
empleo de la colección ServerVariables perteneciente al objeto Request para
determinar la cuenta de Microsoft Windows NT a la que ha accedido la
aplicación cliente.
<%@ LANGUAGE="VBSCRIPT" %>
<HTML>
<HEAD>
<META NAME="GENERATOR" Content="Microsoft Visual InterDev 1.0">
<META HTTP-EQUIV="Content-Type" content="text/html;
charset=iso-8859-1">
45
3. Acceso a bases de datos con Active Server Pages
<TITLE>Variables del servidor</TITLE>
</HEAD>
<BODY BGCOLOR="WHITE">
<H1>
Ha accedido con el nombre <%=Request.ServerVariables("LOGON_USER")%>
</H1>
</BODY>
</HTML>
Las variables del servidor proporcionan un amplio abanico de
información sobre la aplicación cliente y el servidor Web. La relación
completa de todas las variables pertenecientes a esta colección, y que se
podrá utilizar, se encuentra en Visual InterDev. En cualquier caso, para poder
acceder a cualquier variable, sólo se tendrá que leer la colección. Por
ejemplo, la siguiente instrucción pro porciona la cadena de agente usuario del
navegador cliente:
<%=Reques.ServerVariables"AHTTP -USER-AGENT")%>
3.3.4 OBJETO RESPONSE
El objeto Response gestiona el contenido proporcionado a un
navegador por un ASP. De hecho aunque no se dé cuenta, utilizará el objeto
Response en cada página ASP. Cuando se emplee la combinación de
caracteres menor y mayor que/porcentaje/igual (<%=variable%> )para
devolver el contenido generado por un ASP, el signo igual es, en realidad, la
abreviatura del método Write de] objeto Response. Por lo tanto, las dos
siguientes instrucciones son equivalentes:
<%="NuevaTecnoloía"%>
<%Response.Write "NuevaTecnología"%>
Como el objeto Response se utiliza con tanta frecuencia en ASP, la
abreviatura del signo de igualdad está plenamente justificada. En caso
46
3. Acceso a bases de datos con Active Server Pages
contrario,
tendría
que
escribir
innumerables
veces
la
combinación
Response.Write en todas las páginas ASP.
Otra útil característica del objeto Response es la propiedad Expires.
Response.Expires especifica el tiempo en minutos que deberá transcurrir
antes de que expire la página actual. Si se define como cero esta propiedad.
la página Web expirará en el momento en que sea importada e Internet
Explorer no almacenará la página en la memora caché.
El almacenamiento en caché de Internet Explorer 4.0 afecta a muchos
proyectos de desarrollo, y un mal uso puede impedir que su servidor funcione
correctamente, IE 4.0 almacena en caché las páginas de dos formas
distintas: en el disco y en la memoria. La mayoría de los diseñadores y
usuarios están familiarizados con el almacenamiento en disco de las páginas
y suponen que esta operación tendrá lugar, pero la mayoría de los usuarios
no se percaten de que IE 4.0 también utiliza la memoria de la computadora
como lugar de almacenamiento caché. De hecho, IE 4.0 recuerda en la RAM
las cinco últimas paginas visitadas. Este hecho puede tener un impacto
importante en la forma en que se comporte la aplicación. Supongamos, por
ejemplo, la siguiente instrucción que muestra la fecha/hora en una página
Web:
<H1>La hora actual es <%Response.Write Now%>
Bajo condiciones normales IE 4.0 solicita esta página y se ejecutará el
programa en el servidor haciendo que la hora actual aparezca en la página.
Sin embargo, si el navegador accede a otra página y vuelve luego acceder a
la página que contenía la marca de fecha/hora. La hora no habrá cambiado.
Esto se debe a que IE 4.0 a almacenado en la RAM el resultado de la página
ASP y no solicita un nuevo acceso al servidor para recuperarla. Esta
47
3. Acceso a bases de datos con Active Server Pages
situación continuará hasta que el usuario visite un mínimo de cinco páginas
distintas. En este caso, la primera página a la que se accedió se borrará de
la caché de la RAM.
Podrá evitar este efecto perjudicial definiendo como 0 la propiedad
Expires del objeto Response. Lo que fuerza que la página Web expire. El
código contenido en el siguiente listado muestra la hora correcta siempre que
se visualice el contenido de la página independientemente de que se
encuentra o no en la caché de la memora RAM.
Del mismo modo, el empleo de la caché de RAM puede originar
efectos extraños durante la fase de diseño. Los diseñadores suelen realizar
modificaciones sobre una página Web con Visual InterDev, luego ven su
aspecto con un navegador por último se preguntan porque los cambios
realizados no aparecen la nueva página. Este efecto suele ocurrir porque la
antigua versión de la memoria RAM, y IE 4.0 no carga la página modificada.
Por tanto, cuando se desarrolle páginas con Visual InterDev, siempre deberá
asegurarse de cargar correctamente sus páginas en el navegador después
de realizar los cambios.
<%@ LANGUAGE="VBScript"%>
<%Response.Expires = 0%>
<HTML>
<HEAD>
<META NAME="GENERATOR" Content="Microsoft Visual InterDev 1.0">
<META HTTP-EQUIV="Content-Type" content="text/html;
charset=iso-8859-1">
<TITLE>Cómo obligar a que una página expire</TITLE>
</HEAD>
<BODY BGCOLOR="white">
<H1>Actualmente la hora es <%Response.Write Now%>
</BODY>
</HTML>
48
3. Acceso a bases de datos con Active Server Pages
3.3.5 OBJETO SERVER
El objeto Server proporciona funciones que no están relacionadas
entre sí de ninguna forma excepto en el sentido de que son útiles para el
diseñador de aplicaciones Internet.
Quizá la función más importante de todos los objetos Server sea el
método Create0bject, que permite crear instancias de componentes Active X.
El componente puede ser bien un componente integrado que se comercialice
con Visual InterDev o un componente que se desarrolla en cualquier
lenguaje. En cualquier caso, para poder utilizar un componente ActiveX del
lado del servidor, se deberá emplear el método CreateObject.
CreateObjet toma como argumento el ProgID del componente ActiveX
que se desea utilizar. Un ProgID es un nombre descriptivo para un
componente, tal como Hoja.Excel o Word.Basi. La siguiente instrucción
muestra la forma en que deberá utilizar el método CreateObject para generar
una instancia de un componente de correo electrónico cuyo ProgID sea
Conector.Correo:
Set MiObjeto = Server.CreateObject ("Conector.Correo")
3.4 COMPONENTES DE ACTIVE SERVER PAGES
Los componentes de ASP son realmente componentes de ActiveX
(como todos aquellos que pueda crear con Visual Basic, Visual C++ e,
incluso, Visual J++). Estos componentes especiales, sin embargo, han sido
desarrollados por Microsoft y se comercializan con Visual InterDev. Han sido
diseñados para realizar tareas útiles y genéricas para servidores Web,
49
3. Acceso a bases de datos con Active Server Pages
incluyendo el acceso a datos. Se podrá crear estos componentes en sus
páginas Web utilizando el método CreateObject del objeto Server. Una vez
creados, podrá acceder a sus propiedades y Métodos para llevar a cabo
funciones diversas en su servidor.
3.4.1 COMPONENTES DE ACCESO A BASES DE DATOS
El componente ASP de mayor utilidad es el denominado Database
Access, también llamado objetos de datos ActiveX o ADO. Si se desea editar
una base de datos en Web, se deberá emplear este componente. Y los
objetos contenidos en él, para leer y escribir a fuentes de datos del tipo Open
Database Connectivity (ODBC)
(En el apéndice A se presenta una lista completa de los Objetos de Datos de
ActiveX).
El objeto Connection se crea mediante el método CreateObject del
objeto Server y utiliza una variable para recibir el objeto al que se hace
referencia. Una vez creado el objeto Connection, se puede utilizar para
conectar con cualquier fuente de datos ODBC. El siguiente código establece
una conexión con una fuente ODBC del tipo SQL Server, denominada
Publicaciones:
<%
‘ Declara una variable
Dim objConnection
‘ Crea el objeto Connection
Set objConnection = Server.CreateObject("ADODB.Connection")
‘ Abre la conexión con la fuente de datos
objConnection.Open "Publicaciones", "sa", ""
%>
50
3. Acceso a bases de datos con Active Server Pages
En el listado anterior, objConnection es la variable utilizada como
objeto de referencia, de la instancia del objeto Connection. Esta referencia
tendrá acceso a todas las propiedades y métodos del objeto Connection. El
método Open establece la conexión con la fuerte de datos y cuenta con tres
argumentos nombre de la fuente de datos, ID del usuario y contraseña.
Una vez abierta la conexión con la fuente de datos se podrá utilizar un
objeto Recordset para Recuperar la información almacenada en la fuente de
datos. El objeto Recorset permite ejecutar la instrucción SELECT de SQL y
obtener un grupo de registros que cumplan con las condiciones indicadas en
la instrucción SELECT. Al igual que sucede con el objeto Connection, se
podrá crear el objeto de Recordset utilizando el objeto Server. En el siguiente
ejemplo, el programa ejecuta una instrucción SELECT de SQL sobre la
fuente de datos representada por la variable objConnection:
<%
Declara una variable
Dim objRecordset
‘ Crea el objeto Recordset
Set objRecordset = Server.CreateObject("ADODB.Recordset")
‘ Ejecuta la consulta SQL
objRecordset.Open "SELECT *", objConnection
%>
Una vez que han sido extraídos los registros, se podrá emplear los
metodos MoveFirst, MoveLast, MoveNext y MovePrevious para navegar por
los distintos registros. El método Write del objeto Response podrá introducir
los datos en una página Web que, posteriormente, importará el navegador. El
listado siguiente muestra una página ASP de ejemplo que genera una lista
de las editoriales contenidas en una base de datos de Publicaciones.
<%@ LANGUAGE="VBScript" %>
<HTML>
<HEAD>
<META NAME="GENERATOR" Content="Microsoft Visual InterDev 1.0">
<META HTTP-EQUIV="Content-Type" content="text/html;
51
3. Acceso a bases de datos con Active Server Pages
charset=iso-8859-1">
<TITLE>Empleo de ADO</TITLE>
</HEAD>
<BODY>
<%
' Declaración de variables
Dim objConnection
Dim objRecordset
' Creación de objetos
Set objConnection = Server.CreateObject("ADODB.Connection")
Set objRecordset = Server.CreateObject("ADODB.Recordset")
' Abrir conexión y ejecutar la consulta
objConnection.Open "Publicaciones", "sa", ""
objRecordset.Open "SELECT nombre_pub FROM Editores", objConnection
%>
<!-- Construir la lista del grupo de registros extraídos -->
<SELECT SIZE=8>
<%
Do While Not ObjRecordset.EOF
%>
<!-- Crear cada entrada en la lista -->
<OPTION><%=objRecordset("nombre_pub")%></OPTION>
<%
objRecordset.MoveNext
Loop
%>
</SELECT>
</BODY>
</HTML>
Administrar la información contenida en un objeto Recordset es una de
las primeras tareas de programación que se debe realizar en cualquier
aplicación Web orientada a datos. A menudo, una simple consulta da lugar a
más filas de datos de las que se pueden mostrar razonablemente en
pantalla. Por ejemplo, cuando se utiliza cualquier motor de búsqueda
Internet. El sistema de búsqueda acepta una palabra clave y como resultado,
muestra una lista con vínculos a los diferentes servidores que tengan
relación con dicha palabra. Sin embargo, muchas veces existen miles de
servidores Internet que contienen la clave introducida. Mostrar todos estos
servidores en una única página Web es obviamente imposible.
52
3. Acceso a bases de datos con Active Server Pages
La solución a este tipo de situaciones es la paginación. Este sistema
es utilizado por casi todos los motores de búsqueda para mostrar, tan sólo,
una parte de los resultados de búsqueda, es decir, unos diez registros por
vez. De esta forma, el usuario puente gestionar, de forma efectiva la
información obtenida.
Los ADO permiten la paginación mediante el empleo de varias
propiedades del objeto Recordset: PageSize. PageCount y AbsolutePage.
Cuando se emplea objetos ADO para recuperar un grupo de registros
se podrá especificar, que la lista de registros quede dividida en varias
paginas. Al asignar el valor para la propiedad PageSize se especifica el
número de filas que tendrá cada una de las paginas que mostraran la lista de
registros. También se podrá calcular el número total de paginas que va
ocupar dicho grupo de registros sin más que utilizar la propiedad PageCount.
Si se desea acceder a una pagina con un número específico, deberá utilizar
la propiedad AbsolutePage.
El siguiente listado muestra un ejemplo completo de paginación que permite
al usuario examinar registros en grupos de diez
<%@ LANGUAGE="VBScript" %>
<%Response.Expires=0%>
<HTML>
<HEAD>
<META NAME="GENERATOR" Content="Microsoft Visual InterDev 1.0">
<META HTTP-EQUIV="Content-Type" content="text/html;
charset=iso-8859-1">
<TITLE>Registro de paginación</TITLE>
</HEAD>
<BODY>
<%
' ¿En qué página estamos?
Select Case Request.QueryString("Direction")
Case ""
Session("CurrentPage") = 1
Case "Next"
Session("CurrentPage") = Session("CurrentPage") + 1
53
3. Acceso a bases de datos con Active Server Pages
Case "Previous"
Session("CurrentPage") = Session("CurrentPage") - 1
End Select
' Constantes
Const adOpenKeyset = 1
' Declaración de variables
Dim objConnection
Dim objRecordset
' Apertura de la base de datos
Set objConnection = Server.CreateObject("ADODB.Connection")
objConnection.Open "Biblio", "", ""
' Creación de la instrucción SQL
Dim strSQL
strSQL
strSQL
strSQL
strSQL
strSQL
strSQL
strSQL
=
=
=
=
=
=
=
strSQL
strSQL
strSQL
strSQL
strSQL
strSQL
strSQL
&
&
&
&
&
&
&
"SELECT Authors.Author, Titles.Title, "
"Publishers.`Company Name` FROM Authors, "
"`Title Author`, Titles, Publishers "
"WHERE Authors.Au_ID = `Title Author`.Au_ID "
"AND `Title Author`.ISBN = Titles.ISBN "
"AND (Publishers.`Company Name` LIKE "
"'%Microsoft%') ORDER BY Authors.Author"
' Creación grupo de registros
Set objRecordset = Server.CreateObject("ADODB.Recordset")
objRecordset.PageSize = 10
objRecordset.Open strSQL, objConnection, adOpenKeyset
objRecordset.AbsolutePage = CLng(Session("CurrentPage"))
' Mostrar los resultados
%>
<P>Page <%=Session("CurrentPage")%> of <%=objRecordset.PageCount%></P>
<TABLE BORDER>
<TR>
<TH>
Author
</TH>
<TH>
Title
</TH>
<TH>
Publisher
</TH>
</TR>
<%
Dim i
For i = 1 To objRecordset.PageSize
%>
<TR>
<TD>
<%=objRecordset("Author")%>
</TD>
<TD>
<%=objRecordset("Title")%>
</TD>
54
3. Acceso a bases de datos con Active Server Pages
<TD>
<%=objRecordset("Company Name")%>
</TD>
</TR>
<%
objRecordset.MoveNext
Next
%>
</TABLE>
<!-- Hipervínculo Siguiente -->
<%If CLng(Session("CurrentPage")) < objRecordset.PageCount Then %>
<P><A HREF="listado.asp?Direction=Next">Página Siguiente</A></P>
<%End If%>
<!-- Hipervínculo anterior -->
<%If CLng(Session("CurrentPage")) > 1 Then %>
<P><A HREF="listado.asp?Direction=Previous">Página anterior</A></P>
<%End If%>
<%
' Cierre de la base de datos
objRecordset.Close
objConnection.Close
Set objRecordset = Nothing
Set objConnection = Nothing
%>
</BODY>
</HTML>
En el ejemplo anterior se utilizan varias técnicas en las que se
profundizará. En primer lugar el programa solo necesita un único archivo
ASP para llevar a cabo todo el proceso de paginación. El programa llama
siempre al mismo archivo ASP una vez tras otra para cada pagina de datos.
Normalmente cuando se llama a una pagina Internet Explorer la localiza en la
RAM. En este ejemplo, la pagina siempre se encontrara en la RAM por que
se la llama de manera recursiva.
Sin embargo el problema que se plantea cuando se recupera una
pagina almacenada en la RAM es la que consulta no se llevará a cabo a
menos que ejecuten el código del servidor. Se tendrá que evitar que IE 4.0
utilice el archivo ASP que se encuentra previamente en la RAM. Para forzar
las vuelta al servidor se deberá asignar el valor 0 a la propiedad Expired del
objeto Response. Esta instrucción hace que se refresque el archivo en cada
petición y, como resultado se obtiene el comportamiento adecuado.
55
3. Acceso a bases de datos con Active Server Pages
También se debe observar que el código ejecuta la misma consulta
cada vez que se llama a la pagina, modificando únicamente la propiedad
AbsolutePage. Ejecutar una y otra vez la misma consulta puede parece inútil,
pero esta operación requiere menos recursos que el almacenamiento de
grandes objetos Recordset en variables de sección y obligar a que su valor
perdure en todas las paginas. Si en un servidor accedido por cientos de
usuarios, cada uno de los cuales maneja un objeto Recordset en una
variable de sesión, de esta forma pronto se colapsaría el servidor.
Al emplear los objetos ADO se podrá acceder a los datos utilizando las
instrucciones SQL adecuadas. Se podrá realizar las consultas utilizando
procedimientos SQL almacenados en el servidor o empleando instrucciones
SELECT del SQL. Las actualizaciones se ejecutarán utilizando instrucciones
UPDATE de SQL y el método Execute del objeto Connection.
3.4.2 COMPONENTES DE ACCESO A ARCHIVOS
El componente File Access (acceso a archivo) permite acceder a
archivos de texto almacenados en un servidor Web. Este componente
consta, en realidad, de dos objetos independientes: el objeto FileSystem. que
se utiliza para abrir y cerrar archivos, y el objeto TextStream, que se utiliza
para leer y escribir.
Para abrir un archivo que se desea acceder, se deberá crear, en
primer lugar, un objeto FileSystem con el método CreateObject del objeto
Server. Una vez que haya creado una instancia del objeto FileSystem se
podrá emplear el método CreateTextFile para crear un nuevo archivo o el
método OpenTextFile para abrir un archivo existente. En cualquier caso, el
56
3. Acceso a bases de datos con Active Server Pages
resultado es un objeto TextStream que permitirá leer y escribir. Las
siguientes instrucciones muestran cómo utilizar los objetos para acceder a un
archivo denominado DATOS.TXT:
Set objFile = Server.CreateObject("Scripting.FileSystemObject")
Set objStream = objFile.OpenTextFile("DATOS.TXT")
Una vez creado el objeto TextStream, se podrá utilizar cualquier
método disponible para leer o escribir el archivo. Sin embargo, se deberá
tener en cuenta que, normalmente, cualquier archivo se abrirá para lectura o
para escritura. no para realizar ambas operaciones de forma simultánea.
Este hecho puede afectar en gran manera el código contenido en su página
ASP, requiriéndose la apertura y el cierre de un archivo, para luego tener que
volver a abrirlo para realizar una operación distinta.
Además de las simples operaciones de escritura y lectura, el
componente File Access también le será útil para crear contenidos
dinámicos. Si se desea generar un programa que muestre un consejo o
mensaje distinto cada vez que se acceda a la pagina Web, se podrá emplear
el código siguiente. En este caso se muestra un ejemplo completo que
mostrará aleatoriamente mensajes generados en Visual Basic. La clave para
mostrar mensajes de forma aleatoria es crear un archivo de texto que
contenga una lista completa de frases (una frase por línea). Posteriormente,
se podrá acceder a los mensajes de forma aleatoria utilizando el método
ReadLine del objeto TextStream. En la página, se introducirá una única línea
utilizando el método Write del objeto Response.
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" content="text/html; charset=iso-8859-1">
<META NAME="GENERATOR" content="Microsoft FrontPage 2.0">
<TITLE>Trucos de VB</TITLE>
</HEAD>
57
3. Acceso a bases de datos con Active Server Pages
<BODY BGCOLOR="#FFFFFF">
<%
' Declaración de variables
Dim objArchivo
Dim objCadena
' Apertura del archivo
Set objArchivo = _
Server.CreateObject("Scripting.FileSystemObject")
Set objCadena = _
objArchivo.OpenTextFile(Server.MapPath("/ASP") & "tips.txt")
Randomize Timer
intLine = Int(Rnd * 19)
For i = 0 to intLine
objCadena.SkipLine
Next
strText = objCadena.ReadLine
objCadena.Close
Set objCadena = Nothing
Set objArchivo = Nothing
%>
<CENTER><H1>Truco del día de Visual Basic</H1></CENTER>
<%=strText%>
</BODY>
</HTML>
3.4.3 COMPONENTE CAPACIDAD DEL NAVEGADOR
El componente Browser Capabilities (capacidad del navegador)
identifica el navegador que está accediendo al servidor y proporciona un
acceso programático a la lista de funciones soportadas por el navegador.
Este componente representa una importante ventaja para los diseñadores
Web que intenten desarrollar aplicaciones, tanto para Internet Explorer como
para Netscape Navigator. Al utilizar este componente, se podrá adaptar la
página Web a un determinado navegador. El componente Browser
Capabilities utiliza la cadena del agente de usuario del navegador para
identificar al mismo. El navegador pasa al servidor la cadena del agente de
58
3. Acceso a bases de datos con Active Server Pages
usuario cada vez que solicita el acceso a una página Web. Por ejemplo, la
cadena del agente de usuario de IE 4.0 tiene el siguiente aspecto.
Mozilla 4.0 (compatible; MSIE 4.0; Windows 95)
Para poder determinar las funciones disponibles en un determinado
navegador, el componente BrowserCapabilities compara la cadena del
agente de usuario del navegador con los registros existentes en un archivo
especial
de
inicialización,
denominado
BROWSCAP.INI.
Cuando
el
componente BrowserCapabilities encuentre la cadena del agente de usuario
adecuada en el archivo, todas las funciones listadas para el navegador
asociado se encontrarán accesibles como propiedades del componente. El
listado siguiente muestra la parte del archivo BROWSCAP.INI que se
corresponde con IE 4.0.
[Mozilla /4.0 (compatible; MSIE 4.0; Windows 95)]
Browser =IE
Version = 4.0
majorver = # 4
minorver = # 0
frames = TRUE
tables = TRUE
cookies = TRUE
backgrounsdsounds = TRUE
vbscript = TRUE
javascript = TRUE
javaapplets = TRUE
ActiveXControls = TRUE
Win16 = False
beta = False
AK = False
SK= False
AOL = False
crawler = False
Utilizar el componente BrowserCapabilities es similar a introducir una
instrucción de compilación condicional en una página ASP. Podrá construir
instrucciones If...Then sencillas que afecten en gran medida al contenido
final. Por ejemplo, el siguiente listado envía una etiqueta <OBJECT> a un
navegador compatible con los controles ActiveX, una etiqueta <APPLET> a
59
3. Acceso a bases de datos con Active Server Pages
una navegador compatible con Java o un mensaje de texto a los
navegadores que no cuenten con ninguna de las funciones anteriores.
<%@ LANGUAGE="VBScript" %>
<%Response.Expires=0%>
<HTML>
<HEAD>
<META NAME="GENERATOR" Content="Microsoft Visual InterDev 1.0">
<META HTTP-EQUIV="Content-Type" content="text/html;
charset=iso-8859-1">
<TITLE>Capacidad del navegador</TITLE>
</HEAD>
<BODY>
<CENTER>
<%
' Creación del componente Capabilities del navegador
Dim objNavegador
Set objNavegador = _
Server.CreateObject("MSWC.BrowserType")
' Búsqueda de las funciones que se podrán utilizar
%>
<%
If objNavegador.ActiveXControls Then
%>
<H1>Controles ActiveX</H1>
<SCRIPT LANGUAGE="VBScript ">
<!-Sub Window_OnLoad()
pathBall.Target = objBall.Style
End Sub
-->
</SCRIPT>
<!-- Control estructurado de gráficos -->
<OBJECT ID="objBall"
STYLE="POSITION:ABSOLUTE;HEIGHT:70;
WIDTH:110;TOP:0;LEFT:0;ZINDEX:0"
CLASSID=
"CLSID:5FD6A143-372A-11D0-A521-0080C78FEE85">
<PARAM NAME="Línea0001"
VALUE="SetLineColor(255,255,255)">
<PARAM NAME="Línea0002"
VALUE="SetFillColor(255,0,0,0,0,255)">
<PARAM NAME="Línea0003"
VALUE="SetFillSTYLE(1)">
<PARAM NAME="Línea0004"
VALUE="SetLineSTYLE(1)">
<PARAM NAME="Línea0005"
VALUE="Oval(0,-25,50,50,0)">
</OBJECT>
<!-- Control de camino -->
60
3. Acceso a bases de datos con Active Server Pages
<OBJECT ID="pathBall"
CLASSID=
"CLSID:E0E3CC60-6A80-11D0-9B40-00A0C903AA7F">
<PARAM NAME=AutoStart VALUE=-1>
<PARAM NAME=XSeries
VALUE="0,0;30,0;45,0;52,0;55,0">
<PARAM NAME=YSeries
VALUE="0,0;30,80;45,160;52,240;55,320">
<PARAM NAME=EdgeAction VALUE="1">
<PARAM NAME=TickInterval VA LUE=10>
</OBJECT>
<%ElseIf objNavegador.JavaApplets Then%>
<H1>Aplicación Java</H1>
<APPLET CODE="marquee.class" HEIGHT=40 WIDTH=400>
<PARAM NAME="CAPTION" VALUE="¡El Java es maravilloso!">
</APPLET>
<%Else%>
<!-- Navegador textual -->
<H1>¡No es compatible con ningún tipo de componentes!</H1>
<%End If%>
</CENTER>
</BODY>
</HTML>
3.4.4 COMPONENTE AD ROTATOR
El componente Ad Rotator (rotor publicitario) ha sido diseñado
específicamente para aquellos servidores que alquilen espacios publicitarios.
Este componente proporciona un buen método para controlar la rotación de
las imágenes publicitarias almacenadas en el servidor. Lee la información
relacionada con los anuncios desde un archivo de texto especial que es el
encargado de decir qué hay que mostrar y durante cuánto tiempo. Utilizar el
componente Ad Rotator es tan simple como crear el componente y leer el
archivo de texto. El siguiente listado muestra un ejemplo de su uso:
<%
Dim Ad
Set Ad = Server.Createobject("MSWC.AdRotator")
Response.Write Ad.GetAdvertisement("ADS.TXT")
%>
61
3. Acceso a bases de datos con Active Server Pages
El archivo de texto leído por Ad Rotator cuenta con una estructura muy
clara que determina la imagen a visualizar, especifica el porcentaje de tiempo
que se mostrará la imagen, y proporciona un hipervínculo que se activará
cuando se pulse sobre el anuncio publicitario.
3.4.5 COMPONENTE DE VINCULACIÓN DE CONTENIDOS
El componente Content Linking (vinculación de contenidos) ha sido
diseñado para la publicación en línea de revistas y periódicos. Este
componente enlaza páginas Web independientes, permitiendo la navegación
ininterrumpida por ellas.
Al igual que Ad Rotator, el componente Content Linking depende de
un archivo de texto para poder crear la publicación. El archivo, conocido
como Content Linking List (Lista de vinculación de contenidos) proporciona
una lista de las páginas Web vinculadas y una descripción de cada una de
ellas. Para emplear el componente Content Linking sólo necesitará crear el
componente y leer el archivo de texto asociado. La instrucción a utilizar es la
siguiente:
<%Set objLinker = Server.CreateObject("MSWC.NextLink") %>
Una vez creada la publicación, se podrá utilizar diversos métodos, por
ejemplo GetNextURL y GetPreviousURL para navegar por las páginas. Las
descripciones de cada página se podrán obtener mediante los métodos
GetNextDescription
y
GetPreviousDescription.
Estos
valores
pueden
utilizarse para generar hipervínculos con otras páginas contenidos en la
publicación. Las instrucciones necesarias son:
62
3. Acceso a bases de datos con Active Server Pages
<A HREF="<ObjLinker.GetNextURL%'>
<%=objLinker.GetNextDescription%>
</A>
3.4.6 EMPLEO DE OTROS COMPONENTES ACTIVEX
Además de poder utilizar todos los componentes proporcionados por
Visual InterDev se podrá crear componentes ActiveX propios para el ASP.
Una vez creado un nuevo componente, se podrá utilizarlo de la misma
forma que se usa cualquier otro componente (mediante el método
CreateObject o el objeto Server). Solo se tendrá que proporcionar el ProgID
asociado con el componente que se acaba de crear. Esta función es una
herramienta de gran potencia que permitirá extender el ASP para incluir las
funciones que se necesiten
63
4. Consideraciones de implementación y desarrollo de una aplicación
4.- CONSIDERACIONES DE IMPLEMENTACIÓN Y DESARROLLO DE
UNA APLICACIÓN
En el presente capítulo se presentan los antecedentes que deben de
considerarse para el desarrollo e implementación de una aplicación en
Internet, así como la presentación de una aplicación práctica.
4.1 CONSIDERACIONES EN DISEÑO DE BASES DE DATOS PARA
INTERNET
4.1.1 SEGURIDAD
Uno de los principales aspectos a considerar es la seguridad brindada
a los datos. Si el gateway (una de las funciones de los gateway es recibir
datos transferidos desde un navegador Web mediante un servidor HTTP y
transformarlos a un formato que la base de datos pueda entender) no admite
a los usuarios no podrán eliminar datos accidentalmente, o intencionalmente;
lo mismo aplica a la consulta e inserción de datos o la modificación de éstos.
Poner una base de datos a disposición a Internet es cosa seria. La
mayoría de los usuarios de Internet son personas bien intencionadas que no
pretenden hacer un mal uso de las computadoras conectadas a Internet, sin
embargo, hay otros que gozan dañando todo lo que pueden. Si se restringe
el acceso sólo para efectuar consultas o los accesos a la base de datos son
mediante una contraseña proporcionada por el gateway, evita que algún
intruso haga algo desagradable en la base de datos.
4.1.2 INTEGRIDAD DE LA BASE DE DATOS
Hacer inserciones, actualizaciones y eliminación en una base de datos
requiere de un procesamiento más complejo que hacer simples consultas, a
continuación mencionaremos algunas consideraciones a tomar en cuenta :
64
4. Consideraciones de implementación y desarrollo de una aplicación
? El código de inserción debe verificar que existan los datos en la
base antes de intentar insertarlos, con el fin de evitar la duplicidad
de información.
? El código de actualización debe asegurarse que la información
exista, antes de tratar de modificarla, ya que otro usuario pudo
haber borrado antes.
? Las eliminaciones deben quedar restringidas a un grupo reducido y
confiable para evitar la eliminación de datos necesarios.
4.1.3 CONTROL DE ACCESO
Las transacciones de base de datos deben escribirse con cuidado
para evitar que varios usuarios puedan cambiar el mismo dato al mismo
tiempo. Esto implica la utilización de transacciones que bloquen la
información para asegurar que en un momento dado, sólo un usuario pueda
cambiar un dato. Si las transacciones efectuadas por el gateway comprenden
más de una tabla o requiere varias acciones, como inserciones y
actualizaciones dentro de la misma transacción, los datos afectados deben
bloquearse durante ésta para evitar que se dañe la base de datos. No
importa si dos usuarios consultan la misma información al mismo tiempo
porque los datos no cambian, pero en el caso de una actualización, los
cambios de un usuario pueden sobreescribir las modificaciones de otro, o
parte de la información puede reflejar algunos cambios, en tanto que otra
parte exhibe otras modificaciones.
65
4. Consideraciones de implementación y desarrollo de una aplicación
4.2 CONSIDERACIONES EN LA DEFINICIÓN DE TABLAS DE LA BASE
DE DATOS
4.2.1 EVITAR LA REDUNDANCIA DE DATOS
Una solución a este problema es dividir la tabla con información
redundante en dos tablas, creando a la tabla con la información redundante
con una llave primaria, la cual sirva de referencia para la tabla de consulta.
4.2.2 INDEXAR LAS TABLAS
Una vez que los registros contengan claves primarias debe crearse un
índice en cada clave. Los índices agilizan las búsquedas y disminuyen la
cantidad de trabajo que el servidor de la base de datos debe hacer al buscar
los datos. La información sin índices requiere que el motor de la base busque
en todos los registros y los compre con el valor que se desea encontrar.
4.2.3 UTILIZAR RESTRICCIONES REFERENCIALES
Crear reglas que indique a la base cuándo están completos los datos
escritos, así como indicar cuando un campo de un registro depende de otro
almacenado en otro registro. Ya que las restricciones referenciales funcionan
tanto en la inserción de datos como en la eliminación es recomendable evitar
ciclos referenciales ya que si no se creará un interbloqueo que evitará la
eliminación de datos.
66
4. Consideraciones de implementación y desarrollo de una aplicación
4.2.4 PRESERVACIÓN DE LA INTEGRIDAD DE LOS DATOS
Las eliminaciones descuidadas, o las restricciones referenciales no
cumplidas pueden dejar trozos de información inútil estorbando en una base
de datos, que afectan al rendimiento y ocupan espacio. Asegurar la
integridad de la información requiere disciplina y cuidado extremo durante el
diseño del esquema de la base y las dependencias entre los datos, cualquier
inserción, actualización y eliminación debe efectuarse en el orden correcto, y
debe cubrir todas las tablas y campos que constituyen un registro completo,
de otra forma, pueden dejarse trozos de datos incoherentes después que se
lleven a cabo los procesos.
Cualquier
aplicación
que
manipule
los
datos
debe
ejecutar
transacciones meticulosamente y corroborar cada paso para asegurar que
cada fase se ha llevado a cabo con éxito antes de proceder con la siguiente;
si ocurre algún error, la información debe devolverse a su estado original
para evi tar la inserción o el borrado de una parte del registro.
67
4. Consideraciones de implementación y desarrollo de una aplicación
4.3
APLICACIÓN
DE
CONTROL
DE
INVENTARIO
EN
LA
ADMINISTRACIÓN REGIONAL JURÍDICA DE INGRESOS DE OCCIDENTE
4.3.1 OBJETIVO
Desarrollar una aplicación que permita mantener actualizado los
inventarios de insumos informáticos en la Administración Regional Jurídica
de Ingresos de Occidente, a fin de poder dotar y distribuir equitativamente los
insumos en la región.
4.3.2 INFRAESTRUCTURA UTILIZADA
Para la implementación de la aplicación se utilizó la infraestructura de
red o Intranet interna de la Secretaría de Hacienda y Crédito Público dentro
de la cual pertenece la Administración Local Jurídica de Ingresos de Colima
4.3.3 MANEJADOR DE BASE DE DATOS
Para el almacenamiento de los datos se construyó una base de datos,
ya que éste cuenta con las siguientes bondades:
? Soporta todos los atributos de un modelo relacional, como son llave
primaria, relaciones entre tablas, así como control de integridad
referencial.
? Tiene ambiente gráfico e interactivo e incluye macros y capacidades de
programación automáticas para procesar tareas sobre los datos.
68
4. Consideraciones de implementación y desarrollo de una aplicación
? Tiene una programación orientada a objetos, Puede ser usado como
Front End para otras tecnologías ODBC cliente-servidor como son:
Oracle, Sybase o Microsoft SQL server.
? Sigue el estándar SQL (Structure Query Language) para consultas y
manipulación de datos.
? Está basado en un sofisticado motor de base de datos llamado JET (Joint
Engine Technology) de alto desempeño.
? Puede importar o encadenar datos de varias fuentes, incluyendo
documentos HTML. Los datos fuentes pueden residir en un servidor FTP
o HTML.
? Cuenta con un tipo de dato HiperLink que permite que se inserten
direcciones del Web en las tablas de la base de datos.
Entre otras son las capacidades de Access que lo hacen una buena
herramienta de manejo de base de datos.
Por ello de creó la base de datos insumos, (la cual de describe en el
apéndice B), la cual permita registrar los insumos de cada una de las
Administraciones Locales.
69
4. Consideraciones de implementación y desarrollo de una aplicación
4.4 DESCRIPCIÓN DE LA APLICACIÓN DE CONTROL DE INSUMOS
La aplicación se incluye en la página de la Administración Regional
Jurídica de Ingresos de Occidente (fig. 4-1), dentro del capítulo de
Informática (fig. 4-2), validando por una clave de usuario solo a los
encargados del control de los insumos (fig. 4 -3).
Figura 4-1. Página de la Administración Regional Jurídica de Ingresos de Occidente
70
4. Consideraciones de implementación y desarrollo de una aplicación
Figura 4-2. Capítulo de Informática de la Página de la Administración Regional Jurídica de
Ingresos de Occidente.
Figura 4-3. Control de Acceso a usuarios.
71
4. Consideraciones de implementación y desarrollo de una aplicación
A continuación se describen las opciones que forman la herramienta
que se describe, así como la presentación del código básico utilizado en
cada opción. El código fuente total utilizado de describe en el apéndice C.
El código utilizado para el control de acceso es el siguiente:
<form action="insumosmenu.asp" method="post" name="Formacusar">
<div align="center"><center><p><font face="Arial"
color="#800000"><strong><small>Clave de
Acceso:</small></strong></font> <input id="passwd" name="passwd"
type="password"
maxlength="10" size="20"> <input id="submit1" name="submit1" type="submit"
value="Identificar"></p>
</center></div>
</form>
</font>
y la validación en la base de datos se realiza mediante el siguiente:
Set cn=Server.CreateObject("ADODB.Connection")
Set rs=Server.CreateObject("ADODB.Recordset")
cn.Open "DSN=dsninfocc;SERVER=oodc69c;DATABASE=insumos"
rs.Open "Select * from usuarios where cla_usuario = '" &
Request.Form("passwd") & "'", cn
4.4.1 ENTRADA DE DATOS
Los movimientos registrados a los insumos al inventario se realizan a
través de la siguiente forma (fig 4-4):
72
4. Consideraciones de implementación y desarrollo de una aplicación
Figura 4-4. Registro de movimientos al inventario.
Esta forma es generada por el siguiente código:
<form method="post" action="insumoguardarmov.asp"
onsubmit="return FrontPage_Form1_Validator(this)" name="FrontPage_Form1">
<p style="line-height: 7px"><font face="Arial"
size="2"><strong>       
Insumo</strong></font>: <select id="insumo" name="insumo"
style="HEIGHT: 22px; WIDTH: 291px" size="1" tabindex="1">
<%
rs.MoveFirst
do while not rs.EOF
%>
<option value="<%=rs("cod_insumo")%>"><%=rs("des_insumo")%></option>
<%
rs.movenext
Loop
rs.movefirst
%> </select> <input type="text" name="txtinsumo" size="20" id="txtinsumo"
style="background-color: rgb(255,255,255); color: rgb(255,255,255);
border: medium none"
value="<%=rs("cod_insumo")%>"></p>
<p style="line-height: 7px"><strong><font face="Arial"
size="2">Movimiento</font></strong>
: <select id="movimiento" name="movimiento" style="HEIGHT: 22px; WIDTH:
120px" size="1"
tabindex="2">
<option value="Entrada">Entrada</option>
<option value="Salida">Salida</option>
</select><input type="text" name="txtmovimiento" size="20"
id="txtmovimiento"
73
4. Consideraciones de implementación y desarrollo de una aplicación
style="background-color: rgb(255,255,255); color: rgb(255,255,255);
border: medium none"
value="Entrada"></p>
<p style="line-height: 7px"><strong><font face="Arial"
size="2">   
Cantidad</font></strong> : <input id="txtcantidad" name="txtcantidad"
style="HEIGHT: 22px; WIDTH: 89px" size="20" tabindex="3"><input
type="text"
name="txtnumadm" size="20" id="txtnumadm"
style="background-color: rgb(255,255,255); color: rgb(255,255,255);
border: medium none"
value="<%=vnuma dm%>"><input type="text" name="txtcodusu" size="20"
id="txtcodusu"
style="background-color: rgb(255,255,255); color: rgb(255,255,255);
border: medium none"
value="<%=Request.QueryString("txtcodusu")%>"></p>
<p style="line-height: 7px"><strong><font face="Arial"
size="2">Descripción</font></strong>
: <!--webbot bot="Validation" startspan I-Maximum-Length="50" --><!-webbot
bot="Validation" endspan --><textarea id="txtdesmov" name="txtdesmov"
style="HEIGHT: 35px; WIDTH: 328px" rows="1" cols="31"
tabindex="4"></textarea></p>
<div align="left"><p style="line-height:
7px">           &nbsp
;         
<input id="submit1" name="submit1" type="submit" value="Registrar"></p>
</div>
</form>
4.4.2 REPORTES
A fin de emitir los resultados de los movimientos registrados se
presentan los listados :
1. Inventario Regional de Jurídica de Ingresos de Occidente. fig. 4-5
2. Impresión de Insumos. fig. 4-6
3. Impresión de Movimientos. fig. 4-7
74
4. Consideraciones de implementación y desarrollo de una aplicación
Figura 4-5. Inventario Regional de Jurídica de Ingresos de Occidente.
Figura 4-6. Impresión de Insumos.
75
4. Consideraciones de implementación y desarrollo de una aplicación
Figura 4-7. Impresión de Movimientos.
El código básico para generar dichos reportes es :
? Inventario Regional de Jurídica de Ingresos de Occidente
<%
public cn,rs, vnuminsumos, vexpresion, vcaninsumo
vnuminsumos = 0
vexpresion = "Select * from insumosinv order by des_insumo"
Set cn=Server.CreateObject("ADODB.Connection")
Set rs=Server.CreateObject("ADODB.Recordset")
cn.Open "DSN=dsninfocc;SERVER=oodc69c;DATABASE=insumos"
rs.Open vexpresion, cn
%>
<p align="center"><font color="mediumblue" face="Rockwell">Control de
Insumos
Informáticos ARJI Occidente</font></p>
<p align="center"><strong><font color="brown" face="Rockwell">Inventario
Regional
Occidente</font></strong></p>
<p align="center"><strong><font color="black"
face="Rockwell"><%=date()%></font></strong></p>
<table border="1" cellPadding="1" cellSpacing="1">
<tr>
76
4. Consideraciones de implementación y desarrollo de una aplicación
<td width="1100"><font face="Arial" size="2"><strong>Descripción del
Insumo</strong></font></td>
<td width="50"><p align="center"><font face="Arial"
size="2"><strong>Occ</strong></font></td>
<td width="50"><p align="center"><font face="Arial"
size="2"><strong>Gdl</strong></font></td>
<td width="50"><p align="center"><font face="Arial"
size="2"><strong>Sur</strong></font></td>
<td width="50"><p align="center"><font face="Arial"
size="2"><strong>Zap</strong></font></td>
<td width="50"><p align="center"><font face="Arial"
size="2"><strong>Ags</strong></font></td>
<td width="50"><p align="center"><font face="Arial"
size="2"><strong>Guz</strong></font></td>
<td width="50"><p align="center"><font face="Arial"
size="2"><strong>Col</strong></font></td>
<td width="50"><p align="center"><font face="Arial"
size="2"><strong>Ptv</strong></font></td>
<td width="50"><p align="center"><font face="Arial"
size="2"><strong>Tpc</strong></font></td>
<td width="60"><p align="center"><font face="Arial"
size="2"><strong>TOTAL</strong></font></td>
</tr>
<%if rs.EOF = false then
rs.MoveFirst
do while not rs.EOF%>
<tr>
<td><font face="Arial" size="2"><%=rs("des_insumo")%></font></td>
<td><p align="center"><font face="Arial"
size="2"><%=rs("can_insumo00")%></font></td>
<td><p align="center"><font face="Arial"
size="2"><%=rs("can_insumo01")%></font></td>
<td><p align="center"><font face="Arial"
size="2"><%=rs("can_insumo02")%></font></td>
<td><p align="center"><font face="Arial"
size="2"><%=rs("can_insumo03")%></font></td>
<td><p align="center"><font face="Arial"
size="2"><%=rs("can_insumo04")%></font></td>
<td><p align="center"><font face="Arial"
size="2"><%=rs("can_insumo05")%></font></td>
<td><p align="center"><font face="Arial"
size="2"><%=rs("can_insumo06")%></font></td>
<td><p align="center"><font face="Arial"
size="2"><%=rs("can_insumo07")%></font></td>
<td><p align="center"><font face="Arial"
size="2"><%=rs("can_insumo08")%></font></td>
<td><p align="center"><font face="Arial"
size="2"><%=rs("can_insumo")%></font></td>
</tr>
<%
vnuminsumos = vnuminsumos + rs("can_insumo")
rs.MoveNext
Loop
end if
rs.close%>
</table>
77
4. Consideraciones de implementación y desarrollo de una aplicación
? Impresión de Insumos.
<%
public cn,rs, vnuminsumos, vexpresion, vcaninsumo
vnuminsumos = 0
vexpresion = "Select * from usuarios where cod_usuario = '" +
Request.QueryString("txtcodusu") + "'"
Set cn=Server.CreateObject("ADODB.Connection")
Set rs=Server.CreateObject("ADODB.Recordset")
cn.Open "DSN=dsninfocc;SERVER=oodc69c;DATABASE=insumos"
rs.Open vexpresion, cn
rs.movefirst
vcaninsumo = "can_insumo" + rs("adm_usuario")
%>
<p align="center"><font color="mediumblue" face="Rockwell">Control de
Insumos
Informáticos ARJI Occidente</font></p>
<p align="center"><strong><font color="brown" face="Rockwell">Impresión de
Inventario</font></strong></p>
<p align="center"><font color="red"><%=rs("nom_usuario")%></font></p>
<p align="center"><strong><font color="black"
face="Rockwell"><%=date()%></font></strong></p>
<%rs.close
vexpresion = "Select * from insumosinv where " + vcaninsumo + " <> 0 order
by des_insumo"
rs.Open vexpresion%>
<table border="1" cellPadding="1" cellSpacing="1" width="75%">
<tr>
<td><font face="Arial" size="2"><strong>Descripción del
Insumo</strong></font></td>
<td><p align="center"><font face="Arial"
size="2"><strong>Cantidad</strong></font></td>
</tr>
<%if rs.EOF = false then
rs.MoveFirst
do while not rs.EOF%>
<tr>
<td><font face="Arial" size="2"><%=rs("des_insumo")%></font></td>
<td><p align="center"><font face="Arial"
size="2"><%=rs(vcaninsumo)%></font></td>
</tr>
<%
vnuminsumos = vnuminsumos + rs(vcaninsumo)
rs.MoveNext
Loop
end if
rs.close%>
</table>
78
4. Consideraciones de implementación y desarrollo de una aplicación
? Impresión de Movimientos.
<%
public cn,rs, vnuminsumos, vexpresion, vnumadm
vnuminsumos = 0
vexpresion = "Select * from usuarios where cod_usuario = '" +
Request.QueryString("txtcodusu") + "'"
Set cn=Server.CreateObject("ADODB.Connection")
Set rs=Server.CreateObject("ADODB.Recordset")
cn.Open "DSN=dsninfocc;SERVER=oodc69c;DATABASE=insumos"
rs.Open vexpresion, cn
rs.movefirst
vnumadm = rs("adm_usuario")
%>
<p align="center"><font color="mediumblue" face="Rockwell">Control de
Insumos
Informáticos ARJI Occidente</font></p>
<p align="center"><strong><font color="brown" face="Rockwell">Movimientos al
Inventario</font></strong></p>
<p align="center"><font color="red"><%=rs("nom_usuario")%></font></p>
<p align="center"><strong><font color="black"
face="Rockwell"><%=date()%></font></strong></p>
<%rs.Close
rs.Open "Select insumosinv.des_insumo,insumosmov.can_movinsumo,
insumosmov.fec_movinsumo,insumosmov.des_movinsumo from
insumosmov,insumosinv where insumosmov.adm_movinsumo = '" + vnumadm + "' and
insumosmov.cod_movinsumo=insumosinv.cod_insumo order by
insumosmov.fec_movinsumo", cn
%>
<table border="1" cellPadding="1" cellSpacing="1" width="611">
<tr>
<td width="215"><font face="Arial" size="2"><strong>Descripción del
Insumo</strong></font></td>
<td width="69"><font face="Arial" size="2"><strong><p
align="center">Cantidad</strong></font>
</td>
<td width="113"><font face="Arial"
size="2"><strong>Fecha</strong></font> </td>
<td width="190"><strong><font face="Arial"
size="2">Descripción</font></strong></td>
</tr>
<%if rs.EOF = false then
rs.MoveFirst
do while not rs.EOF%>
<tr>
<td width="215"><font face="Arial"
size="2"><%=rs("des_insumo")%></font></td>
<td width="69"><p align="center"><font face="Arial"
size="2"><%=rs("can_movinsumo")%> </font></td>
<td width="113"><font face="Arial"
size="2"><%=rs("fec_movinsumo")%></font></td>
<td width="190"><font face="Arial"
size="2"><%=rs("des_movinsumo")%></font> </td>
</tr>
79
4. Consideraciones de implementación y desarrollo de una aplicación
<%
vnummov = vnummov + 1
rs.MoveNext
Loop
end if%>
</table>
80
5. Elección de la tecnología más adecuada
5. ELECCIÓN DE LA TECNOLOGÍA MÁS ADECUADA
Si se desea diseñador páginas Web con manejo de bases de datos,
se podrá constatar que existe un número elevado de opciones para crear
diseños empresariales que puedan ejecutarse en un navegador. Las
tecnologías actuales presentan un panorama muy completo que dificultan la
selección del grupo de herramientas más adecuado para llevar a cabo un
determinado proyecto. Este capítulo se examina algunos de los temas clave
involucrados en las soluciones basadas en Web y proporcionan criterios que
serán útiles para seleccionar las tecnologías necesarias para crear una
aplicación.
5.1 CONSIDERACIONES SOBRE LA PLATAFORMA CLIENTE
Sin ninguna duda, el tema más importante a tener en cuenta a la hora
de realizar una selección tecnológica es el navegador destino. Se deberá
identificar los distintos navegadores que serán compatibles con la solución.
Si el objetivo de la aplicación es proporcionar acceso público desde Internet,
deberá dirigirse a la audiencia más amplia posible. Esto no significa que
deberá ser compatible con todos los navegadores existentes. Si se intenta
conseguir este objetivo, sólo podrá desarrollar páginas HTML simples sin
marcos o tablas. Una solución escrita para el mínimo común denominador
ofrece pocas funcionalidades o un aspecto visual poco atractivo.
En la mayoría de los casos, ser compatible con Microsoft Internet
Explorer y Netscape Navigator será suficiente para alcanzar el 90 por 100 de
la audiencia deseada. Sin embargo, las sucesivas versiones de estos
navegadores soportan diferentes niveles tecnológicos. Si se desea que su
aplicación sea compatible con versiones anteriores de IE o NN (anteriores a
81
5. Elección de la tecnología más adecuada
la 3.0) algunas de las técnicas más modernas no funcionarán correctamente.
Incluso, limitar la solución atendiendo a la versión del navegador puede no
ser suficiente para resolver el problema. El sistema operativo es también un
tema a tener en cuenta en la elección. Por ejemplo, IE 3.0 sobre Microsoft
Windows 3.11 no reconocerá la etiqueta <OBJECT>.
Obviamente, las plataformas destino se convierten en el foco principal
de la elección tecnológica.
Se Podrá examinar casi infinitas combinaciones de navegadores y de
sistemas operativos, pero aconsejamos que se centre en las soluciones más
habituales y se tenga en cuenta la sugerencia de crear aplicaciones de
amplio espectro. Para evitar el debate, supondremos que una solución
independiente de la plataforma equivale a una aplicación que pueda leerse
tanto en Internet Explorer como en Netscape Navigator, versiones 4.0 y
posteriores. Incluso, en este dominio tan limitado, se encontrará suficiente
opciones
5.2 COMPATIBILIDAD CON HTML
Dentro de su limitado campo, todos los navegadores a los que se
están haciendo referencia son compatibles con el estándar HTML 3.2. Esto
no significa que se pueda utilizar cualquier etiqueta HTML. Muchas etiquetas
no forman parte del estándar HTML y son propiedad privada de un
determinado navegador. Por ejemplo, la etiqueta <LAYER>, de Netscape
Navigator 4.0 (también conocido como Communicator) es un buen ejemplo
de etiqueta que no es compatible con ningún otro navegador. <LAYER> se
utiliza para crear capas invisibles en la versión del HTML Dinámico del
Communicator.
82
5. Elección de la tecnología más adecuada
Sin embargo, si se limita a manejar el estándar HTML 3.2
y
posteriores, y se ignora las etiquetas propias de algunos navegadores, se
conseguirán buenas aplicaciones.
5.3 COMPATIBILIDAD CON HTML DINÁMICO
HTML Dinámico es naturalmente una nueva función de Internet
Explorer 4.0 y no se encuentra presentada en las versiones anteriores de
este programa Netscape Communicator, también es compatible con una
versión de HTML dinámico o que puede generar algo de confusión con
independencia de la implementación de esa tecnología. Aunque Netscape
utiliza el mismo nombre para su tecnología de posicionamiento dinámico,
esta tecnología es básicamente diferente del HTML dinámico que podrá
encontrar en IE 4.0 En el caso de Communicator el usuario puede crear
capas de contenidos que se podrán desplazar y cambiar de tamaño de forma
dinámica. Estas capas se pueden crear utilizando una etiqueta <STILE> con
un atributo de posición definido como ABSOLUTE o utilizando la etiqueta
<LAYER>.
Aunque se podrá crear en Communicator efectos que serán similares
a los conseguidos en IE 4.0 o superior, se tendrá que realizar grandes
esfuerzos si se desea crear una aplicación utilizando HTML dinámico que
puede ejecutarse tanto en IE como en Communicator.
83
5. Elección de la tecnología más adecuada
5.4 COMPATIBILIDAD CON PROGRAMACIÓN
En este caso, la elección es clara. Si desea utilizar la programación
cliente para los productos de Microsoft y Netscape, te ndrá que utilizar
JavaScript, lenguaje reconocido por todos los navegadores destino. Sin
embargo; deberá tener en cuenta que JScript de Internet Explorer no actúa
en la misma forma que el JavaScript de Navigator en lo que se refiere al trato
de las mayúsculas y minúsculas.
Internet Explorer también difiere de Netscape Navigator en la
implementación de su modelo de objetos del navegador. Hablando en
términos generales, el modelo de objetos de IE 4.0 y superior es bastante
más rico que el que se podrá encontrar en cualquier otro navegador. Sin
embargo, la mayor parte de este modelo se utiliza para unir la programación
con el HTML dinámico. Por lo tanto, si se utiliza el modelo de objetos del
navegador más allá de los simples objetos Window, Document y Form, se
deberá tener cuidado para asegurarse de que el programa es ejecutable en
todas las plataformas destino.
5.5 COMPATIBILIDAD CON ACTIVEX
No obstante que ActiveX es desarrollado por Microsoft, Communicator
ofrece cierto nivel de compatibilidad para las tecnologías ActiveX.
Communicator es capaz de manejar documentos desarrollados con
aplicaciones tales como Microsoft Word y Microsoft Excel, gracias a
Automation. Esta función permite convertir documentos como parte de
cualquier servidor para hacerlos compatibles con el navegador. Sin embargo,
cualquier versión de Navigator anterior a Communicator no será compatible
con los documentos ActiveX.
84
5. Elección de la tecnología más adecuada
5.6 JAVA
Java es otra área donde la compatibilidad se encuentra bastante
extendida. Sin embargo, deberá tene r en cuenta que Internet Explorer
versión 3.0 y Netscape Navigator versión 3.0 son compatibles únicamente
con la versión 1.0 del Kit de Desarrollo Java (JDK). La versión más reciente
de Java, se encuentra plenamente soportada en IE. 4.0 o posterior así como
en Netscape Communicator.
5.7 CONSIDERACIONES DEL LADO DEL SERVIDOR
Las plataformas que pueden funcionar como servidores Web se
clasifican en tres grandes categorías Windows, no-Windows y Proveedores
de Servicios Internet. Las plataformas Windows son, obviamente, las
herramientas que deberá seleccionar como el back end de cualquier
aplicación Web. Active Server Pages, sólo se encuentra disponible bajo la
plataforma Windows (aunque hay compañías que han creado versiones para
otros sistemas). El problema se plantea cuando no pueda utilizar Windows.
Internet Information Server y ASP como una solución Back.end. En este
caso. deberá pensar en utilizar otras tecnologías disponibles.
Las plataformas no -Windows pueden importar progamas clientes
utilizando VBScript y JavaScript. También se podrá emplear componentes
cliente de ActiveX. Aunque el servidor puede que no entienda los
componentes, el navegador podrá solicitar la carga de un archivo, por lo que
todo lo que tendrá que hacer será ocuparse de que los archivos se
encuentren disponibles en el servidor y de que Internet Explorer pueda
utilizarlos. Java también es eficaz. Una vez más, siempre que los archivos se
85
5. Elección de la tecnología más adecuada
encuentren en el servidor, el navegador podrá recuperarlos. Lo que perderá
con las plataformas no-Windows es la facilidad del uso y las prestaciones de
Active Server Pages. Tal vez tenga que enfrentarse a tecnologías antiguas
como la Common Gateway iterface (CGI).
Si se está utilizando un Proveedor de Servicios Internet (ISP), se
seguirá disponiendo de las tecnologías cliente. Siempre que pueda cargar
programas, archivos DLL y archivos el CLASS, podrá utilizar VBScript,
Javascript, ActiveX y Java. Algunos ISP también son compatibles con ASP
en sus servidores.
86
6. Conclusiones
6 CONCLUSIONES
? Seleccionar una tecnología es una decisión en la que influyen muchos
factores. Es decir, se tendrá que decidir si desea ejecutar una aplicación
en Internet o en una Intranet, así como se debe verificarse el correcto
funcionamiento del servidor utilizando todas las versiones disponibles de
los navegadores a los que espera dar soporte. No se tendrá la seguridad
absoluta de que el servidor se comporta en la forma deseada si no realiza
una completa serie de pruebas basándose en múltiples plataformas.
? La seguridad es, ciertamente uno de los temas más importantes en un
servidor Web. Sin seguridad, la información a través de Internet es
susceptible al fraude y otros usos indebidos por parte de intermediarios.
? Con la integración de bases de datos en el Web, los usuarios de Internet
o Intranet pueden obtener un medio que puede adecuarse a sus
necesidades de información, con un costo, inversión de tiempo, y
recursos mínimos, disminución del tiempo de actualización de páginas de
Internet cuando la información presentada se localiza en bases de datos,
así como, mejorar la capacidad de publicación de información presentada
en Internet cuando esta es creada dinámicamente por consultas a bancos
de información.
87
Apéndice A. Propiedades y métodos de los objetos y componentes de ASP
APÉNDICE A
PROPIEDADES Y MÉTODOS
DE LOS OBJETOS Y COMPONENTES
ACTIVE SERVER PAGES
Control tabular de datos (TDC)
Propiedades
Nombre
CharSet
DataURL
Descripción
Una expresión de cadena que
describe el conjunto de
caracteres utilizado por el
archivo de datos. Si no se
suministra ningún valor, como
archivo de entrada se tomará
latin1.Si se opta por el valor
por defecto o se introduce
explícitamente el valor """, el
Control Tabular de Datos será
capaz
de
detectar
automáticamente si el dato de
entrada
es
un
archivo
Unicode.
Es una cadena que especifica
la dirección Internet del
archivo de datos.
Sintaxis
Objeto.CharSet = Valor
Objeto.DataURL = valor
88
Apéndice A. Propiedades y métodos de los objetos y componentes de ASP
EscapeChar
FieldDelim
FilterColumn
FilterCriterion
FilterValue
Language
RowDelim
Carácter especial que niega el
efecto de otros caracteres
utilizados
para
ejecutar
funciones tales como la
delimitación de campo y
columna.
Por ejemplo, si TextQualifier
se define como " (comillas
dobles) y se define la
propiedad EscapeChar como \
(barra invertida), el siguiente
archivo
de
datos
se
interpretará de forma correcta:
"Este es un dato"
"Un buen \ "dato\" es bueno"
El carácter utilizado para
marcar el final del campo de
datos. El carácter por defecto
es una coma.
El nombre de una columna
para filtrar el registro. Se
utiliza conjuntamente con las
propiedades FilterCriterion y
FilterValue.
Operador
lógico
que
determina que registros se
van amostrar. Este operador
puede ser =, <>, <, >, >=, <=.
Una expresión utilizada para
comparar
con
la
propiedad FilterColumn
utilizando la propiedad
ilterCriterion
Una cadena que especifica
que especifica el lenguaje del
archivo textual de datos.
El carácter utilizado para
especificar el final de una fila
de datos. Por defecto el
retorno de carro.
Objeto.EscapeChar = valor
Objeto.FieldDelim = valor
Objeto.FilterColumn =
NombreColumna
ObjetoFilterCriterion =
Operador
Objeto.FilterValue = valor
Objeto.Languaje = lenguaje
Objeto.RowDelim = valor
89
Apéndice A. Propiedades y métodos de los objetos y componentes de ASP
SortAscending
SortColumn
TextQualifier
Métodos
Nombre
Reset
Un
calor
boleano
que
determina cómo la propiedad
SortColumn utilizará a la
columna especificada para
ordenar los datos contenidos
en el archivo de datos. Los
valores son True o False.
La columna que se utilizará
con
la
propiedad
SortAscending para clasificar
las filas contenidas en el
archivo de datos.
Carácter
utilizado
para
delinear las cadenas de texto
contenidas en el archivo. El
carácter utilizado por defecto
es " (comillas dobles).
Valor boleano que especifica
si la primera fila en el archivo
de datos contiene nombres
para columnas.
Objeto.SortAscending =
boleano.
Descripción
Sintaxis
Un método que obliga al TDC
a
reordenar
los
datos
basándose en los nuevos
valores de las propiedades.
Objeto.Reset
Objeto.SortColumn =
NombreColumna
Objeto.UseHeader = boleano
Control avanzado de datos (ADC)
Propiedades
Nombre
Connect
Descripción
La cadena utilizada para
identificar la fuente de datos
para el ADC.
Sintaxis
Objeto.Connect =
"DSN=fuentedatos;
UID=Idusuario;
PWD=conraseña;"
90
Apéndice A. Propiedades y métodos de los objetos y componentes de ASP
RecordSet
Server
SQL
Métodos
Nombre
CancelUpdate
MoveFirst,
MoveLast,
MoveNext,
MovePrevious
Refresh
Una propiedad que permite
acceder a los registros
indicados contenidos en el
ADC.
Propiedad que indica el
nombre del servidor y el
protocolo
utilizado
para
acceder a los datos.
Instrucción SQL equivalente
para el grupo de registros
resultante.
Objeto.RecordSet
Objeto.Server = valor
HTTP
<PARAM NAME="server"
VALUE="http//awebsrvr:puer
to"
HTTPS
<PARAM NAME="server"
VALUE="https//awebsrvr:pue
rto"
DCOM
<PARAM NAME="server"
VALUE="nombremáquina"
In-process
<PARAM NAME="server"
VALUE=""
Objeto.SQL = valor
Descripción
Sintaxis
Método que cancela todos los
cambios realizados en el
grupo de registros.
Métodos para navegar por las
filas del conjunto de registros.
Objeto.CancelUpdate
Método que fuerza una nueva
consulta sobre la base de
datos.
SubmitChanges Método que envía al servidor
los cambios realizados
Objeto.MoveFirst
Objeto.MoveLast
Objeto.MoveNext
Objeto.MovePrevious
Objeto.Refresh
Objeto.SubmitChanges
91
Apéndice A. Propiedades y métodos de los objetos y componentes de ASP
Objeto Application
Métodos
Nombre
Lock
UnLock
Descripción
Evita el acceso al conjunto de
variables de la aplicación
Permite acceder al conjunto
de variables de la aplicación.
Sintaxis
Application.Lock
Application.UnLock
92
Apéndice A. Propiedades y métodos de los objetos y componentes de ASP
Objeto Session
Propiedades
Nombre
SessionID
Timeout
Métodos
Nombre
Abandon
Descripción
Devuelve el número ID de la
sesión actual
Define o devuelve la duración
de la sesión en minutos
Descripción
Termina
sesión.
inmediatamente
Sintaxis
Session.SessionID
Session.Timeout
Sintaxis
la
Session.Abandon
93
Apéndice A. Propiedades y métodos de los objetos y componentes de ASP
Objeto Response
Propiedades
Nombre
Buffer
Descripción
Sintaxis
Response.Buffer=True|False
Determina si la página de
salida se encuentra en el
buffer.
ContentType
Especifica el tipo de contenido Response.ContentType =
"Text/HTML"
HTTP para la respuesta
actual.
Cookies
Permite
escribir
nuevos Response.Cookies
(nombrecookies)(clave) =
valores en la colección de valor
cookies del cliente.
Expires
Define la cantidad de tiempo Response.Expire = tiempo
que deberá transcurrir para
que
expire
una
página
almacenada en la caché. Si
se define como cero el
borrado es inmediato.
ExpiresAbsolute Define la cantidad de tiempo Response.ExpiresAbsolute =
#Fecha#
en el que expirará la página
caché.
Status
Define la línea de estado Response.Status = <<401-No
encontrado>>
devuelta por el servidor. Se
podrá utilizar para definir
mensajes del tipo <<401 - No
encontrado>>.
Métodos
Nombre
Descripción
Sintaxis
AddHeader
Permite la inclusión de una Response.AddHeader name,
value
cabecera particular en la
página Web.
AppendToLog
Permite la inclusión de Response.AppendToLog
string
información al registro del
servidor
BinaryWrite
Escribe datos binarios en una
página
para
que
sean
utilizados por los objetos
clientes.
Response.BinaryWrite data
94
Apéndice A. Propiedades y métodos de los objetos y componentes de ASP
Clear
End
Flush
Redirect
Write
Borra
la
salida
ASP
almacenada en el buffer
Finaliza el procesamiento
ASP y envía el resultado al
cliente.
Vacía el buffer y envía el
resultado al cliente.
Indica al cliente que se
conecte a una dirección URL
distinta.
Escribe la salida en la página
HTML. El signo igual sirve
como anotación taquigráfica.
Response.Clear
Response.End
Response.Flush
Response.Redirect URL
Response.Write data
95
Apéndice A. Propiedades y métodos de los objetos y componentes de ASP
Objeto Server
Propiedades
Nombre
ScriptTimeout
Métodos
Nombre
CreateObject
HTMLEnconde
MapPath
URLEncode
Descripción
Define cuanto tiempo se
estará
ejecutando
unprograma antes de que
aparezca un mensaje en el
cliente.
Sintaxis
Server.ScriptTimeout =
tiempo
Descripción
Sintaxis
Crea una instancia de un Variable =
Server.CreateObject
componente Active X para (ProgID)
utilizarlo en ASP.
=
Proporciona código HTML Variable
Server.HTMLEncode (cadena)
para una cadena determinada
Devuelve toda la estructura de Ruta = Server.MapPath
(directoriovirtual)
directorio para un nombre de
directorio virtual
Proporciona codificación URL Variable =
Server.URLEncode (cadena)
para una cadena dada.
96
Apéndice A. Propiedades y métodos de los objetos y componentes de ASP
Objetos de datos Active X
Objeto
Command
Connection
Error
Field
Parameter
Recordset
Descripción
Ejecuta una operación contra una fuente de datos ODBC,
la operación puede ser una instrucción SQL o un
procedimiento que se encuentre almacenado.
Establece una conexión con una fuente de datos ODBC.
Devuelve errores del controlador ODBC
Permite acceder a un campo específico dentro de un
grupo de registros.
Permite pasar valores a un objeto Command
Representa un grupo de registros devuelto por un objeto
Command.
97
Apéndice B. Base de datos insumos.
APÉNDICE B
BASE DE DATOS INSUMOS
Tabla: insumosinv
Columnas
Nombre
Tipo
Tamaño
cod_insumo
Texto
10
des_insumo
Texto
50
can_insumo
Número (entero)
2
can_insumo00
Número (entero)
2
can_insumo01
Número (entero)
2
can_insumo02
Número (entero)
2
can_insumo03
Número (entero)
2
can_insumo04
Número (entero)
2
can_insumo05
Número (entero)
2
can_insumo06
Número (entero)
2
can_insumo07
Número (entero)
2
can_insumo08
Número (entero)
2
98
Apéndice B. Base de datos insumos.
Tabla: insumosmov
Columnas
Nombre
Tipo
Tamaño
cod_movinsumo
Texto
fec_movins umo
Fecha/Hora
8
can_movinsumo
Número (entero)
2
des_movinsumo
Texto
100
adm_movinsumo
Texto
2
15
99
Apéndice B. Base de datos insumos.
Tabla: usuarios
Columnas
Nombre
Tipo
Tamaño
cod_usuario
Texto
2
nom_usuario
Texto
50
cla_usuario
Texto
15
tip_usuario
Texto
1
jef_usuario
Texto
2
adm_usuario
Texto
50
100
Apéndice C. Código fuente, control de insumos.
APÉNDICE C
CÓDIGO FUENTE
DE APLICACIÓN DE CONTROL DE INSUMOS
default.htm
<html>
<head>
<meta NAME="GENERATOR" Content="Microsoft FrontPage 3.0">
<title></title>
</head>
<body>
<p align="center"><font color="mediumblue" face="Rockwell">Control de
Insumos
Informáticos ARJI Occidente</font></p>
<p align="center"><img src="http://oodc69cc/insumosocc/key.jpg" width="121"
height="37"
alt="key.jpg (49216 bytes)"></p>
<font color="mediumblue" face="Rockwell">
<form action="insumosmenu.asp" method="post" name="Formacusar">
<div align="center"><center><p><font face="Arial"
color="#800000"><strong><small>Clave de
Acceso:</small></strong></font> <input id="passwd" name="passwd"
type="password"
maxlength="10" size="20"> <input id="submit1" name="submit1" type="submit"
value="Identificar"></p>
</center></div>
</form>
</font>
<p align="center"><a href="insumosinvreg.asp"><small><font
face="Verdana">Inventario
Regional Jurídica de Occidente</font></small></a></p>
<p align="center"><img src="insumos.jpg" width="322" height="163"
alt="insumos.jpg (24660 bytes)"></p>
</body>
</html>
101
Apéndice C. Código fuente, control de insumos.
Insumosmenu.asp
<%@ Language=VBScript %>
<html>
<head>
<meta NAME="GENERATOR" Content="Microsoft FrontPage 3.0">
<title></title>
<script LANGUAGE="VBScript">
<!-'Cambio de color
Sub registro_OnMouseOver()
registro.Color = "blue"
End Sub
Sub registro_OnMouseOut()
registro.Color = "Purple"
End Sub
Sub inventario_OnMouseOver()
inventario.Color = "blue"
End sub
Sub inventario_OnMouseOut()
inventario.Color = "Purple"
End sub
Sub movimientos_OnMouseOver()
movimientos.Color = "blue"
End sub
Sub movimientos_OnMouseOut()
movimientos.Color = "Purple"
End Sub
-->
</script>
</head>
<body>
<%
public cn,rs,vopcion
vopcion = "INICIALIZADA"
Set cn=Server.CreateObject("ADODB.Connection")
Set rs=Server.CreateObject("ADODB.Recordset")
cn.Open "DSN=dsninfocc;SERVER=oodc69c;DATABASE=insumos"
rs.Open "Select * from usuarios where cla_usuario = '" &
Request.Form("passwd") & "'", cn
%>
<form action="insumosmov.asp" method="post" name="insumos">
<div align="center"><center><p><font color="mediumblue"
face="Rockwell">Control de Insumos
Informáticos ARJI Occidente</font></p>
</center></div><div align="ce nter"><center><p><small><strong><font
face="Arial">Usuario : </font></strong></small><font
id="administracion" color="red"><%if rs.EOF then%> Clave de acceso NO
registrada.... </font></p>
102
Apéndice C. Código fuente, control de insumos.
</center></div><div align="center"><center><p> <img src="candado.jpg"
width="79"
height="96" alt="candado.jpg (47969 bytes)"></p>
</center></div><div align="center"><center><p><font id="administracion"
color="red"><%else
if rs("tip_usuario") <> "l" then%> No
autorizado en este módulo.... </font></p>
</center></div><div align="center"><center><p> <img src="candado.jpg"
width="79"
height="96" alt="candado.jpg (47969 bytes)"></p>
</center></div><div align="center"><center><p><font id="administracion"
color="red"><%else%> <%=rs("nom_usuario")%></font></p>
</center></div><table border="0" width="100%" height="149">
<tr>
<td width="38%" height="125" rowspan="3"><div
align="center"><center><p><img
src="insumos.jpg" width="155" height="65" alt="wpe1.jpg (19749 bytes)"
style="HEIGHT: 80px; WIDTH: 165px"></td>
<td width="62%" height="21" align="center"><div align="left"><p><font
ID="registro"
face="Rockwell" color="#800080"><a
href="insumosmov.asp?txtcodusu=<%=rs("cod_usuario")%>&txtnumadm=<%=rs("a
dm_usuario")%>">Movimientos
de Insumos</a></font></td>
</tr>
<tr align="center">
<td width="62%" height="21"><div align="left"><p><font ID="inventario"
face="Rockwell"
color="#800080"><a
href="insumosimp.asp?txtcodusu=<%=rs("cod_usuario")%>">Impresión de
Insumos</a></font></td>
</tr>
<tr align="center">
<td width="62%" height="21"><div align="left"><p><font
ID="movimientos" face="Rockwell"
color="#800080"><a
href="insumosimpmov.asp?txtcodusu=<%=rs("cod_usuario")%>">Impresión de
Movimientos</a></font></td>
</tr>
</table>
<div align="center"><center><p>  </p>
</center></div><%rs.Close
end if
end if%>
</form>
</body>
</html>
103
Apéndice C. Código fuente, control de insumos.
insumosmov.asp
<%@ Language=VBScript %>
<html>
<head>
<meta NAME="GENERATOR" Content="Microsoft FrontPage 3.0">
<script LANGUAGE="VBScript">
<!-sub insumo_Onclick()
FrontPage_Form1.txtinsumo.value=FrontPage_Form1.insumo.value
end sub
sub movimiento_Onclick()
FrontPage_Form1.txtmovimiento.value=FrontPage_Form1.movimiento.value
end sub
-->
</script>
<title> </title>
</head>
<body>
<%
public cn, rs, vexpresion, vnomusu, vnumadm
Set cn=Server.CreateObject("ADODB.Connection")
Set rs=Server.CreateObject("ADODB.Recordset")
cn.Open "DSN=dsninfocc;SERVER=oodc69c;DATABASE=insumos"
vexpresion = "select * from usuarios where cod_usuario = '" +
Request.QueryString("txtcodusu") + "'"
rs.Open vexpresion, cn
vnomusu = rs("nom_usuario")
vnumadm = rs("adm_usuario")
rs.close
vexpresion = "Select * from insumosinv order by des_insumo"
rs.Open vexpresion, cn
%>
<font color="mediumblue" face="Rockwell">
<p align="center" style="line-height: 7px">Control de Insumos Informáticos
ARJI Occidente</font></p>
<p align="center" style="line-height: 7px"><font color="brown"
face="Arial"><strong>Movimientos
al Inventario</strong></font></p>
<p align="center" style="line-height: 7px"><small><strong><font
face="Arial">Usuario : </font></strong></small><font
id="administracion" color="red"><%=vnomusu%> </font></p>
<form method="post" action="insumoguardarmov.asp"
onsubmit="return FrontPage_Form1_Validator(this)" name="FrontPage_Form1">
<p style="line-height: 7px"><font face="Arial"
size="2"><strong>       
Insumo</strong></font>: <select id="insumo" name="insumo"
style="HEIGHT: 22px; WIDTH: 291px" size="1" tabindex="1">
<%
104
Apéndice C. Código fuente, control de insumos.
rs.MoveFirst
do while not rs.EOF
%>
<option value="<%=rs("cod_insumo")%>"><%=rs("des_insumo")%></option>
<%
rs.movenext
Loop
rs.movefirst
%> </select> <input type="text" name="txtinsumo" size="20" id="txtinsumo"
style="background-color: rgb(255,255,255); color: rgb(255,255,255);
border: medium none"
value="<%=rs("cod_insumo")%>"></p>
<p style="line-height: 7px"><strong><font face="Arial"
size="2">Movimiento</font></strong>
: <select id="movimiento" name="movimiento" style="HEIGHT: 22px; WIDTH:
120px" size="1"
tabindex="2">
<option value="Entrada">Entrada</option>
<option value="Salida">Salida</option>
</select><input type="text" name="txtmovimiento" size="20"
id="txtmovimiento"
style="background-color: rgb(255,255,255); color: rgb(255,255,255);
border: medium none"
value="Entrada"></p>
<p style="line-height: 7px"><strong><font face="Arial"
size="2">   
Cantidad</font></strong> : <input id="txtcantidad" name="txtcantidad"
style="HEIGHT: 22px; WIDTH: 89px" size="20" tabindex="3"><input
type="text"
name="txtnumadm" size="20" id="txtnumadm"
style="background-color: rgb(255,255,255); color: rgb(255,255,255);
border: medium none"
value="<%=vnumadm%>"><input type="text" name="txtcodusu" size="20"
id="txtcodusu"
style="background-color: rgb(255,255,255); color: rgb(255,255,255);
border: medium none"
value="<%=Request.QueryString("txtcodusu")%>"></p>
<p style="line-height: 7px"><strong><font face="Arial"
size="2">Descripción</font></strong>
: <!--webbot bot="Validation" startspan I-Maximum-Length="50" --><!-webbot
bot="Validation" endspan --><textarea id="txtdesmov" name="txtdesmov"
style="HEIGHT: 35px; WIDTH: 328px" rows="1" cols="31"
tabindex="4"></textarea></p>
<div align="left"><p style="line-height:
7px">           &nbsp
;         
<input id="submit1" name="submit1" type="submit" value="Registrar"></p>
</div>
</form>
</body>
</html>
105
Apéndice C. Código fuente, control de insumos.
insumosguardamov.asp
<%@ Language=VBScript %>
<html>
<head>
<meta NAME="GENERATOR" Content="Microsoft FrontPage 3.0">
<title></title>
</head>
<body>
<p align="center"><font color="mediumblue" face="Rockwell">Control de
Insumos
Informáticos ARJI Occidente</font></p>
<%if Request.Form("txtcantidad") = "" or Request.Form("txtdesmov") = ""
then%>
<p align="center"><big><font color="#A54136"><strong>Faltan datos para el
registro ....</strong></font></big></p>
<p align="center"><img src="stop.gif" width="121" height="153" alt="wpe1.jpg
(5305 bytes)">
</p>
<p align="center"><a
href="insumosmov.asp?txtcodusu=<%=Request.Form("txtcodusu")%>"><font
face="Verdana" color="#0000FF">Regresar</font></a></p>
<%else
public cn1, cn2
public rs1, rs2
public vcantidad, vcanmov, vexpresion
if Request.Form("txtmovimiento")= "Salida" then
vcantidad =" - " + Request.Form("txtcantidad")
vcanmov = "-" + Request.Form("txtcantidad")
else
vcantidad =" + " + Request.Form("txtcantidad")
vcanmov = Request.Form("txtcantidad")
end if
vexpresion = "update insumosinv set can_insumo" +
Request.Form("txtnumadm")+ "= can_insumo" + Request.Form("txtnumadm") +
vcantidad + ", can_insumo = can_insumo " + vcantidad + " where cod_insumo =
'" + Request.Form("txtinsumo") + "'"
Set cn1=Server.CreateObject("ADODB.Connection")
Set rs1=Server.CreateObject("ADODB.Recordset")
cn1.Open "DSN=dsninfocc;SERVER=oodc69c;DATABASE=insumos"
rs1.Open vexpresion , cn1
vexpresion = "insert into insumosmov (cod_movinsumo, can_movinsumo,
des_movinsumo, fec_movinsumo, adm_movinsumo) values ('"
vexpresion = vexpresion + Request.Form("txtinsumo") + "'," + vcanmov +
",'" + Request.Form("txtdesmov") + "',date(), '" + Request.Form("txtnumadm")
+ "')"
Set cn2=Server.CreateObject("ADODB.Connection")
Set rs2=Server.CreateObject("ADODB.Recordset")
cn2.Open "DSN=dsninfocc;SERVER=oodc69c;DATABASE=insumos"
106
Apéndice C. Código fuente, control de insumos.
rs2.Open vexpresion, cn2
cn1.Close
cn2.Close
%>
<p align="center"><font color="#BB3E3E"><big><strong>Movimiento registrado
...</strong> </big></font></p>
<p align="center"><img src="siga.gif" width="121" height="153" alt="wpe2.jpg
(5286 bytes)"></p>
<p align="center"><a
href="insumosmenur.asp?txtcodusu=<%=Request.form("txtcodusu")%>"><font
face="Verdana" color="#0000FF">Regresar</font></a></p>
<%end if%>
</body>
</html>
107
Apéndice C. Código fuente, control de insumos.
insumosimp.asp
<%@ Language=VBScript %>
<html>
<head>
<meta NAME="GENERATOR" Content="Microsoft FrontPage 3.0">
<title></title>
</head>
<body>
<%
public cn,rs, vnuminsumos, vexpresion, vcaninsumo
vnuminsumos = 0
vexpresion = "Select * from usuarios where cod_usuario = '" +
Request.QueryString("txtcodusu") + "'"
Set cn=Server.CreateObject("ADODB.Connection")
Set rs=Server.CreateObject("ADODB.Recordset")
cn.Open "DSN=dsninfocc;SERVER=oodc69c;DATABASE=insumos"
rs.Open vexpresion, cn
rs.movefirst
vcaninsumo = "can_insumo" + rs("adm_usuario")
%>
<p align="center"><font color="mediumblue" face="Rockwell">Control de
Insumos
Informáticos ARJI Occidente</font></p>
<p align="center"><strong><font color="brown" face="Rockwell">Impresión de
Inventario</font></strong></p>
<p align="center"><font color="red"><%=rs("nom_usuario")%></font></p>
<p align="center"><strong><font color="black"
face="Rockwell"><%=date()%></font></strong></p>
<%rs.close
vexpresion = "Select * from insumosinv where " + vcaninsumo + " <> 0 order
by des_insumo"
rs.Open vexpresion%>
<table border="1" cellPadding="1" cellSpacing="1" width="75%">
<tr>
<td><font face="Arial" size="2"><strong>Descripción del
Insumo</strong></font></td>
<td><p align="center"><font face="Arial"
size="2"><strong>Cantidad</strong></font></td>
</tr>
<%if rs.EOF = false then
rs.MoveFirst
do while not rs.EOF%>
<tr>
<td><font face="Arial" size="2"><%=rs("des_insumo")%></font></td>
<td><p align="center"><font face="Arial"
size="2"><%=rs(vcaninsumo)%></font></td>
</tr>
<%
vnuminsumos = vnuminsumos + rs(vcaninsumo)
108
Apéndice C. Código fuente, control de insumos.
rs.MoveNext
Loop
end if
rs.close%>
</table>
<p align="center"><strong><font face="Arial" size="2">Total de Partes :
<%=vnuminsumos%></font></strong></p>
<p align="center"><a
href="insumosmenur.asp?txtcodusu=<%=Request.QueryString("txtcodusu")%>"><fon
t
face="Verdana" color="#0000FF">Regresar</font></a></p>
</body>
</html>
109
Apéndice C. Código fuente, control de insumos.
insumosimpmov.asp
<%@ Language=VBScript %>
<html>
<head>
<meta NAME="GENERATOR" Content="Microsoft FrontPage 3.0">
<title></title>
</head>
<body>
<%
public cn,rs, vnuminsumos, vexpresion, vnumadm
vnuminsumos = 0
vexpresion = "Select * from usuarios where cod_usuario = '" +
Request.QueryString("txtcodusu") + "'"
Set cn=Server.CreateObject("ADODB.Connection")
Set rs=Server.CreateObject("ADODB.Recordset")
cn.Open "DSN=dsninfocc;SERVER=oodc69c;DATABASE=insumos"
rs.Open vexpresion, cn
rs.movefirst
vnumadm = rs("adm_usuario")
%>
<p align="center"><font color="mediumblue" face="Rockwell">Control de
Insumos
Informáticos ARJI Occidente</font></p>
<p align="center"><strong><font color="brown" face="Rockwell">Movimientos al
Inventario</font></strong></p>
<p align="center"><font color="red"><%=rs("nom_usuario")%></font></p>
<p align="center"><strong><font color="black"
face="Rockwell"><%=date()%></font></strong></p>
<%rs.Close
rs.Open "Select insumosinv.des_insumo,insumosmov.can_movinsumo,
insumosmov.fec_movinsumo,insumosmov.des_movinsumo from
insumosmov,insumosinv where insumosmov.adm_movinsumo = '" + vnumadm + "' and
insumosmov.cod_movinsumo=insumosinv.cod_insumo order by
insumosmov.fec_movinsumo", cn
%>
<table border="1" cellPadding="1" cellSpacing="1" width="611">
<tr>
<td width="215"><font face="Arial" size="2"><strong>Descripción del
Insumo</strong></font></td>
<td width="69"><font face="Arial" size="2"><strong><p
align="center">Cantidad</strong></font>
</td>
<td width="113"><font face="Arial"
size="2"><strong>Fecha</strong></font> </td>
<td width="190"><strong><font face="Arial"
size="2">Descripción</font></strong></td>
</tr>
<%if rs.EOF = false then
rs.MoveFirst
110
Apéndice C. Código fuente, control de insumos.
do while not rs.EOF%>
<tr>
<td width="215"><font face="Arial"
size="2"><%=rs("des_insumo")%></font></td>
<td width="69"><p align="center"><font face="Arial"
size="2"><%=rs("can_movinsumo")%> </font></td>
<td width="113"><font face="Arial"
size="2"><%=rs("fec_movinsumo")%></font></td>
<td width="190"><font face="Arial"
size="2"><%=rs("des_movinsumo")%></font> </td>
</tr>
<%
vnummov = vnummov + 1
rs.MoveNext
Loop
end if%>
</table>
<p align="center"><strong><font face="Arial" size="2">Total de Movimientos :
<%=vnummov%></font></strong></p>
<p align="center"><a
href="insumosmenur.asp?txtcodusu=<%=Request.QueryString("txtcodusu")%>"><fon
t
face="Verdana" color="#0000FF">Regresar</font></a></p>
</body>
</html>
111
Apéndice C. Código fuente, control de insumos.
insumosinreg.asp
<%@ Language=VBScript %>
<html>
<head>
<meta NAME="GENERATOR" Content="Microsoft FrontPage 3.0">
<title></title>
</head>
<body>
<%
public cn,rs, vnuminsumos, vexpresion, vcaninsumo
vnuminsumos = 0
vexpresion = "Select * from insumosinv order by des_insumo"
Set cn=Server.CreateObject("ADODB.Connection")
Set rs=Server.CreateObject("ADODB.Recordset")
cn.Open "DSN=dsninfocc;SERVER=oodc69c;DATABASE=insumos"
rs.Open vexpresion, cn
%>
<p align="center"><font color="mediumblue" face="Rockwell">Control de
Insumos
Informáticos ARJI Occidente</font></p>
<p align="center"><strong><font color="brown" face="Rockwell">Inventario
Regional
Occidente</font></strong></p>
<p align="center"><strong><font color="black"
face="Rockwell"><%=date()%></font></strong></p>
<table border="1" cellPadding="1" cellSpacing="1">
<tr>
<td width="1100"><font face="Arial" size="2"><strong>Descripción del
Insumo</strong></font></td>
<td width="50"><p align="center"><font face="Arial"
size="2"><strong>Occ</strong></font></td>
<td width="50"><p align="center"><font face="Arial"
size="2"><strong>Gdl</strong></font></td>
<td width="50"><p align="center"><font face="Arial"
size="2"><strong>Sur</strong></font></td>
<td width="50"><p align="center"><font face="Arial"
size="2"><strong>Zap</strong></font></td>
<td width="50"><p align="center"><font face="Arial"
size="2"><strong>Ags</strong></font></td>
<td width="50"><p align="center"><font face="Arial"
size="2"><strong>Guz</strong></font></td>
<td width="50"><p align="center"><font face="Arial"
size="2"><strong>Col</strong></font></td>
<td width="50"><p align="center"><font face="Arial"
size="2"><strong>Ptv</strong></font></td>
<td width="50"><p align="center"><font face="Arial"
size="2"><strong>Tpc</strong></font></td>
<td width="60"><p align="center"><font face="Arial"
size="2"><strong>TOTAL</strong></font></td>
</tr>
112
Apéndice C. Código fuente, control de insumos.
<%if rs.EOF = false then
rs.MoveFirst
do while not rs.EOF%>
<tr>
<td><font face="Arial" size="2"><%=rs("des_insumo")%></font></td>
<td><p align="center"><font face="Arial"
size="2"><%=rs("can_insumo00")%></font></td>
<td><p align="center"><font face="Arial"
size="2"><%=rs("can_insumo01")%></font></td>
<td><p align="center"><font face="Arial"
size="2"><%=rs("can_insumo02")%></font></td>
<td><p align="center"><font face="Arial"
size="2"><%=rs("can_insumo03")%></font></td>
<td><p align="center"><font face="Arial"
size="2"><%=rs("can_insumo04")%></font></td>
<td><p align="center"><font face="Arial"
size="2"><%=rs("can_insumo05")%></font></td>
<td><p align="center"><font face="Arial"
size="2"><%=rs("can_insumo06")%></font></td>
<td><p align="center"><font face="Arial"
size="2"><%=rs("can_insumo07")%></font></td>
<td><p align="center"><font face="Arial"
size="2"><%=rs("can_insumo08")%></font></td>
<td><p align="center"><font face="Arial"
size="2"><%=rs("can_insumo")%></font></td>
</tr>
<%
vnuminsumos = vnuminsumos + rs("can_insumo")
rs.MoveNext
Loop
end if
rs.close%>
</table>
<p align="center"><strong><font face="Arial" size="2">Total de Partes :
<%=vnuminsumos%></font></strong></p>
<p align="center"><a href="default.htm"><font face="Verdana"
color="#0000FF">Regresar</font></a></p>
</body>
</html>
113
Apéndice D. Glosario de términos de Internet.
APÉNDICE D
GLOSARIO DE TÉRMINOS DE INTERNET
ActiveDesktop
La integración de Microsoft Internet Explorer con el
sistema operativo Microsoft Windows
ADO.- Objetos de Datos Un grupo de componentes ActiveX diseñados para
ActiveX
acceder a las fuentes de datos ODBC utilizando el
estándar OLEDB.
Ancho de banda
La cantidad de datos, medidos en bits por
segundo, que pueden pasar a través de una
determinada red.
Backbone
La serie principal de conexiones en una red.
Canal
Una tecnología que permite a ciertos servicios
enviar datos a Microsoft Internet Explorer.
Cliente
Una aplicación o una computadora que se
comunica con y solicita información de un servidor.
com
Una extensión de direcciones Internet que indica
que el servidor Web es un servidor comercial.
Componente con
Se trata de un componente de ActiveX que le
funciones de navegador permitirá identificar el tipo y la capacidad de un
navegador.
Componet Object Model Tecnología que permite la comunicación entre los
(COM)
objetos de software. Todos los componentes de
ActiveX están basados en COM.
Conexión anónima
Se trata de una conexión con un servidor Web que
se ha establecido sin declarar una cuenta ni una
contraseña. Una cuenta anónima permitirá a
cualquier navegador conectarse con un servidor
pero, por cuestiones de seguridad, restringirá las
funciones de acceso disponibles.
Content Linking,
Un componente ActiveX utilizado para enlazar
componente
entre sí distintas páginas Web con un formato de
libro o de revista.
Cortafuegos
Un sistema de seguridad que protege la
información y que evita el acceso fraudulento a
computadoras o a redes informáticas.
114
Apéndice D. Glosario de términos de Internet.
Chatting
Dirección
Dirección IP
DNS.- Sistema de
nombres de dominio
Dominio
edu
File Access,
componente
FTP.- Protocolo de
transferencia de
archivos
Gateway (pasarela)
GIF.- Formato de
Intercambio Gráfico
Gopher
Host.- Huésped
HTML Dinámico.
Comunicación directa y en tiempo real con otros
usuarios sobre Internet.
La localización de un usuario en Internet.
Típicamente esta dirección tiene el formato
usario@host, donde usuario es el nombre de su
cuenta y host es el nombre del dominio en que se
encuentra (por ejemplo, [email protected]).
Un número dividido en cuatro partes utilizado para
identificar de forma unívoca a cada computadora
conectada a la red. Cada parte puede tener un
máximo de tres dígitos, y las distintas partes se
separan entre sí mediante un punto. El formato de
esta dirección es xxx.xxx.xxx.xxx; un ejemplo es
99.42.20.201
Un sistema que traduce los nombres alfa
numéricos de las computadoras a las direcciones
del Protocolo Internet (IP).
Un nombre alfanumérico único para un servidor
Internet
Una extensión de direcciones Internet que indica
que el servidor Web es un centro educativo.
Un componente ActiveX utilizado para acceder a
archivos de texto desde un programa.
Un estándar de comunicaciones que permite la
transferencia de archivos entre computadoras
conectadas a Internet. FTP es compatible con
Microsoft Internet Information Server.
Una computadora que conecta una red con otra
cuando las dos redes manejan diferentes
protocolos de comunicaciones.
Un formato gráfico comprimido que facilita la
distribución de gráficos por Internet.
Un sistema de transferencia de archivos que
permite realizar búsquedas basándose en menús.
El Microsoft Internet Information Server es
compatible con Gopher.
Un servidor Web al que se pueden conectar los
usuarios.
La tecnología que permite tratar a cada una de las
etiquetas contenidas en una página Web como un
objeto programable.
115
Apéndice D. Glosario de términos de Internet.
HTML.-Lenguaje de
Construcción Hipertexto
HTTP.- Protocolo de
Transferencia
Hipertexto
IDC.- Conector a Base
de Datos de Internet
El estándar de codificación para crear páginas
Web.
El estándar de codificación para transferir páginas
Web entre computadoras.
Una versión especial del interfaz ISAPI para
Microsoft Internet Information Server, diseñado
para permitir la edición de bases de datos.
IIS.- Internet Information Un servidor Web diseñado para utilizar con
Server
Microsoft Windows NT Server. Proporciona
servicios WWW, FTP y Gopher.
Internet Explorer
IP.- Protocolo Internet
El navegador Web de Microsoft.
El estándar de comunicaciones que es la base de
Internet. IP permite que la información se envíe en
forma de paquetes a través de Internet y que se
desempaquete en la computadora de destino.
ISAPI. - lnterfaz de
Programación de
lnterfaces de Internet
Server
Grupo de llamadas a funciones que proporciona
acceso a las funciones de Microsoft Internet
Information Server. Se utilizan varias aplicaciones
ISAPI en IIS para editar bases de datos: Internet
Database Connector, OLEISAPI y dbWeb.
LAN.- Red de área local Un grupo de computadoras conectadas en red que,
en general, se encuentran distribuidas por un único
edificio u oficina.
NNTP.- Protocolo de
Un estándar de comunicaciones para distribuir y
transferencia Network
recuperar artículos del servicio News. El mayor
News
sistema de distribución News es Usenet.
ODBC Conectividad de Tecnología independiente de las bases de datos
base de datos abiertas cuyo objetivo es permitir un acceso sencillo a los
datos. Utiliza la sintaxis SQL para interactuar con
las bases de datos.
OLEDB
Especificación que define un grupo de interfaces
estándar para acceder a datos. Los Objetos de
Datos de ActiveX (ADO) soportan el estándar
OLEDB.
Paquete
Una pieza de información electrónica enviada a
través de Internet. Cada paquete contiene la
dirección de destino, la dirección del remitente,
datos e información para el manejo de errores.
116
Apéndice D. Glosario de términos de Internet.
Ping
POP3.- Protocolo Post
Office
RDSI.- Red Digital de
Servicios Integrados
Resolución del nombre
Un breve mensaje enviado de una computadora a
otra con el propósito de chequear los enlaces de
comunicaciones.
Un sistema que permite enviar correo electrónico a
un usuario a través de Internet.
Un mecanismo de transferencia de datos que
soporta una velocidad de transferencia de datos de
hasta 64 Kb por segundo a través de una línea
telefónica normal.
El proceso de transformar un nombre de dominio
en una dirección IP.
Servicios de datos
remotos
El servicio que permite acceder mediante Web a
una fuente de datos ODBC utilizando el Control
Avanzado de Datos (ADC)
Servidor espejo
Servidor FTP que tiene copias de los mismos
archivos almacenados en otro servidor. Estos
servidores se suelen utilizar para descargar de
trabajo al servidor principal de centros Internet de
gran popularidad.
SMTP.- Protocolo
Un estándar de comunicaciones para enviar correo
Simple de Transferencia electrónico a través de la red.
de Correo
Socket
Un enlace de comunicaciones con Internet. Se
pueden abrir simultáneamente varios sockets
(enchufes) sobre una única computadora.
SQL.- Lengua je
Interfaz de bases de datos estándar que permite
estructurado de
tener acceso y manipular una gran variedad de
consulta
productos de bases de datos procedentes de
distintos fabricantes.
SQL Server
Manejador de base de datos de Microsoft que
utiliza la s intaxis SQL
Subscripción
El
proceso
que
consiste
en
localizar
periódicamente nuevos servidores Internet e
importar información de los mismos para su
empleo posterior.
TCP/IP.- Protocolo de
Un estándar de comunicaciones para todas las
Control de
computadoras conectadas en Internet.
Transferencia/Protocolo
Internet
117
Apéndice D. Glosario de términos de Internet.
Tecnologías ActiveX
Un conjunto de productos y tecnologías producidos
por Microsoft para permitir la comunicación entre
los distintos objetos de software.
URL.- Localizador
Dirección Internet que especifica un servidor o un
Uniforme de Recursos
archivo. Suele constar de la siguiente información:
protocolo, nombre de host, estructura de carpetas y
un nombre de archivo
por ejemplo:
http://volcan.ucol.mx/maestría/default.htm
World Wide Web (W3C) Consorcio
industrial
que
promociona
los
estándares de Internet.
118
Bibliografía
BIBLIOGRAFÍA
Microsoft Visual Basic Web Databasic
Interactive Curso
Gunnit S. Khurana
Satwant S. Gadhok
Ed. Waite Group Press
Programación de Active Server Pages
Scot Hiller
Daniel Mezick
Ed. Microsoft Press
Creación de servidores de base de datos para Internet con CGI
Jeff Rowwe
Ed. Pretice Hall
El libro de CGI
William E. Weinman
Ed. Pretice Hall
119
Bibliografía
INTERNET
http://www.geocities.com/SiliconValley/Lakes/2227/jdbc.html
http://www.eupmt.es/~maumarma/presentacio/ppframe.htm
http://pegasus.uniandes.edu.co/~pfiguero/CursoJava/JDBC/home.html
http://www.abits.com/Productos/desplegando.htm
http://www.abits.com.mx/Productos/soluciones_jdbc.htm
http://mipagina.euskaltel.es/gsagarduy/asp/introasp4.html
http://www.ofifc.org/Eli/ASP/GenericArticle.asp
http://195.53.26.42/atrasados/1997/11_julago97/Revista/iis30.htm
http://highland.dit.upm.es:8000/CGI/cgi.html
http://www2.interplanet.es/aspsamp/tutorial/atumd1.asp
http://www.web.sitio.net/faqcgi/i.html
120
Descargar