Programmation client / serveur

Documents pareils
Ajax, RIA et HTML Prise en charge d Ajax

DOM - Document Object Model

Serveur d'application Client HTML/JS. Apache Thrift Bootcamp

Programmation Web. Madalina Croitoru IUT Montpellier

NFA016 : Introduction. Pour naviguer sur le Web, il faut : Naviguer: dialoguer avec un serveur web

Langage HTML (2 partie) <HyperText Markup Language> <tv>lt La Salle Avignon BTS IRIS</tv>

Document Object Model (DOM)

Failles XSS : Principes, Catégories Démonstrations, Contre mesures

Tutoriel: Création d'un Web service en C++ avec WebContentC++Framework

WEB & DÉVELOPPEMENT LES BASES DU WEB LE LANGAGE HTML FEUILLES DE STYLES CSS HISTORIQUE D INTERNET ET DU WEB LES DIFFÉRENTS LANGAGES

Cahier Technique. «Développer une application intranet pour la gestion des stages des étudiants» Antonin AILLET. Remi DEVES

HTML, CSS, JS et CGI. Elanore Elessar Dimar

Le stockage local de données en HTML5

Hébergement de site web Damien Nouvel

Devenez un véritable développeur web en 3 mois!

Assistance à distance sous Windows

CRÉER, ROUTER ET GÉRER UNE NEWSLETTER, UN ING

Présentation du Framework BootstrapTwitter

Utilisation de l éditeur.

BIRT (Business Intelligence and Reporting Tools)

EXTENSION de Microsoft Dynamics CRM Réf FR 80452

Programme «Analyste Programmeur» Diplôme d état : «Développeur Informatique» Homologué au niveau III (Bac+2) (JO N 176 du 1 août 2003) (34 semaines)

Introduction. PHP = Personal Home Pages ou PHP Hypertext Preprocessor. Langage de script interprété (non compilé)

JAB, une backdoor pour réseau Win32 inconnu

Développement d'applications Web HTML5 L'art et la manière avec Visual Studio 2015 et TFS

MEDIAplus elearning. version 6.6

Pack Fifty+ Normes Techniques 2013

Master1 ère année. Réseaux avancés I. TP nº5 filière ISICG

PARAMETRER INTERNET EXPLORER 9

Module BD et sites WEB

Introduction aux concepts d ez Publish

Alfstore workflow framework Spécification technique

Les grandes facettes du développement Web Nicolas Thouvenin - Stéphane Gully

FORMATION PcVue. Mise en œuvre de WEBVUE. Journées de formation au logiciel de supervision PcVue 8.1. Lieu : Lycée Pablo Neruda Saint Martin d hères

XML par la pratique Bases indispensables, concepts et cas pratiques (3ième édition)

Bonnes pratiques de développement JavaScript

Développement des Systèmes d Information

Formation : WEbMaster

Printer Administration Utility 4.2

Cours d algorithmique pour la classe de 2nde

Optimiser pour les appareils mobiles

Tous les autres noms de produits ou appellations sont des marques déposées ou des noms commerciaux appartenant à leurs propriétaires respectifs.

SHERLOCK 7. Version du 01/09/09 JAVASCRIPT 1.5

Normes techniques 2011

Internet. DNS World Wide Web. Divers. Mécanismes de base Exécution d'applications sur le web. Proxy, fire-wall

SYSTÈMES D INFORMATIONS

AJAX. (Administrateur) (Dernière édition) Programme de formation. France, Belgique, Suisse, Roumanie - Canada

Développement d applications Internet et réseaux avec LabVIEW. Alexandre STANURSKI National Instruments France

SPECIFICITES TECHNIQUES DES FORMATS PUBLICITAIRES

Installation d un serveur HTTP (Hypertext Transfer Protocol) sous Débian 6

Programmation Web. Introduction

Serveur d Applications Web : WebObjects

Vulnérabilités et sécurisation des applications Web

INTERNET est un RESEAU D ORDINATEURS RELIES ENTRE EUX A L ECHELLE PLANETAIRE. Internet : interconnexion de réseaux (anglais : net = réseau)

