SlideShare ist ein Scribd-Unternehmen logo
1 von 19
Downloaden Sie, um offline zu lesen
Publicado en el WMLClub en Octubre de 2000
PROGRAMACION ASP y WML
Por Santiago Márquez Solís
     1.- INTRODUCCIÓN A LA PROGRAMACIÓN EN 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



                                                                                                    1
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



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




                                                                                               3
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


                                                                                               4
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.- CONFIGURACION DE LOS MIME TYPES EN INTERNET INFORMATION SERVER

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.




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




                                                                                              6
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 (" ").


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




                                                                                               8
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




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


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

       o   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 tenéis 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
                                                              Cookies
                                      Contents
              Contents                             Script     Form
colecciones                           Static                                Cookies
              Satic Objects                        Timeout    Query
                                      Objects
                                                              String
                                                              Server
                                                              variables

                                                                            Add Header
                                                                            Append To Log
                                                   Create
                                                                            Binary Write
                                                   Object
              Lock                                          Binary          Clear
Métodos                               Abandon      Map path
              unlock                                        Read            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




                                                                                                11
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 3. 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 :



                                                                                             12
<% 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 7. Cookies enviadas




                                                                                         13
Figura 8. 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 9. 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

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


                     Application Components
                     MTS Executive
                     Server Processes
                     Resource Managers
                     Resource Dispensers
                     Microsoft Distributed Transaction Coordinator
                     MTS Explorer

            Cuadro 4. 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 implementados 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:




                                                                                                15
Figura 10. Microsoft Transaction Server Wizard

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)




                     Figura 11. Microsoft Transaction Server Wizard

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



                                                                                            16
clic en el botón de Action y seleccionamos New/Component con lo que obtenemos la siguiente
pantalla:




                     Figura 12. Microsoft Transaction Server Wizard


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


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




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




                                                                                         19

Weitere ähnliche Inhalte

Was ist angesagt?

Introducción exchange 2010
Introducción exchange 2010Introducción exchange 2010
Introducción exchange 2010
Cation1510
 
Asp.net conceptos
Asp.net conceptosAsp.net conceptos
Asp.net conceptos
XstremsX
 

Was ist angesagt? (12)

Desarrollando Una Mejor Experiencia De Usuario Con Ajax
Desarrollando Una Mejor Experiencia De Usuario Con AjaxDesarrollando Una Mejor Experiencia De Usuario Con Ajax
Desarrollando Una Mejor Experiencia De Usuario Con Ajax
 
Php mysql iis
Php mysql iisPhp mysql iis
Php mysql iis
 
JBoss AS Monitorización - Curso JBoss JB366 Día 4
JBoss AS Monitorización - Curso JBoss JB366 Día 4 JBoss AS Monitorización - Curso JBoss JB366 Día 4
JBoss AS Monitorización - Curso JBoss JB366 Día 4
 
servidores web
servidores webservidores web
servidores web
 
ASP.NET
ASP.NETASP.NET
ASP.NET
 
20001215 Programación de Servlets y WML
20001215   Programación de Servlets y WML20001215   Programación de Servlets y WML
20001215 Programación de Servlets y WML
 
Introducción exchange 2010
Introducción exchange 2010Introducción exchange 2010
Introducción exchange 2010
 
Asp.net conceptos
Asp.net conceptosAsp.net conceptos
Asp.net conceptos
 
JBoss AS web services - Curso JBoss JB366 Día 4
JBoss AS web services - Curso JBoss JB366 Día 4 JBoss AS web services - Curso JBoss JB366 Día 4
JBoss AS web services - Curso JBoss JB366 Día 4
 
JBoss AS Installation -JBoss as jeap - Curso JBoss JB366 Día 2
JBoss AS Installation -JBoss as jeap - Curso JBoss JB366 Día 2 JBoss AS Installation -JBoss as jeap - Curso JBoss JB366 Día 2
JBoss AS Installation -JBoss as jeap - Curso JBoss JB366 Día 2
 
Manual De Php
Manual De PhpManual De Php
Manual De Php
 
Servidores web
Servidores webServidores web
Servidores web
 

Ähnlich wie 20001020 Programación ASP y WML

6 propiedades de un sitio web
6 propiedades de un sitio web6 propiedades de un sitio web
6 propiedades de un sitio web
UVM
 
Institcion educatica colegio guatiquia CRACION Y EDICION DE PAG. WEBS
Institcion educatica colegio guatiquia CRACION Y EDICION DE PAG. WEBSInstitcion educatica colegio guatiquia CRACION Y EDICION DE PAG. WEBS
Institcion educatica colegio guatiquia CRACION Y EDICION DE PAG. WEBS
Johan Barbosa Herrera
 

Ähnlich wie 20001020 Programación ASP y WML (20)

Revista servidores web
Revista servidores webRevista servidores web
Revista servidores web
 
Análisis y planteamiento del problema
Análisis y planteamiento del problemaAnálisis y planteamiento del problema
Análisis y planteamiento del problema
 
Asp.net
Asp.netAsp.net
Asp.net
 
ASP.NET Guia de desarrollo de sitios y aplicaciones web dinamicas
ASP.NET Guia de desarrollo de sitios y aplicaciones web dinamicasASP.NET Guia de desarrollo de sitios y aplicaciones web dinamicas
ASP.NET Guia de desarrollo de sitios y aplicaciones web dinamicas
 
Servidorweb
ServidorwebServidorweb
Servidorweb
 
2 web-forms
2 web-forms2 web-forms
2 web-forms
 
2 web-forms
2 web-forms2 web-forms
2 web-forms
 
6 propiedades de un sitio web
6 propiedades de un sitio web6 propiedades de un sitio web
6 propiedades de un sitio web
 
Servidor web
Servidor webServidor web
Servidor web
 
