Nota: Este artículo está en
contínua evolución mediante la colaboración
de los miembros de la comunidad, si tienes alguna idea, noticias
o sugerencia y deseas colaborar, a pie de artículo encontrarás
el lugar para poder hacerlo.
Por Santiago Márquez Solís
1.- Introducción a la programación de ASP y WML
Hola amigos, en este nuevo artículo dejamos de lado los entornos
de desarrollo que hemos estado viendo en las últimas semanas para
adentrarnos en aspectos más prácticos y sin lugar a duda mucho
más interesantes dentro del mundo WAP. En este artículo vamos
tratar de establecer los conocimientos necesarios para adentrarnos
en la programación de páginas WML mucho más interactivas y todo
ello gracias a una tecnología sumamente fácil de utilizar y que
ha demostrado ser lo suficientemente potente a la par que versátil
para ser usada dentro de los desarrollos móviles, estamos hablando
de ASP o Active Server Pages.
El objetivo de este mini curso es que cualquier persona con conocimientos
de WML sea capaz de usar ASP para aprovechar sus características
básicas en sus propios proyectos por lo que principalmente este
artículo supondrá conocimientos de WML centrándome fundamentalmente
en las características que hacen de ASP tan especial para nosotros,
según esto hablaremos en primer lugar de las características de
ASP, pasando a ver posteriormente la configuración del servidor
Web Internet Information Server (en este artículo vamos a centrarnos
exclusivamente en tecnología Microsoft por motivos obvios) para
finalizar con las posibilidades avanzadas que tenemos con el Microsoft
Transaction Server (aquí encontrarás el componente necesario
para desarrollar este apartado) y el registro de componentes.
2.- Introducción a ASP
La definición que vais a encontraros en multitud de lugares sobre
ASP es algo muy similar a lo siguiente: entorno para crear y ejecutar
aplicaciones dinámicas e interactivas en la Web es decir, mediante
el uso de ASP pasamos a mostrar en los navegadores distinto contenido
en función de las acciones/preferencias del usuario, el ejemplo
más claro de uso lo tenemos en las consultas a bases de datos
donde en función de los datos que el usuario selecciona en su
terminal obtiene unas respuestas u otras o por poner otro ejemplo
una aplicación de comercio electrónico en la que se implemente
un carrito de la compra y se vaya llenando con los productos que
vamos seleccionando de las diferentes listas de productos que
mostremos.
Como veis la potencia que tenemos es enorme aunque su mecanismo
de funcionamiento es básicamente muy sencillo: las páginas ASP
comienzan a ejecutarse cuando un usuario solicita un archivo .asp
al servidor Web a través del navegador, seguidamente el propio
servidor web llama a una parte de su arquitectura que implementa
ASP, en ese momento es cuando se lee el archivo solicitado, se
ejecuta las secuencias de comandos contenidas en el fichero y
se envía los resultados al explorador del cliente. Como veis por
la explicación anterior todas las secuencias de comandos se ejecutan
en el servidor, y no en el cliente, de este modo descargamos al
navegador cliente de hacer trabajo innecesario liberando el canal
de comunicación de datos superfluos e innecesarios para el usuario
(fundamental en las comunicaciones en general pero en telefonía
móvil mucho más), además dado que todo se realiza en el lado servidor
(que generalmente suele ser un equipo potente) se mejora el rendimiento
y conseguimos nuestro propósito inicial que comentábamos al principio,
obtener páginas dinámicas en el terminal del usuario, en el cuadro
1 tenéis un pequeño resumen de las características fundamentales
de las páginas ASP algunas de ellas las comentaremos más adelante.
- Los ficheros se identifican por .ASP
- Las secuencias de comandos se ejecutan en el servidor
- Las secuencias de comandos nunca se visualizan en el explorador
del cliente solo sus resultados
- Los archivos .ASP son ficheros normales de texto que contienen
código ASP y se comportan como ficheros WML normales cuando
los devuelve el servidor Web.
- Pueden mezclar en una misma página diferentes secuencias
de comandos de lenguajes distintos por ejemplo VBScript
y Jscript (aunque esta práctica no es muy recomendable)
- Mejora del rendimiento y eficiencia de la red
- Aumento de la interactividad de las páginas
- Fácil de aprender
Cuadro 1. Características de ASP
|
Bien con lo visto hasta ahora tenemos una primera idea de lo
que es ASP antes de continuar vamos a ver como funciona Internet
Information Server y que opciones de configuración tenemos disponibles
dentro del mismo para trabajar con ASP.
3.- Configuración de Internet Information Server para trabajar
con ASP
Como todos sabéis IIS se puede decir que es el software estándar
de Microsoft para crear sitios Web en Windows NT , hay que distinguir
entre dos versiones distintas de este programa, una para NT Server
que recibe el nombre propiamente dicho de Internet Information
Server o IIS y la versión para NT Workstation denominada Personal
Web Server (PWS) y que es un IIS recortado en el sentido de que
solamente admite un sitio Web por máquina y las opciones de administración
y configuración son muy limitadas, como es lógico nosotros vamos
a centrarnos en IIS en este artículo (en la figura 1 tenéis el
aspecto general del programa).
Figura 1. Internet Information Server
Actualmente la última versión disponible para NT es la 4. (está
disponible la versión 5.0 para Windows 2000) que podemos conseguir
desde Microsoft descargando el Option Pack, una suite de programas
orientados todos a implementar servicios de Internet de una manera
muy sencilla. Para descargar el Option Pack podéis hacerlo desde
esta dirección:
http://www.microsoft.com/ntserver/nts/downloads/recommended/NT4OptPk/default.asp
No olvidéis leer el acuerdo de licencia antes de descargar el
programa así como toda la información adicional que tenéis en
el Web. Una vez que tengáis el software bajado e instalado (no
entramos en estos detalles por que se aleja de nuestro tema) dispondremos
de los servicios básicos siguientes: WWW, FTP, Correo y NEWS y
el soporte nativo de páginas ASP, además la interfaz que presenta
el IIS es una interfaz estándar que Microsoft ha desarrollado
bajo el nombre de MMC o Microsoft Management Console, que se basa
en el uso de una interfaz común (consola) para las distintas aplicaciones
pero que a la vez están personalizadas para acceder a las distintas
opciones particulares que cada aplicación presenta, con esto tenemos
la ventaja que bajo el mismo programa (la MMC) podemos tener diferentes
aplicaciones ejecutándose con lo que las labores de administración,
aprendizaje y acceso a los distintos programas se simplifica mucho,
por ejemplo, dos programas que hacen uso de la MMC son el IIS
y la última versión de SQL Server.
Las opciones que Internet Information Server utiliza para la
configuración de las páginas ASP se encuentran dentro de las propiedades
del sitio Web que estemos desarrollando, de esta manera podemos
configurar diferentes opciones de ASP para distintos sites. Según
esto para acceder a estas características solamente tenemos que
posicionarnos sobre uno de los nodos que representan un sitio
Web y dar al botón de Action (Acción) situado en la parte superior
de la consola y seleccionar la opción de Properties (Propiedades),
se nos abrirá un cuadro de dialogo similar al siguiente (figura
2):