Développer des Applications Internet Riches (RIA) avec les API d ArcGIS Server. Sébastien Boutard Thomas David

Architectures web/bases de données

Audit de site web. Accessibilité

LES ACCES ODBC AVEC LE SYSTEME SAS

LES TECHNOLOGIES DU WEB APPLIQUÉES AUX DONNÉES STRUCTURÉES

Dans la série LES TUTORIELS LIBRES présentés par le site FRAMASOFT. Premiers pas avec WinPT (cryptographie sous Win) EITIC

< Atelier 1 /> Démarrer une application web

FileMaker Server 11. Publication Web personnalisée avec XML et XSLT

TP JAVASCRIPT OMI4 TP5 SRC

145A, avenue de Port Royal, Bonaventure (Québec) G0C 1E0 Sans frais :

Application Web et J2EE

Internet Explorer. Microsoft. Sommaire :

L3 informatique TP n o 2 : Les applications réseau

Architecture N-Tier. Ces données peuvent être saisies interactivement via l interface ou lues depuis un disque. Application

Guide pour la configuration d adresse

ASP.NET MVC 4 Développement d'applications Web en C# - Concepts et bonnes pratiques

Studio. HERITIER Emmanuelle PERSYN Elodie. SCHMUTZ Amandine SCHWEITZER Guillaume

ENDNOTE X2 SOMMAIRE. 1. La bibliothèque EndNote 1.1. Créer une nouvelle bibliothèque 1.2. Ouvrir une bibliothèque EndNote 1.3. Fermer une bibliothèque

SPECIFICATIONS TECHNIQUES BANNIERES SITES PRISMA / TABLETTES / MOBILE

Les services usuels de l Internet

La base de données XML exist. A. Belaïd

Architectures Web Services RESTful

4. SERVICES WEB REST 46

Initiation à Mendeley AUT2012

Technologies pour Web Services faciles : REST, JSON

Un jour, une question Réponse à une problématique issue de la liste GTA *

Module pour la solution e-commerce Magento

L accès à distance du serveur

Projet 2. Gestion des services enseignants CENTRE D ENSEIGNEMENT ET DE RECHERCHE EN INFORMATIQUE. G r o u p e :

Mozilla Firefox 3.5. Google Chrome 3.0 LES NAVIGATEURS WEB. (pour Windows) Opéra 10. Internet Explorer 8. Safari 4.0

Le serveur web Windows Home Server 2011

ZOTERO. Installation. Bibliothèque de Pharmacie. Service Formation

Manuel d installation de Business Objects Web Intelligence Rich Client.

CRÉER UNE BASE DE DONNÉES AVEC OPEN OFFICE BASE

BES WEBDEVELOPER ACTIVITÉ RÔLE

Démarrer avec Ajax et le php: exemple d'application

Petite définition : Présentation :

S7 Le top 10 des raisons d utiliser PHP pour moderniser votre existant IBM i

INF8007 Langages de script

Architecture Orientée Service, JSON et API REST

WebDAV en 2 minutes. Tous ces objectifs sont complémentaires et ils sont atteints grâce au seul protocole WebDAV. Scénarii

Mise à jour d avast! et de vos logiciels Ciel

RTE Technologies. RTE Geoloc. Configuration avec Proxy ou Firewall

Autour du web. Une introduction technique Première partie : HTML. Georges-André SILBER Centre de recherche en informatique MINES ParisTech

Environnements de développement (intégrés)

Transcription:

Benjamin Canou - Christian Queinnec Cours 5 du 17/12/2012

Programmation côté client Rappels rapides sur JavaScript Manipulation du document et du style via DOM

L'inévitable JavaScript La mode est aux applications Web : Plus seulement des sites Web : le client devient intelligent On veut donc programmer le navigateur : Interagir avec l'utilisateur S'adapter au matériel (ex capacités spécifiques aux mobiles) Communiquer avec le serveur Modifier dynamiquement la page Web Donc on doit utiliser JavaScript : Le langage de script inclus dans les navigateurs grand public La seule façon de programmer certains navigateurs (ios, Windows 8, etc) Plus simple pour accéder au document que les greffons Et on veut l'utiliser pour : Une riche galaxie de bibliothèques dont on veut profiter Ses performances passées de ridicules à plutôt bonnes 3 / 27

