Accueil🇫🇷Chercher

Google Web Toolkit

Google Web Toolkit (GWT) est un ensemble d'outils logiciels développé par Google, permettant de créer et maintenir des applications web dynamiques mettant en œuvre JavaScript, en utilisant le langage et les outils Java. C'est un logiciel libre distribué selon les termes de la licence Apache 2.0.

GWT met l'accent sur des solutions efficaces et réutilisables aux problèmes rencontrés habituellement par le développement AJAX : difficulté du débogage JavaScript, gestion des appels asynchrones, problèmes de compatibilité entre navigateurs, gestion de l'historique et des favoris, etc.

Principe

GWT est articulé autour d'un concept original : lors de la phase de développement, l'application est écrite en Java de façon classique, dans un environnement de développement intégré Java, et peut être déboguée avec les outils Java habituels. Une fois l'application prête à être déployée, le compilateur GWT la traduit en pur JavaScript, avec support automatique et transparent pour les principaux navigateurs (Internet Explorer, Firefox, Chrome, Safari, Opera). Le code JavaScript généré utilise des techniques d'HTML dynamique et de manipulation du DOM (Document Object Model) pour les aspects dynamiques de l'interface.

Ce principe est rendu possible par les différents composants de GWT :

  • le compilateur Java vers JavaScript
  • un navigateur spĂ©cialement modifiĂ© pour permettre l'exĂ©cution (et le dĂ©bogage) de code Java natif sans nĂ©cessiter la compilation JavaScript
  • une bibliothèque d'Ă©mulation JRE : il s'agit d'une implĂ©mentation en JavaScript d'un sous-ensemble de la bibliothèque de classes Java standard (en particulier quasiment tout le package java.lang et une partie de java.util)
  • une bibliothèque de composants graphiques contenant des widgets de base permettant la construction d'une interface graphique

GWT est un framework qui laisse la liberté au développeur en ne lui imposant pas une structure trop rigide; comme son nom l'indique, il s'agit d'une boîte à outils qui offre des solutions permettant de développer plus facilement des solutions web/AJAX, en profitant des outils et compétences Java existants, et en faisant abstraction de la complexité habituellement liée à ce genre de technologies.

Fiche technique

  • Composants graphiques dynamiques et rĂ©utilisables
  • MĂ©canisme d'appels RPC simple
  • Gestion de l'historique de navigation (boutons prĂ©cĂ©dent/suivant du navigateur)
  • PossibilitĂ© de dĂ©boguer l'application avec un dĂ©bogueur Java
  • Gestion transparente des diffĂ©rences de comportement entre navigateurs
  • IntĂ©gration avec JUnit
  • Internationalisation simplifiĂ©e
  • PossibilitĂ© d'intĂ©grer du JavaScript directement dans le code source grâce Ă  une technique appelĂ©e JSNI (JavaScript Native Interface)
  • Support des bibliothèques Google API (notamment Google Gears)
  • Complètement Open Source
  • Le dĂ©veloppement se fait en pur Java, ce qui permet les contrĂ´les de cohĂ©rence Ă  la compilation (contrairement Ă  JavaScript qui est interprĂ©tĂ©), la refactorisation assistĂ©e, etc.
  • DisponibilitĂ© de nombreuses bibliothèques tierces qui Ă©tendent les fonctionnalitĂ©s de GWT

Widgets disponibles

On trouve dans GWT un ensemble de widgets permettant de construire une interface utilisateur :

  • Panneaux
  • Boutons
  • Cases Ă  cocher
  • Tables / Grilles
  • BoĂ®tes de dialogues
  • Primitive HTML (dont les images et les hyperliens)
  • Menus et barres de menus
  • FenĂŞtres dĂ©filantes
  • Onglets
  • Arbres

Lorsque c'est possible et viable, les widgets GWT utilisent le contrôle natif HTML équivalent (par ex. Checkbox génère un élément INPUT de type checkbox), mais il est aussi possible de construire des widgets entièrement synthétiques.

