Sei sulla pagina 1di 18

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.

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:

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

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:

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

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

Client
Certificate
Contents Cookies
Contents Script
colecciones Static Form Cookies
Satic Objects Timeout
Objects Query String
Server
variables

Add Header
Append To Log
Create
Binary Write
Object
Lock Clear
Métodos Abandon Map path Binary Read
unlock End
URL
Flush
Encode
Redirect
Write

Session_On
Application_On Start Start
Eventos - - -
Application_On End Session_On
End
Buffer
Cache Control
Charset
Code Page Content Type
LCID Expires
Propiedades - - Total Byte
Session ID Expires Asolute
Time Out 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:

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] = 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:

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

Potrebbero piacerti anche