410 likes | 484 Views
Introduction Aux Systèmes d’Information et Multimédia. ASP / Pages Web Statiques. T. Bourdeaud’huy S. Collart-Dutilleul P. Kubiak IG 2 I - Saison 2006/2007. Séance 3. QCM Objet Server Bases de données Accès au Système de fichiers du serveur (à présenter APRES global.asa)
E N D
Introduction Aux Systèmes d’Information et Multimédia ASP / Pages Web Statiques T. Bourdeaud’huy S. Collart-Dutilleul P. Kubiak IG2I - Saison 2006/2007
Sé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 ISIM1 – Active Server Pages 2
Objet 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 ISIM1 – Active Server Pages 4
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 6
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 7
Objet 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 8
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 9
Exercices • 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 ISIM1 – Active Server Pages 10
Système de fichiers du serveur + d’infos : poly compléments ASP sur moodle
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ème Set 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 12
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 13
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 14
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 15
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 16
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 17
Méthodes de l’ObjetFILESYSTEMOBJECT • 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 ISIM1 – Active Server Pages 18
Fichier 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 SUB SUB Application_OnEnd ' actions à réaliser lors de l’arrêt du Site. END SUB ISIM1 – Active Server Pages 20
Fichier 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 21
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> ISIM1 – Active Server Pages 22
Gestion des Erreurs Objet ASPERROR : Version 3.0 d’ASP
Objet 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 24
Objet 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 25
Objet 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 26
Objet 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 ISIM1 – Active Server Pages 27
Annexes Administration du Server Composants additionnels Conventions de Nommage Critères d’évaluation des CTP et exercices
Composants Additionnels • Cdont : Envoi de Mails • AcxImage : Génération d’images • Cf. http://www.laltruiste.com AdRotator 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 ASP Counters 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 dynamiquement NextLink Gérer une liste d'adresses URL dans un fichier texte. PageCounter Comptabiliser le nombre d'ouverture d'une page ASP PermissionChecker Vérifier si un utilisateur à le droit d'accéder à un fichier Tools 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 ISIM1 – Active Server Pages 29
Administration du Serveur IIS Démo sous Windows XP Répertoires virtuels DSN systèmes
Conventions 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
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éesavant d’être utilisées ISIM1 – Active Server Pages 32
Variables 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 33
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 34
Fonctions • 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 35
Ré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 36
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 37
Clarté et lisibilité du code • Indentation BSD pour l’ASPET 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 ISIM1 – Active Server Pages 38
Critères d’évaluation des CTP & Exercices Forme /3 Qualité du programme /3 Fonctionnalités attendues /14
Forme • 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 40
Qualité 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 ISIM1 – Active Server Pages 41