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.
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 :
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.
On trouve dans GWT un ensemble de widgets permettant de construire une interface utilisateur :
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.
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 :
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.
La version 2.0 de GWT offre plusieurs nouveautés par rapport aux versions précédentes, parmi lesquelles :
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).
Approche « à la GWT » (le client est prégénéré) :
Approche RIA classique (HTML et JavaScript générés à partir du serveur) :