Figura 2. Cuadro de Propiedades en IIS
A continuación debemos de seleccionar la pestaña de Directorio
Particular y una vez aquí hacer clic en el botón de Configuración
dentro de la sección de Configuración de la Aplicación, una vez
hecho esto tendremos el cuadro de la figura 3 que posee tres pestañas
diferentes dos de las cuales son las que contienen la información
de configuración de ASP en IIS.
Figura 3. Configuración de ASP desde IIS
Desde la pestaña de Opciones de Aplicación accedemos a las siguientes
características:
- Habilitar estado de sesión: Sirve para indicar la duración
del contenido generado por nuestras secuencias de comandos
- Habilitar Buffer: Indica si nuestras páginas van hacer uso
o no del buffer, si indicamos aqui que si se activa, el efecto
se aplica para todas las páginas de nuestra aplicación aunque
si queremos activarla a nivel de página particular podemos hacerlo
mediante
<% Response.Buffer = True %>
- Habilitar rutas de acceso primarias
- Lenguaje ASP predeterminado: Sin comentarios por defecto VBScript
pero puede ser cualquiera para el cual tengamos el interprete
Iinstalado.
- Tiempo limite de archivo de comandos ASP: Tiempo que puede
tardar un archivo ASP en generarse completamente, se puede modificar
con Server.ScriptTimeout.
Desde la pestaña Depuración de Aplicaciones se accede a las
opciones siguientes sobre:
- Habilitar depuración de secuencia de comandos en el servidor:
Indica que la depuración de la secuencia de comandos en caso
de error se realizará en el servidor.
- Habilitar depuración de secuencia de comandos en el cliente:
Como la opción anterior pero en el cliente.
- Enviar mensajes de error detallados al cliente: Al producirse
un error enviará al cliente el mensaje de error que haya sucedido
de manera detallada.
- Enviar este mensaje de error al cliente: Al producirse un
error se enviará siempre el mismo mensaje sea cual sea el error.
En el cuadro 2 tenéis algunas recomendaciones sobre el manejo
de IIS que pueden seros de utilidad:
- IIS 4.o utiliza la seguridad de Windows NT y se recomienda
usar el sistema de archivos NTFS de NT .
- Cuando se instala IIS se crea automáticamente en NT
el usuario anónimo con el nombre IUSR_Nombre del equipo
y con la misma contraseña aleatoria que en IIS y el derecho
de Inicio de Sesión en Local.
- Conviene revisar los derechos de los grupos que tienen
los grupos Todos e Invitados a los que pertenece el usuario
anónimo.
- Para que el usuario anónimo funcione correctamente debemos
activar Permitir Anónimos en las propiedades del servicio
Web.
Cuadro 2. Consejos sobre IIS |
3.1.- Configuración de los MIME TYPES en Internet Information
Server zpZ No podemos finalizar el estudio de la configuración
de IIS para trabajar con ASP sin hacer una pequeña referencia
a la configuración de los MIME TYPES necesarios para trabajar
con WML, como todos sabéis los MIME TYPES son un conjunto de extensiones
necesarias que hay configurar en el servidor Web para indicar
a los terminales (browsers) que tipo de documentos es capaz de
proporcionar el servidor Web, en WML los tipos que debemos de
añadir (de sobra conocidos por todos vosotros) son los siguientes:
| MIME TYPE |
| Tipo de contenido |
Mime Type |
Extensión |
| Fichero WML |
text/vnd.wap.wml |
wml |
| Bitmap |
image/vnd.wap.wbmp |
wbmp |
| WML Compilado |
application/vnd.wap.wmlc |
wmlc |
| Fichero WMLScript |
text/vnd.wap.wmlscript |
wmls |
| WMLScript compilado |
application/vnd.wap.wmlscriptc |
wmlsc |
Desde el Internet Information Server tenemos que realizar la
siguiente secuencia de pasos para su inclusión:
- 1. - En primer lugar debemos de abrir el cuadro de dialogo
de las propiedades del sitio Web en el cual queremos configurar
los MIME TYPES de WML, al igual que sucedía con la configuración
de las páginas ASP que veíamos antes, los MIME TYPES se configuran
por cada site que estemos desarrollando lo cual nos proporciona
una gran independencia de unos sitios frente a otros aunque
aumenta el trabajo de administración.
- 2. - En segundo lugar tenemos que seleccionar la pestaña
de Encabezados HTTP y una vez aquí tenemos una sección llamada
Mime Types (o Tipos Mime) con un botón que nos permitirá incluir
los distintos tipos que necesitemos indicando el tipo de extensión
y el tipo de contenido asociado, en la figura podéis ver el
aspecto que presentaría dicha pantalla después de haber incluidos
los tipos necesarios para WML.
Figura 4. MIME TYPES en Internet Information Server
4.- DESARROLLO DE APLICACIONES EN ASP
Si hemos seguido los pasos anteriores no deberíamos de tener
ningún problema para que nuestras páginas ASP funcionen correctamente
en conjunción con WML, a continuación vamos a contar las características
básicas que debemos saber cuando desarrollamos con ASP, antes
de continuar queremos indicar que el lenguaje de secuencia de
comandos que vamos a utilizar a lo largo de todo el artículo es
VBScript debido a su sencillez y potencia. No obstante no quiero
convertir esta mini guía de ASP/WML en un curso sobre VBScript
pero dado que necesitamos algún lenguaje de secuencia de comando
para los ejemplos contaremos brevemente en los puntos siguientes
los fundamentos básicos sobre VBScript que necesitaremos para
poder trabajar.
Una pagina ASP mezcla en el mismo archivo secuencias de comandos
con código WML standard. Las secuencias de comandos se distinguen
del resto del texto del archivo mediante delimitadores que vienen
representados por los símbolos "<%" y "%>" para
enmarcar las secuencias de comandos.
Por ejemplo en el siguiente programa devolvemos la hora actual
haciendo uso de una función de Vbscript llamada Now que nos da
la hora:
<% Response.ContentType = "text/vnd.wap.wml" %>
<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
<wml>
<card id="Principal" title="Principal">
<p><b><u>EJEMPLO 1 </u></b></p>
<p>Son las: <%= Now () %></p>
</card>
</wml>
Cuando el servidor Web procese la pagina nos devolverá el siguiente
resultado en nuestro terminal y como podemos ver por la figura no
se recibe el código asp, sino el resultado de la ejecución de dicho
código.
Figura 5. Ejemplo 1
Dentro de los delimitadores ASP se puede incluir cualquier instrucción,
expresión, procedimiento u operador válido para el lenguaje de
programación que estemos usando.
4.1.- FUNDAMENTOS BASICOS DE VBSCRIPT
ASP viene de forma nativa con dos motores de secuencia de comandos:
Microsoft Visual Basic Scriptig Edition (VBScript) y Microsoft
Jscript aunque se puede instalar y utilizar motores de otros lenguajes,
por ejemplo Perl. El mecanismo para establecer el lenguaje principal
de secuencia de comandos depende de si lo que queremos es activarlo
en una única página o en toda la aplicación, en caso de ser en
toda la aplicación podemos hacerlo como veíamos antes en el apartado
de configuración de IIS para uso de ASP, si lo que queremos es
establecer el lenguaje principal de secuencia de comandos en una
única página, hay que agregar la directiva <%@ LANGUAGE%>
al principio del archivo .asp con una sintaxis similar a la siguiente:
<%@ LANGUAGE=Lenguaje_secuencia_comandos %>
en donde Lenguaje_secuencia_comandos es el lenguaje principal
de secuencia de comandos que va a establecer en esa página concreta.
Es importante señalar que el valor de la página (el asignado por
la directiva Language) invalida el valor global dado a todas las
páginas de la aplicación. En el cuadro 3 se resumen algunas de
las características básicas de VBScript.
|
VBScript acepta comentarios marcados con apóstrofes que
se eliminan al procesarse la secuencia de comandos y no
se envían al explorador.
VBScript no distingue entre mayúsculas y minúsculas.
Es muy similar a Visual Basic por lo que su aprendizaje
es muy sencillo.
Solo tiene un tipo de datos, el tipo Variant aunque existen
subtipos implícitos dentro de él para manipular la información
de manera más precisa.
No es necesario declarar las variables que usemos (si
conveniente)
Restricciones del los nombres de variables:
Debe comenzar con un carácter alfabético
No puede contener un punto
No debe superar los 255 caracteres
Cuadro 3. Características básicas de VBScript
|
4.1.1.- TIPOS DE DATOS, VARIABLES Y ARRAYS EN VBSCRIPT
Vbscript solo tiene un tipo de datos llamado Variant, este tipo
es un es una clase especial de datos que puede contener diferentes
tipos de información, de modo que su comportamiento varia en función
de la información que se encuentra almacenada en él, solo hay
una excepción a esta regla y es cuando forzamos de manera explícita
que los números se comporten como cadenas poniéndolos entre comillas
(" ").
Un aspecto importante que existe en VBScript es que las variables
en no necesitan de declaración explícita para poder usarla, aunque
yo recomiendo su declaración para prevenir posibles errores, si
habéis programado alguna vez en Visual Basic sabéis que existe
la posibilidad de forzar la declaración de variables incluyendo
la sentencia Option Explicit al principio de un módulo de código,
en VBScript se admite esta sintaxis al principio de la página
.asp de manera que sea obligado la declaración de variables, en
este caso si queremos hacer uso de Option Explicit no debemos
olvidar incluirlo dentro de los delimitadores <% %>.
Para declarar una variable se utiliza una sintaxis similar a
la siguiente:
<% Dim Mivariable %>
El operador de asignación es el = y puede usarse para dar a
la variable valores numéricos (MiVariable = 4), de cadena (MiVariable
= "Hola") y fecha (MiVariable=#12-1-1999# )
Para finalizar con las variables en VBScript vamos a hacer un
pequeño comentario acerca de la posibilidad existente en el lenguaje
de hacer uso de arrays, para declarar una variable de este tipo
solo tenemos que posponer al nombre de la variable unos paréntesis
dentro de los cuales se sitúa el número de elementos de los que
constará el array, en caso de tener múltiples dimensiones se separan
por comas (en VbScript el límite está en 60 dimensiones distintas
un número lo suficientemente alto como para poder trabajar con
comodidad).
Por ejemplo:
Dim A (5) -> Declara un array de una dimensión de 5 elementos
Dim B (4,3) -> Declara un array de dos dimensiones (tabla)
de 4 y 3 elementos respectivamente
Para asignar un valor a una posición del array simplemente nos
referiremos al indice del array que queremos actualizar:
A(2) = 12 ->Actualiza el elemento 2 del array
Y de igual modo si queremos recuperar un valor almacenado:
Valor = A(2)
Existen además dos operadores que son muy útiles y que vienen
heredados del mundo de Visual Basic, estamos hablando de Redim
y Preserve que son utilizados para crear lo que se denomina arrays
dinámicos, son muy útiles cuando no sabemos el número de dimensiones
que nuestro array puede tener a priori. Para hacer uso de ellos
lo que hacemos es que en la declaración del array lo que hacemos
es no especificar ninguna dimensión (Dim A()) y posteriormente
con Redim indicaremos que dimensiones queremos darle (por ejemplo
Redim A(5), de este modo asignamos una dimensión al array A y
le indicamos que dicha dimensión tiene 5 elementos), sucede que
al hacer uso de Redim se produce el borrado de los elementos que
el array contuviese, es decir si ahora hacemos Redim A(10) y el
array (el que tenia 5 elementos) hubiese contenido algún valor
almacenado dicho valor se perdería, para evitar esto podemos hacer
uso de Preserve a continuación de Redim de manera que no se pierde
el contenido previo del array (salvo que no estemos poniendo menos
elementos en el array o menos dimensiones, por ejemplo Redim Preserve
A(3) los elementos A(4) y A(5) se perderían)
4.1.2.- CONTROL DE FLUJO EN VBSCRIPT
En VBScript los elementos de control de flujo para nuestros
programas son los típicos de cualquier lenguaje de programación,
solo hacemos una pequeña alusión a los mismos porque los usaremos
más adelante, tenemos:
Y en este otro caso las acciones se ejecutan hasta que la Variable
alcanza el valor de ValorFin, en cada iteraccion se incrementa su
valor en 1 comenzado en el valor marcado por ValorInicio. Un tipo
de bucle FOR especial en VBScript es el que nos permite recorrer
colecciones (objetos contenedores de otros objetos), la sintaxis
es similar:
FOR EACH Elemento IN Coleccion
…. Acciones
NEXT
Este bucle nos recorre todos los elementos que haya dentro de
la coleccion indicada. Los bucles y las sentencias condicionales
pueden anidarse unas con otras tantas veces como se quiera. Veamos
un ejemplo que hace uso de este tipo de estructuras de control
y bucles en un pequeño programa WML que nos va indicar desde 1
hasta 10 que números son par y cuales impares, fijaros en el uso
de la expresión <%= Indice %> para devolver el valor del
indice del bucle for, ya que esta es la forma de devolver un valor
de una variable de secuencia de comandos a nuestra aplicación.
El código del programa es el siguiente:
<% Response.ContentType = "text/vnd.wap.wml" %>
<?xml version="1.0"? >
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml" >
<wml >
<card id="Principal" title="Principal" >
<p ><b ><u >EJEMPLO 2 </u ></b ></p >
<% Dim Indice
FOR Indice=1 TO 10
IF (Indice MOD 2)=0 THEN % >
<p >
El <%= Indice % > Es un numero par </p >
<% ELSE % >
<p >El <%= Indice % > Es un numero impar </p >
<% END IF % >
<% NEXT % >
</card >
</wml >
En pantalla tenemos el siguiente resultado:
Figura 6. Ejemplo 2
4.2.- OBJETOS INTEGRADOS EN ASP
Dentro de ASP existen una serie de objetos integrados que aportan
funcionalidad añadida y que pueden ser utilizados dentro de nuestros
desarrollos. Estos objetos son los siguientes:
Objeto Session: el objeto Session permite almacenar
la información necesaria para una determinada sesión de usuario.
Las variables almacenadas en el objeto Session no se descartan
cuando el usuario pasa de una página a otra dentro de la aplicación,
si no que dichas variables persisten durante todo el tiempo que
el usuario tiene acceso a las páginas de la aplicación. También
puede utilizar los métodos de Session para terminar explícitamente
una sesión y establecer el periodo de tiempo de espera de inactividad
de las sesiones. Las variables de Session de un cliente solo pueden
ser accedidas por ese cliente. El servidor crea automáticamente
el objeto Session cuando un usuario que no tenga actualmente una
sesión solicita una pagina Web de la aplicación.
El mecanismo para crear variables dentro del objeto Session
es sencillo y sigue un esquema como el siguiente:
<% Session("Nomvariable")= valor %>
<% Session (Marca)=FORD %> pudiendo
recuperar el valor almacenado en dicha variable del modo siguiente:
<% MarcaF = Session(Marca) %>
Generalmente las variables de este objeto se declaran dentro
del fichero Global.ASA.
El método más usado de este objeto es Abandom que destruye todos
los objetos y variables almacenados en el objeto Session (<%
Session.Abandon %>)
Objeto Application: se utiliza para compartir
información entre todos los usuarios de una aplicación. Este objeto
dispone de dos métodos básicos que se utilizan para asegurar la
integridad cuando múltiples usuarios están accediendo a a sus
propiedades. Estos métodos son Lock y Unlock. El método Lock bloquea
el objeto Application de manera que sólo un cliente puede modificar/acceder
a las propiedades de este objeto al mismo tiempo. El método Unlock
tiene el efecto contrario y desbloquea el objeto Application para
que pueda ser modificado por otro cliente después de haberse bloqueado
mediante el método Lock. Si no se llama a este método de forma
explícita, el servidor Web desbloquea el objeto Application cuando
el archivo .asp termina o transcurre su tiempo de espera. Un ejemplo
muy claro de uso de Application es suponiendo definida un propiedad
llamada Nvisitas (declarada dentro del archivo Global.asa, las
variables del objeto Application se declaran del mismo modo que
el objeto Session) que contiene el número de visitantes de la
página queremos que cuando se actualice dicha actualización se
realice de manera exclusiva por cada usuario cliente de manera
que quede al finalizar el proceso la propiedad en un estado consistente,
para asegurar esto podemos hacer uso de Lock y Unlock del modo
siguiente:
<% Application.Lock<br>
Application(Nvisitas) = Application(Nvisitas)+1<br>
Application.Unlock %>
Objeto Request: sirve para tener acceso a la información
que se pasa en las peticiones HTTP, como son los parámetros que
se pasan desde los documentos WML mediante los métodos POST y
GET de HTTP o las cookies. El objeto Request se caracteriza por
disponer de varias colecciones que se utilizan para acceder a
la información pasada por el terminal de manera que dependiendo
de la forma en que enviemos los datos al servidor tendremos que
utilizar unas u otras. Las mas útiles son:
- FORM que recupera datos enviados desde un formulario
mediante el método POST.
- QUERYSTRING recupera datos enviados como cadena de
consulta HTTP.
- COOKIES recupera los valores de las Cookies.
Objeto Response: el objeto Response se utiliza
para controlar la información que se envía al usuario. Esto incluye
el envío de información directamente al terminal, la redirección
del explorador a otra dirección URL o el establecimiento de valores
de las cookies (más adelante hablamos con más detalle sobre este
tema). Entre los métodos mas interesantes del objeto Response
están los siguientes:
- Write: Escribe una cadena de resultado en el terminal del
cliente. Como curiosidad decir que cuando hacemos uso de la
expresión <%=variable%> para devolver el valor de una
variable estamos usando el método Response.Write implicitamente.
Por ejemplo si hacemos algo similar a lo siguiente:
<% response.write Curso de WML/ASP %>
obtendriamos en el display de nuestro terminal el mensaje
Curso de WML/ASP.
- Redirect: Este método hace que el terminal se conecte con
una dirección diferente. Su uso y sintaxis son también muy sencillos:
<% response.redirect <a href://www.cocotero.com>www.cocotero.es</a>%>
nos mandaria a la página de cocotero
Objeto Server: Da acceso a los métodos y las propiedades
del servidor. De este objeto conviene destacar lo siguiente:
Con respecto a las propiedades tenemos a ScriptTimeout que especifica
la cantidad maxima de tiempo que puede tardar la ejecución de
una secuencia de comandos, conviene tener este parámetro muy en
cuenta ya que muchos errores que podemos obtener en ASP se deben
a falta de tiempo en la ejecución del script (pocos recursos,
acceso a base de datos muy complicados etc) y que pueden volvernos
locos ante un script aparentemente correcto. El tiempo asignado
a esta propiedad viene dado en segundos, siendo su sintaxis similar
a:
Server.ScriptTimeout = nº de segundos
El método más comunmente usado con el objeto Server es el método
CreateObject que sirve para crear una instancia de un componente
ActiveX en el servidor. Su sintaxis es la siguiente:
Server.CreateObject (Objeto)
Donde Objeto es el tipo de instancia que queremos crear, por ejemplo
para una conexión contra una base de datos podriamos utilizar
objetos ADO del modo siguiente:
Server.CreateObject (ADO.Connection)
En la tabla siguiente teneis una relación de todos los métodos,
colecciones y eventos que forman parte de los objetos anteriormente
explicados y que puede serviros como referencia:
| OBJETO |
Application |
Session |
Server |
Request |
Response |
| colecciones |
Contents
Satic Objects |
Contents
Static Objects |
Script Timeout |
Client Certificate
Cookies
Form
Query String
Server variables |
Cookies |
| Métodos |
Lock
unlock |
Abandon |
Create Object
Map path
URL Encode |
Binary Read |
Add Header
Append To Log
Binary Write
Clear
End
Flush
Redirect
Write |
| Eventos |
Application_On Start
Application_On End |
Session_On Start
Session_On End |
-
|
-
|
-
|
| Propiedades |
-
|
Code Page
LCID
Session ID
Time Out |
-
|
Total Byte |
Buffer
Cache Control
Charset
Content Type
Expires
Expires Asolute
Is Client Conect
ed
PICS
Status |
EL ARCHIVO GLOBAL.ASA
Dentro de ASP existe un fichero que se sitúa dentro del directorio
raíz del site que estemos desarrollando y cuyo nombre es Global.asa,
la importancia de este fichero radica en que permite la automatización
de los cuatro eventos básicos de nuestro servidor sobre los objetos
Application y Session que veiamos antes. En el cuadro tenéis la
estructura que presenta este fichero.
<SCRIPT LANGUAGE="VBScript" RUNAT="Server">
Sub Application_OnStart
End Sub
Sub Application_OnEnd
End Sub
Sub Session_OnStart
End Sub
Sub Session_OnEnd
End Sub
</SCRIPT>
Cuadro . Estructura fichero Global.asa
|
Si os fijáis en el fichero veréis que existen dos eventos asociados
(OnStart y OnEnd) asociados a dos objetos distintos (Application
y Session), el objeto Session dentro del fichero Global.asa ya
vimos que se utiliza para establecer los parámetros que serán
particulares para cada sesión de usuario que se conecte a nuestro
servidor, por otro lado el objeto Application se usa para establecer
los parámetros que serán globales, es decir, compartidos para
todas las sesiones que se inicien en nuestro servidor. Concretamente
la ejecución de cada evento se produce en los siguientes instantes:
- Application_OnStart: Se ejecuta antes de que se cree nueva
sesión por parte del primer cliente que se conecta al servidor.
- Application_OnEnd: Se ejecuta justo cuando la aplicación termina.
- Session_OnStart: Se ejecuta cuando el servidor crea una nueva
sesión de manera que los comandos se ejecutan antes de enviar
la página solicitada al cliente
- Session_OnEnd: Se ejecuta cuando se abandona o se supera el
tiempo de espera de una sesión.
COOKIES
Dentro de nuestro viaje por el mundo de ASP solamente nos queda
hablar de las cookies, este mecanismo nos permite guardar información
relativa a un usuario a lo largo de sus distintos accesos a nuestras
páginas, no es muy recomendable basar nuestros desarrollos en
ellas ya que no todos los dispositivos las soportan bien pero
a veces resultan útiles. Las cookies se almacenan en los terminales
de los clientes y se transmiten en las cabeceras cuando se realiza
la comunicación http. En ASP las cookies se implementan como colecciones
y se usan mediante los objetos integrados Request y Response que
vimos anteriormente. La sintaxis de manipulación de cookies es
la siguiente
Response.Cookies(cookie)[(clave)|.atributo] = valor
Request.Cookies(cookie)(clave)
Ejemplos:
Enviar una cookie simple:
<% Response.Cookies (IDUsuario)=12
%>
Recuperar el valor de esa cookie :
<% ID=Request.Cookies (IDUsuario) %>
Veamos el código anterior dentro de un programa WML:
< % Response.ContentType = "text/vnd.wap.wml" %>
<% Response.Cookies ("IDUsuario")="12" %>
<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
<wml>
<card id="Principal" title="Principal">>
<p><b><u>EJEMPLO 3 </u></b></p>
<% DIM ID
ID=Request.Cookies ("IDUsuario") %>
<p> El ID de usuario es: <%= ID %> </p>
</card>
</wml>
Si nos fijamos en el código anterior veremos que se envía al
terminal del cliente una cookie llamada IDUsuario con un número
identificativo, y en el cuerpo del programa se retorna dicha cookie
para mostrarla en el terminal (ver figura), un uso típico de las
cookies podría ser a continuación examinar en una base de datos
las preferencias sobre nuestro site que dicho usuario tenia y
proceder a enviárselas pero esto queda ya como ejercicio para
vosotros. Es importante fijarnos en las cookies que tenemos almacenadas
en nuestro terminal para ver que es lo que está pasando, si os
fijáis en la figura podéis ver que tenemos una cookie llamada
IDUsuario y vemos que tenemos su tiempo de vida, el valor que
tiene, la versión que representa (si tiene alguna), etc.
Figura. Cookies enviadas
Figura. Ejemplo 3
Es importante que el envío de las cookies se realice previamente
al envío de la página ya que esta información viaja dentro del encabezado
HTTP por ese motivo veréis en el código que el envío de la cookie
se realiza fuera de la baraja.
5.- MICROSOFT TRANSACTION SERVER
Una de las posibilidades más interesantes que tenemos con el
Option Pack y que podemos utilizar junto con el IIS es el Microsoft
Transaction Server, este programa que actúa como administrador
de recursos nos permite registrar recursos dentro de él de manera
que podemos llamarlos desde nuestras páginas ASP, en la figura
teneis el aspecto que presenta dicho programa:
Figura. Microsoft Transaction Server
La teoría que hay detrás de MTS es muy sencilla y se basa en el
concepto de transacción, entendiendo como tal a una unidad de trabajo
que se completa o falla en su conjunto, no se permite que algunas
operaciones que componen la transacción se completen y otras operaciones
no ya que el fundamento de la transacción es dejar el objeto sobre
el que se realiza en un estado consistente, de este modo MTS actúa
como un administrador de recursos siendo su modo de trabajo siempre
el mismo y que se detalla a continuación:
- Un cliente pide un objeto del Modelo de Objetos Componentes
(COM) que se ejecuta bajo control de MTS. En nuestro caso particular
esta petición viene dada como una llamada a una página ASP,
la cual a su vez hace uso de un objeto (mediante un Server.CreateObject)
que se encuentra registrado dentro del MTS. Por ejemplo podemos
tener un componente para acceder a una base de datos y que contenga
todos los métodos necesarios para manipularla, de esta manera
desde nuestro código solo tendriamos que crear objetos de este
tipo de componente y llamar a su métodos para que nos devuelva
datos, inicie o cierre una conexión con el servidor, etc de
una manera muy cómoda y a la vez abstrayendonos de este tipo
de particularidades, ya que no perdemos el tiempo en la implementación
de la conexión con la base de datos, e incluso podemos reutilizar
módulos previamente diseñados.
- MTS crea un contexto de objeto que asocia al objeto de manera
que el cliente puede hacer uso de él
- Cuando el objeto termina su tarea se llama a un método especial
denominado SetComplete para indicar que termino de manera correcta
o a SetAbort para indicar todo lo contrario que ha habido un
error.
6.1.- ASP Y MTS. ARQUITECTURA GLOBAL
Con la aparición de IIS versión 4.0 se produjo la integración
de la tecnología ASP con MTS lo que ha supuesto la posibilidad
de poder aplicar el concepto transaccional con todas las ventajas
que ello aporta. Concretamente la arquitectura que utiliza IIS
y MTS para hacer uso de ASP no es demasiado complicada consiste
en poner todo el código ASP junto con la interfaz de programación
de aplicaciones del servidor Internet (lo que se conoce comumente
como ISAPI) en un componente denominado Administrador de Aplicaciones
Web o WAM que a su vez se registra como un componente en el MTS
de este modo todos los servicios que tenemos disponibles desde
MTS (Ver cuadro) se encuentran accesibles para la WAM.
Los componentes que forman parte de MTS y que proporcionan
servicios son los siguientes:
- Application Components
- MTS Executive
- Server Processes
- Resource Managers
- Resource Dispensers
- Microsoft Distributed Transaction Coordinator
- MTS Explorer
Cuadro. Características de MTS
|
Pero, ¿como podemos crear nuestros propios componentes para usarlos
dentro de nuestras propias páginas?, el mecanismo es siempre el
mismo y no es demasiado complicado, lo que tenemos que hacer es
crear una DLL que contenga toda la funcionalidad que queremos incluir
dentro de nuestro componente, por ejemplo esta DLL podemos hacerla
en Visual Basic creando un nuevo proyecto del tipo ActiveX DLL y
creando un modulo de clase que contenga los métodos.
Bien esto sería la parte teórica, veamos a continuación como
podemos usar estas características dentro de nuestros desarrollos,
para ello vamos a hacer uso de la dll BaseDatos.Dll. Esta dll
es una dll que contiene una clase denominada CbaseDatos dentro
de la cual sean implementado tres métodos distintos denominados
BD_Conectar, BD_Desconectar y BD_EjecutarSQL. El primer metodo
nos permite conectarnos a una base de datos a través de ODBC pasandole
los distintos parámetros que forman una cadena de conexión, esto
es nombre de DSN, usuario y password. Una vez que la conexión
con la base de datos se ha establecido podemos usar el método
BD_EjecutarSQL para lanzar contra ella cualquier sentencia que
queramos y que pasamos como argumento del método. Finalmente si
queremos liberar la conexión con la base de datos podemos usar
el método BD_Desconectar que no tiene ningún parámetro.
El paso siguiente es registrar el componente dentro de MTS para
ello tenemos que seguir la siguiente secuencia de pasos:
1.- En primer lugar tenemos que ir a Packages Installed y haciendo
clic en Action en la barra superior seleccionamos New/Package
con lo que obtendremos la pantalla siguiente:
2.- En esta pantalla selecionamos Create an Empty Package (Crear
paquete vacio) que será donde almacenaremos nuestra dll. En esta
pantalla tenemos la posibilidad de importar un paquete que ya este
creado (Install Pre-build packages) y que hayamos importado previamente,
estos paquetes exportados se almacenan con la extensión .PAK (Si
queremos exportar un paquete solamente tenemos que situarnos sobre
el paquete que queremos exportar hacer clic en Action y seleccionar
Export donde se nos indicara la ruta donde queremos exportar el
paquete, el nombre con el que se exportara será el mismo que el
nombre del paquete con extensión .PAK). En nuestro ejemplo el nombre
del paquete que vamos a crear es BaseDatos (figura)
En este proceso se nos pide también que indiquemos bajo que cuenta
el paquete va a poder ejecutarse, MTS nos da dos opciones ejecutarla
sobre el usuario que se encuentre actualmente logado en la máquina
(Interactive User ) o bien sobre una cuenta particular (This user)
de modo que el paquete no podrá ser usado hasta que estemos logados
como dicho usuario.
3.- Una vez que tenemos el paquete creado tenemos que incluir
en su interior el componente que hemos creado anteriomente en
este caso la dll. Para ello seleccionamos el paquete que acabamos
de crear y acontinuación seleccionamos componentes, una vez hecho
esto hacemos clic en el botón de Action y seleccionamos New/Component
con lo que obtenemos la siguiente pantalla:
Si hacemos clic en Install New Component accederemos a una pantalla
donde nos pedira la ruta donde tenemos la dll, por regla general
os recomiendo que los componentes los guardeis en la siguiente ruta:
Winnt\System32\Intsrv, suponiendo que está aquí la dll BaseDatos.dll
la seleccionamos y ya tendremos registrado nuestro componente y
podremos ver desde el MTS los métodos que ha importado y de los
que podemos hacer uso desde nuestras páginas (figura).

Ya que tenemos configurado MTS para que trabaje con nuestra componente
de base de datos vamos incluir un pequeño desarrollo en WML/ASP
que haga uso de él, como vereís la dinámica de funcionamiento
es muy sencilla. El objetivo será que desde nuestro terminal podemos
establecer una conexión con la base de datos devolviendonos como
resultado si todo ha ido bien o no, a continuación el programa
realizará una inserción dentro de la base de datos para finalizar
liberando la conexión.
El programa va a constar de una sola carta ya que el objetivo
es que veáis lo sencillo que resulta la programación con componentes
dentro de ASP y WML, posteriormente podéis complicar el desarrollo
todo lo que queráis (incluyendo interactividad con el usuario
por ejemplo), es más podéis incluso implementar vuestros propios
componentes de acceso a base de datos, para envío de mails, gestión
de ecommerce, etc, las posibilidades son infinitas. En la inserción
dentro de la base de datos vamos a suponer la existencia de una
tabla llamada Clientes, en la cual solo hay dos campos, el Código
de cliente (Codigo) y el Nombre del cliente (Nombre) , dado que
la conexión con la base de datos se realiza mediante ODBC la base
de datos a la que enlacemos el DSN que creemos no va a influirnos
en nuestra página, por tanto podríamos usar Access, SQL Server,
Oracle, etc. En el caso de este ejemplo el DSN que usamos (BASEDATOS)
está enlazado contra una base de datos SQL Server pero podría
ser otra como ya hemos dicho. El código completo finalmente es
el siguiente:
<% Response.ContentType = "text/vnd.wap.wml" %>
<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
<wml>
<card id="Principal" title="Principal">
<p><b><u>EJEMPLO COMPONENTES</u></b></p>
<!-- En primer lugar establecemos la conexion con la base de datos -->
<% Dim Resultado 'Nos sirve para obtener el codigo de error del componente
Dim objBD 'Objeto para enlazar con el componente
Dim SQL 'Sentencia SQL que vamos a ejecutar
Set objBD=Server.CreateObject ("Proyecto1.CBaseDatos")
Resultado=objBD.BD_Conectar ("BASEDATOS","SA","TORNILLOS","")
If Resultado=0 Then %>
<p> Conexion OK </p>
% Else %>
<p> Fallo Conexion </p>
% End If %>
<!-- A continuacion realizamos la ejecucion de la sentencia de insercion -->
<% SQL="INSERT INTO Clientes (Codigo,Nombre) VALUES ('01','Jesus Castilla')"
Resultado=objBD.BD_EjecutarSQL(SQL)
If Resultado=0 Then %>
<p> Insert OK </p>
<% Else %>
<p> Fallo Insert </p>
<% End If %>
<!-- Finalmente liberamos la conexion con la base de datos -->
<% Resultado=objBD.BD_Desconectar
If Resultado=0 Then %>-
<p> Desconexion OK </p>
<% Else %>
<p> Fallo Desconexion </p>
<% End if %>
</card>
</wml>
Y en el terminal quedaría del siguiente modo:
º
Aspecto en el UP simulator y en el ADK de Motorola
7.- CONCLUSIONES Bueno pues espero que después de leer este
artículo os haya quedado mucho más claro las posibilidades de
ASP y su utilización con WML, como viene siendo costumbre os recuerdo
que a partir de ahora es cuando empieza el trabajo duro, ya que
queda de vuestra parte seguir investigando e indagando en aquellos
aspectos que no hemos tocado en este mini curso de iniciación
WML/ASP. Y nada más, hasta la próxima.
Santiago Márquez Solís
|