« Google Web Toolkit » : différence entre les versions
à sourcer... |
Fonctionnalité de suggestions de liens : 3 liens ajoutés. |
||
(45 versions intermédiaires par 39 utilisateurs non affichées) | |||
Ligne 1 : | Ligne 1 : | ||
{{ |
{{À sourcer|date=septembre 2012}} |
||
{{Voir homonymes|GWT}} |
|||
{{Infobox Logiciel |
|||
| couleur boîte = f93535 |
|||
| nom = {{blanc|Google Web Toolkit (GWT)}} |
|||
| logo = Gwt_logo.png |
|||
| image = |
|||
| légende = |
|||
| développeur = |
|||
| exécutable = |
|||
| date de première version = |
|||
| dernière version = |
|||
| date de dernière version = |
|||
| version avancée = |
|||
| date de version avancée = |
|||
| dépôt = |
|||
| état = |
|||
| langage de programmation = |
|||
| environnement = |
|||
| langues = |
|||
| type = |
|||
| politique de prix = |
|||
| licence = |
|||
| site web = |
|||
| wikidata = |
|||
| créateur = |
|||
| version précédente = |
|||
| version suivante = |
|||
}} |
|||
'''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 (technologie)|Java]]. C'est un [[logiciel libre]] distribué selon les termes de la [[licence Apache]] 2.0. |
'''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 (technologie)|Java]]. C'est un [[logiciel libre]] distribué selon les termes de la [[licence Apache]] 2.0. |
||
Ligne 6 : | Ligne 35 : | ||
== Principe == |
== Principe == |
||
GWT est articulé autour d'un concept original : lors de la phase de développement, l'application est écrite en [[Java (technologie)|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]], [[ |
GWT est articulé autour d'un concept original : lors de la phase de développement, l'application est écrite en [[Java (technologie)|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]], [[Google Chrome|Chrome]], [[Safari (logiciel)|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 : |
Ce principe est rendu possible par les différents composants de GWT : |
||
Ligne 14 : | Ligne 43 : | ||
* une bibliothèque de composants graphiques contenant des [[Composant d'interface graphique|''widgets'']] de base permettant la construction d'une interface graphique |
* une bibliothèque de composants graphiques contenant des [[Composant d'interface graphique|''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 |
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 == |
== Fiche technique == |
||
Ligne 34 : | Ligne 63 : | ||
On trouve dans GWT un ensemble de [[Composant d'interface graphique|widgets]] permettant de construire une interface utilisateur : |
On trouve dans GWT un ensemble de [[Composant d'interface graphique|widgets]] permettant de construire une interface utilisateur : |
||
* Panneaux |
* Panneaux |
||
* Boutons |
* Boutons |
||
Ligne 49 : | Ligne 77 : | ||
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 : |
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 : |
||
* [http://extjs.com/products/gxt/ Ext-GWT] (appelé aussi GXT), un portage de [ |
* [http://extjs.com/products/gxt/ Ext-GWT] (appelé aussi GXT), un portage de [[Ext (JavaScript)|Ext-JS]] en GWT, |
||
* [http://gwt.components.googlepages.com/ GWT Component Library], |
* [http://gwt.components.googlepages.com/ GWT Component Library], |
||
* [http://code.google.com/p/gwt-ext/ gwt-ext], un wrapper qui permet d'utiliser les composants Ext-JS en GWT (abandonné depuis par son créateur), |
* [http://code.google.com/p/gwt-ext/ gwt-ext], un wrapper qui permet d'utiliser les composants Ext-JS en GWT (abandonné depuis par son créateur), |
||
Ligne 59 : | Ligne 87 : | ||
== Historique des versions == |
== Historique des versions == |
||
{{Début de colonnes|nombre=2}} |
|||
<div style='-moz-column-count:2; -moz-column-gap:10px;'> |
|||
* GWT 2.8.2 {{Date|19|octobre|2017|en informatique}} |
|||
* GWT 2.5 RC (''Juillet 2012'') |
|||
* GWT 2. |
* GWT 2.8.1 {{Date|24|avril|2017|en informatique}} |
||
* GWT 2.8 {{Date|20|octobre|2016|en informatique}} |
|||
* GWT 2.7 {{Date|20|novembre|2014|en informatique}} |
|||
* GWT 2.6.1 {{Date|09|mai|2014|en informatique}} |
|||
* GWT 2.6.0 {{Date|30|janvier|2014|en informatique}} |
|||
* GWT 2.5.1 {{Date|11|mars|2013|en informatique}} |
|||
* GWT 2.5 {{Date|25|octobre|2012|en informatique}} |
|||
* GWT 2.4 {{Date|7|septembre|2011|en informatique}} |
|||
* GWT 2.3 {{Date|2|mai|2011|en informatique}} |
* GWT 2.3 {{Date|2|mai|2011|en informatique}} |
||
* GWT 2.2 {{Date|11|février|2011|en informatique}} |
* GWT 2.2 {{Date|11|février|2011|en informatique}} |
||
Ligne 74 : | Ligne 109 : | ||
* GWT 1.1 {{Date|11|août|2006|en informatique}} |
* GWT 1.1 {{Date|11|août|2006|en informatique}} |
||
* GWT 1.0 {{Date|17|mai|2006|en informatique}} |
* GWT 1.0 {{Date|17|mai|2006|en informatique}} |
||
{{Fin de colonnes}} |
|||
</div> |
|||
== Environnements de développement == |
== Environnements de développement == |
||
Ligne 80 : | Ligne 115 : | ||
* [http://code.google.com/webtoolkit/download.html#gwtdesigner GWT Designer] est un plugin gratuit pour [[Eclipse (logiciel)|Eclipse]] dérivé de WindowsBuilder Pro, qui offre des outils de design graphique. |
* [http://code.google.com/webtoolkit/download.html#gwtdesigner GWT Designer] est un plugin gratuit pour [[Eclipse (logiciel)|Eclipse]] dérivé de WindowsBuilder Pro, qui offre des outils de design graphique. |
||
* [http://www.gdevelop.com/?q=node/2 gwtDeveloper] est un éditeur [[What you see is what you get|WYSIWYG]] pour JDeveloper. |
* [http://www.gdevelop.com/?q=node/2 gwtDeveloper] est un éditeur [[What you see is what you get|WYSIWYG]] pour JDeveloper. |
||
* [http://www.jetbrains.net/confluence/display/IDEADEV/GWT+Studio+plugin 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. |
* [http://www.jetbrains.net/confluence/display/IDEADEV/GWT+Studio+plugin 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. |
||
* [http://www.cypal.in/studio Cypal Studio] est un plugin pour Eclipse qui offre des fonctionnalités similaires. Il est limité à la version 1.5 de GWT |
* [http://www.cypal.in/studio Cypal Studio] est un plugin pour Eclipse qui offre des fonctionnalités similaires. Il est limité à la version 1.5 de GWT |
||
* [ |
* [https://web.archive.org/web/20080907094030/https://gwt4nb.dev.java.net/ GWT4NB] est un plugin GWT pour [[NetBeans]]. |
||
Enfin, en même temps que GWT 1.6, Google a sorti un [http://code.google.com/eclipse/ plugin pour Eclipse] qui intègre à la fois les aspects GWT et [[Google App Engine]]. |
Enfin, en même temps que GWT 1.6, Google a sorti un [http://code.google.com/eclipse/ plugin pour Eclipse] qui intègre à la fois les aspects GWT et [[Google App Engine]]. |
||
Ligne 88 : | Ligne 123 : | ||
== Avantages et inconvénients == |
== 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 [http://java.sun.com/j2se/1.5.0/docs/guide/jpda/architecture.html débogage natif de Java] sont utilisables. |
* 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 [http://java.sun.com/j2se/1.5.0/docs/guide/jpda/architecture.html débogage natif de Java] sont utilisables. |
||
⚫ | * L'utilisation du mécanisme de [[Remote procedure call|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 [[Simple object access protocol|SOAP]] et autres services encodant les données avec [[JavaScript Object Notation|JSON]]. |
||
⚫ | * L'utilisation du mécanisme de [[Remote procedure call|RPC]] facilite la communication entre le client et le serveur, automatisant |
||
* 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. |
* 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é. |
||
⚫ | |||
⚫ | * 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 |
||
⚫ | |||
* 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. |
* 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. |
* 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. |
||
⚫ | |||
⚫ | * GWT fait partie des frameworks [[Rich Internet Application|RIA]] qui offrent une implémentation au moins partielle d'[[WAI-ARIA|ARIA]] permettant de faire face aux problèmes d'[[Accessibilité du Web|accessibilité des interfaces riches]]<ref>{{en}} [http://code.google.com/intl/fr/webtoolkit/doc/latest/DevGuideA11y.html {{lang|en|Developer's Guide - Accessibility Support, Google Code}}] et [http://www.paciellogroup.com/blog/?p=313 {{lang|en|WAI-ARIA Implementation in JavaScript UI Libraries - updated, The Paciello Group Blog}}], Steve Faulkner, juillet 2009.</ref>. |
||
⚫ | |||
⚫ | * GWT fait partie des frameworks [[Rich Internet Application|RIA]] qui offrent une implémentation au moins partielle d'[[WAI-ARIA|ARIA]] permettant de faire face aux problèmes d'[[Accessibilité du Web|accessibilité des interfaces riches]]<ref>{{en}} [http://code.google.com/intl/fr/webtoolkit/doc/latest/DevGuideA11y.html {{lang|en|Developer's Guide - Accessibility Support, Google Code}}] et [http://www.paciellogroup.com/blog/?p=313 {{lang|en|WAI-ARIA Implementation in JavaScript UI Libraries - updated, The Paciello Group Blog}}], Steve Faulkner, juillet 2009.</ref> |
||
* GWT peut être utilisé comme seule technologie Web cliente, ou en conjonction. |
* GWT peut être utilisé comme seule technologie Web cliente, ou en conjonction. |
||
== Version 2.0 == |
== Version 2.0 == |
||
La |
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) |
* 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. |
* 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 [[Extensible Markup Language|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. |
* 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. |
||
Ligne 121 : | Ligne 147 : | ||
* [[Adobe Flex|Flex]]/[[Adobe AIR|Air]] |
* [[Adobe Flex|Flex]]/[[Adobe AIR|Air]] |
||
* [[Silverlight]] |
* [[Silverlight]] |
||
* JavaFX dans une certaine mesure |
* [[JavaFX]] dans une certaine mesure |
||
* [http://pyjs.org/ Pyjamas] (pour python) |
* [http://pyjs.org/ Pyjamas] (pour python) |
||
Ligne 130 : | Ligne 156 : | ||
* [[SwingWeb]] |
* [[SwingWeb]] |
||
* [[ZK (informatique)|ZK]] |
* [[ZK (informatique)|ZK]] |
||
===Frameworks associés=== |
|||
* [[Vaadin]] - License ASLv2 pour le cœur et commerciale |
|||
* [https://www.sencha.com/products/gxt/ Sencha GXT] - License GPLv3 pour la première version et commerciale |
|||
* [http://erraiframework.org/ Errai Framework] [[RedHat]] - License ASLv2 |
|||
* [[Pyjs]] portage de GWT en [[Python (langage)|Python]] |
|||
== Notes et références == |
== Notes et références == |
||
Ligne 139 : | Ligne 171 : | ||
=== Liens externes === |
=== Liens externes === |
||
* {{en}} [http://code.google.com/ |
* {{en}} [http://code.google.com/p/google-web-toolkit/ Page d'accueil du projet GWT] |
||
⚫ | |||
* {{en}} [http://google.wikia.com/wiki/Google_Web_Toolkit Unofficial GWT resources] |
* {{en}} [http://google.wikia.com/wiki/Google_Web_Toolkit Unofficial GWT resources] |
||
* {{en}} [http:// |
* {{en}} [http://googlewebtoolkit.blogspot.com/ Blog officiel] |
||
⚫ | |||
{{Palette|Google}} |
{{Palette|Google|Frameworks web|JavaScript}} |
||
{{Portail|logiciels libres|Google}} |
{{Portail|logiciels libres|Google}} |
||
[[Catégorie: |
[[Catégorie:Logiciel Google|webtoolkit]] |
||
[[Catégorie:Web 2.0]] |
[[Catégorie:Web 2.0]] |
||
[[Catégorie:AJAX]] |
[[Catégorie:AJAX]] |
||
[[Catégorie:Framework de programmation]] |
[[Catégorie:Framework de programmation]] |
||
[[bg:Google Web Toolkit]] |
|||
[[ca:Google Web Toolkit]] |
|||
[[de:Google Web Toolkit]] |
|||
[[en:Google Web Toolkit]] |
|||
[[es:Google Web Toolkit]] |
|||
[[fa:ابزار وب گوگل]] |
|||
[[he:Google Web Toolkit]] |
|||
[[hi:गूगल वेब टूलकिट]] |
|||
[[hu:Google Web Toolkit]] |
|||
[[id:Google Web Toolkit]] |
|||
[[it:Google Web Toolkit]] |
|||
[[ja:Google Web Toolkit]] |
|||
[[kn:ಗೂಗಲ್ ವೆಬ್ ಟೂಲ್ಕಿಟ್ (Google Web Toolkit)]] |
|||
[[lv:Google Web Toolkit]] |
|||
[[nl:Google Web Toolkit]] |
|||
[[pl:Google Web Toolkit]] |
|||
[[pt:Google Web Toolkit]] |
|||
[[ru:Google Web Toolkit]] |
|||
[[sk:Google Web Toolkit]] |
|||
[[te:గూగుల్ వెబ్ టూల్కిట్]] |
|||
[[uk:Google Web Toolkit]] |
|||
[[zh:Google Web Toolkit]] |
Dernière version du 11 octobre 2022 à 20:49
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
[modifier | modifier le code]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
[modifier | modifier le code]- 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
[modifier | modifier le code]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 :
- Ext-GWT (appelé aussi GXT), un portage de Ext-JS en GWT,
- GWT Component Library,
- gwt-ext, un wrapper qui permet d'utiliser les composants Ext-JS en GWT (abandonné depuis par son créateur),
- GWT Widget Library,
- GWTiger
- SmartGWT, un wrapper de la bibliothèque javascript SmartClient
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
[modifier | modifier le code]- GWT 2.8.2
- GWT 2.8.1
- GWT 2.8
- GWT 2.7
- GWT 2.6.1
- GWT 2.6.0
- GWT 2.5.1
- GWT 2.5
- GWT 2.4
- GWT 2.3
- GWT 2.2
- GWT 2.1
- GWT 2.0
- GWT 1.7
- GWT 1.6
- GWT 1.5
- GWT 1.4
- GWT 1.3
- GWT 1.2
- GWT 1.1
- GWT 1.0
Environnements de développement
[modifier | modifier le code]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
[modifier | modifier le code]- 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
[modifier | modifier le code]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
[modifier | modifier le code]Approche « à la GWT » (le client est prégénéré) :
- Flex/Air
- Silverlight
- JavaFX dans une certaine mesure
- Pyjamas (pour python)
Approche RIA classique (HTML et JavaScript générés à partir du serveur) :
Frameworks associés
[modifier | modifier le code]- 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
[modifier | modifier le code]- « Release 2.12.1 », (consulté le )
- Les aspects sécurité
- (en) Developer's Guide - Accessibility Support, Google Code et WAI-ARIA Implementation in JavaScript UI Libraries - updated, The Paciello Group Blog, Steve Faulkner, juillet 2009.
Annexes
[modifier | modifier le code]Articles connexes
[modifier | modifier le code]Liens externes
[modifier | modifier le code]- (en) Page d'accueil du projet GWT
- (en) Unofficial GWT resources
- (en) Blog officiel
- (en) Projet GWT