Bien qu'offrant des fonctionnalités plus évoluées que les composants HTML, la bibliothèque de widgets GWT reste spartiate lorsqu'on veut créer une IHM avancée ; c'est pourquoi des bibliothèques tierces ont vu le jour. On peut citer :

Si les wrappers GWT de bibliothèques JavaScript sont souvent riches en composants, ils ne respectent pas la philosophie de GWT qui consiste à générer le code JavaScript entièrement à partir de Java.

Historique des versions

Environnements de développement

De par sa conception, GWT est indépendant de tout IDE et peut s'intégrer dans n'importe lequel. Cependant, il existe des plugins qui facilitent le développement d'une application GWT :

  • GWT Designer est un plugin gratuit pour Eclipse dĂ©rivĂ© de WindowsBuilder Pro, qui offre des outils de design graphique.
  • gwtDeveloper est un Ă©diteur WYSIWYG pour JDeveloper.
  • GWT Studio plugin est un plugin pour IntelliJ IDEA qui prend en charge les aspects de crĂ©ation d'artefacts spĂ©cifiques Ă  GWT, les contrĂ´les de validitĂ© (inspectors), les actions de refactoring, de lancement, etc.
  • Cypal Studio est un plugin pour Eclipse qui offre des fonctionnalitĂ©s similaires. Il est limitĂ© Ă  la version 1.5 de GWT
  • GWT4NB est un plugin GWT pour NetBeans.

Enfin, en même temps que GWT 1.6, Google a sorti un plugin pour Eclipse qui intègre à la fois les aspects GWT et Google App Engine.

Avantages et inconvénients

  • En mode hosted, l'application s'exĂ©cute sous forme de bytecode Java tout comme une application normale ; par consĂ©quent toutes les possibilitĂ©s de dĂ©bogage natif de Java sont utilisables.
  • L'utilisation du mĂ©canisme de RPC facilite la communication entre le client et le serveur, automatisant complètement la sĂ©rialisation des donnĂ©es. Elle requiert toutefois un support spĂ©cifique cĂ´tĂ© serveur. NĂ©anmoins, l'accès Ă  toutes sortes de services est possible via HTTP, en particulier aux Web Services utilisant SOAP et autres services encodant les donnĂ©es avec JSON.
  • Le code Java peut ĂŞtre partagĂ© entre le client et le serveur, en particulier pour les objets transitant entre eux. Cette fonctionnalitĂ© est toutefois limitĂ©e puisque le client ne supporte qu'un sous-ensemble limitĂ© de l'API Java.
  • GWT permet de limiter les Ă©changes avec le serveur Ă  la rĂ©ception et l'envoi des donnĂ©es mĂ©tier. La logique applicative peut ĂŞtre entièrement embarquĂ©e dans le navigateur client. La rĂ©activitĂ© de l'interface graphique est ainsi accrue et la bande passante rĂ©seau prĂ©servĂ©e... Mais le code est parfois plus important et il faut gĂ©rer avec attention la problĂ©matique de la sĂ©curitĂ©.
  • Le code JavaScript gĂ©nĂ©rĂ© est d'une taille importante mais ne requiert pas l'inclusion de bibliothèques externes. Le code peut ĂŞtre dĂ©coupĂ© en plusieurs paquets, chacun n'Ă©tant tĂ©lĂ©chargĂ© que lorsque c'est nĂ©cessaire.
  • Le code JavaScript gĂ©nĂ©rĂ© est difficilement lisible. Cependant, dans l'esprit des concepteurs de GWT, ce code n'est pas destinĂ© Ă  ĂŞtre lu ou optimisĂ© par un humain, mais uniquement par le navigateur ; selon ce point de vue, on peut considĂ©rer JavaScript comme l'Ă©quivalent de ce qu'est l'assembleur aux langages de haut niveau. Il existe tout de mĂŞme des options permettant de gĂ©nĂ©rer du code moins dense et plus lisible, au dĂ©triment de la taille des fichiers gĂ©nĂ©rĂ©s et de la performance.
  • La phase de compilation GWT est relativement longue, et croĂ®t avec le nombre de classes et le nombre de permutations (combinaisons navigateurs+langues). Ceci s'explique par les nombreuses optimisations statiques effectuĂ©es par le compilateur GWT. Il est toutefois possible de restreindre le nombre de permutations gĂ©nĂ©rĂ©es.
  • L'utilisation de GWT ne doit pas faire oublier les aspects sĂ©curitĂ©[2].
  • GWT fait partie des frameworks RIA qui offrent une implĂ©mentation au moins partielle d'ARIA permettant de faire face aux problèmes d'accessibilitĂ© des interfaces riches[3].
  • GWT peut ĂŞtre utilisĂ© comme seule technologie Web cliente, ou en conjonction.