Fonctionnement des navigateurs Modèle d'exécution : la boucle d'évènements Rendu graphique Gestion des évènements Pas de mise à jour de l'affichage pendant la gestion d'évènements Impossible de toucher à la queue d'évènements de l'instant courant Exécution bloquée durant la gestion d'évènements (Don't) try javascript:settimeout(function(){while(true){}}) Gestion d'évènements : Prendre en charge un évènement = lui affecter une fermeture JavaScript Évènements de ressources : matériel, requêtes réseau, etc Évènements d'interface : souris, clavier, etc Mécanisme particulier d'inhibition/propagation d'évènements (le bullage) Pour simuler un évènement : settimeout (pour le tour prochain) 4 / 27

Le DOM (Document Object Model) 1 / 2 Accès à la représentation interne du document dans le navigateur Arbre (sans cycle ni partage) Nœud HTML un nœud DOM = un objet JavaScript Initialement : Attribut HTML attribut DOM = propriété JavaScript Possibilité de modifier les nœuds, d'en ajouter, retirer, etc Comme en XML, les nœuds représentent : La structure (nœuds élément div, p, table) ; le contenu (nœuds texte) ; les méta-données (nœuds élément style, script, meta, etc) Les attributs stockent les données annexes associées aux nœuds Les gestionnaires d'évènements deviennent des fonctions JavaScript Les styles deviennent des objets JavaScript complexes Certains attributs subissent un traitement particulier (id, class, src, etc) 5 / 27

Le DOM (Document Object Model) 2 / 2 Un petit exemple en HTML : 1 : <body> 2 : <p style =" font family : ' Comic Sans MS' "> 3 : Hello World 4 : </p> 5 : </body> En version DOM : 1 : var p = document createelement ( "p" ) ; 2 : var t = document createtextnode ( " Hello World " ) ; 3 : p s t y l e fontfamily = " Comic Sans MS" ; 4 : p appendchild ( t ) ; 5 : document body appendchild ( p ) ; 6 / 27

Une petite page interactive 1 / 4 En trois niveaux de complexité : Étape 1 : clic une case de couleur aléatoire Étape 2 : clic un processus générateur de cases Étape 3 : clic sur une case disparition de la couleur et mort du processus 7 / 27

Une petite page interactive 2 / 4 1 : <script > 2 : function spawn ( ) { 3 : /* chosse random c o l o r and delay */ 4 : var timeout = Math floor ( Math random ( ) * 900 ) + 100 5 : var r = Math floor ( Math random ( ) * 255 ) 6 : var g = Math floor ( Math random ( ) * 255 ) 7 : var b = Math floor ( Math random ( ) * 255 ) 8 : /* r e t r i e v e marked HTML element */ 9 : var basket = document getelementbyid ( " basket " ) 10 : /* create a c o l o r block */ 11 : var l i = document createelement ( " span " ) 12 : l i innerhtml = "&nbsp ; &nbsp ; &nbsp ; &nbsp ; " 13 : l i s t y l e backgroundcolor = " rgb ( " + r + ", " + g + ", " + b + " ) " 14 : /* i n s e r t our new item */ 15 : basket appendchild ( l i ) 16 : } 17 : </ script > 18 : <body> 19 : <button onclick ="spawn ( ) ">spawn</ button><br /> 20 : <span id =" basket " style =" font s i z e : 5 px "></span> 21 : </body> 8 / 27

Une petite page interactive 3 / 4 1 : <script > 2 : function spawn ( ) { 3 : var timeout, r, g, b /* */ 4 : /* async loop */ 5 : function loop ( ) { 6 : var basket, l i = /* with l o c a l r, g, b */ 7 : basket appendchild ( l i ) 8 : /* delayed r e c u r s i o n */ 9 : settimeout ( loop, timeout ) 10 : } 11 : loop ( ) 12 : } 13 : </ script > 9 / 27