Programación asp2
Programación asp2Programación asp2
Programación asp2
 
Appserv
AppservAppserv
Appserv
 
Megías.pdf
Megías.pdfMegías.pdf
Megías.pdf
 
Introducción a el lenguaje de programación combinado ASP.NET
Introducción a el lenguaje de programación combinado ASP.NETIntroducción a el lenguaje de programación combinado ASP.NET
Introducción a el lenguaje de programación combinado ASP.NET
 
Servidores
ServidoresServidores
Servidores
 
Servidorweb
ServidorwebServidorweb
Servidorweb
 
Institcion educatica colegio guatiquia CRACION Y EDICION DE PAG. WEBS
Institcion educatica colegio guatiquia CRACION Y EDICION DE PAG. WEBSInstitcion educatica colegio guatiquia CRACION Y EDICION DE PAG. WEBS
Institcion educatica colegio guatiquia CRACION Y EDICION DE PAG. WEBS
 
Institcion educatica colegio guatiquia
Institcion educatica colegio guatiquiaInstitcion educatica colegio guatiquia
Institcion educatica colegio guatiquia
 
IIS
IISIIS
IIS
 
Presentacion sobre asp
Presentacion sobre aspPresentacion sobre asp
Presentacion sobre asp
 
Oracle Web Util
Oracle Web UtilOracle Web Util
Oracle Web Util
 

Mehr von Santiago Márquez Solís

Administración básica de ubuntu server parte 2
Administración básica de ubuntu server   parte 2Administración básica de ubuntu server   parte 2
Administración básica de ubuntu server parte 2
Santiago Márquez Solís
 

Mehr von Santiago Márquez Solís (14)

Bitcoin. In Crypto we Trust
Bitcoin. In Crypto we TrustBitcoin. In Crypto we Trust
Bitcoin. In Crypto we Trust
 
Administración básica de ubuntu server parte 1
Administración básica de ubuntu server   parte 1Administración básica de ubuntu server   parte 1
Administración básica de ubuntu server parte 1
 
Administración básica de ubuntu server parte 3
Administración básica de ubuntu server   parte 3Administración básica de ubuntu server   parte 3
Administración básica de ubuntu server parte 3
 
Administración básica de ubuntu server parte 2
Administración básica de ubuntu server   parte 2Administración básica de ubuntu server   parte 2
Administración básica de ubuntu server parte 2
 
Tecnologia Moviles para Pymes
Tecnologia Moviles para PymesTecnologia Moviles para Pymes
Tecnologia Moviles para Pymes
 
Fundamentos del Desarrollo de Aplicaciones para Android
Fundamentos del Desarrollo de Aplicaciones para AndroidFundamentos del Desarrollo de Aplicaciones para Android
Fundamentos del Desarrollo de Aplicaciones para Android
 
Spring Security
Spring SecuritySpring Security
Spring Security
 
20000801 Ericsson WAPIde
20000801   Ericsson WAPIde20000801   Ericsson WAPIde
20000801 Ericsson WAPIde
 
20000828 Motorola Mobile ADK
20000828   Motorola Mobile ADK20000828   Motorola Mobile ADK
20000828 Motorola Mobile ADK
 
20010315 WAP Lite Gateway
20010315   WAP Lite Gateway20010315   WAP Lite Gateway
20010315 WAP Lite Gateway
 
20000725 UMTS y GPRS
20000725   UMTS y GPRS20000725   UMTS y GPRS
20000725 UMTS y GPRS
 
20001231 Ericsson Gateway
20001231   Ericsson Gateway20001231   Ericsson Gateway
20001231 Ericsson Gateway
 
20001130 Fundamentos de las Redes GSM
20001130 Fundamentos de las Redes GSM20001130 Fundamentos de las Redes GSM
20001130 Fundamentos de las Redes GSM
 
20001121 Introducción a VoxML
20001121 Introducción a VoxML20001121 Introducción a VoxML
20001121 Introducción a VoxML
 

Kürzlich hochgeladen

Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
AnnimoUno1
 

Kürzlich hochgeladen (11)

EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
 
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfRefrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.
 

20001020 Programación ASP y WML

  • 1. Publicado en el WMLClub en Octubre de 2000 PROGRAMACION ASP y WML Por Santiago Márquez Solís 1.- INTRODUCCIÓN A LA PROGRAMACIÓN EN 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 1
  • 2. 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 2
  • 3. 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. 3
  • 4. 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 4
  • 5. 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.- CONFIGURACION DE LOS MIME TYPES EN INTERNET INFORMATION SERVER 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. 5
  • 6. 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> 6
  • 7. 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 (" "). 7
  • 8. 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: 8
  • 9. 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 9
  • 10. 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. o 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: 10
  • 11. <% 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: o 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 o 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 tenéis 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 Cookies Contents Contents Script Form colecciones Static Cookies Satic Objects Timeout Query Objects String Server variables Add Header Append To Log Create Binary Write Object Lock Binary Clear Métodos Abandon Map path unlock Read 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 11
  • 12. 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 3. 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 : 12
  • 13. <% 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 7. Cookies enviadas 13
  • 14. Figura 8. 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 9. 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 14
  • 15. 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: Application Components MTS Executive Server Processes Resource Managers Resource Dispensers Microsoft Distributed Transaction Coordinator MTS Explorer Cuadro 4. 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 implementados 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: 15
  • 16. Figura 10. Microsoft Transaction Server Wizard 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) Figura 11. Microsoft Transaction Server Wizard 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 16
  • 17. clic en el botón de Action y seleccionamos New/Component con lo que obtenemos la siguiente pantalla: Figura 12. Microsoft Transaction Server Wizard 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: WinntSystem32Intsrv, 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 17
  • 18. 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: 18
  • 19. º 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 19