PROGRAMACION ASP y WML

22
PROGRAMACION ASP y WML 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

Transcript of PROGRAMACION ASP y WML

Page 1: PROGRAMACION ASP y WML

PROGRAMACION ASP y WML

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.

Page 2: PROGRAMACION ASP y WML

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

Page 3: PROGRAMACION ASP y WML

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.

Page 4: PROGRAMACION ASP y WML

Figura 3. Configuración de ASP desde IIS

Desde la pestaña de Opciones de Aplicación accedemos a las siguientes características:

o Habilitar estado de sesión: Sirve para indicar la duración del contenido generado por nuestras secuencias de comandos

o 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 %>

o Habilitar rutas de acceso primarias

o Lenguaje ASP predeterminado: Sin comentarios por defecto VBScript pero puede ser cualquiera para el cual tengamos el interprete Iinstalado.

o 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:

o 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.

o Habilitar depuración de secuencia de comandos en el cliente: Como la opción anterior pero en el cliente.

o Enviar mensajes de error detallados al cliente: Al producirse un error enviará al cliente el mensaje de error que haya sucedido de manera detallada.

o 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

Page 5: PROGRAMACION ASP y WML

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:

o 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.

o 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.

Page 6: PROGRAMACION ASP y 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.

Page 7: PROGRAMACION ASP y WML

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

Page 8: PROGRAMACION ASP y WML

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 elementosDim 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:

o Sentencia condicionales : representadas por el conjunto de expresiones siguientes:

IF Condicion THEN.... Acciones

ELSE.... Acciones

END IF

Si se cumple la condición el flujo del programa nos llevará por la primera rama del IF y sino por la segunda.

o Bucles : Tenemos dos fundamentalmente, el bucle DO WHILE y el bucle FOR, con una sintaxis como sigue:

DO WHILE Condicion.... Acciones

LOOP

o En este caso las acciones que hay dentro del bucle se ejecutan mientras la condicion sea verdadera.

FOR Variable=ValorInicio TO ValorFIn..... Acciones

NEXT

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

Page 9: PROGRAMACION ASP y WML

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

Page 10: PROGRAMACION ASP y WML

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:

o FORM que recupera datos enviados desde un formulario mediante el método POST. o QUERYSTRING recupera datos enviados como cadena de consulta HTTP.

o 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:

o 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.

o 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

Page 11: PROGRAMACION ASP y WML

coleccionesContentsSatic Objects

ContentsStatic Objects

Script Timeout

Client CertificateCookiesFormQuery StringServer variables

Cookies

MétodosLockunlock

Abandon

Create ObjectMap pathURL Encode

Binary Read

Add HeaderAppend To LogBinary WriteClearEndFlushRedirectWrite

EventosApplication_On StartApplication_On End

Session_On StartSession_On End

- - -

Propiedades -

Code PageLCIDSession IDTime Out

- Total Byte

BufferCache ControlCharsetContent TypeExpiresExpires AsoluteIs Client ConectedPICSStatus

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

Page 12: PROGRAMACION ASP y WML

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:

o Application_OnStart: Se ejecuta antes de que se cree nueva sesión por parte del primer cliente que se conecta al servidor.

o Application_OnEnd: Se ejecuta justo cuando la aplicación termina.

o 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

o 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] = valorRequest.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.

Page 13: PROGRAMACION ASP y WML

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:

Page 14: PROGRAMACION ASP y WML

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:

o 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.

o MTS crea un contexto de objeto que asocia al objeto de manera que el cliente puede hacer uso de él

o 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:

o Application Components

Page 15: PROGRAMACION ASP y WML

o MTS Executive

o Server Processes

o Resource Managers

o Resource Dispensers

o Microsoft Distributed Transaction Coordinator

o 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

Page 16: PROGRAMACION ASP y WML

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

Page 17: PROGRAMACION ASP y WML

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 %>

Page 18: PROGRAMACION ASP y WML

<!-- 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:

Page 19: PROGRAMACION ASP y WML

º 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.