ASPActive Server Pages : ASPActive Server Pages Oscar Cubo Medina
Santiago González Tortosa
Victor Robles Forcada
Programación Web en Servidor
INEM – 2007
Contenidos : Contenidos Introducción
Estáticas VS Dinámicas
Arquitectura de Aplicaciones
CGI
Lenguaje ASP
Funcionamiento
Requisitos
Ventajas e Inconvenientes
Configuración
Programación con VBScript
Constantes y Variables
Operadores Estructuras de Control
Bucles
Funciones y Procedimientos
Modelo de Objetos
Application, Session, Request, Response, …
Acceso a Ficheros
Objeto FileSystemObject
Operaciones sobre Ficheros
Acceso a Bases de Datos
Introducción a BBDD
Objetos para Acceso a BBDD
Referencias
IntroducciónASP : IntroducciónASP
Introducción : Introducción Paginas Estáticas VS Páginas Dinámicas
Arquitectura de Aplicaciones
Modelo 3 capas
Cliente VS Servidor
Scripts y CGI
Slide 5 : Páginas estáticas Servidor Web de
www.fi.upm.es http://www.fi.upm.es
…
…
GET “www.fi.upm.es” GET “www.fi.upm.es/logo.gif” Logo.gif Index.html
Slide 6 : Páginas dinámicas Servidor Web de
www.fi.upm.es http://search.unisys.com/search/default.asp?section=allsections&q1=http&Submit=Go GET “…&Submit=Go” Respuesta dinámica
Slide 7 : Arquitectura de Aplicaciones Servicios de usuario Interfaz de usuario Servicios de trabajo Servicios de datos Lógica
de
negocio Datos
Slide 8 : Modelo de 3 capas Navegador Servidor Web Presentación Lógica de negocio Acceso a datos
Slide 9 : Aplicaciones Web Cliente
Browser HTTP Máquina Servidora Cliente
No Browser Servicios
Soportados DBMS Servidor
Web DBMS Protocolo de
objetos Aplicaciones
existentes
Slide 10 : El mundo del Cliente HTML / DHTML / CSS
Lenguajes de script: JavaScript / VBScript
Applet Java / Active X
Slide 11 : El mundo del Servidor HTML / DHTML / XML
ASP / JSP / PHP
CGI
VBScript / JavaScript
Servlets / Scriptlets
COM / DCOM / COM+ / EJB
ODBC / JDBC / OLE DB / ADO
Slide 12 : Lenguajes de script en cliente: JavaScript y VBScript VBScript sólo para Internet Explorer
JavaScript ampliamente utilizado
Cada navegador tiene sus propias extensiones
Muy usados para realización de cálculos y validación de formularios
Slide 13 : CGI Common Gateway Interface
Se pueden desarrollar con cualquier lenguaje
Por aspectos de seguridad se almacenan en directorios específicos del servidor
Slide 14 : CGI Ventajas
Cualquier lenguaje de programación
Altamente extendidos
Todas las plataformas
Inconvenientes
Ojo con el uso de ejecutables en servidor
Van lentos en IIS
Lenguaje ASPASP : Lenguaje ASPASP
ASP : ASP ¿Qué es?
Funcionamiento
Requisitos
Ventajas e Inconvenientes
Configuración del Sistema
ASP : ASP ¿Qué es?
Active Server Pages – Paginas Activas en Servidor
Es un lenguaje de programación
Generación de páginas dinámicas
Servidor Windows
Anexo a IIS (Internet Information Server)
Slide 18 : Funcionamiento IIS
Ejemplo
Un ejemplo de ASP
<%
response.write "
"
response.write "Hola!"
response.write "
”
%>
ejemplo.asp 4) El Browser
muestra el HTML
Ejemplo de ASP : Ejemplo de ASP <% For i=3 to 7 %>
Hola Mundo
<% Next %>
Requisitos para ejecutar ASP : Requisitos para ejecutar ASP Servidor Web:
IIS (Internet Information Server)
PWS (Personal Web Server)
Drivers ODBC de acceso a Bases de Datos
Editor de Texto
¿Por qué páginas ASP? : ¿Por qué páginas ASP? Ventajas
Independientes del navegador
Fácil de crear y usar
Diferentes lenguajes de script válidos
No más gastos en Software
Inconvenientes
Muy ligado a Microsoft
Mala depuración
Muchísimos WebSites están hechos con ASP
Configuración del sistema : Configuración del sistema ¿Dónde se ponen las páginas ASP?
Directorio c:\inetpub\wwwroot
Configuración del directorio
El usuario es IUSR_nombremaqina
Necesita acceso de Lectura/Ejecución
En caso de Base de Datos, también necesita acceso de Escritura
Ejercicio 1: poner nuestro entorno en producción.
Programación con VBScriptASP : Programación con VBScriptASP
Programación con VBScript : Programación con VBScript Variables
Constantes
Comentarios
Operadores
Estructuras de Control
Bucles
Funciones y Procedimientos
Variables : Variables En general:
No hay que declararlas.
Suele ser útil declararlas.
Option Explicit (obliga a declararlas)
<% Dim x %>
Sólo hay un tipo, el variant
x = 36
x = “Mi texto”
Imprimir valor de variable
<% Response.Write (nombre_variable) %>
<% =nombre_variable %>
Contantes, Operadores, … : Contantes, Operadores, … Constantes
Se declaran con Const
No cambian
Const pi = 3.14159
Comentarios
‘Esto es un comentario
Operadores
+, -, *, /
\ división entera, ^ exponenciación
Concatenar strings &
Lógicos: NOT, AND, OR y XOR
Comparación: =, <>, <, >, <= y >=
Constantes, Operadores… : Constantes, Operadores… Ejemplo 2: Calcular el precio real de dos ordenadores, que cuestan:
1123 euros
1326 euros
Ambos sin iva. El programa debe devolver un mensaje personalizado.
Santi, el precio total del ordenador 1 es: XXX euros
Santi, el precio total del ordenador 2 es: YYY euros
Slide 28 : Estructuras de control If .. Then ... ElseIf <%
x = 23
If x < 0 Then
%>
Número Negativo
<%
ElseIf x>0 Then
%>
Número Positivo
<%
Else
%>
Es cero
<%
End If
%> If condición Then
sentencias
Elseif condición2 Then
sentencias2
Else
sentencias3
End If
Estructuras de Control : Estructuras de Control Ejemplo 3: Ejecutar un programa que escriba una frase distinta cuando se cumpla una determinada condición, según el siguiente valor:
Valor “1”
Valor “2”
Otro valor (3, 4, 0 …)
Bucles : Bucles Do while/until
Do...loop while/until
For…Next
For Each…Next
While
Exit Do
Exit For
Bucles : Bucles Do While... Loop <%
x = 10
Do While x > 0
%>
<% =X %>
x = x - 1
Loop
%> Do While condición
sentencias
Loop
Slide 32 : For ... Next <% For x = 1 To 5 %>
<% =X %>
<% Next %> For variable = inicio To fin
sentencias
Next Bucles
Do while/until : Do while/until Do While
do while condición
sentencias
loop
Ejemplo
do while a <= 10
a = a + 1
loop Do Until
do until condición
sentencias
loop
Ejemplo
do until a > 10
a = a + 1
loop
Do…loop while/until : Do…loop while/until Do…loop While
do
sentencias
loop while condición
Ejemplo
do
a = a + 1
loop while a <= 10 Do…loop Until
do
sentencias
loop until condición
Ejemplo
do
a = a + 1
loop until a > 10
For (each)…Next : For (each)…Next For…Next
For variable = inicio to fin
sentencias
Next
Ejemplo
For i = 1 to 10
a = a + 1
Next For each…Next
For each variable in seq
sentencias
Next
Ejemplo
For each persona in cola
contador = contador + 1
Next
While : While For each…Next
While condición
sentencias
Wend
Ejemplo
Dim value
Value = 1
While value < 10
value = value + 1
Wend
Bucles : Bucles Ejercicio 4: Realizar la tabla de multiplicar del 1 hasta el 10, con valores del 1 al 10.
Funciones : Funciones Devuelve un valor Function gradosCelsius(gradosCent)
gradosCelsius = (gradosCent - 32) * 5 / 9
End Function
cent = 35
celsius = gradosCelsius(cent) Mismo nombre que función Function nombre (parametros)
setencias
nombre = …
End Function
Procedimientos : Procedimientos No devuelven valor <% Sub trata_Cadena (miCadena)
%>
La cadena inicial: <% =miCadena %>
En mayúsculas: <% =UCase(miCadena) %>
Número caracteres: <% =Len(miCadena) %>
<% End Sub %> Sub nombre (parametros)
sentencias
End Sub
Procedimientos : Procedimientos Llamar a Sub Call trata_Cadena("Cuántas letras tengo?")
trata_Cadena "Cuántas letras tengo?"
Funciones y Procedimientos : Funciones y Procedimientos Ejemplo 5a: Realizar la suma de los 100 primeros números (número triangular) utilizando funciones.
Ejemplo 5b: Lo mismo que el ejercicio anterior pero utilizando procedimientos.
Funciones Integradas en ASP : Funciones Integradas en ASP Cogen argumentos y devuelven un valor
Manipulan strings, fechas y horas y matemáticas miPalabra = "Patata"
x = Len(miPalabra)
Inclusión de ficheros : Inclusión de ficheros Suele ponerse extensión .inc
Luego se incluye con
Modelo de ObjetosASP : Modelo de ObjetosASP
Modelo de Objetos : Modelo de Objetos Estructura de Modelo de Objetos
Objeto Request
Colección QueryString y Form
Colección Cookies
Colección ServerVariables
Objeto Response
Objeto Server
Otros Objetos
Modelo de objetos de ASP : Modelo de objetos de ASP Cliente Servidor Objeto
Server Objeto
Session Objeto
Application Objeto Request Objeto Response Objeto ObjectContext
Slide 47 : Aplicación ASP
(Objeto Application) Session Session ........ Session Cliente Cliente Cliente ........ Modelo de objetos de ASP
Modelo de objetos de ASP : Modelo de objetos de ASP Objeto Request:
captura la información que va del cliente al servidor.
Objeto Response
manda información del servidor al cliente.
tiene métodos y propiedades para modificar y crear lo que se envía al cliente. También para redirigir a otra página.
ObjectContext:
se utiliza para finalizar o abortar una transacción realizada por el MTS (Microsoft Transaction Server) y que ha sido ejecutada por otro Script ASP.
Modelo de objetos de ASP : Modelo de objetos de ASP Objeto Application:
Sirve para almacenar información que será compartida entre todos los clientes
Application(“nombre”) = valor
Si algún cliente quiere modificar alguna variable debe realizar un lock y un unlock. <% Application.Lock
Application("numero") = 15
Application.Unlock %>
Modelo de objetos de ASP : Modelo de objetos de ASP Objeto Session:
Almacena información válida para todas las páginas mientras dure la sesión del usuario.
Cuando el usuario accede por primera vez se genera un identificador único.
Modelo de objetos de ASP : Modelo de objetos de ASP Ejemplo 6: Mantenimiento del estado de una Sesión
Objetivo: Familiarización con el mantenimiento del estado de una sesión de usuario. Tenemos que realizar dos páginas Web.
La primera de ellas contendrá un formulario en el que se pedirá al cliente su nombre y apellidos.
La segunda página recogerá el valor de los campos del formulario y los almacenará como variables de Sesión. A continuación volverá a leer esas variables para sacar su valor por pantalla.
Objeto Request : Objeto Request Colecciones
QueryString
Form
ServerVariables
Cookies
ClientCertificate Propiedades
TotalBytes Métodos
BinaryRead
Colección QueryString y Form : Colección QueryString y Form
Colección QueryString y Form : Colección QueryString y Form
Colección QueryString y Form : Colección QueryString y Form Si se utiliza POST es todo lo mismo pero utilizando Request.Form <% For each Objeto in Request.QueryString %>
Nombre del Objeto ‘<% Response.Write(Objeto) %>’ tiene Valor ‘<% = Request.QueryString(Objeto) %>’
<% Next %>
<%
Dim nombre
nombre = Request.QueryString("sNombre")
%>
Nombre: <% =nombre %>
Colección QueryString y Form : Colección QueryString y Form Ejercicio 7a: Formulario de creación de usuarios.
Campos:
Nombre
Usuario
Password y Repetir Password
Método POST
Comprobacion de Passwords iguales y mayores a 7 letras o digitos.
Aviso de creación correcta o incorrecta
Ejercicio 7b: Formulario de creación de usuarios.
Campos:
Nombre
Usuario
Password y Repetir Password
Método GET (ERROR MUY GORDO!)
Comprobacion de Passwords iguales y mayores a 7 letras o digitos.
Aviso de creación correcta o incorrecta
Colección QueryString y Form : Colección QueryString y Form Más ejercicios:
Calculo de edad: Realizar un formulario que recoja la fecha de nacimiento de una persona en formato mm/dd/aa y que la envie a otra página que calcule la edad de la persona.
Las funciones que se deben utilizar son datediff que devuelve la diferencia en días de dos fechas dadas e Int que realiza una división entera.
La colección Cookies : La colección Cookies Satisface la necesidad de almacenamiento de información permanente.
Es un paquete de información que es enviado del cliente al servidor en cada respuesta.
Con Request leemos, con Response escribimos.
La colección Cookies : La colección Cookies Ejercicio 8: Familiarizarnos con el uso de las cookies en la máquina del cliente. Hay que realizar dos páginas ASP.
La primera sacará en una tabla todas las cookies de la máquina cliente, dando la opción de borrarlas. Además, tendrá un formulario que permitirá añadir cookies a través de dos campos, el campo nombre y el campo valor.
La segunda página se encargará del borrado y de la inserción de las cookies.
Colección ServerVariables : Colección ServerVariables Valor = Request.ServerVariables(“HeaderType”)
HeaderType:
REMOTE_ADDR: Dirección IP de máquina remota
LOGON_USER: Usuario
ALL_HTTP: Toda la cadena HTTP
HTTP_USER_AGENT: Cliente utilizado
HTTP_COOKIE: Cookies en la máquina remota
HTTP_REFERER: Página de la que procedo
HTTP_ACCEPT: Tipo de ficheros admitidos
El objeto Response : El objeto Response Permite escribir información y cookies en cliente
Para realizar redirecciones: Response.Redirect(“nombre”)
Permite realizar buffering:
Response.Buffer
Response.Clear
Response.Flush
Controlar cuando expira una página: Response.Expires(min)
El objeto Server : El objeto Server Tiene 4 métodos:
CreateObject: Crea una instancia de un objeto en el servidor
HTMLencode: Aplica codificaciónm HTML a una cadena
Mappath: Convierte un path virtual en un path físico
URLencode: Aplica codificación URL a una cadena
El objeto Server : El objeto Server Ejercicio 9: Escribir el texto
texto negrita texto italica UPM
Usando la funcion HTMLencode
Sin usarla
Escribir la direccion web
http://www.fi.upm.es/hola que tal:ñá
Usando la función URLencode
Sin usarla
Otros Objetos : Otros Objetos Objeto Scripting.Dictionary contiene pares de elementos (clave, valor). Por ejemplo carrito de compras.
Objeto Scripting.FileSystemObject proporciona acceso al sistema de ficheros del ordenador.
Acceso a FicherosASP : Acceso a FicherosASP
Uso de Sistemas de Fichero y E/S : Uso de Sistemas de Fichero y E/S set fs = Server.CreateObject(“Scripting.FileSystemObject”)
Acceso a todas las unidades de discos DEL SERVIDOR!! (Ejemplo 10)
set discos = fs.Drives
for each d in discos
…
next
Propiedades de una unidad if (NOT fs.DriveExists(“H”)) then
Wscript.Quit
else
set drive = fs.GetDrive(“H”)
if (drive.IsReady) then
drive.DriveLetter
drive.DriveType ‘ (Desconocido, Borrable, Duro, Remoto, CD, RAM)
drive.VolumeName (ShareName)
drive.TotalSize
drive.FreeSpace
end if
end if
Uso de Sistemas de Fichero y E/S : Uso de Sistemas de Fichero y E/S Acceso a carpetas
set carpeta = fs.GetFolder (path)
set carpetas = carpeta.SubFolders
for each c in carpetas
…
c.Name
Next
Uso de Sistemas de Fichero y E/S : Uso de Sistemas de Fichero y E/S Acceso a ficheros
set ficheros = carpeta.Files
for each f in ficheros
…
f.Name
f.Size
f.DateCreated
f.DateLastModified
Next
Ejemplo 11: Mostrar el contenido de la carpeta System32
Existencia de fichero fs.FileExists(fichero)
Copiar ficheros fs.CopyFile path1 path2
Borrar ficheros fs.DeleteFile(fichero)
Uso de Sistemas de Fichero y E/S : Uso de Sistemas de Fichero y E/S Ejemplo 12: Sistema Backup
Realizar un sistema backup que copie todo el contenido de una carpeta dentro de otra carpeta.
Se aconseja utilizar como destino, la carpeta Backup, y dentro de el, una carpeta de copia, según la fecha de hoy:
path2 & Day(Date) & "-" & Month(Date) & "-" & Year(Date)
Uso de Sistemas de Fichero y E/S : Uso de Sistemas de Fichero y E/S Acceso a un fichero de texto
OpenTextFile (nombre [, modo[, crear[, formato]]] )
Modo: (1) ForReading, (2) ForWriting, (3) ForAppending
Crear: True si se va a crear nuevo. False en caso contrario
Formato: TristateTrue si es Unicode, TristateFalse si es ASCII
Lectura de fichero de texto
set entrada = fs.OpenTextFile(“fichero.txt”)
Do While Not (entrada.atEndOfStream)
Texto = Texto & entrada.ReadLine & “
”
Loop
Escritura (con/sin reemplazo) en fichero
set entrada = fs.OpenTextFile(“fichero.txt”)
set salida = fs.OpenTextFile(“fichero2.txt”, 2, True)
Do While Not (entrada.atEndOfStream)
texto = entrada.ReadLine
salida.WriteLine texto
Loop
Uso de Sistemas de Fichero y E/S : Uso de Sistemas de Fichero y E/S Ejemplo 13: Copiar el contenido de un fichero en otro
Acceso a Bases de DatosASP : Acceso a Bases de DatosASP
Acceso a Bases de Datos : Acceso a Bases de Datos Introducción a BBDD
Microsoft Access
Acceso a BBDD con ASP
Introducción a BBDD : Introducción a BBDD Base de datos
Conjunto de datos interrelacionados
Almacenados sistemáticamente
Gestor de base de datos
Programa informático
Almacena los datos de forma eficiente
Permite acceder rápidamente a los datos
SQL – Structured Query Language
Lenguaje estándar de interrogación
Es un estándar ANSI/ISO
Pronunciado ‘esquiuel’
Ejemplo de BBDD : Ejemplo de BBDD
SQL: Sentencia USE : SQL: Sentencia USE Seleccionar la BBDD a la que se desea acceder
Los lenguajes de programación proporcionan una función
SQL: Sentencia SELECT : SQL: Sentencia SELECT Consulta una BBDD
SELECT DISTINCT [*|cols][FROM table-list][WHERE expr][GROUP BY expr-list][HAVING expr][ORDER BY sort-expr-list]
SELECT apellidos, email FROM estudiantes : SELECT apellidos, email FROM estudiantes
SELECT apellidos, email FROM estudiantes : SELECT apellidos, email FROM estudiantes
SELECT apellidos FROM estudiantes WHERE nota>=5 : SELECT apellidos FROM estudiantes WHERE nota>=5
SELECT apellidos FROM estudiantes WHERE nota>=5 : SELECT apellidos FROM estudiantes WHERE nota>=5
Operador LIKE : Operador LIKE Busca una subcadena
El símbolo % encaja con cualquier cosa
Ejemplos
LIKE ‘ma%’ = Empieza por ‘ma’
LIKE ‘%id’ = Acaba por ‘id’
LIKE ‘Ma%id’ = Empieza por ‘ma y acaba por ‘id’
LIKE ‘%dr%’ = Contiene la cadena ‘dr’
SELECT * FROM estudiantes WHERE email LIKE ‘%ma%’ : SELECT * FROM estudiantes WHERE email LIKE ‘%ma%’
SELECT * FROM estudiantes WHERE email LIKE ‘%ma%’ : SELECT * FROM estudiantes WHERE email LIKE ‘%ma%’
SQL: Sentencia INSERT : SQL: Sentencia INSERT Añade nuevas entradas a una tabla
INSERT INTO table-name[(column-list)]VALUES(value-list)
Ejemplo:
INSERT INTO estudiantes VALUES (983476, ‘Ruiz Santos’, ‘Carmen’, ‘’, 8)
Ejemplo: INSERT : Ejemplo: INSERT
SQL: Sentencia UPDATE : SQL: Sentencia UPDATE Modifica datos ya existentes en una BBDD
UPDATE table-nameSET assignment [, assignment]*[WHERE expr]
Ejemplo
UPDATE estudiantesSET apellidos = ‘Castro Martín’ WHERE matricula = 960535
Ejemplo: UPDATE : Ejemplo: UPDATE
SQL: Sentencia DELETE : SQL: Sentencia DELETE Elimina entradas de la BBDD
DELETE FROM table-name[WHERE expr]
Ejemplo:
DELETE FROM estudiantesWHERE nota < 5
Ejemplo: DELETE : Ejemplo: DELETE
Microsoft Access : Microsoft Access Ejemplo 14: Crear una base de datos en Access, según lo explicado en clase. Las tablas van a ser:
Persona: Información sobre una persona
Compra: Que persona compra que producto??
Producto: Información sobre un producto
Acceso a Base de Datos : Acceso a Base de Datos ADO OLEDB ODBC ActiveX Data Objects BD Open DataBase Connectivity OLE DataBase
Objetos para acceso a BD : Objetos para acceso a BD Objecto Connection
Representa la conexión con la BD
Objecto RecordSet
Representa una tabla de datos proveniente de realizar una consulta
Un objeto se crea con el comando Set.
<% Set nombre_obj = ... %>
Los objetos se cierran con el método Close. <% nombre_obj.Close %>
Y por último se destruyen...
<% Set nombre_obj = Nothing %>
Acceso a BBDD con ASP : Acceso a BBDD con ASP Acceso a BBDD con ASP
Creacion de la conexión con la BD
Acceso “REAL” a la BD (consulta, etc)
Cierre de la conexión
Acceso a los datos obtenidos (record)
Acceso a BBDD con ASP : Acceso a BBDD con ASP <%
‘Creación del objeto Connection
Set Conn= Server.CreateObject("ADODB.Connection")
‘Apertura de la BD
Conn.open “PROVIDER=Microsoft.Jet.OLEDB.4.0;
DATA SOURCE= C:\inetpub\wwwroot\alumnos.mdb;”
‘Ejecución de una Query
sSQL = "SELECT * FROM alumnos"
Set rsDatos = Conn.Execute (sSQL)
%>
Acceso a BBDD con ASP : Acceso a BBDD con ASP <%
‘Ejecución de una Query Compleja, a partir de un formulario
sSQL="SELECT * FROM alumnos WHERE Codigo=" & Request.QueryString("codigo")
Set rsDatos = Conn.Execute (sSQL)
%>
Acceso a BBDD con ASP : Acceso a BBDD con ASP <%
‘Cierre de la conexión con la BD
Conn.Close
‘Asignar a “nada” la variable utilizada
Set Conn = Nothing
‘Cierre del record obtenido
rsDatos.Close
‘Asignar a “nada” la variable utilizada
Set rsDatos = Nothing
%>
Acceso a los datos obtenidos : Acceso a los datos obtenidos
| Nombre
| Apellidos
| Más información
<% Do While Not rsDatos.EOF %>
|
| <% Response.Write(rsDatos("Nombre"))%> |
<% Response.Write(rsDatos("Apellidos"))%> |
">Detalles |
<% rsDatos.Movenext %>
<% Loop %>
<% Conn.Close
Set Conn = Nothing
rsDatos.Close
Set rsDatos = Nothing %> Recomendación: if Not rsDatos.Eof Then …
BBDD con ODBC : BBDD con ODBC
BBDD con ODBC : BBDD con ODBC
BBDD con ODBC : BBDD con ODBC
Acceso a BBDD : Acceso a BBDD Ejemplo 15: Consulta a Base de Datos
Realizar una página Web que acceda la base de datos clase.mdb, a la que habremos dado como DSN el nombre de "clase".
Ejemplo 16: Inserción en Base de Datos
Ejemplo 17: Modificación y Borrado en Base de Datos
Ejemplo 18: Informacion de un Libro
Otros ejemplos:
Buscador Alumnos
Buscador Libros
ReferenciasASP : ReferenciasASP
Referencias : Referencias Programación de Aplicaciones Web.S. Rodríguez, F. Pérez, J. Carretero, F. García, A. García, D. Nevado, M.S. Pérez, V. Robles, F. Rosales (2003). Editorial: Thomson. ISBN: 84-9732-181-2.
ASP - MSDN Microsoft
http://msdn2.microsoft.com/en-us/library/aa286483.aspx
Directorio ASP
http://dmoz.org/World/Español/Computadoras/Programación/Lenguajes/ASP/
ASPActive Server Pages : ASPActive Server Pages Oscar Cubo Medina
Santiago González Tortosa
Victor Robles Forcada
Programación Web en Servidor
INEM – 2007