FI6/97

ASP, qu'est-ce que c'est?
(Active Server Pages de Microsoft)

par Christian Zufferey , SIC

Table des matières


Dans l'excellent article de Stéfane Bernel, Illustra en test de l'automne passé, nous avons été ébahis par la facilité avec laquelle on pouvait fabriquer des pages HTML depuis une base de données comme par exemple:

<HTML>
<HEAD>
<TITLE>Test Illustra</TITLE>
</HEAD>
<BODY>
<H1>Index des Flash Informatique</H1>
<TABLE BORDER>
<TR><TH>No<TH>Auteur<TH>Titre 
<?MISQL SQL=" select ID,Titre,NomMail(Auteur),Ref from FI order by Ref asc;">
<TR><TH>$1<TH>$(REPLACE,$3,NULL,)
<TH> <A HREF="Webdriver?MItab=FI&MIval=$4">$2</A> 
<?/MISQL>
</TABLE>
<P>
</BODY>
</HTML> 

En lisant les autres articles concernant ce sujet et en voyant à quelle vitesse les pages HTML statiques vieillissent, on comprend rapidement que l'avenir (sérieux) du WEB passera par des pages HTML pondues au vol via des bases de données. On a aussi rapidement déchanté quand on s'est aperçu du prix de la solution Illustra et de sa relative complexité à mettre en oeuvre... bref, c'était un beau jouet, mais pas pour tout le monde. Mais l'idée était lancée.

Depuis pas mal de temps déjà, ll y avait bien, Microsoft avec son Internet Database Connector comme solution boiteuse, mais ce n'était pas la panacée. Les vendeurs de bases de données(Oracle, Ingres et même Filemaker) avaient aussi une solution database/WEB, mais ce n'était toujours pas le pied... et enfin Billy est arrivé avec ses gros pieds et ASP!

Petite parenthèse, tout le monde croit que je suis pro Microsoft... hum... hum... en fait, je ne suis pas fondamentalement pro Microsoft, je suis pro solution simple, puissante, accessible à tous et bon marché. Et en l'occurrence, celui qui a assez d'argent pour racheter des solutions simples et puissantes et ensuite noyer le marché à des prix défiants toute concurrence, l'a fait... Voilà qui est dit.

Bref, fin de l'année 1996 Microsoft sort ASP.

ASP, qu'est-ce au juste? très peu connu (bizarre pour un produit Microsoft) même chez Microsoft France qui, ce printemps encore nous disaient qu'ils ne connaissaient pas ce genre de produit (véridique). J'écris donc cet article pour vous faire découvrir ce merveilleux produit si peu connu. Avant de l'écrire, j'avais déjà rédigé un petit cours flash sur ASP, alors, vu la place limitée dans ces pages je ne peux que vous conseiller de jeter un petit coup d'oeil sur http://pcline.epfl.ch/pc/net/asp/coursasp.htm .

Retour à la table des matières

ASP, qu'est-ce?

C'est l'acronyme de Active Server Pages, qui à lui seul résume l'ensemble. C'est un serveur WEB de pages HTML actives.

