Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Introducción
La filosofía de ASP resulta muy sencilla, en pocas palabras se puede definir de la siguiente
forma: las páginas ASP, también llamadas páginas activas, son páginas que contienen código
HTML, script de cliente y un script que se ejecuta en el servidor, dando como resultado código
HTML. Por lo tanto al cargar una página ASP en nuestro navegador, en realidad no estamos
cargando la página ASP como tal, sino el resultado de la ejecución de la página ASP, es decir
la salida de la página ASP, y como se ha apuntado anteriormente se trata de código HTML. Es
decir, son páginas que se ejecutan en el servidor enviando como resultado al cliente código
HTML.
Antes de seguir vamos a definir de forma sencilla lo que se considera un lenguaje de script o
de secuencia de comandos. Un lenguaje de script es un subconjunto de otro lenguaje más
general y que se utiliza para un entorno muy determinado, en este caso el entorno es la Web.
Una página ASP podrá contener los siguientes elementos: texto, componentes ActiveX, código
HTML y comandos de script. Este script puede ser de dos tipos: script de cliente o script de
servidor. El script de servidor es la nueva idea que introduce ASP, se debe tener en cuenta que
en el script de servidor se tiene acceso a diferentes objetos y no está orientado a eventos.
El script de servidor utilizado en ASP utiliza la misma sintaxis que el script de cliente, la
diferencia está en que con ASP el script de servidor es compilado y procesado por el servidor
Web antes de que la página sea enviada al navegador.
ASP no es un lenguaje de script, ASP ofrece un entorno para procesar scripts que se
incorporan dentro de páginas HTML, es decir, un entorno de procesamiento de scripts de
servidor.
Realmente, ASP es un componente (asp.dll) que se instala en un servidor Web y cuya misión
es la de procesar ficheros que terminan con la extensión .asp y transmitir el resultado al cliente
que solicitó la página ASP.
El script de servidor incluido en una página ASP empieza a ejecutarse cuando un navegador
solicita el archivo .asp al servidor Web. El servidor Web llama entonces a ASP, el cual lee el
archivo solicitado de arriba a abajo, ejecuta los comandos y envía una página HTML al
explorador. ASP incluye un motor de interpretación de scripts del lado del servidor.
Las páginas ASP son ficheros con la extensión asp. Crear un fichero .asp resulta muy sencillo,
se puede crear a partir de una página HTML existente, simplemente renombrando el fichero
.html o .htm a un fichero .asp. Para hacer esta página ASP disponible para los usuarios de la
Web, el fichero .asp se debe almacenar en un directorio de publicación en Internet, se debe
tener en cuenta que el directorio virtual asociado debe tener permisos de ejecución de
secuencias de comandos.
Aportaciones de ASP
En este apartado se comentan las aportaciones que ofrece ASP desde su primera versión, es
decir, se trata de aportaciones muy genéricas de la tecnología ASP.
1
Para entender las aportaciones que ofrecen las páginas ASP se deben tener en cuenta una
serie de características del protocolo HTTP (HyperText Transfer Protocol). Se dice que le
protocolo HTTP es un protocolo sin estado, es decir, no se puede mantener un estado entre
diferentes peticiones. El protocolo HTTP se basa en el paradigma cliente/servidor o
petición/respuesta.
• Después de realizar una petición el cliente se desconecta del servidor y espera una
respuesta. El servidor debe restablecer la conexión después de que haya
procesado la petición.
El cliente y el servidor Web se comunican utilizando cabeceras HTTP, estas cabeceras son
colecciones de datos que intercambian el cliente y el servidor para asegurar que la transacción
es coherente y completa. Como petición del usuario se envía una cabecera y el servidor
interpreta esta cabecera y envía una respuesta HTTP cuyo cuerpo sería el contenido del
recurso demandado por el cliente.
Dentro de los objetos integrados de ASP podemos encontrar la forma de acceder al servidor,
obtener información del mismo, así como del usuario. Y también se permite, como se había
comentado anteriormente, mantener el estado entre diferentes peticiones del cliente.
Se puede considerar ASP como una nueva (aunque ya no tan nueva) aproximación a la
creación de páginas web complejas que pueden acceder a bases de datos o a otros objetos del
servidor. Ofrece lo siguiente:
2
Creación de una página ASP
La creación de páginas ASP se puede llevar a cabo con cualquier editor de textos (p.e. bloc de
notas de Windows). Una vez que se crea el archivo ASP lo único que debemos hacer es
colocarlo en un directorio virtual (el raíz también se considera virtual) de nuestro servidor web
Internet Information Services.
<HTML>
<HEAD>
<TITLE>Primer contacto con ASP</TITLE>
</HEAD>
<BODY>
<FONT FACE="Verdana,Arial" SIZE=2>
<%
Response.Write("Son las " & Time & " del día " & Date)
%>
</FONT>
</BODY>
</HTML>
Comandos script
Los comandos script de una página ASP deben escribirse entre medias de dos etiquetas que
permiten indicar al servidor web que se trata de un comando script que hay que ejecutar antes
de devolver el valor de la página al navegador web.
Los comandos añadidos pueden ser una o más líneas, pudiendo escribirse en una misma
página ASP tantos comandos como sea necesarios en bloques diferentes delimitados por los
signos de entrada <% y de salida %>.
Toda página ASP debe tener la extensión .asp. En caso contrario, IIS no detectará que se trata
de una página ASP y se encargará de pasar la página web tal cual al navegador, sin ejecutar
ningún script ni secuencia.
Si deseamos escribir páginas ASP y realizar algún comentario que sirva de soporte o ayuda a
otro programador que pueda utilizar la página ASP que un día nosotros programamos, ya sea
para mejorarla o modificar algún aspecto, debemos hacer uso de la palabra reservado REM o
del apóstrofe ‘. Estos dos comandos, se utilizan para comentar una línea de código
determinada y evitar así que sea ejecutada por el servidor web.
3
Veamos otro ejemplo de ASP más complejo que el anterior (ejemplo2.asp). En este ejemplo,
trataremos de mostrar el uso de la directiva de especificación del lenguaje, los comentarios y
anticipamos algunos comandos que veremos posteriormente.
<HTML>
<HEAD>
<TITLE>Ejemplo 2 ASP</TITLE>
</HEAD>
<BODY>
<%@ LANGUAGE="VBScript" %>
<%
Rem Producto de 5 x 4 x 3 x 2 x 1
'Variable auxiliar
IntCant=1
for I = 1 to 5
' Almacenamos la cantidad en una variable auxiliar
intCant = intCant * I
next
%>
'No es un comentario, no está entre las etiquetas de ejecución
Una forma de realizar un poco de programación estructurada a la hora de programar con ASP
es realizar la declaración del lenguaje y de las variables justo al inicio de la página ASP y antes
de comenzar a escribir el contenido de la página web, como se muestra en el siguiente ejemplo
(ejemplo3.asp):
<HTML>
<HEAD>
<TITLE>Ejemplo 3 ASP</TITLE>
</HEAD>
<BODY>
<%
Response.Write("Esto es un <B>" & A & "</B> en ASP" & "<BR>")
%>
</BODY>
</HTML>
4
<%@ LANGUAGE="VBScript" %>
<%
A="ejemplo"
Response.Write("<HTML>")
Response.Write("<HEAD>")
Response.Write("<TITLE>Ejemplo 4 ASP</TITLE>")
Response.Write("</HEAD>")
Response.Write("<BODY>")
Response.Write("Esto es un <B>" & A & "</B> en ASP" & "<BR>")
Response.Write("</BODY>")
Response.Write("</HTML>")
%>
Directivas ASP
Existen diferentes directivas a declarar dentro de una página ASP. Ya hemos visto algunas de
estas directivas, si bien es necesario diferenciarlas e indicar claramente sus cometidos. De esta
manera, tenemos las siguientes directivas:
Esta forma de representar la directiva le indica a ASP la información que necesita para
procesar una página ASP. Las palabras clave que podemos distinguir en este caso son las
siguientes:
Esta directiva se utiliza para indicar o asignar el valor de una variable, o para obtener el valor
que almacena esta variable (es lo mismo que Response.Write variable). Un ejemplo de esta
directiva es:
5
y pasa estos valores a una segunda página que es la encargada de resolver los datos pasados
por la primera y comprobar si se cumplen las condiciones establecidas en el código.
(ejemplo5a.asp)
<%
'ejemplo5a.asp
RANDOMIZE
Dim Valor
Valor = (Rnd * 100) + 1
Session("Valor") = Valor
Response.Redirect "ejemplo5b.asp"
%>
Lo primero que hace este script es llamar al generador de números aleatorios y generar un
número entre 1 y 100, asignárselo a una variable de sesión (lo veremos más adelante, pero
comentar que se tratan de variables que son comunes a una sesión de un cliente) y llamar a la
otra página ASP.
(ejemplo5b.asp)
6
El lenguaje VBScript
Introducción
Para desarrollar aplicaciones ASP se debe utilizar un lenguaje de script como puede ser
VBScript, JavaScript/Jscript, Perl, etc; no debemos olvidar que ASP sólo nos ofrece un entorno
para que se ejecute el script de servidor, ASP por si sólo no es un lenguaje de script.
Los lenguajes de script que se pueden utilizar directamente y que son interpretados por ASP
sin necesidad de ningún intérprete adicional son VBScript y JScript, si se quiere utilizar otro
lenguaje se deberá instalar el intérprete correspondiente.
Debido a que el lenguaje por defecto de las páginas activas es VBScript, ha sido este lenguaje
de script el elegido para este tema, y durante todo el presente curso se utilizará VBScript.
VBScript (Visual Basic Script) es un subconjunto de lo que se denomina VBA (Visual Basic for
Application) que, a su vez es un subconjunto del lenguaje Visual Basic. VBScript
fundamentalmente se emplea para integrarse dentro de páginas HTML para ampliar las
características de un sitio Web.
Declaración de variables
Sólo existe un tipo de datos, el tipo Variant. Este tipo de datos puede contener diferentes
subtipos. El subtipo dependerá del contexto en el que se esté utilizando el tipo Variant.
Una variable es un puntero que hace referencia a una posición de memoria a la que se le
puede asignar un valor o recuperar un valor, a dicha variable se le puede asignar el tipo que
queramos, haciendo uso del operador =.
VBScript no requiere que se declaren las variables, aunque (como somos buenos
programadores) resulta muy útil que sean declaradas al principio de la página ASP para
mejorar la depuración o modificaciones que se puedan realizar en un futuro. Si utilizamos la
declaración <% Option Explicit %> antes de cualquier otro comando ASP o etiqueta
7
HTML, estaremos obligándonos a declarar todas las variables que utilicemos dentro del
documento. (OBLIGATORIO hacerlo para TCI)
Existen varias restricciones sobre el nombre de las variables, deben comenzar con un carácter
alfabético (incluido _ ), no pueden contener un punto y no deben superar los 255 caracteres.
Tal y como comentamos anteriormente se puede asignar cualquier valor a una variable escalar:
Para declarar una variable como un array (vector) se debe indicar entre paréntesis el número
de elementos que va a contener. Así, si queremos declarar un array de 11 elementos,
escribiremos lo siguiente:
Dim vector(10)
Todos los arrays en VBScript son de base cero, es decir, el primer elemento es el cero, por lo
que si escribimos 10 en realidad se está indicando que va a tener el array 11 elementos. Para
asignar un valor a una entrada de un vector:
vector(0) = 10
vector(1) = 20
vector(2) = 30
segundo = vector(2)
undecimo = vector(10)
Si queremos declarar una array de dos dimensiones separaremos por comas el número de filas
y el de columnas que tendrá la matriz. Se pueden declarar arrays de hasta 60 dimensiones,
aunque normalmente lo máximo son 3 o 4 dimensiones. Así por ejemplo, si queremos declarar
una matriz bidimensional con 6 filas y 11 columnas:
Dim matriz(5,10)
Esta forma de declarar vectores y matrices es estática, es decir, si decimos que va a tener 11
elementos, no podemos asignarle 21, cosa que si podríamos hacer si usamos la declaración
ReDim. La declaración inicial de la matriz no debe incluir el número de elementos:
Dim vectordinamico()
Para utilizar el array dinámico debemos redimensionarlo, usamos ReDim (tened en cuenta que
se pierden todos los elementos que hubiesen almacenados):
ReDim vectordinamico(10)
Si no nos interesa que se pierdan lo elementos que tenemos almacenados podemos usar
Preserve, es decir:
8
Aunque este apartado está dedicado a las variables en general, al hablar de los array vamos a
comentar de forma breve alguna de las sentencias y funciones que ofrece VBScript para
manipular y utilizar variables de tipo array:
Constantes
Son variables que permanecen inalterables, se usa CONST para definirlas:
La variable es creada y destruida cada vez que el proceso es ejecutado y finaliza su ejecución,
respectivamente. Por esa razón, no puede ser accedida desde ningún proceso externo
(veremos procedimientos que lo permiten).
Una variable declarada fuera de un proceso o procedimiento, tiene un alcance global, siendo
accesible y modificable desde cualquier comando script de la página ASP.
Para entender el ámbito o alcance de las variables, haremos caso a los siguientes ejemplos:
(ejemplo6.asp)
<%@ LANGUAGE=”VBScript” %>
<%
intCant = 8
Call Resta
Response.Write intCant
Sub Resta
IntCant = intCant - 4
End Sub
%>
9
• Si declaramos intCant = 8 al principio lo estamos haciendo como global, por lo que
al utilizar el mismo nombre de variable dentro del procedimiento Resta estamos
actuando directamente sobre dicha variable, por lo que el valor devuelto es 4.
Sub Resta
Dim intCant
IntCant = intCant - 4
'intCant valdría -4 porque se inicializa a 0 por defecto
End Sub
%>
En este ejemplo declaramos intCant como global de nuevo (no podemos inicializarlo en la
declaración, porque el lenguaje no lo permite) , con la salvedad de que dentro del
procedimiento también lo estamos declarando, por lo que se crea una nueva variable con el
mismo nombre y ahora al terminar el procedimiento se elimina la variable de dicho
procedimiento y el valor anterior sigue siendo 8.
ASP permite dos objetos en los cuales, se pueden almacenar los valores de las variables.
Estos objetos son el objeto sesión (Session) y el objeto aplicación (Application).
Variables de sesión
Permiten 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 se pueden 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.
10
Variables de aplicación
Se utiliza para compartir información entre todos los usuarios de una aplicación. Entendiendo
por una aplicación ASP todos los archivos .asp de un directorio virtual y sus subdirectorios.
Operadores en VBScript
Operadores aritméticos
Operadores de comparación
Estos operadores se utilizan para comparar dos expresiones, devolviendo un valor lógico que
evalúa si la comparación es verdadera o falsa.
Operadores lógicos
Estos operadores permiten comprobar a la vez varios resultados lógicos:
11
Estructuras de control
Como en cualquier lenguaje tenemos estructuras condicionales y bucles.
Condicionales
IF SELECT CASE
Bucles
WHILE UNTIL
Para romper un bucle debemos indicar la palabra reservada EXIT seguida del tipo de bucle
(EXIT DO, EXIT FOR).
Literales
VBScript presenta los literales que se comentan a continuación.
Subprogramas
Existen dos tipos de subprogramas en VBScript, las subrutinas (o procedimientos) y las
funciones. La diferencia entre ambos, al igual que en lenguajes como C, es que las subrutinas
no devuelven valores, mientras que las funciones sí.
Subrutinas
12
Existen dos formas de llamar a una subrutina:
Funciones
Function NombreFuncion(argumentos)
sentencias
End Function
resultado = NombreFuncion(argumentos)
Para abandonar un subprograma se emplea EXIT FUNCTION o EXIT SUB según sea el caso.
Dim intcant
intcant = 4
suma(4)
%>
Directivas de preprocesamiento
Dentro de las páginas ASP se pueden realizar inclusiones de archivos del servidor (al igual que
en C++ con los #include), es decir, se puede insertar información en una página ASP antes de
su procesamiento, de hay el nombre del presente apartado. Para ello se utiliza la directiva de
preprocesamiento #INCLUDE que tiene la siguiente sintaxis:
<!--#INCLUDE FILE="nombrearchivo"-->
Los archivos incluidos no requieren una extensión especial. Un archivo incluido puede, a su
vez, incluir otros archivos. Un archivo no puede incluirse así mismo.
ASP incluye los archivos antes de ejecutar cualquier script, ya que, como se ha dicho
anteriormente, es una directiva de preprocesamiento. De esta forma el siguiente código
generará un error ya que la variable nombreFichero no tendrá ningún valor.
<% nombreFichero="/miWeb/incluido.asp"%>
<!--INCLUDE FILE="<%=nombreFichero%>"-->
Clases y objetos
La principal diferencia entre las clases y objetos de VBScript y Visual Basic es que no nos es
posible declarar y por tanto, usar eventos para las clases. Para crear una clase la sintaxis es:
Class nombre
sentencias
End Class
13
Dónde nombre es el nombre de la clase y sentencias son todas las declaraciones de atributos de
la clase y la implementación de los métodos de la misma.
Private|Public nombreVariable
Los métodos de una clase pueden ser tanto procedimientos (Sub) como funciones (Function) y
que se pueden definir como privados o públicos, al igual que ocurría con las variables de la
clase. Si no se indica Private o Public el método será tomado como privado, sin embargo en las
variables de la clase si es necesario indicar Private o Public.
Un método si es público (Public) también puede ser el método por defecto (Default). Un método
por defecto es aquel que se lanza sobre el objeto sin necesidad de especificarlo, sólo se puede
especificar un método por defecto, si se intenta indicar más de uno se producirá un error. La
sintaxis general para declarar un método es la siguiente.
Si es un procedimiento:
Si es una función:
(classej9.asp)
<%
Class Sencilla
Private numero
Public Function devuelveNumero()
devuelveNumero=numero
End Function
Public default Sub incrementa(inc)
numero=numero+inc
End Sub
Public Sub decrementa(dec)
numero=numero-dec
End Sub
End Class
%>
14
(ejemplo9.asp)
Para destruir un objeto y de esa forma liberar la memoria que utiliza debemos asignarle el
literal Nothing. La sintaxis general para destruir objetos es:
Hemos comentado que una diferencia que tiene VBScript con Visual Basic en cuanto a la
implementación de clases se refiere es que en VBScript no se permite declarar eventos para
las clases, pero existe una excepción.
Hay dos eventos especiales que están asociados a la clase y se trata de los eventos
Initialize y Terminate. El evento Initialize se lanza cuando se crea una instancia de
una clase, es decir, cuando se crea un objeto. El evento Terminate se lanza cuando se
destruye un objeto de la clase. La sintaxis de los eventos Inicialize y Terminate es la que se
muestra a continuación:
El método Initialize se puede utilizar para tareas de inicialización, como puede ser inicializar los
atributos de una clase con unos valores determinados. El método Terminate se puede utilizar
para realizar funciones de "limpieza" cuando se destruye un objeto de una clase.
15
Funciones para consultar variables
Funciones que devuelven un valor booleano tras consultar el tipo y contenido de la de variable
que se pasa como parámetro. Por ejemplo IsDate() devolverá verdadero si la variable que se
pasa como parámetro es una fecha.
IsEmpty, IsDate, IsNumeric, IsObject, IsNull
Todas estas funciones reciben como parámetro una cadena de caracteres y realizan alguna
operación con ella devolviendo el resultado correspondiente.
Funciones matemáticas
16
Funciones de fecha/hora
• Day: devuelve el día del mes de la fecha que se pasa por parámetro.
• MonthName: devuelve el nombre del mes de la fecha que se pasa por parámetro.
17
El modelo de objetos de ASP
ASP nos proporciona una serie de objetos integrados, a los que siempre tenemos acceso sin
necesidad de instanciarlos, son objetos que constituyen lo que se denomina el modelo de
objetos de ASP. Estos objetos son bastante interesantes ya que gran parte de la programación
de aplicaciones ASP se basa en la utilización de los mismos.
Estos objetos ponen a disposición del programador una serie de métodos y propiedades que
pueden ser utilizados desde el script de servidor, es decir, son directamente accesibles y
manipulables desde VBScript. Cada uno de estos objetos cubre unas funciones determinadas.
Antes de comenzar a explicar cada unos de los objetos integrados se considera necesario
repasar el concepto de objeto, método y propiedad dentro del entorno de la programación
orientada a objetos y desde el punto de vista que nos interesa, es decir desde las páginas
activas de servidor.
Un objeto es un componente que posee una serie de comportamientos y que tiene un estado.
El estado de un objeto se encuentra definido por sus propiedades y sus comportamientos a
través de los métodos. Un objeto puede contener otros objetos.
Cada objeto tiene unas propiedades que definen sus atributos. Las propiedades de un objeto
nos indican algo sobre el objeto o sus contenidos. Las propiedades diferencian un objeto de
otro y determinan su estado y características. Los métodos que poseen los objetos definen su
comportamiento interno y frente a otros objetos.
Por ejemplo, ASP ofrece el objeto Request que contiene diferentes propiedades y colecciones
de distinto tipo. Una de estas colecciones es la colección Form, esta colección contiene
información sobre los elementos del formulario que se ha enviado. Aquí se puede observar la
diferencia entre objetos y colecciones en ASP, un objeto puede siempre contener otro nivel de
información variada pero las colecciones no.
La mayoría de los objetos integrados de ASP proporcionan colecciones. Una colección es una
estructura de datos, similar a una matriz, que almacena cadenas, números, objetos y otros
valores. A diferencia de las matrices, las colecciones se amplían y reducen automáticamente al
recuperar o almacenar elementos. La posición de un elemento también cambia al modificar la
colección. Es posible tener acceso a un elemento de una colección por su clave de cadena
única, por su índice (posición) en la colección o si se iteran todos los elementos de la colección.
Todas las colecciones ofrecen una serie de métodos comunes a todas ellas y son los
siguientes:
• Item: devuelve el elemento que se corresponde con el índice o cadena clave que
se pasa por parámetro.
• RemoveAll: elimina todos los elementos presentes en una colección. Al igual que el
método anterior requiere que la colección sea de escritura.
18
Las colecciones comienzan en el índice 1, a diferencia de los arrays, que empiezan en el índice
cero.
Antes de poder utilizar un objeto se debe instanciar, es decir, crear el objeto y asignárselo a
una variable que va a representar una instancia de ese objeto, en realidad, hasta que no se
instancia un objeto, el objeto no existe. Pero en el caso de los objetos integrados no hay que
instanciarlos, se puede considerar que son creados al iniciar la ejecución la aplicación ASP.
Los objetos que pertenecen al modelo de objetos de ASP 3.0 son siete, cinco de los cuáles,
vamos a ver:
• Response: mediante este objeto podremos enviar datos al cliente que recibirá en
HTML y controlar la salida que el usuario va a recibir en su navegador Web. En el
tema anterior ya hemos utilizado este objeto para escribir diferentes resultados en
la página ASP.
• Request: este objeto lo vamos a utilizar para recuperar información del usuario. El
objeto Request se utiliza sobre todo para recuperar información de formularios y de
las cadenas de consulta (QueryString) del cliente (el navegador Web), toda esta
información se guarda dentro de las colecciones del objeto Request, que veremos
detenidamente en su momento. Podemos decir que el objeto Response y Request
son complementarios, ya que el primero lo utilizamos para enviar información al
navegador y el segundo para obtener información del mismo.
• Server: mediante este objeto podemos acceder a los recursos del servidor Web,
permite crear objetos registrados en el servidor y que pueden ser de diverso tipo,
desde objetos pertenecientes a componentes de servidor que se ofrecen con ASP
hasta componentes desarrollados por nosotros mismos o terceras partes. Este
objeto es de difícil clasificación y muchas veces se define como un objeto de
utilidades.
Objeto Response
El Objeto response se usa para enviar resultados al navegador cliente o establecer valores de
Cookies de usuario.
Colecciones
Este objeto contiene una única colección llamada Cookies, que permite crear y asignar valores
a una cookie. Una cookie, físicamente, es un fichero que se escribe en la máquina local del
cliente que se conecta a un sitio Web y que contiene información relativa a la conexión.
Existen varios usos prácticos de las cookies, a continuación se van a comentar los más
destacados:
• Para almacenar información acerca de las preferencias del cliente que se conecta
a nuestro sitio Web, por ejemplo el color seleccionado de la página, el tipo de letra,
etc.
• Para conservar información personal, no sensible, del usuario, como puede ser el
nombre, el país de origen, código postal, el número de veces que ha accedido a
nuestro sitio Web, etc.
19
Por lo tanto el uso de cookies nos puede permite personalizar las páginas ASP según el cliente
que se haya conectado atendiendo a sus preferencias y datos personales. Por ejemplo
podemos saludar al usuario con su nombre y asignar al color de fondo de la página su color
favorito o también podremos indicarle el número de veces que ha accedido a nuestro sitio Web.
Response.Cookies(NombredelaCookie)=ValordelaCookie
Si la cookie ya existe modifica su valor. La sintaxis general de una cookie es la que se muestra
a continuación:
Response.Cookies(cookie)[(clave).atributo]=valor
Si queremos crear una cookie que tenga claves, por ejemplo que contenga los datos nombre,
apellidos y edad, y que caduque a finales del 2005 se debería escribir:
<%
Response.Cookies("datosPersonales").Expires= #December 31, 2005#
Response.Cookies("datosPersonales")("nombre")="Jose"
Response.Cookies("datosPersonales")("apellidos")="Garcia"
Response.Cookies("datosPersonales")("edad")=24
%>
(ejemplo10.asp)
20
Propiedades
Cuando ASP procesa una página cualquiera, va ejecutando comandos, adjunta código HTML,
lee ficheros de inclusión, etc., y todo eso, hasta que la respuesta está completa lo va
guardando en un buffer. A este proceso se le denomina buffering. Cuando la composición del
fichero de respuesta está completa, o entre los comandos ejecutados encuentra una llamada a
los métodos Flush o End, ASP concluye el proceso de buffering, envía el fichero de respuesta
al cliente y vacía el buffer, quedando a la espera del siguiente proceso.
Esta propiedad permite a los servidores proxy guardar o no en su caché una copia de la
respuesta ASP.
Para evitar que el proxy copie en su cache las respuestas de nuestros ASP, se puede utilizar la
propiedad Response.CacheControl . Hay otras dos propiedades: Response.Expires y
Response.ExpiresAbsolute que controlan las caches, pero éstas lo hacen sobre las del
navegador.
Response.Charset("String")
Esta propiedad añade el nombre de la tabla de caracteres al contenido del objeto Response,
concretamente como parámetro de content-type. El valor por defecto es ISO-LATIN-1
(excepto en entornos Macintosh).
Hay que tener en cuenta que como argumento se puede escribir cualquier cosa, y aunque no
sea válido, ASP no emite ningún mensaje de error, simplemente no surtirá el efecto deseado.
Response.ContentType("String")
Esta propiedad especifica el tipo de contenido del request HTTP, que puede incluir un
tipo/subtipo en la cabecera de la respuesta. El tipo siempre es de contenido general y el
subtipo es específico. El valor por defecto es text/HTML. Tiene que ir antes de que se defina la
cabecera de la página.
Por ejemplo, el siguiente código produce una hoja de cálculo Excel en el navegador, siempre
que Excel esté instalado en la máquina del cliente, claro.
(ejemplo11.asp)
21
Response.Expires
La propiedad Expires indica el número de minutos que deben transcurrir antes de que la copia
de la respuesta en las caches del navegador sea eliminada.
Response.ExpiresAbsolute
Funciona igual que la anterior, pero en lugar de indicar el número de minutos que deben
transcurrir antes de que las caches del navegador expiren, indica la fecha y hora exacta en
que eso ocurrirá.
Con esta propiedad se puede saber si el cliente continua conectado al servidor desde la última
vez que se utilizó la propiedad Response.Write, es decir desde la última vez que nuestra
aplicación ha escrito algo en la pantalla del cliente. Puede ser muy útil si el proceso solicitado
va a ser muy trabajoso para el servidor, por ejemplo una consulta a una DB que devolverá gran
cantidad de datos. Si se verifica que el servidor a perdido la conexión con el cliente, es inútil
hacer todo el trabajo solicitado por éste, ya que no se podrá enviar el resultado, y además el
servidor entrará en una fase de reintentos sucesivos, hasta que el tiempo de cierre de sesión
especificado en su configuración se cumpla. Si eso ocurre con muchos procesos a la vez, el
servidor puede bloquearse.
Response.Status = "Status"
Esta propiedad especifica el valor de la línea de estado HTTP devuelta por el servidor.
Normalmente consiste en la dirección IP del cliente que ha provocado el estado, seguida de
una breve descripción de error. Esto hay que escribirlo antes que cualquier otra línea de la
página.
Si se desea impedir el acceso a la aplicación a una máquina cuyo IP sea, por ejemplo,
125.125.125.125 escribiremos:
Métodos
Este método permite añadir una nueva cabecera a la respuesta HTTP. Una vez que la
cabecera ha sido creada, no es posible borrarla. El nombre dado a la nueva cabecera no puede
contener ningún carácter de subrayado ( _ )
Response.AppendToLog("String")
Mediante este método se puede añadir una cadena al registro que se genera con cada request
en el fichero de logs del IIS.
22
Response.BinaryWrite(Data)
Escribe la salida HTTP en binario (no en modo string como lo hace Response.Write), y sin
aplicar ninguna conversión de página de caracteres.
Response.Clear
Este método se utiliza para borrar cualquier contenido del buffer de salida. No elimina las
cabeceras HTTP, solamente el contenido que va entre los elementos <BODY> y </BODY> Si el
buffer ya está vacío debido a que previamente se ha invocado Response.Buffer=False, se
produce un error de ejecución.
Response.End
Cuando se invoca este método el servidor detiene el proceso de la página ASP actual y envía
al cliente el contenido del buffer de salida, siempre que Response.Buffer=True. El resto de
instrucciones no se procesará.
Response.Flush
Este método provoca el envío inmediato al cliente del contenido del buffer de salida, en lugar
de hacerlo al concluir el proceso completo de la página, y continuando después con el resto de
instrucciones normalmente. Si el buffer está vacío debido a que previamente se ha invocado
Response.Buffer=False, se produce un error de ejecución.
Response.Write
El método Write escribe una cadena de resultado en el navegador cliente (Nota: cuando se usa
la sintaxis <%=variable%> estamos usando implícitamente el método Response.Write).
Response.Redirect
El método Redirect hace que el explorador se conecte con una dirección URL diferente.
Debemos usar este método antes de enviar cualquier resultado al navegador cliente, en caso
contrario produce un error.
Objeto Request
El Objeto Request recupera los valores que el cliente pasa al servidor durante una petición
HTTP.
Propiedades
Request.TotalBytes
Esta propiedad, de solo lectura, indica el número total de bytes enviados por el cliente al
servidor en el cuerpo de la llamada HTTP (CONTENT_LENGHT).
Colecciones
Dependiendo de la forma en que enviemos los datos al servidor tendremos que utilizar una u
otra de las diversas colecciones del objeto Request. Las más típicas son:
23
• SERVERVARIABLES Variables del servidor.
Ejemplos
Request.Form(“clave”)
Request.QueryString(“clave”)
Request.Cookies(“clave”)
Las cookies son ficheros que se instalan en el disco duro del ordenador del cliente y que
permite almacenar información sobre un determinado usuario, como por ejemplo su login y su
password de acceso a un determinado sitio web.
La colección Cookies asigna datos a una cookie existente, y si éste no existe, crea una nueva
donde almacena estos datos. (Más adelante vemos un ejemplo de uso).
Request.ClientCertificate(“clave”)
Esta colección tiene utilidad si estamos escribiendo una aplicación que utiliza el protocolo
Secure Socket Layers (SSL). Este protocolo, que da una mayor seguridad en las transacciones
electrónicas, se invoca con el prefijo https:// en lugar del típico http://, y está basado en el
envío de certificados electrónicos del servidor al cliente para asegurar la identidad del mismo.
24
• Issuer Información sobre el emisor del certificado.
• ValidFrom Fecha desde la que es válido el certificado.
• ValidUntil Fecha de expiración del certificado.
• Flags Hay dos flags :
• CertPresent Indica que el certificado se recibe de un cliente conocido.
• UnrecognizedIssuer Indica que el certificado se recibe de un cliente desconocido.
Request.ServerVariables(“Variable”)
Esta colección contiene el valor de las variables de entorno del servidor. Hay muchas, y
posiblemente no las utilices nunca, por lo que sólo se mencionarán algunas. Los valores del
argumento "Variable" pueden ser, entre otros, los siguientes:
El siguiente ejemplo muestra el contenido de todas y cada una de las variables de entorno.
(ejemplo14.asp)
<HTML>
<HEAD>
<TITLE>Ejemplo 14 ASP</TITLE>
</HEAD>
<BODY>
<TABLE>
<TR>
<TD><FONT FACE=Verdana SIZE=1 COLOR=#336699>
<B>Nombre de las Variables</B>
</FONT></TD>
25
<TD><FONT FACE=Verdana SIZE=1 COLOR=#336699>
<B>Valores Devueltos por el Servidor</B>
</FONT></TD>
</TR>
Métodos
Request.BinaryRead(Count)
Este método recupera los datos que han sido enviados al servidor desde el cliente formando
parte de una petición HTTP POST (por ejemplo, con un formulario).
El argumento Count es obligatorio. Antes de que el método sea ejecutado, Count contiene el
número de bytes que tienen que ser leídos. Después de la ejecución contiene el actual número
de bytes leídos. Se utiliza poco, y su principal uso es cuando se envía (upload) un fichero, para
comprobar que llegó completo.
Objeto Application
Una aplicación ASP se puede definir de manera sencilla como un conjunto de páginas activas
de servidor que tiene una función común y que comparten un lugar de almacenamiento de
variables común.
Una aplicación ASP se define a partir de un directorio o directorio virtual en un sitio Web. Se
debe indicar el punto de inicio de la aplicación ASP, a partir de ese punto de inicio todas las
páginas ASP formarán parte de la aplicación ASP y compartirán un mismo contexto.
El objeto Application se utiliza para compartir información entre todos los usuarios de una
aplicación (entendemos por una aplicación ASP todos los archivos .asp de un directorio virtual
y sus subdirectorios).
Application(“visitas”) = 0
También se pueden almacenar objetos dentro del objeto Application, para ello se debe utilizar
esta otra sintaxis:
Set Application("NombreObjeto")=Server.CreateObject("Componente")
26
Colecciones
Application.Contents( )
Contiene una colección de todos los elementos que han sido creados y añadidos al objeto
Application. Los elementos se pueden añadir a la lista mediante asignación directa de
variables, o bien con el objeto Server y su método CreateObject.
Application.StaticObject( )
Esta es una colección de todos los ítems creados en el objeto Application utilizando un
elemento HTML: <OBJECT> En este caso, la asignación de valores a los ítems no se hace
desde código ASP, sino en HTML y desde el fichero global.asa.
Métodos
Como varios usuarios pueden compartir un objeto Application, existen los métodos Lock y
Unlock para asegurar la integridad del mismo (varios usuarios no puedan modificar una misma
propiedad al mismo tiempo).
Application.Lock
El método Lock asegura que sólo un cliente puede modificar o tener acceso a las variables de
Application al mismo tiempo.
Application.Unlock
El método Unlock 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.
Ejemplo (ejemplo8.asp):
En el ejemplo anterior el método Lock impide que más de un cliente tenga acceso a la variable
Visitas al mismo tiempo. Si la aplicación no se hubiera bloqueado, dos clientes podrían intentar
incrementar simultáneamente el valor de la variable Visitas. El método Unlock libera el objeto
bloqueado de forma que el próximo cliente puede incrementar la variable.
En el objeto Application pueden almacenarse matrices, pero estas son almacenadas como un
objeto, es decir, no podemos almacenar o recuperar un solo elemento de la matriz, si no que
cargaremos o recuperaremos la variable con la matriz completa.
Application.Contents.Remove( )
27
numeración comienza en el 1. Si se referencia por su nombre, éste deberá escribirse entre
comillas dobles (" ").
Application.Contents.RemoveAll( )
Eventos
Application_OnStart Application_OnEnd
Estos eventos se controlan en el fichero global.asa, y debe existir uno por cada aplicación que
se ejecute en el servidor, cada uno en el directorio virtual donde ésta resida. El evento
Application_OnStart ocurre antes de comenzar cualquier sesión de usuario, y cuando se haya
desconectado el último usuario, ocurrirá Application_OnEnd.
Objeto Session
Al igual que ocurría con el objeto Application, el objeto Session nos va a permitir almacenar
información entre diferentes páginas ASP incluidas en una misma aplicación ASP. La diferencia
con el objeto Application se encuentra en el ámbito de las variables, cada variable del objeto
Session es particular a una sesión de un usuario determinado, no a toda la aplicación. De esta
forma, cada usuario tendrá sus variables y sus valores, sin dar lugar a problemas de
concurrencia, tampoco se podrá acceder a distintas variables de sesión, cada usuario tiene su
espacio de almacenamiento.
Las variables de aplicación son valores globales y comunes a toda la aplicación, y las variables
de sesión son particulares para cada usuario de la aplicación.
El objeto Session permite almacenar la información necesaria par una sesión de usuario contra
nuestra aplicación ASP. Las variables que almacenemos en el objeto Session no se pierden al
cambiar de página, si no que se mantienen hasta que el cliente sea eliminado por el servidor.
Las variables de Session de un cliente solo pueden ser accedidas por ese cliente.
El servidor elimina un cliente bien cuando desde una pagina ASP se invoca el método Abandon
o bien cuando este cliente lleva 20 minutos sin actividad en nuestra aplicación.
Ejemplo:
En el objeto Session pueden almacenarse matrices, pero estas son almacenadas como un
objeto, es decir, no podemos almacenar o recuperar un solo elemento de la matriz, si no que
cargaremos o recuperaremos la variable con la matriz completa.
Colecciones
Session.Contents()
Contiene una colección de todos los elementos que han sido creados y añadidos al objeto
Session. Los elementos se pueden añadir a la lista mediante asignación directa de variables, o
bien con el objeto Server y su método CreateObject.
28
Session.StaticObjects()
Esta es una colección de todos los elementos creados en el objeto Session utilizando un
elemento HTML: <OBJECT> En este caso, la asignación de valores a los elementos no se
hace desde código ASP, sino en HTML y desde el fichero global.asa.
Propiedades
Session.CodePage
Esta propiedad especifica al servidor que página de código de caracteres debe utilizar para
mostrar las páginas ASP invocadas desde el cliente. Por defecto, y si no se define otro valor
para esta propiedad, el servidor utilizará la página predeterminada en el sistema. El cambio de
página solamente estará activo el tiempo que dure la sesión. Esta propiedad puede ser muy útil
para convertir textos escritos en una lengua diferente a la que utilizan los clientes.
Session.LCID
La propiedad LCID utiliza el número identificador de localización para dar en varios formatos, la
fecha, hora y localizador específicos de un lugar o región. El número identificador de
localización únicamente define una situación geográfica. Por ejemplo el identificador de España
es el 2048, el de Francia es el 1036, etc.
Session.SessionID
Session.Timeout
Especifica el número de minutos que tienen que pasar, mientras la sesión está inactiva, para
darla por terminada, siendo el valor por defecto de 20 minutos. Esto significa que si el usuario
no refresca la página, solicita otra o hace cualquier transacción la sesión es automáticamente
cerrada y los recursos que tuviese asignados, recuperados. Este tiempo también es posible
establecerlo de forma fija en las configuraciones de la aplicación en el propio IIS.
Métodos
Session.Abandon
Session.Contents.Remove()
Session.Contents.RemoveAll()
Éste método elimina TODOS los elementos de la colección Session.Contents(). En este caso
no hay que referencia ningún nombre ni número.
Eventos
Session_OnStart Session_OnEnd
Estos eventos se controlan en el fichero global.asa, y debe existir uno por cada aplicación que
se ejecute en el servidor, cada uno en el directorio virtual donde ésta resida. El evento
Session_OnStart ocurre justo antes de que el servidor haya creado el objeto Session.
29
Session_OnStart, que se activará tantas veces como usuarios haya conectados a la
aplicación. Cuando un usuario cierra la aplicación voluntariamente, o bien transcurre un tiempo
predefinido sin hacer ninguna transacción, se disparará Session_OnEnd.
(ejemplo17.asp)
<%@Language=VBScript %>
<%
If Request.Form("configurar") <> "" Then
Session("colorLetra")=Request.Form("colorLetra")
Session("colorFondo")=Request.Form("colorFondo")
Session("tamLetra")=Request.Form("tamLetra")
Session("tipoLetra")=Request.Form("tipoLetra")
End if
%>
<HTML>
<HEAD><TITLE>Ejemplo 17 ASP</TITLE></HEAD>
<BODY bgcolor="<%=Session("colorFondo")%>">
<font face="<%=Session("tipoLetra")%>"
size="<%=Session("tamLetra")%>"
color="<%=Session("colorLetra")%>">Texto de muestra</font>
<br>
<br>
<table border="0">
<form action="<%=Request.ServerVariables("SCRIPT_NAME")%>"
method="post">
<tr>
<td>
<font face="<%=Session("tipoLetra")%>"
size="<%=Session("tamLetra")%>"
color="<%=Session("colorLetra")%>">Color de fondo:
</font>
</td>
<td>
<select name="colorFondo">
<option value="green">Verde
<option value="black">Negro
<option value="white">Blanco
<option value="red">Rojo
<option value="blue">Azul
</select>
</td>
</tr>
<tr>
<td>
<font face="<%=Session("tipoLetra")%>"
size="<%=Session("tamLetra")%>"
color="<%=Session("colorLetra")%>">Tipo de letra:
</font>
</td>
<td>
<select name="tipoLetra">
<option value="courier">Courier
<option value="arial">Arial
<option value="verdana">Verdana
<option value="timesroman">TimesRoman
<option value="Bookman Old Style">Bookman Old Style
</select>
</td>
</tr>
30
<tr>
<td>
<font face="<%=Session("tipoLetra")%>"
size="<%=Session("tamLetra")%>"
color="<%=Session("colorLetra")%>">Color de letra:
</font>
</td>
<td>
<select name="colorLetra">
<option value="green">Verde
<option value="black">Negro
<option value="white">Blanco
<option value="red">Rojo
<option value="blue">Azul
</select>
</td>
</tr>
<td>
<font face="<%=Session("tipoLetra")%>"
size="<%=Session("tamLetra")%>"
color="<%=Session("colorLetra")%>">Tamaño de letra:
</font>
</td>
<td><input type="text" name="tamLetra"
size="2" maxlength="1"></td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="submit" name="configurar"
value="Enviar Cambios">
</td>
</tr>
</table>
</BODY>
</HTML>
El ejemplo que acabamos de ver es un resumen de varias cosas que hemos visto hasta ahora,
el uso de formularios y request, el operador distinto, la sentencia if y las variables de sesión.
Además, podemos ver que en el action, hacemos referencia al nombre de este script para que
se vuelva a ejecutar el propio script, al hacer clic en enviar cambios.
Objeto Server
El objeto Server nos proporciona acceso a métodos y propiedades del servidor.
Propiedades
Server.ScriptTimeout
Especifica la cantidad máxima de tiempo que puede tardar la ejecución de una secuencia de
comandos (Tiempo máximo que puede tardar en ejecutarse una página dada).
Métodos
Server.CreateObject("ObjectID")
Este es, probablemente, uno de los métodos más importantes de ASP, ya que permite al
usuario crear instancias a otros objetos (componentes ActiveX o componentes creados por el
31
usuario), que al igual que los ya existentes intrínsecamente en ASP, tienen sus propias
colecciones, eventos, métodos y propiedades asociadas con ellos.
ObjectID es el identificativo del tipo de componente que queremos crear, nos viene
suministrado por el fabricante del componente, es un argumento obligatorio.
En el caso de que una variable vaya a recibir un objeto hay que anteponer la palabra reservada
Set, tal como se muestra.
Server.Execute("Ruta")
Permite llamar desde una página ASP a otra página ASP. Cuando la página llamada concluye
su proceso, el control vuelve a la página llamadora. Es un efecto parecido al que se consigue
con los ficheros de inclusión . Básicamente se diferencia de los include en que no pasa a
formar parte del mismo fichero en el momento de ser procesado, sino que se ejecuta un
segundo fichero por separado y con otro nombre.
No debe confundirse con los métodos Server.Transfer o Response.Redirect ya que con ellos
el control no vuelve a la página llamadora, y el proceso concluye en la página llamada.
Server.GetLastError( )
Server.HTMLEncode("String")
Con este método se puede convertir un string codificado en HTML, y por tanto ejecutable por
los navegadores, en código solamente visible pero no ejecutable por los navegadores.
Escapa los TAGS para que aparezcan como literales, y no código.
Este sería el código interno obtenido, visible en formato HTML pero no ejecutable como tal:
Esto es un <BR> que no funciona
Server.MapPath("Ruta")
Traza un mapa de rutas físicas (absolutas) partiendo de rutas virtuales (relativas) de ficheros
que se encuentren dentro del árbol de directorios declarados como parte de la estructura del
servidor web.
Server.Transfer("Ruta")
Permite llamar desde una página ASP a otra página ASP. Cuando la página llamada concluye
su proceso, el control no vuelve a la página llamadora, y concluye en la página llamada.
No confundir con el método Response.Redirect que funciona de modo similar, pero partiendo
de otro objeto. El proceso de transferencia de una página a otra es completo, incluyendo todos
los objetos y variables que hayan sido creados en la página llamadora como si se tratase de la
misma, aunque con otro nombre de página.
Server.URLEncode("String")
Este método puede convertir un string conteniendo una dirección URL en formato ASCII a
formato URL-Encoded.
<%Response.Write Server.URLEncode("http://www.sitio.es/manual.asp")%>
Este sería el código interno obtenido URL-encoded, que es precisamente con el que trabajan
internamente los navegadores, aunque habitualmente se vea de otra forma (formato ASCII).
32
http%3A%2F%2Fwww%2Esitiouv%2Ees%2Fmanual%2Easp
Como se ve, la conversión lo que hace es transformar cualquier cosa que no sea una letra o un
número en su código hexadecimal separados por el signo %
<%Set objfichSist=Server.CreateObject("Scripting.FileSystemObject")
Set fichero= objfichSist.GetFile("c:\windows\win.ini")%>
Fecha creación: <%=fichero.DateCreated%><br>
Nombre: <%=fichero.Name%><br>
Tamaño: <%=fichero.Size%><br>
Tipo: <%=fichero.Type%><br>
<%Set fichero=Nothing
Set objfichSist=Nothing%>
33
El fichero GLOBAL.ASA
El fichero GLOBAL.ASA (ASA, Active Server Application, aplicación activa de servidor o mejor
aplicación ASP), que tanto hemos mencionado hasta ahora en este capítulo, es un fichero
opcional que se encuentra en el directorio raíz de la aplicación ASP y que está relacionado de
forma directa con los objetos integrados Application y Session. Este fichero, que debe ser único
para cada aplicación ASP, tiene varias funciones:
• Definir como son tratados los eventos de los objetos Session y Application. Como
hemos comentado en el apartado anterior.
Tampoco se pueden incluir ficheros de ningún tipo mediante el uso de la directiva INCLUDE.
Para declarar objetos mediante la etiqueta <OBJECT>, para que tengan el ámbito de sesión o
aplicación se deberá seguir la siguiente sintaxis:
La declaración de los objetos deberá ir fuera de las etiquetas de script. Los objetos declarados
de esta forma no se crearán hasta que el servidor procese una secuencia de comandos en el
que se haga referencia a ellos. Así se ahorran recursos, al crearse sólo los objetos que son
necesarios.
34
Estos objetos pasaran a formar parte de la colección StaticObjects del objeto Application.
El parámetro Ambito especifica el ámbito del objeto, podrá tener los valores Session o
Application; Identificador especifica un nombre para la instancia del objeto; IDprog e IDclase
para identificar la clase del objeto.
El siguiente código dentro del fichero GLOBAL.ASA crearía un objeto Connection de ADO con
ámbito de sesión.
<OBJECT RUNAT=Server
SCOPE=Session ID=conexion
PROGID="ADODB.Connection">
</OBJECT>
Para utilizar este objeto posteriormente dentro de una página ASP, por ejemplo, para ejecutar
una sentencia SQL sobre la conexión con la base de datos, bastaría con escribir lo que indica
el siguiente ejemplo:
Es decir, accedemos directamente al nombre del objeto, que será el indicado en la propiedad
ID de la etiqueta <OBJECT>.
Cuando se inicie la aplicación ASP correspondiente se crearán tres variables de aplicación que
pasarán a formar parte de la colección Contents, también se crean dos objetos a nivel de
aplicación que pasarán a formar parte de la colección StaticObjects.
En el ejemplo 16 se muestra una página ASP que accede a las colecciones del objeto
Application para comprobar las variables de aplicación creadas en el fichero global.asa
anterior, también se muestra como acceder y utilizar un objeto definido a nivel de aplicación.
35
(ejemplo16.asp)
<br>
Número de elementos de la colección StaticObjects:
<b><%=Application.StaticObjects.Count%></b><br>
<%
Dim objeto
For Each objeto in Application.StaticObjects
Response.Write objeto & "<br>"
Next
%>
</BODY>
</HTML>
36
Fuentes de datos ODBC
La administración de orígenes de datos ODBC (Open Database Connectivity) es una utilidad
general de Windows NT. Permite que las aplicaciones accedan a los datos usando SQL como
lenguaje estándar.
Se pueden configurar tres diferente fuentes de datos ODBC, la forma más interesante es la de
DSN del Sistema, que presenta la ventaja de poder ser accedida por cualquier usuario, siendo
el tipo usado en aplicaciones ASP.
Para declarar una base de datos ODBC haremos doble clic en el icono Fuentes de Datos
ODBC que encontraremos en el panel de control de Windows (Inicio->Configuración->Panel de
Control), una vez abierto el programa nos situaremos en la pestaña DSN de Sistema.
Pulsaremos el botón AGREGAR para añadir una nueva fuente de datos, lo que nos llevara a la
pantalla de controladores.
37
En esta ventana elegiremos el driver adecuado para la tecnología de la base de datos que
queremos tratar desde nuestras páginas ASP y pulsaremos finalizar. La siguiente pantalla que
se nos muestra nos pedirá la ubicación física de nuestra base de datos y el nombre ODBC con
el que queremos acceder a ella.
Nombre de origen de datos: Es el nombre simbólico de nuestra base de datos, será el que
utilicemos desde ASP para referirnos a ella.
Base de datos: Es el camino físico de la base de datos, para establecerlo pulsaremos el botón
SELECCIONAR y mediante un explorador elegiremos nuestra fuente de datos.
Una vez hecho esto pulsaremos el botón ACEPTAR y ya tendremos nuestra base de datos
disponible para su uso desde nuestras aplicaciones Web.
Una vez definido un DSN para abrir la BD asociada sólo hay que indicar el nombre al invocar el
método Open de la conexión.
ASP permite acceder de forma directa a la BD sin necesidad de definir un DSN, para ello, lo
único que tenemos que conocer es la ubicación de la BD en el servidor y la cadena de
conexión necesaria para acceder a la BD.
Mediante ADO podemos decidir el tipo de acceso que vamos a realizar, con o sin DSN.
ADO usa ODBC para el acceso a bases de datos. lo que nos independiza de la tecnología de
las mismas. Esto implica que podemos cambiar la tecnología de la base de datos y si
mantenemos la misma estructura de datos, nuestras aplicaciones desarrolladas con ADO
pueden seguir funcionando sin cambiar ni una sola línea de código.
38
Para desarrollo podemos crear nuestras fuentes de datos en Microsoft Access, pero en
entornos de producción con gran afluencia de clientes deberemos de usar gestores de bases
de datos más potentes, como Oracle, Microsoft SQL Server, etc...
ADO esta formado por varios objetos organizados de forma jerárquica (cada uno de ellos con
sus métodos y propiedades específicos) de los cuales vamos a estudiar los mas interesantes.
• Connection: Nos proporciona una conexión a una base de datos ODBC desde una
página ASP. Esta conexión nos permitirá efectuar las operaciones que deseemos
sobre la base de datos. Es el objeto primario de ADO, ninguno de los otros objetos
puede existir si éste no es declarado de forma explicita o implícita. La conexión
terminará cuando nosotros la cerremos explícitamente con el método close o bien
cuando termine la ejecución de la página ASP.
• Error: Es una colección en la que se almacenaran los posibles errores del objeto
Podemos ver la siguiente figura, en la que se muestra la relación entre estos componentes:
39
Como se puede observar en la figura hay tres objetos que se diferencian del resto, es decir, los
objetos: Connection, Command y Recordset. Estos objetos son los principales dentro de ADO,
y se pueden crear fuera de la jerarquía de la figura, y se pueden manejar sin tener que
interactuar con un intermediario. Estos tres objetos se crearán mediante el método
CreateObject del objeto Server, al igual que hacíamos con el resto de los componentes de
servidor, el resto de los objetos de ADO se crean a partir de estos tres.
Para establecer la conexión lo primero que hacemos es crear el Objeto Connection por medio
de la propiedad CreateObject de objeto Server:
<% Set conexion=Server.CreateObject("ADODB.Connection")%>
Una vez establecida la instancia del objeto pasamos a configurarlo mediante sus distintas
propiedades y métodos.
Propiedades
ConnectionString
Especifica la referencia a la base de datos con la cual queremos conectar, conteniendo en una
cadena de texto la información necesaria para efectuar esa conexión mediante parejas de
valores separadas por " ; ".
Ejemplo:
<% conexion.ConnectionString="DSN=MIOdbc;UID=luis;PWD=1234" %>
Mode
Metodos
Open
Close
40
BeginTrans
Abre una transacción; todas las operaciones que realicemos a partir de ese momento no serán
efectivas hasta que no cerremos la transacción: <% conexion.BeginTrans %>
CommitTrans
Cierra una transacción haciendo efectivos los cambios efectuados dentro de ella:
<% conexion.CommitBeginTrans %>
RollBackTrans
Deshace todos los cambios efectuados en la base de datos desde el inicio de la transacción.
<% conexion.RollBackTrans %>
Execute
Propiedades
Count
Cantidad de errores
Description
Number
El numero de error.
SQLState
Metodos
Clear
Ejemplo:
41
Objeto RecordSet
El objeto Recordset es el interfaz entre los datos obtenidos de nuestras consultas sobre las
tablas y nuestras páginas asp. Representa una tabla organizada en filas (registros) y columnas
(campos).
La propiedades y métodos de Recordset son muchos, en este capitulo vamos a ver los mas
interesantes, para hacerlo un poco mas sencillo de entender vamos a verlos agrupados por la
funcionalidad que nos ofrecen.
El tipo de cursor lo definiremos mediante la propiedad CursorType, los posibles valores son:
El tipo de cerrojo lo definiremos mediante la propiedad LockType, los posibles valores son:
42
Propiedades Características
PageSize Establece el numero de registros por página del Recordset
Mueve el cursor al primer registro de dicha página
AbsolutePage
(es necesario definir anteriormente el PageSize)
Contiene el numero de páginas del Recordset, tomando como base
PageCount
PageSize
AbsolutePosition Mueve el cursor al número de registro especificado
Contiene el numero de registros del Recordset
RecordCount
(No funciona con el cursor adOpenForwardOnly RecordCount).
BOF Toma el valor True cuando estamos en el primer registro del Recordset
EOF Toma el valor True cuando estamos en el ultimo registro del Recordset
Método Características
AddNew Abre un nuevo registro en el Recordset para introducir datos
Delete Elimina el registro actual
Update Actualiza un registro del Recordset tras haberlo modificado
Método Características
Abre el Recordset y almacena en el resultado de sql contra la
Open Sql, conexion
conexion
Close Cierra el Recordset
<%
SQLtxt = "SELECT Producto, Cantidad, Precio FROM almacen”
Set rs = CreateObject("ADODB.Recordset")
rs.Open SQLtxt, "DSN=Mibase"
%>
<table>
<%
Do While NOT rs.EOF
%>
<tr>
<td><% = rs("Producto")%></td>
<td><% = rs("Cantidad")%></td>
<td align="right"><% = FormatCurrency(rs("Precio"))%></td>
</tr>
<%
rs.MoveNext
Loop
rs.Close
</table>
%>
43
Ejemplos de Operaciones Básicas
Establecer conexión
<%
'Creamos el objeto conexión
Set Conexion = Server.CreateObject("ADODB.Connection")
Consulta
<%
'Creamos la sentencia SQL que ejecutaremos en la BD
sSQL="Select * From Clientes Order By nombre"
'Ejecutamos la orden
Set RS = Conexion.Execute(sSQL)
%>
Inserción
<%
'Ahora creamos la sentencia SQL
sSQL="Insert Into Clientes (nombre,telefono) values
('" & nombre & "','" & telefono & "')"
'Ejecutamos la orden
set RS = Conexion.Execute(sSQL)
%>
Borrado
<%
'Ahora creamos la sentencia SQL
sSQL="Delete From Clientes Where nombre='" & nombre & "'"
'Ejecutamos la orden
set RS = Conexion.Execute(sSQL)
%>
Actualización
<%
'Ahora creamos la sentencia SQL
sSQL="Update Clientes Set telefono='" & telefono & "'
Where nombre='" & nombre & "'"
'Ejecutamos la orden
set RS = Conexion.Execute(sSQL)
%>
Cerrar Conexión
<%
'Cerramos la conexión
Conexion.Close
%>
44
Ejemplo de Lectura de una Tabla con una BD Access
<%
Dim BDD ' variable que se encargara de la base de datos
Dim TABLA ' variable que se encarga de la tabla
<%
'abrimos la base de datos
BDD.Open ("DRIVER=<Microsoft Access Driver (*.mdb)>;
DBQ=" + Server.MapPath("temas.mdb"))
%>
A través de OLE DB
<%
'abrimos la base de datos
BDD.Open
("PROVIDER=SQLOLEDB;UID=;PWD=;DATABASE=Temas;SERVER=MiServer")
%>
<%
'abrimos la base de datos
BDD.Open
("DRIVER=<SQLServer>;SERVER=MiServer;UID=;PWD=;DATABASE=Temas;")
%>
45
Ejemplo de uso de ASP+ADO
A continuación vamos a presentar varios ejemplos de uso de ASP para acceder a bases de
datos. El primero de ellos va a acceder a una simple tabla en Access. Creamos un origen de
bases de datos hasta donde se encuentre el archivo de base de datos biblioteca.mdb, luego
abrimos el archivo fconsu.html en el navegador y ejecutamos alguna consulta.
fconsu.html
<html>
<head><title>Formulario para consulta sencilla</title></head>
<body>
<h3 align="center">Ejemplo de consulta sencilla</h3>
<form method="POST" action="consultasencilla.asp">
<table border="1" width="100%">
<tr>
<td width="16%">Titulo:</td>
<td width="84%"><input type="text"
name="titulo" size="55"></td>
</tr>
<tr>
<td width="16%">
<input type="submit" value="Enviar" name="B1"></td>
<td width="84%">
<input type="reset" value="Restablecer" name="B2">
</td>
</tr>
</table>
</form>
</body>
</html>
consultasencilla.asp
<html>
<head><title>Ejemplo de consulta sencilla</title></head>
<body bgcolor="#808000">
<center>
<table border="1" width="62%" bgcolor="#008000">
<tr>
<td width="100%">
<p align="center">
<font color="#FFFFFF">Resultados de su consulta</font>
</td>
</tr>
</table>
</center>
<%
ctitulo = request.form("titulo")
set rs = createobject("ADODB.Recordset")
sqltxt = "select titulo,autor
from libros where titulo like '%"&ctitulo&"%'"
rs.open sqltxt,"DSN=biblioteca"
%>
46
<%
if rs.eof then
%>
<h3 align="center">
<font color="#FF0000">No hay datos ...
</font>
</h3>
<%
else
%>
<table border="0" width="100%">
<tr>
<th width="33%" valign="middle"
align="center" bgcolor="#008080">
<font color="#000000">Titulo</font></th>
<th width="33%" valign="middle"
align="center" bgcolor="#008080">
<font color="#000000">Autor</font></th>
</tr>
<%
do while not rs.eof
%>
<tr>
<td width="33%" valign="middle"
align="center" bgcolor="#FFFFFF">
<font color="#000000"><%=rs("Titulo")%></font></td>
<td width="33%" valign="middle"
align="center" bgcolor="#FFFFFF">
<font color="#000000"><%=rs("Autor")%></font></td>
</tr>
<%
rs.movenext
loop
rs.close
end if
%>
</table>
<p align="center"><a href="fconsu.html">Otra vez</a></p>
</body>
</html>
47