Une petite page interactive 4 / 4 1 : <script > 2 : function spawn ( ) { 3 : var timeout, r, g, b = /* */ 4 : /* store blocks */ 5 : var a l l = [ ] 6 : /* async loop */ 7 : var stop = f a l s e 8 : function loop ( ) { 9 : i f ( stop ) return ; 10 : var basket, l i = /* */ 11 : l i o n c l i c k = function ( ) { 12 : /* cleartimeout ( loop ) */ 13 : stop = true ; 14 : for ( i in a l l ) basket removechild ( a l l [ i ] ) 15 : } 16 : a l l push ( l i ) 17 : basket appendchild ( l i ) 18 : settimeout ( loop, timeout ) 19 : } 20 : loop ( ) 21 : } 22 : </ script > 10 / 27

Bibliothèques JavaScript Généralistes Prototype, Dojo, scriptaculous, YUI, jquery, etc Interface uniforme masquant les singularités des navigateurs Fonction de confort, navigation dans DOM Animations / Transitions Support de widgets UI élaborés 11 / 27

La plus répandue : JQuery 15ko compressés (après miniaturisation (pour minified)) Recherche, filtrage, modifications dans le DOM Mécanismes de quasi héritage (JS est un langage à prototype) Encapsulation d'envoi/traitement de requêtes asynchrones Bibliothèque d'effets visuels et greffons point d'entrée : $() 1 : $ ( " d i v > p" ) 2 : f i l t e r ( function ( i ) ) 3 : each ( function ( i ) t h i s html ( ' <b>coucou</b> ' ) ) ; 4 : 5 : $ ( '# id ' ) a t t r ( ' t i t l e ', "$ { t h i s s r c } " ) ; 6 : 7 : $ ( document body ) bind ( " c l i c k ", function ( ) { a l e r t ( $ ( t h i s ) text ( ) ) } ) ; 8 : 9 : $ ( "p s u r p r i s e " ) addclass ( "ohmy" ) show ( " slow " ) ; 10 : 11 : $ ( function ( ) { a l e r t ( " F i n i! " ) ; } ) ; 12 / 27

Tutoriel JavaScript Langage de base Modèle objet à prototypes DOM & événements

Programmation Client / Serveur HTTP et AJAX Formats d'échange Canaux de communication