Version 2.0

La version 2.0 de GWT offre plusieurs nouveautés par rapport aux versions précédentes, parmi lesquelles :

  • In-Browser Development Mode (appelĂ© encore Out of Process Hosted Mode, OOPHM) : avant la version 2.0, le hosted mode embarquait une version modifiĂ©e d'un navigateur pour permettre d'exĂ©cuter et dĂ©boguer la version bytecode de l'application durant le dĂ©veloppement. Avec la version 2.0, le hosted mode, rebaptisĂ© "development mode", permet l'utilisation de n'importe quel navigateur (supportĂ©), au travers d'un plugin. Le plugin communique avec le shell du development mode via TCP/IP, ce qui autorise le dĂ©bogage croisĂ© (par exemple, dĂ©boguer une application dans Internet Explorer sous Windows depuis un shell de development mode tournant sous Linux)
  • Code splitting : en s'appuyant sur des indications du dĂ©veloppeur dans le code source, le compilateur GWT est capable de diviser le code JavaScript gĂ©nĂ©rĂ© en plusieurs parties de plus petite taille, au lieu d'un unique bloc. Ceci permet de rĂ©duire le temps de dĂ©marrage de l'application en diminuant la taille du tĂ©lĂ©chargement initial.
  • Construction d'interface dĂ©clarative : au moyen d'un format XML, la nouvelle fonctionnalitĂ© nommĂ©e "UiBinder" offre la possibilitĂ© de crĂ©er les interfaces utilisateur de façon dĂ©clarative, par opposition Ă  la crĂ©ation au travers de code Java. Ceci permet une sĂ©paration propre de la construction de l'interface et de l'implĂ©mentation du comportement dynamique de celle-ci.
  • Groupement de ressources : l'interface ClientBundle permet de grouper de façon transparente des ressources de toute nature (images, CSS, texte, binaire) qui seront transfĂ©rĂ©es ensemble en une seule opĂ©ration, rĂ©duisant ainsi le nombre d'allers-retours entre le client et le serveur, et diminuant du mĂŞme coup la latence.

Comme le nouveau "development mode" a supprimé la plupart du code écrit spécifiquement pour une plateforme cible, la nouvelle version sera distribuée sous forme d'un unique fichier (contre un par plateforme comme c'était le cas avec les versions précédentes).

Produits concurrents

Approche « à la GWT » (le client est prégénéré) :

Approche RIA classique (HTML et JavaScript générés à partir du serveur) :

Frameworks associés

  • Vaadin - License ASLv2 pour le cĹ“ur et commerciale
  • Sencha GXT - License GPLv3 pour la première version et commerciale
  • Errai Framework RedHat - License ASLv2
  • Pyjs portage de GWT en Python

Notes et références

Annexes

Articles connexes

Liens externes

Cet article est issu de wikipedia. Text licence: CC BY-SA 4.0, Des conditions supplémentaires peuvent s’appliquer aux fichiers multimédias.