ASP est un module supplémentaire ajouté au serveur IIS 2 (Internet Information Server ) de Microsoft (serveur HTTPD). En fait il devient IIS 3 et fait partie intégrante de Windows NT 4 Server (d'où son relativement faible coût...). On peut aussi installer ASP sur le Personal WEB Server de Microsoft qui tourne sous Windows 95.

ASP ne peut pas tourner sans un serveur, souvenez-vous: Active Server Pages; donc il est exclu de lire des pages .asp depuis un CD-ROM par exemple.

La philosophie ASP

ASP possède un interpréteur de commandes VBScript ou JScript et un module interface ODBC (Open Data Base Connectivity), qui permet de rendre actives des pages HTML. C'est-à-dire: les pages HTML ne sont plus statiques mais dynamiques, elles évoluent en fonction de certaines actions ou de certaines données. Et c'est tout, je répète pour les personnes qui n'auraient pas très bien entendu... un interpréteur de commande et une interface ODBC, mais pas de base de données. Oh, oh, on avait justement dit précédemment que c'était important d'avoir une base de données. C'est là que se trouve l'astuce d'ASP. ASP ne nous fige pas à une base de données soit disant propriétaire, il utilise toute base de donnée qui possède un connecteur ODBC. Et cela va d'un fichier ASCII ou Excel à une base de données de puissance modulable, de MS Access à Oracle en passant par MS SQL Server, on pourrait même envisager une base relationnelle-objet quelconque. Tout va se jouer avec l'ODBC qui est en fait un translateur «base de données / application SQL».

De manière conventionnelle (âge de la pierre taillée), on utilisait une moulinette (généralement script PERL) générant la page HTML. Le squelette de la page HTML est alors le script, c'est le script qui produit les commandes HTML. Généralement le nom de l'URL se termine par un .pl, ce qui permet au serveur (sous Windows NT) de traiter le fichier avant de l'envoyer.

Voici le script en PERL produisant une page HTML qui convertit une monnaie dans une autre selon un certain taux:

#!/usr/local/bin/perl
print "Content-type: text/html\n\n"; 
print "<title>essai conversion</title>\n";

$query = $ENV{QUERY_STRING};
@fields = split (/&/, $query);
for $field (@fields) {
next unless ($field =~ /=/);
($name, $value) = split(/=/, $field, 2); $CONTENTS{$name} .= ' ' if ($CONTENTS{$name}); 
$CONTENTS{$name} .= "$value"; 
}
print "<h1>résultat</h1>\n";
print "la quantité $CONTENTS{quant} au taux de $CONTENTS{taux} est ".$CONTENTS{quant} *$CONTENTS{taux}."<br> Merci.\n";
exit;

On se trouve dans un mode d'interprétation de commandes PERL qui produit de l'HTML au vol... et il est exclu d'ouvrir ce fichier avec un éditeur HTML pour en modifier la mise en page... tout doit être donc fait à la main.

On voit la relative difficulté de récupération des paramètres d'entrée de l'URL, ceux qui rendent justement la page HTML dynamique. (Mais attention, le PERL est un langage très puissant pour la gestion des chaînes de caractères, mais il n'est pas forcément accessible à tous en 5 minutes).

Voyons maintenant la même chose, mais avec un serveur ASP:

<html>
<head>
<meta http-equiv="Content-Type"
content="text/html; charset=iso-8859-1">
<meta name="GENERATOR" content="Microsoft FrontPage 2.0">
<title>Résultat de la conversion...</title>
</head>
<h1 align="center">Résultat de la conversion...</h1>
<p>Alors, <%= Request.Form("t2")%> converti au taux de change <%= Request.Form("t1")%> font : <%= Request.Form("t1") * Request.Form("t2")%>
</p><p>Merci.</p> 
</html>

Ici, par contre, le squelette est un fichier en HTML et il y a des intrusions en commandes ASP. Ce fichier peut être traité sans autre avec un éditeur HTML pour sa mise en page.

On voit bien la relative difficulté de récupération des paramètres d'entrée de l'URL, ceux qui rendent justement la page HTML dynamique.

Le nom de l'URL se termine toujours par un .asp, ce qui permet au serveur de traiter le fichier avant de l'envoyer.

Le langage utilisé par l'ASP peut être actuellement (on peut très bien envisager d'autres langages) soit le VBScript ou le Jscript. Le VBScript sera préféré par les utilisateurs PC qui connaissent le Visual Basic (voire pour certains le Basic). Le Jscript lui sera préféré par les utilisateurs de C. On voit donc qu'il y en a pour tout le monde.

ATTENTION:
Il ne faut pas confondre le VBScript ou Jscript exécuté par le browser avec le VBScript ou Jscript exécuté par le serveur ASP. Dans le premier cas, il faut un browser qui soit capable d'exécuter lesdites commandes; dans le second cas, comme les commandes sont exécutées par le serveur, n'importe quel browser fera l'affaire.

Retour à la table des matières

Utilisation de VBScript avec FP97

Comme on a pu s'en apercevoir dans le petit source ASP donné plus haut, toutes les commandes ASP doivent débuter par <% et se terminer par %>. Si l'on édite les pages HTML avec un éditeur autre que FP97 (FrontPage97 ), il faudra chaque fois les ajouter. FP97 lui, par contre le fera automatiquement.

La représentation des groupes de commandes ASP sous FP97 a la forme suivante:

Chaque groupe est représenté par une petite icône, par un double-clic dessus il est possible de modifier les commandes:

Il ne faut pas oublier de spécifier le type de langage utilisé et surtout de forcer l'exécution sur le serveur.

Nous allons voir maintenant comment afficher 3 fois le mot hello et la valeur du compteur de la boucle , le résultat va nous donner:

hello 1
hello 2
hello 3

le source aura la forme suivante:

<%for i=1 to 3%> 
hello <%= i%><p>
<%next%>

et l'aspect de ce source sous FP97:

Dans la première icône nous avons: <%for i=1 to 3%>, c'est l'initialisation de la boucle avec comme variable de compteur i.

Dans la seconde icône nous avons: <%= i%>, c'est l'affichage de la variable i, le pseudo print du basic est remplacé ici par un =. Attention à ne pas l'oublier et aussi à ne pas le mettre quand on utilise la variable dans un calcul par exemple.

Et dans la troisième icône nous avons: <%next%>, c'est la fin de la boucle.

Nous allons voir maintenant, le même exemple, mais avec l'affichage dans un tableau:

et l'aspect de ce source sous FP97:

Il faut faire un tableau de 3 lignes et 2 colonnes, les deux premières cellules et les deux dernières doivent êtres fusionnées et contenir le début de la boucle et la fin de la boucle. Les deux cellules du milieu du tableau contiennent l'information à afficher. C'est ainsi que l'on peut faire un tableau dynamique sous FP97, avec rupture automatique des lignes du tableau.

Retour à la table des matières

Création de formes avec FP97

Voyons maintenant, ce dont nous avons toujours rêvé, la création de formes ET l'utilisation de formes sous FP97, donc avec un petit script qui va s'occuper du résultat de la forme.

Nous allons développer une petite application pour convertir une monnaie dans une autre monnaie selon un taux donné. Afin de simplifier la compréhension, nous l'avons coupée en deux: un fichier statique .htm et un fichier dynamique .asp.

La petite application se présente dans un browser comme suit:

ce qui donnera dans un browser:

Elle sera représentée dans le fichier .htm dans FP97 ainsi:

et dans le fichier .asp dans FP97:

Avec le source ASP:

<h1 align="center">Résultat de la conversion...</h1>
<p>Alors, <%= Request.Form("t2")%> converti au taux de change <%= Request.Form("t1")%>  
font : <%= Request.Form("t1") * Request.Form("t2")%></p>
<p>Merci.</p>

On travaille,ici, avec des variables de type VARIANT, c'est le VBScript qui se débrouille pour que les types jouent; on mélange agréablement des variables de type numérique avec du texte. Bien entendu, on peut spécifier le type de variables quand on a des grands codes afin de d'éviter des erreurs de mauvais type de variables.

On peut, c'est très agréable, voire indispensable, utiliser un éditeur HTML pour la mise en page des pages .asp, parce que, justement , le principe de l'ASP est d'avoir un squelette HTML avec des tags ASP.

Retour à la table des matières

Utilisation du module ODBC

On se rend compte tout de suite que lorsqu'on fait des pages HTML dynamiques, il faut généralement utiliser une grande quantité de données ou d'information. C'est là que rentre en jeu l'utilisation d'une base de données, avec tous les outils propres à sa gestion, pour fabriquer les pages HTML. Toute la puissance de l'ASP est révélée alors ici.

Le grand avantage d'un serveur ASP (voir ci-dessus), c'est qu'il utilise comme gateway entre le WEB et la base de donnée le standard ODBC (Open Data Base Connectivity). Cela veut dire qu'autant une base de données MS Access, qu'un fichier MS Excel, texte, ou DBASE ou encore qu'une base de données SQL, enfin tout ce qui peut traiter des données et qui possède un driver ODBC, peut être utilisé par le serveur ASP.

Dans un premier temps, pour faire votre maquette ou pour de petits serveurs, vous pouvez utiliser la base de données MS Access, puis, si votre application est très exigeante au niveau des performances ou des tailles de données, vous pouvez passer par la suite sur un SQL Server.

Pour information, le moteur de base de données MS Access est fourni avec IIS 3 (le moteur, pas l'application), et c'est amplement suffisant pour faire tourner un serveur ASP.

Pour m'en convaincre j'ai fait une petite base de données de 4'200'000 enregistrements (oui, plus de quatre millions, taille du fichier > 500MB) que j'ai fait tourner via un serveur ASP sur un bon vieux 486-33MHz-24MBytes RAM avec Windows NT Server, eh bien vous ne le croirez pas, mais cela fonctionne de manière tout-à-fait correcte... incroyable non ?

Encore une chose, un connecteur ODBC sur un fichier texte n'est pas une idée stupide en soi, pensez aux nombreux fichiers à plat produits par certaines administations !!

Pour utiliser le module ADO (ActiveX Data Objects) avec un serveur ASP, vous devez:

  1. créer votre base de données, par exemple avec MS Access;
  2. la connecter sur un port ODBC DSN System, via le ODBC du Control Panel;

  1. 3. puis enfin, créer les pages ASP.

Nous allons voir un petit exemple pour Affichage sous forme de table la base de données:

Voici l'aspect de .asp sous FP97:

et son code source:

<p><%Set Conn = Server.CreateObject("ADODB. Connection") 
Conn.Open "DemoASP1" 
Set RS = Conn.Execute("SELECT * FROM Requête1") %></p> 
<div align="center"><center>
<table border="1">
     <tr>
          <td><% For i = 0 to RS.Fields.Count - 1 %></td>
          <td><b><% = RS(i).Name %></b></td>            
          <td><% Next %></td>
     </tr>
     <tr>
          <td colspan="3"><% Do While Not RS.EOF %></td>
     </tr>
     <tr>
          <td><% For i = 0 to RS.Fields.Count - 1 %></td>
          <td><% = RS(i) %></td>
          <td><% Next %></td>
     </tr>
     <tr>
          <td colspan="3"><%  RS.MoveNext
Loop
RS.Close
Conn.Close %>
</td>
     </tr>
</table>
</center></div>

Ici tout est dynamique, c'est à dire que l'on dump toute la base dans une table.

Voici maintenant un exemple d'affichage d'un enregistrement à la fois avec une barre d'outils pour se déplacer dans la base:

Voici l'aspect de .asp sous FP97:

et son code source (extrait):

<form action="db2.asp" method="GET">
     <div align="center"><center><table border="0">

          <tr>
               <td align="right">Index:</td>
               <td><input type="text" size="20" name="T0" value="<%= RS("#Index") %>"></td>
          </tr>
          <tr>
               <td align="right">Nom: </td>  
               <td><input type="text" size="20" name="T1"  value="<%= RS("Nom") %>"></td>  
          </tr>
          <tr>
               <td align="right">PrÈnom: </td>  
               <td><input type="text" size="20" name="T2"  value="<%= RS("PrÈnom") %>"></td>  
          </tr>
          <tr>
               <td align="right">Num Tel: </td>  
               <td><input type="text" size="20" name="T3"  value="<%= RS("NumTel") %>"></td>  
          </tr>
          <tr>
               <td align="right">eMail: </td>  
               <td><input type="text" size="20" name="T4"  value="<%= RS("eMail") %>"></td>  
          </tr>
     </table>
     </center></div><div align="center"><center><table border="0"  cellpadding="5">
          <tr>
               <td align="center"><input type="submit" name="B1"  value="|<"><input type="submit" name="B2"  value="<"><input type="submit" name="B3"  value=">"><input type="submit" name="B4"  value=">|"></td>
          </tr>
     </table>
     </center></div>
</form>

Retour à la table des matières

En conclusion...

Et nous voici à la conclusion, la partie la plus importante d'un article, car c'est celle qu'on lit quand on n'a pas le temps...

On a tous compris que l'avenir du WEB sera aux pages dynamiques et si possible avec une base de données. Pour mémoire les solutions pages WEB dynamiques proposées par Illustra ou Oracle coûtent quelques dizaines de milliers de francs, donc sont inaccessibles à des PME ou des petites gens comme nous.

La solution ASP est de l'ordre de grandeur 5 kF pour la machine et 1kF pour Windows NT4 Server (ASP, le moteur MS Access et FrontPage 97 sont compris dans NT).

Avec une configuration de ce type vous pourrez développer une application du genre RegArt (l'agenda culturel de Suisse romande, http://www.regart.ch ) sans faire sauter vos crédits.


retour au sommaire du Flash informatique no 6/97

retour à la page principale des Flash informatique

Vos commentaires

© FI-6 du 17 juin 1997