Introduction Aux Systèmes d’Information et Multimédia
Introduction Aux Systèmes d’Information et Multimédia
T. Bourdeaud’huy S. Collart-Dutilleul
P. KubiakIG2I - Saison 2006/2007
ASP / Pages Web StatiquesASP / Pages Web Statiques
ISIM1 – Active Server Pages 2 T. Bourdeaud’huy – IG2I Saison 2006-2007
Séance 3Séance 3
QCM
Objet Server– Bases de données– Accès au Système de fichiers du serveur
– (à présenter APRES global.asa)
Fichier Global.asa Gestion des erreurs
Rappel : – Exemples de CTP sur le cours ReM2
OBJET SERVEROBJET SERVER
ISIM1 – Active Server Pages 4 T. Bourdeaud’huy – IG2I Saison 2006-2007
Objet SERVERObjet SERVER Représente le serveur Web et le moteur ASP Propriété
– ScriptTimeout : Temps maximum d'exécution des scripts ASP (90 secondes par défaut)
Méthodes – CreateObject(ObjectID) :
Crée une instance du composant serveur identifié par l'ObjectID – GetLastError :
Renvoie une instance d'objet ASPError représentant la dernière erreur survenue – HTMLEncode(chaine) :
Applique les règles d'encodage et de syntaxe du HTML à la chaîne de caractères passée en paramètre – URLEncode(chaine) :
Applique les règles d'encodage des URLs à la chaîne de caractères passée en paramètre – MapPath :
Transforme un chemin relatif ou virtuel pointant vers une ressource du site en un chemin physique– Execute(url) :
Exécute le script ASP indiqué par l'URL, puis rend la main au script appelant– Transfer(url) :
Exécute le script ASP indiqué par l'URL, sans rendre la main au script appelant
Exercice 20 : – Utiliser la fonction URLEncode pour passer un message dans l’url contenant les caractères spéciaux : <, &, = – Utiliser la fonction HTMLEncode pour afficher ce texte– Utiliser la fonction execute pour exécuter un script situé sur une autre page– Tester la fonction Mappath pour connaître le répertoire correspondant à votre répertoire partagé \\webasp\login$
sur le serveur
BASES DE DONNEESBASES DE DONNEES
ISIM1 – Active Server Pages 6 T. Bourdeaud’huy – IG2I Saison 2006-2007
Connexion à une base de données
Connexion à une base de données
Création d’un objet de connexion ODBC– SET objetConn = Server.CreateObject("ADODB.Connection")
Méthodes – Open("Nom_Lien_ODBC") : Ouverture de la base– Close : Fermeture de la base– Execute("Commande SQL") : Exécute une requête SQL
Renvoie un objet recordset
Ex : SET recordSet = objetConn.execute(SQL)
ISIM1 – Active Server Pages 7 T. Bourdeaud’huy – IG2I Saison 2006-2007
Sources de données ODBC
Sources de données ODBC
ODBC : Object Database Connectivity Source de données : DSN : Data Source Name
Privilèges d’Administration du Serveur : création de la source dans Panneau de Configuration/Administration/Sources de données ODBC/DSN Système
Chaînes sans DSN : spécifier driver & chemin de la BDD– "DBQ=" & Server.Mappath("mabase.mdb") & ";Driver={Microsoft Access
Driver (*.mdb)};DriverId=25"
– "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.mappath("compteur.mdb")
– Cf. moodle : syntaxe à respecter strictement
ISIM1 – Active Server Pages 8 T. Bourdeaud’huy – IG2I Saison 2006-2007
Objet RecordSetObjet RecordSet
Propriétés– Eof Plus d’enregistrement disponible
Collections– Fields : Enregistrements retournés (cas SELECT)
– Accès à des sous-éléments :
– rs.fields(0) : Premier champ de l’enregistrement
– rs.fields.count : Nombre de champs
– rs.fields(0).name : Nom du champ
Méthodes– MoveNext Passer à l’enregistrement suivant
– MoveFirst Retourner au premier enregistrement
– Move <n> Passer <n> enregistrements
ISIM1 – Active Server Pages 9 T. Bourdeaud’huy – IG2I Saison 2006-2007
Rappels de SQL (Structured Query Language)
Rappels de SQL (Structured Query Language)
SELECT [DISTINCT] <*|champ1,champ2> FROM `<Table>` SELECT … WHERE <ChampTexte>=‘<valeur>’ SELECT … WHERE <ChampNum>=<valeurNum> SELECT … WHERE <Champ> LIKE ‘%<valeur>%’ SELECT … WHERE <Champ> IN (‘val1’,’val2’) SELECT … WHERE <Champ> BETWEEN <Num1> AND <Num2> SELECT … WHERE … ORDER BY <champ1> ASC|DESC, … INSERT INTO <Table>(<champ1>, …) VALUES (‘<val1>’,…) DELETE FROM <Table> WHERE … UPDATE <Table> WHERE … SET <champ1>=‘<val1>’, …
ISIM1 – Active Server Pages 10 T. Bourdeaud’huy – IG2I Saison 2006-2007
ExercicesExercices
Exercice 21 : Modifier l’exemple d’identification pour lire les données à partir de la base de données– Ajouter des scripts d’administration : ajout, suppression et
modification des logins et passwords
Exercice 22 : Créer une page permettant d’entrer et d’exécuter une requête SQL quelconque – Afficher ses résultats dans le cas d’une requête de sélection
Système de fichiers du serveurSystème de fichiers du serveur
+ d’infos : poly compléments ASP sur moodle
ISIM1 – Active Server Pages 12 T. Bourdeaud’huy – IG2I Saison 2006-2007
Accès au système de fichiers
Accès au système de fichiers
Objet FILESYSTEMOBJECT : permet d’accéder aux fichiers et répertoires et disques du serveur
Création d’un objet de connexion au fichier systèmeSet OFS = Server.CreateObject("Scripting.FileSystemObject")
Permet de– Créer des objets d’accès aux disques– Créer des objets d’accès aux répertoires– Disposer de méthodes de manipulation des fichiers et répertoires– …
Rappel : chemin d’accès physique à un fichier :– cheminFichier = Server.MapPath("nom_fichier")
ISIM1 – Active Server Pages 13 T. Bourdeaud’huy – IG2I Saison 2006-2007
Disques : Objets DRIVE
Disques : Objets DRIVE
Collection DRIVES de FileSystemObject – Éléments de type DRIVE
Propriétés d’un objet « DRIVE » :DriveLetter : Lettre de lecteur
DriveType : Type du disque (0 : inconnu, 1 : Amovible, 2 : Fixe, 3 : Réseau, 4 : CD-Rom, 5 : Lecteur
RAM)
IsReady : Le média est inséré ou non
AvailableSpace : Espace disponible (également FreeSpace)
TotalSize : Espace disque total
VolumeName : Nom du disque
RootFolder : Objet FOLDER représentant la racine
… Exercice 23 : lister les lecteurs du serveurs
ISIM1 – Active Server Pages 14 T. Bourdeaud’huy – IG2I Saison 2006-2007
Répertoires : Objets FOLDER
Répertoires : Objets FOLDER
Propriétés– Name, Size, Attributes– DateCreated, DateLastAccessed, DateLastModified– ParentFolder : Objet FOLDER contenant son répertoire parent
Méthodes– Copy (chemin physique) : Copie le répertoire– Delete : Supprime le répertoire– Move (chemin physique) : Déplace le répertoire
Collections– Files : Objets FILE représentant les fichiers du répertoire– SubFolders : Objets FOLDER représentant ses sous-répertoires
Exercice 24 : lister les noms des sous-répertoires d’une lecteur– Version récursive avec une fonction
ISIM1 – Active Server Pages 15 T. Bourdeaud’huy – IG2I Saison 2006-2007
Fichiers : Objets FILE
Fichiers : Objets FILE
Propriétés
– Attributes, Datecreated, Datelastaccessed, Datelastmodified
– Name, Path, Size, Type
– Parentfolder : Objet FOLDER représentant le parent Méthodes
– Copy (chemin physique) : Copie le fichier
– Delete : Supprime le fichier
– Move (chemin physique) : Déplace le fichier
– Openastextstream (IOMode) Ouvre le fichier et retourne un objet TEXTSTREAM
– IOMode 1/ForReading | 2/ForWriting | 8/ForAppending
Exercice 25 : Ajouter à l’exercice précédent les noms des fichiers
ISIM1 – Active Server Pages 16 T. Bourdeaud’huy – IG2I Saison 2006-2007
Fichiers Ouverts : Objets TEXTSTREAM
Fichiers Ouverts : Objets TEXTSTREAM
Propriété– AtEndOfLine, AtEndOfStream, Column, Line : position courante
Méthodes– Close() – Read(max) : Lit un nombre donné de caractères– ReadAll () : Lit le contenu intégral de l’objet– ReadLine() : Lit une ligne entière
– Write text : Écrit une chaîne– WriteLine text : Écrit une chaîne et ajoute le saut de ligne
Exercice 26 : proposer d’ouvrir un des fichiers listés pour l’afficher
ISIM1 – Active Server Pages 17 T. Bourdeaud’huy – IG2I Saison 2006-2007
Méthodes de l’Objet FILESYSTEMOBJECT Méthodes de l’Objet
FILESYSTEMOBJECT
Manipulation fichiers : – CopyFile, MoveFile, CreateTextFile, DeleteFile, FileExists, OpenTextFile, GetFile
Manipulation répertoires : – CopyFolder, MoveFolder, CreateFolder, DeleteFolder, FolderExists, GetFolder
Créer un nouveau fichier texte– CreateTextFile(nom_fichier, [BoolEcraser])
Ouvrir un fichier texte – OpenTextFile(nom_fichier, IOMode)
Exercice 27 : proposer la création de nouveaux fichiers Exercice 28 : Améliorer le formulaire de saisie d’une requête quelconque en
listant (champ select) les bases de données disponibles
ISIM1 – Active Server Pages 18 T. Bourdeaud’huy – IG2I Saison 2006-2007
Méthodes de l’Objet FILESYSTEMOBJECT
Méthodes de l’Objet FILESYSTEMOBJECT
Manipulation des noms de fichiers :
GETBASENAME(chemin) – Nom du dernier composant du chemin
GETEXTENSIONNAME(chemin) – Retourne l’extension du fichier
GETFILENAME (chemin) – Extrait et retourne le nom de fichier
GETPARENTFOLDERNAME (chemin) – Retourne le parent d’un chemin
GLOBAL.ASAGLOBAL.ASA
ISIM1 – Active Server Pages 20 T. Bourdeaud’huy – IG2I Saison 2006-2007
Fichier Global.asa /1Fichier Global.asa /1 Fichier unique placé dans le répertoire racine du site
– Il comporte quatre sous-routines exécutées lors de la création et suppression des objets application et session
– Permet la définition de paramètres (et variables) globaux– Session.Timeout, Server.ScriptTimeout
Structure<SCRIPT Language="VBScript" RUNAT="Server">
Sub Application_OnStart' action à exécuter lors du démarrage de l'application ‘ seuls objets autorisés : application et serveur
END SUBSUB Application_OnEnd
' actions à réaliser lors de l’arrêt du Site.END SUB
ISIM1 – Active Server Pages 21 T. Bourdeaud’huy – IG2I Saison 2006-2007
Fichier Global.asa /2Fichier Global.asa /2
SUB Session_OnStart
' action à exécuter lors de la création d’une nouvelle session
END SUB
SUB Session_OnEnd
' actions à réaliser lors de la fermeture de la session
END SUB
</SCRIPT>
Exercice 29 : Définir un mécanisme de comptage du nombre d’utilisateurs en ligne
ISIM1 – Active Server Pages 22 T. Bourdeaud’huy – IG2I Saison 2006-2007
Global.asaObjets Statiques
Global.asaObjets Statiques
Section <object> Les objets déclarés dans la section object ne sont pas instanciés avant
d'être appelés dans un script Utilisés dans les collections StaticObjects des objets session et application
Structure <Object RunAt="Server"
Scope="Session|Application" Id="Identifiant" {ProgId="ProgId"|ClassId="ClassId"}>
</Object>
Exemples<Object RunAt="Server" Scope="Session" Id="Connection_id"
ProgId="ADODB.Connection"> </Object> <OBJECT runat="Server" scope="Session" id="MyADRot"
progid="MSWC.ADRotator"> </OBJECT>
Gestion des ErreursGestion des Erreurs
Objet ASPERROR : Version 3.0 d’ASP
ISIM1 – Active Server Pages 24 T. Bourdeaud’huy – IG2I Saison 2006-2007
Objet ERRObjet ERR
ON ERROR RESUME NEXT – Active une gestion d’erreur spécifique
Propriétés– DESCRIPTION : Description de l’erreur– HELPCONTEXT : Identifiant d’une rubrique d’aide– HELPFILE : Chemin du fichier d’aide– NUMBER : Code de l’erreur– SOURCE : Source de l’erreur
Méthodes– CLEAR() Réinitialisation des propriétés
ISIM1 – Active Server Pages 25 T. Bourdeaud’huy – IG2I Saison 2006-2007
Objet ASPERRORObjet ASPERROR Permet de recueillir des informations sur les erreurs survenues lors de
l'exécution du code ASP de la page Utile pour les pages de traitement des erreurs e.g. custom500.asp
Création : méthode GetLastError de l’Objet SERVER– SET Error = Server. GetLastError
Propriétés (lecture seule)– ASPCode : Code d’erreur– ASPDescription : Description détaillée de l’erreur– Category : Code source responsable de l’erreur– Column : Numéro de colonne de l’erreur – Description : Description courte de l’erreur– File : Nom du fichier traité lorsque l’erreur s’est produite– Line : Numéro de ligne de l’erreur– Number : Numéro de l’erreur COM standard– Source : Code source responsable de l’erreur
ISIM1 – Active Server Pages 26 T. Bourdeaud’huy – IG2I Saison 2006-2007
Objet RegExpObjet RegExp
SET oRegExp = NEW REGEXP Propriétés
– GLOBAL Indique si la recherche doit être effectuée pour toutes les occurrences de la chaîne ou seulement la 1ère
– IGNORECASE Indique si la chaîne est sensible à la casse– PATTERN Indique la chaîne modèle à rechercher
Méthodes– EXECUTE(str) Retourne un objet collection MATCHES contenant
les informations relatives à la comparaison– REPLACE(str1,str2) Remplace toutes les sous-chaînes trouvées
par une autre– TEST str Retourne un booléen indiquant si la recherche s’est
effectuée avec succès
ISIM1 – Active Server Pages 27 T. Bourdeaud’huy – IG2I Saison 2006-2007
Objet MatchObjet Match
Propriétés– FIRSTINDEX Indique la position dans la chaîne source où
l’expression régulière a été rencontrée– LENGTH Indique le nombre de caractères correspondant dans la
chaîne– VALUE Le texte trouvé dans la chaîne
Collection MATCHES : – Propriétés COUNT et ITEM
AnnexesAnnexes
Administration du Server Composants additionnels Conventions de Nommage Critères d’évaluation des CTP et exercices
ISIM1 – Active Server Pages 29 T. Bourdeaud’huy – IG2I Saison 2006-2007
Composants AdditionnelsComposants Additionnels
Cdont : Envoi de Mails AcxImage : Génération d’images
Cf. http://www.laltruiste.comAdRotator Afficher des annonces différentes à chaque affichage d'une page ASP BrowserType Indiquer les caractéristiques du navigateur du client ContentRotator Afficher un texte différent à chaque affichage d'une page ASPCounters Gérer des compteurs permanents IISLog Administrer /Explorer un fichier journal généré par le serveur IIS MyInfo Stocker des valeurs de propriétés qui peuvent être créées dynamiquementNextLink Gérer une liste d'adresses URL dans un fichier texte. PageCounter Comptabiliser le nombre d'ouverture d'une page ASPPermissionChecker Vérifier si un utilisateur à le droit d'accéder à un fichierTools Utilitaires (tester l'existence d'un fichier, traiter un formulaire HTML, générer
une valeur entière aléatoire, …) ASPSmartUpload Gérer les téléchargements de fichiers en Upload ou en
Download à partir d'un serveur hôte
Administration du Serveur IISAdministration du Serveur IIS
Démo sous Windows XP
Répertoires virtuels
DSN systèmes
Conventions de NommageConventions de Nommage
Déclaration et initialisation des variables Variables ASP Variables de requêtes, formulaires Fonctions Répertoires et fichiers Modularité Clarté et lisibilité du code
ISIM1 – Active Server Pages 32 T. Bourdeaud’huy – IG2I Saison 2006-2007
Déclaration et Initialisation des
variables
Déclaration et Initialisation des
variables
Utiliser <%OPTION EXPLICIT%> (1ère ligne du source) : provoque des erreurs de compilation si des variables ne sont pas déclarées
Utiliser les mots-clés DIM et CONST Toujours initialiser les variables : EMPTY, "", 0 Les chaînes de requête SQL sont définies et initialisées
avant d’être utilisées
ISIM1 – Active Server Pages 33 T. Bourdeaud’huy – IG2I Saison 2006-2007
Variables ASPVariables ASP
Variables en minuscules : nomVar1, maSuperVariable Constantes et mots-clés du langage en MAJUSCULES Utilisation de noms pertinents (pas de « toto ») Des préfixes sont utilisés pour définir :
– La portée des variables : Session/Application/Globale/Locale– Le type de la variable : Int/Str/Bool/Date/Objet/Tab
Exemples : – Un compteur à l’intérieur d’une fonction : lInt_i– Une variable globale : gStr_nomUser– Une variable de session : sStr_idOk– Le résultat d’un test : lBool_isTrue
ISIM1 – Active Server Pages 34 T. Bourdeaud’huy – IG2I Saison 2006-2007
Variables de formulaires, Requêtes
Variables de formulaires, Requêtes
Un préfixe décrit le type de champ de formulaire : – txt, passwd, textarea, radio, submit, button, hidden, select, …
Tous les formulaires ont un nom, e.g. formCoord Les variables de formulaire utilisent ce nom :
– formCoord_txtMail, formCoord_txtLogin Les variables ASP qui récupèrent des champs de formulaires
portent le nom de la variable correspondante :– gStr_mail, gStr_login
Les chaînes de requête SQL et les objets de connexion et de résultat correspondants doivent porter un nom fondé sur le même motif
DANS TOUS LES CAS UTILISER UN NOMMAGE HOMOGENE
ISIM1 – Active Server Pages 35 T. Bourdeaud’huy – IG2I Saison 2006-2007
FonctionsFonctions
Indiquer dans le nom d’une fonction ce qu'elle fait (verbe) : – get : récupération d’une valeur– set : modification d’une valeur– mk : réalisation d’un traitement– show/write/print : affichage
Un préfixe peut être utilisé pour indiquer ce qu’elle renvoie
Exemples : – Affichage d’un tableau : showTab()– Vérification d’une identification : boolVerifUser()
ISIM1 – Active Server Pages 36 T. Bourdeaud’huy – IG2I Saison 2006-2007
Répertoires et fichiersRépertoires et fichiers
Les répertoires ne doivent pas être imbriqués Les extensions dépendent de la fonction du fichier :
– asp, htm – inc, js pour les librairies asp et javascript
Des préfixes permettent de connaître le contenu du fichier : – f formulaire x traitement sans affichage– m menu– c cadre html
ISIM1 – Active Server Pages 37 T. Bourdeaud’huy – IG2I Saison 2006-2007
ModularitéModularité
Découper les traitements en fonctions génériques Utiliser des inclusions de fichiers pour les fonctions
communes à plusieurs pages– Attention : des fichiers inclus ne doivent pas en inclure d’autres
(notion de module)
Attention à la portée des variables Séparer le code client (HTML, javascript) du code ASP
– Fonctions, inclusions, appels en haut de la page– Quand c’est nécessaire, veiller à minimiser les
ouvertures/fermetures <% %>
ISIM1 – Active Server Pages 38 T. Bourdeaud’huy – IG2I Saison 2006-2007
Clarté et lisibilité du code
Clarté et lisibilité du code
Indentation BSD pour l’ASP ET le HTML ! User et abuser de commentaires pertinents :
– Au moment de la déclaration d’une variable– Avant la déclaration d’une fonction– A chaque fois que l’on effectue un traitement non trivial (début
d’une boucle, calcul d’index, … )
Commenter la fin d’une boucle par son nom : WHILE lInt_i IN …
DO
traitements
LOOP ‘lInt_i
Critères d’évaluation des CTP & Exercices
Critères d’évaluation des CTP & Exercices
Forme /3 Qualité du programme /3 Fonctionnalités attendues /14
ISIM1 – Active Server Pages 40 T. Bourdeaud’huy – IG2I Saison 2006-2007
FormeForme
Tout ce qui permet de s’y retrouver quand on reprend le programme Indentation : tabulations, passage à la ligne Quantité, mise en forme et pertinence des commentaires Lisibilité globale : enchevêtrement html/php/javascript , définition
des fonctions au début de chaque page Choix des noms de paramètres, variables, fonctions, librairies
pertinents Respect des nommages html/php Esthétique du résultat dans les limites du raisonnable (ni trop beau
si toutes les questions n'ont pas été faites, ni l’inverse)
ISIM1 – Active Server Pages 41 T. Bourdeaud’huy – IG2I Saison 2006-2007
Qualité du programmeQualité du programme
Tout ce qui est indépendant de la fonction du programme Emploi de structures de contrôle adaptées et évoluées quand c’est
nécessaire (foreach, switch) Structure de la base de données conforme aux spécifications, qui
permet l'ajout de fonctionnalités supplémentaires facilement Fermeture des bases de données, fichiers, … Tests aux limites : absence de résultats d'une requête … Utilisation raisonnée des variables globales et locales Modularité adaptée (traitements réutilisables, paramètres utiles et
bien documentés, pas d'effets de bord néfastes), utilisation de librairies
Robustesse, messages d'erreur pour l'utilisateur