Objet XMLHttpRequest 1 / 2 Microsoft a introduit l'objet XMLHttpRequest qui permet, depuis le client, d'effectuer une requête HTTP (vers le domaine d'où provient la page) 1 : var req = window ActiveXObject 2 :? new ActiveXObject ( " Microsoft XMLHTTP" ) 3 : : new XMLHttpRequest ( ) ; 4 : req setrequestheader ( "X Requested With ", " XMLHttpRequest " ) ; 5 : req setrequestheader ( " Accept ", " */* " ) ; 6 : req onreadystatechange = function ( istimeout ) { 7 : i f ( httprequest readystate == 4 ) { / / reponse OK 8 : i f ( httprequest status == 200 ) { 9 : httprequest responsetext / / > S t r i n g 10 : httprequest responsexml / / > DOM 11 : } } } 12 : req open ( 'GET ', ' http : / /www example org /some f i l e ', 13 : isasync ) ; 14 : req send ( ) ; 15 / 27

Objet XMLHttpRequest 2 / 2 On peut sortir du modèle une requête = une page évenement navigateur informations réaffichage serveur évenement éventuellement! navigateur serveur RPC informations réaffichage Requêtes plus petites mais plus nombreuses côté serveur Boutons Previous et Next délicats Site non arpentable donc non indexable (cf mod_proxy) Attention à l'ordonnancement (canaux) 16 / 27

Codage des messages Suivant la tâche : XML : parser intégré, bien pour morceaux de documents, attention au xmlns JSON : parsing facile, lisible, proche de JavaScript Spécialisé (texte, base64, etc) JSON : sous-ensemble de définition de données de JavaScript tableau d'objets entre crochets table associative entre accolades et clés suffixées par deux points nombres, booléens, chaînes 1 : [ { a : 1, foo : [ 1e 23, 2 0, true ] }, 2 : " et meme \ nunicode \uabcd! " ] Analyse syntaxique : Facile mais dangereux : eval Analyseur syntaxique spécialisé 17 / 27

Sécurité On ne peut envoyer de requêtes qu'au site d'où la page provient Comment faire du mashup? Greffer dynamiquement dans le DOM un nœud script Une sorte de (très dangereuse) fonction eval, voir aussi JSOD (JavaScript On Demand) Établir des (coûteux pour le serveur) relais (proxys) sur le site originel Utiliser les iframes, exploitation de l'url pour communiquer 18 / 27

Exemple: complétion automatique 19 / 27

Graphe d'état: complétion automatique a clavier a serveur ab b a a+ ab ab+ Chaque lettre saisie envoie une requête au serveur La réponse provoque un affichage des mots ayant ce préfixe La réaction est à la vitesse du réseau (100 à 300 millisecondes) Nota: x- est l'état où le clavier a reçu x et où la requête demandant les mots préfixés par x a été émise x+ représente l'état où la réponse à cette requête a été reçue 20 / 27

Ordonnancement Non instantanéité des transitions! On peut aussi observer: a clavier a serveur En fait, on veut des canaux! Pseudo canaux HTTP : Comet, HTTP Push Et si possible : WebSockets ab a a+ ab ab+ Il faut donc : ordonner les requêtes et leurs réponses! Ordonnancer les fonctions de rappel (onreadystatechange) Considérer les codes 200, 304, 307, etc b 21 / 27

Intégration au code serveur Formes de couplage Exemples

Formes de couplage Couplage fort : Toutes sortes de RPC (interface commune) Solutions mono-langage (HOP, Ocsigen, etc) Responsabilité au cadriciel serveur : Composants (ex on ajoute une pré-validation aux champs) Génération de code par le moteur MVC Responsabilité au code client : Modèle : squelette initial + construction incrémentale de la page Interface à un serveur REST Mashup côté client 23 / 27

Le moment Perl : CGI::Ajax 1 / 2 1 : use CGI ; 2 : use CGI : : Ajax ; 3 : 4 : my $cgi = new CGI ; 5 : my $pjx = new CGI : : Ajax ( ) ; 6 : $pjx >r e g i s t e r ( ' JSFUNC ' => \& perl_func ) ; 7 : 8 : # Dans l a page HTML, se trouvent des b a l i s e s d i v avec l e s 3 i d 9 : # o nclick ="JSFUNC ( [ ' source1 ', ' source2 ' ], 10 : # [ ' dest1 ', j s f u n c 2 ] ) ; " 11 : # et l a fonction j s f u n c 2 ( a l a j s o d ) 12 : 13 : print $pjx >build_ html ( $cgi, \&Show_HTML ) ; 14 : 15 : sub perl_ func { 16 : my ( $input1, $input2 ) = @_; 17 : return ( "Ah $input2? ", "Oh $input1! " ) ; 18 : } 24 / 27

Le moment Perl : CGI::Ajax 2 / 2 1 : sub Show_HTML { 2 : my $html = <<EOHTML; 3 : <HTML><HEAD>< s c r i p t > 4 : function jsfunc2 ( ) { } 5 : </ s c r i p t ></HEAD> 6 : <BODY> 7 : Enter something : 8 : <input type=" t e x t " name=" val1 " id =" s1 " 9 : onkeyup="jsfunc ( [ ' s1 ', ' s1 ' ], [ ' dest1 ', j s f u n c 2 ] ) ; "> 10 : <br > 11 : < div id =" dest1 " ></ div > 12 : </BODY> 13 : </HTML> 14 : EOHTML 15 : return $html ; 16 : } 25 / 27

Composants MVC Que peut-on faire sans changer les composants existants? Validation (partielle bien sûr!) Tableaux interactifs (tris locaux, défilement AJAX) Onglets sans recharger la page Animations (glisser-deposer, menu accordéon, etc) En fait, beaucoup de choses 26 / 27

Conclusion Beaucoup de nouvelles possibilités Mais aussi beaucoup de nouvelles problématiques