Active Server Pages (ASP) es una nueva tecnología creada por Microsoft, destinada a la creación de sitios web. No se trata de un lenguaje de programación en sí mismo (ya que los ASP se pueden programar en VBScript, JavaScript, PerlScript o en varios otros lenguajes), sino de un marco sobre el que construir aplicaciones basadas en Internet.
La tecnología ASP apareció por primera vez (version 1.0) con el servidor
Internet Information Server 3.0 de Microsoft en Diciembre de 1996. La
versión 4.0 de IIS (el Option Pack para NT 4.0) incluye la versión 2.0 de
ASP,
y la versión 5.0 de IIS, distribuída con Windows 2000, incluye ASP
3.0.
Los predecesores de ASP incluyen CGI y Perl. Las tecnologías de Microsoft predecesoras de ASP incluyen IDC y WebDB. Otras tecnologías que compiten con ASP son ColdFusion (Allaire), JavaServer Pages (Sun Microsystems) y PHP (de libre distribución bajo Open System).
Algunas de las características de ASP son:
· ASP es totalmente gratuito para Microsoft Windows NT o Windows 95/98.
· El código ASP se puede mezclar con el código HTML en la misma página (no es necesario compilarlo por separado).
· El código ASP se puede escribir con un simple editor de textos como el Bloc de notas de Windows o UltraEdit.
· Cómo el código ASP se ejecuta en el servidor, y produce como salida código HTML puro, su resultado es entendible por todos los navegadores existentes.
· Mediante ASP se pueden manipular bases de datos (consultas, actualizaciones, borrados, etc.) de prácticamente cualquier plataforma, con tal de que proporcione un driver OLEDB u ODBC.
· ASP permite usar componentes escritos en otros lenguajes (C++, Visual Basic, Delphi), que se pueden llamar desde los guiones ASP.
· Sin modificar la instalación, los guiones ASP se pueden programar en JScript o VBScript (este último es el más usado porque mas programadores lo dominan), pero también existen otros lenguajes, como Perlscript y Rexx, que se pueden emplear para programar ASP.
· Se ha portado a la plataforma Java por Chili!Soft y Halcyon Software, lo que permite que ASP sea usado en casi cualquier sistema operativo.
Las principales ventajas que ofrece ASP son:
1. Permite acceder a bases de datos de una forma sencilla y rápida.
2. Las páginas se generan dinámicamente mediante el código de scripts, (guiones).
3. El código de script se ejecuta en el servidor, y no se depende del navegador que se emplee.
4. Desde una página ASP se pueden ejecutar servidores OLE en el servidor de web, lo que abre un abanico de nuevas posibilidades sólo accesibles previamente usando CGI y filtros ISAPI: acceso a base de datos, acceso a ficheros, logging en el sistema, envío de correo, etc.
La tecnología ASP se emplea principalmente para crear aplicaciones interactivas que funcionan en Internet.
Para programar ASP se necesita, como mínimo, un servidor de web (Microsoft Personal Web Server para Windows 95/98 o Internet Information Server 3.0/4.0/5.0 para Windows NT 4.0) y un simple editor de textos como el Bloc de notas de Windows para escribir los guiones.
Si se quiere acceder a una base de datos, se puede usar una conexión ODBC, una conexión OLE-DB, o una ruta física. Como plataforma de bases de datos, una simple base de datos hecha en Microsoft Access es suficiente[1].
Existen dos formas de incluir código ASP en una página web:
1. Escribiéndolo entre las etiquetas <SCRIPT> y </SCRIPT>. En el atributo LANGUAGE podemos indicar en que lenguaje se está programando. Para distinguir el código de script que se ejecuta en el servidor del que se ejecuta en el cliente, se emplea el atributo RUNAT=”Server”:
<SCRIPT LANGUAGE=”VBScript” RUNAT=”Server”>
‘ código
</SCRIPT>
2. Escribiéndolo entre los delimitadores <% y %>. Si se usa este atajo, por defecto se usará el lenguaje especificado por el usuario en el Registro de Opciones de ASP. Si se quiere utilizar otro lenguaje, se debe indicar al inicio de la página con la instrucción :
ASP incluye seis objetos nativos, que podemos usar en nuestros programas. Al contrario que otros modelos de objetos (como DOM, por ejemplo), los objetos ASP no forman una jerarquía. Únicamente se relacionan entre sí de forma lógica, no a través de una relación padre-hijo. El diagrama de la Figura 1 muestra las relaciones.
Este objeto nos facilita toda la información sobre la petición HTTP que un usuario realiza a nuestro servidor (informa sobre todo lo que llega al servidor desde el cliente). Puede incluir parámetros obtenidos a partir de un formulario HTML mediante los métodos POST o GET, cookies y certificados que posea el cliente, y las variables del servidor. Esta tabla muestra las colecciones, propiedades, y métodos a que podemos acceder con este objeto.
Request | ||
Colecciones[2] |
Propiedades |
Métodos |
QueryString Form ServerVariables Cookies ClientCertificate |
TotalBytes |
BinaryRead |
Este objeto maneja toda la información que se envía desde el servidor al cliente. Incluye el envío de información directamente al navegador del cliente, redirección del navegador hacia otra URL o fijar el valor de las cookies[3]. Esta tabla muestra las colecciones, propiedades, y métodos a que podemos acceder con este objeto.
Response | ||
Colecciones |
Propiedades |
Métodos |
Cookies |
Buffer CacheControl Charset ContentType Expires ExpiresAbsolute IsClientConnected PICS Status |
AddHeader AppendToLog BinaryWrite Clear End Flush Redirect Write |
Este objeto proporciona propiedades y métodos que están relacionados con el servidor donde se ejecuta nuestra aplicación. Normalmente se usa para crear una instancia de un componente ActiveX[4] o fijar el tiempo de validez de un guión. Esta tabla muestra las propiedades, y métodos a que podemos acceder con este objeto.
Server | ||
Colecciones |
Propiedades |
Métodos |
|
ScriptTimeout |
CreateObject HTMLEncode MapPath URLEncode |
Este objeto se emplea para compartir información entre todos los usuarios de una
aplicación (existe un único objeto Application que comparten todos los
usuarios). Una aplicación tiene un periodo de vida, como cualquier otro
programa. Cuando se inicia se ejecuta el evento OnStart y cuando termina se produce el
evento OnEnd.
Esta
tabla muestra las colecciones, propiedades, y métodos a que podemos acceder con
este objeto.
Application | ||
Colecciones |
Métodos |
Eventos |
Contents StaticObjects |
Lock Unlock |
OnStart OnEnd |
A cada cliente que solicita una página ASP se le asigna un objeto Session. La información almacenada en este objeto es individual para cada usuario, y se conserva el valor al pasar de una página a otra. Se crea un objeto Session la primera vez que un cliente solicita una página y se destruye, por defecto, veinte minutos después de que se haya realizado la última petición. El tiempo de vida es configurable. Cuando se inicia una sesión se produce el evento OnStart y cuando termina se produce OnEnd. Esta tabla muestra las colecciones, propiedades, y métodos a que podemos acceder con este objeto.
Session | |||
Colecciones |
Propiedades |
Métodos |
Eventos |
Contents StaticObjects |
CodePage LCID SessionID Timeout |
Abandon |
OnStart OnEnd |
Este objeto
se emplea para gestionar transacciones[5].
La
tabla muestra los métodos y eventos a que podemos acceder con este
objeto.
ObjectContext | |||
Colecciones |
Propiedades |
Métodos |
Eventos |
|
|
SetComplete SetAbandon |
OnTransactionCommit OnTransactionAbort |
Ejemplo 1
Muestra la hora y la fecha actuales. Según la hora del día muestra un mensaje. Muestra otro mensaje de forma aleatoria. En la Figura 2 podemos observar el resultado que se obtiene al solicitar esta página.
<HTML>
<HEAD>
<TITLE>Servidor educado</TITLE>
</HEAD>
<BODY BGCOLOR="Wheat">
<FONT COLOR="Teal" SIZE="5"><B>
El servidor educado le informa que son las <% = Time %> del día <% = Date %>
</B></FONT>
<P><B>
<% If Hour(Now) < 8 Then %>
Estas no son horas de conectarse, estoy durmiendo!
<% ElseIf Hour(Now) < 15 Then %>
Estoy trabajando, no moleste.
<% Else %>
La tarde es para descansar, ver la tele, dormir, ...
<% End If
Response.Write("<BR><BR>")
Randomize
i = Int(Rnd * 4)
Select Case i
Case 0
Response.Write("Hace buen día, ¿ verdad ?")
Case 1
Response.Write("Me parece que hoy lloverá.")
Case 2
Response.Write("Esta tarde llueve seguro.")
Case 3
Response.Write("Que sol mas espléndido.")
End Select
%>
</B>
</BODY>
</HTML>
Ejemplo 2
Muestra el valor de una serie de variables que posee el servidor y que proporcionan información interesante sobre el servidor y sobre la conexión realizada por el cliente. En la Figura 3 se muestra la página que obtiene al solicitarla con un navegador Netscape Communicator 4.6. En la Figura 4 tenemos la misma página cuando se solicita con Microsoft Internet Explorer 4.0.
<HTML>
<HEAD>
<TITLE>Variables del servidor</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF">
<%
Response.Write("<PRE>" & vbCrLf)
Response.Write("ALL_HTTP: " & Request.ServerVariables("ALL_HTTP") & "<BR>")
Response.Write("</PRE>" & vbCrLf)
Response.Write("<HR>" & vbCrLf)
Response.Write("HTTP_ACCEPT_LANGUAGE: " & Request.ServerVariables("HTTP_ACCEPT_LANGUAGE") & "<BR>")
Response.Write("HTTP_USER_AGENT: " & Request.ServerVariables("HTTP_USER_AGENT") & "<BR>")
Response.Write("REMOTE_ADDR: " & Request.ServerVariables("REMOTE_ADDR") & "<BR>")
Response.Write("REMOTE_HOST: " & Request.ServerVariables("REMOTE_HOST") & "<BR>")
Response.Write("URL: " & Request.ServerVariables("URL") & "<BR>")
Response.Write("<HR>" & vbCrLf)
If InStr(Request.ServerVariables("HTTP_ACCEPT_LANGUAGE"), "es") > 0 Then
Response.Write("Se elige el idioma español")
Else
Response.Write("Se elige otro idioma")
End If
%>
</BODY>
</HTML>
Las siguientes 2
figuras muestran el resultado obtenido con distintos navegadores.
Ejemplo 3
Obtiene los datos introducidos por un usuario y los muestra en una página. La página que solicita los datos es (fichero 3f.html):
<HTML>
<HEAD>
<TITLE>Formulario de entrada</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF">
<FORM NAME="Formulario" ACTION="3r.asp" METHOD="POST">
Nombre: <INPUT TYPE="TEXT" NAME="nombre" SIZE="20"><BR>
Apellidos: <INPUT TYPE="TEXT" NAME="apellidos" SIZE="40"><BR>
Sexo:<BR>
H <INPUT TYPE="RADIO" NAME="sexo" VALUE="varon"> M <INPUT TYPE="RADIO" NAME="sexo" VALUE="hembra">
<BR><BR>
<INPUT TYPE="SUBMIT" VALUE="Enviar">
</FORM>
</BODY>
</HTML>
En la etiqueta FORM, el atributo ACTION contiene el nombre de la página de respuesta al formulario. La página de respuesta que muestra los datos introducidos en el formulario es (fichero 3r.asp):
<HTML>
<HEAD>
<TITLE>Datos obtenidos del formulario</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF">
Su nombre es <% = Request.Form("nombre") %>
<BR>
Sus apellidos son <% = Request.Form("apellidos") %>
<BR>
Su sexo es <% = Request.Form("sexo") %>
</BODY>
</HTML>
Ejemplo 4
Accede a una base de datos realizada en Microsoft Access que contiene una tabla Personal con los campos Nombre, Apellidos, Edad y Ciudad. Consulta las personas que viven en la ciudad de Alicante y las muestra en una tabla. Se accede mediante ODBC (el nombre asignado a la conexión es curso) a la base de datos.
<HTML>
<HEAD>
<TITLE>Acceso a base de datos</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF">
Personal de la oficina de Alicante:
<BR>
<TABLE BORDER="3">
<TR>
<TD><B>Nombre</B></TD>
<TD><B>Apellidos</B></TD>
<TD><B>Edad</B></TD>
</TR>
<%
'Abre la conexion con la base de datos a traves de una conexion ODBC
Set con = Server.CreateObject("ADODB.Connection")
con.Open "curso"
'Ejecuta un sentencia SQL de consulta
sql = "SELECT * FROM Personal WHERE Ciudad = 'Alicante'"
Set result = con.Execute(sql)
'Recorre todas las filas del resultado
Do While Not result.EOF
' Muestra la fila actual
Response.Write("<TR>" & vbCrLf)
Response.Write("<TD>" & result("Nombre") & "</TD>" & vbCrLf)
Response.Write("<TD>" & result("Apellidos") & "</TD>" & vbCrLf)
Response.Write("<TD>" & result("Edad") & "</TD>" & vbCrLf)
Response.Write("</TR>" & vbCrLf)
'Pasa a la siguiente fila
result.MoveNext
Loop
'Libera memoria
result.Close
Set result = Nothing
con.Close
Set con = Nothing
%>
</TABLE>
</BODY>
</HTML>
Ejemplo 5
Inserción en una base de datos a partir de un formulario. Se emplea la misma base de datos que la del ejemplo 4.
El código del formulario para la entrada de datos es (fichero 5f.html):
<HTML>
<HEAD>
<TITLE>Formulario de entrada</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF">
<FORM NAME="Formulario" ACTION="5r.asp" METHOD="POST">
<CENTER>
<TABLE BORDER=0>
<TR>
<TD>Nombre: </TD>
<TD><INPUT TYPE="TEXT" NAME="nombre" SIZE="20"></TD>
</TR>
<TR>
<TD>Apellidos: </TD>
<TD><INPUT TYPE="TEXT" NAME="apellidos" SIZE="40"></TD>
</TR>
<TR>
<TD>Edad: </TD>
<TD><INPUT TYPE="TEXT" NAME="edad" SIZE="2" MAXLENGTH="2"></TD>
</TR>
<TR>
<TD>Ciudad: </TD>
<TD><SELECT NAME="ciudad">
<OPTION VALUE="Alcoy">Alcoy
<OPTION VALUE="Alicante">Alicante
<OPTION VALUE="Elche">Elche
<OPTION VALUE="Orihuela">Orihuela
</SELECT></TD>
</TR>
</TABLE>
<BR><BR>
<INPUT TYPE="SUBMIT" VALUE="Enviar"> <INPUT TYPE="RESET" VALUE="Borrar">
</CENTER>
</FORM>
</BODY>
</HTML>
El código del ASP que realiza la inserción en la base de datos es (fichero 5f.asp):
<HTML>
<HEAD>
<TITLE>Inserción en la base de datos</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF">
<CENTER>
<B>
<%
nombre = Request.Form("nombre")
apellidos = Request.Form("apellidos")
edad = Request.Form("edad")
ciudad = Request.Form("ciudad")
'Abre la conexion con la base de datos a traves de una conexion ODBC
Set con = Server.CreateObject("ADODB.Connection")
con.Open "curso"
'Ejecuta un sentencia SQL de consulta
sql = "INSERT INTO
Personal (Nombre, Apellidos, Edad, Ciudad) “
sql = sql &
“VALUES('" & nombre & "', '"
sql = sql & apellidos & "', " & edad & ", '" & ciudad & "')"
con.Execute(sql)
If Err = 0 Then
Response.Write "Inserción correcta."
Else
Response.Write "Error en Inserción."
End If
'Libera memoria
con.Close
Set con = Nothing
%>
</B>
</CENTER>
</BODY>
</HTML>
Ejemplo 6
Diferencia entre el código que se ejecuta en el cliente y en el servidor. A continuación aparece el código fuente de una página ASP, el código que recibe el cliente una vez ejecutada la página en el servidor y como se visualiza en el navegador. El código que se ejecuta en el servidor aparece en negritas. Este código no llega al cliente.
<HTML>
<HEAD>
<TITLE>Mezcla de código script de cliente y de servidor</TITLE>
</HEAD>
<BODY BGCOLOR="beige" TEXT="darkseagreen">
<% VariableServidor = 6%>
<P>
Este valor se imprime por HTML: <FONT COLOR="chocolate">10</FONT>
Este valor se imprime por código de servidor:
<FONT COLOR="chocolate"><% = VariableServidor
%></FONT>
var VariableCliente;
VariableCliente = <% = VariableServidor %> + 1;
document.write('<P>Este valor se
imprime por código de cliente:
<FONT COLOR="chocolate">' +
VariableCliente + '</FONT>');
// OJO : las 2 líneas escritas arriba
deben escribirse en una sola línea.
</SCRIPT>
</BODY>
</HTML>
El resultado que se ha obtenido al evaluar el código de servidor aparece en negritas.
<HTML>
<HEAD>
<TITLE>Mezcla de código script de cliente y de servidor</TITLE>
</HEAD>
<BODY BGCOLOR="beige" TEXT="darkseagreen">
<P>
Este valor se imprime por HTML: <FONT COLOR="chocolate">10</FONT>
<P>
Este valor se imprime por código de servidor:
<FONT COLOR="chocolate">6</FONT>
VariableCliente = 6 + 1;
document.write('<P>Este valor se imprime por código de cliente: <FONT COLOR="chocolate">' + VariableCliente + '</FONT>');
</SCRIPT>
</BODY>
</HTML>
è Visualización en el navegador.
Figura 5
AspTracker.com: http://asptracker.com/
4GuysFromRolla.com: http://www.4guysfromrolla.com/
Allaire: http://www.allaire.com
ASP 101: http://www.asp101.com/
ASP Today: http://www.asptoday.com/
Chili!Soft, Inc.: http://www.chilisoft.net/
Halcyon Software: http://www.halcyonsoft.com/
Kathi’s Place: Active Server Pages (ASP):
http://www.attitude.com/users/kathi/asp/tools.html
LearnASP.com: http://www.learnasp.com/
PHP: http://www.php.net/
ServerObjects Inc.: http://www.serverobjects.com/products.htm
Llibre, Juan; Francis, Brian y otros (2000), Beginnning Active Server Pages 3.0, (Wrox Press, Ltd.)
Fedorov, Alex; Francis, Brian y otros (1998), Professional Active Server Pages 2.0, (Wrox Press, Ltd.)
Homer, Alex; Sussman, David
(1998), Professional MTS and MSMQ with VB and ASP, (Wrox Press, Ltd.)
Whatis.com Inc. (1999), “What is…Active Server Pages (ASP (a definition))”, en http://www.whatis.com/asp.htm
Whitcomb, Valerie (1997), “Client
and Server Scripting in Web Pages”, en http://msdn.microsoft.com/library/techart/msdn_viscript.htm
Créditos
Autor
original : Sergio Luján Mora, Laboratorio Multimedia de la Universidad de
Alicante, Alicante, España
Editado y Revisado por : Juan T. Llibre,
Universidad Nacional Pedro Henríquez Ureña, Santo Domingo,
República
Dominicana; http://asptracker.com y http://aspespanol.com
Comentarios a : aspespanol@aspespanol.com
[1] Para acceder a los ficheros .mdb de Access desde un ASP no es necesario tener instalado Microsoft Access. Sólo hace falta el driver ODBC correspondiente.