GWT : Introduction au framework
July 3, 2008
Je travaille actuellement sur un plugin pour le logiciel NeoLoad permettant d’enregistrer des requêtes RPC effectuer par le framework GWT (Google Web Toolkit). Je vais donc en profiter pour présenter ce framework.
Qu’est ce que GWT?
Google Web Toolkit est un framework qui permet de créer un RIA (Rich Internet Application) sans avoir à écrire des centaines de lignes de JavaScript. GWT est un compilateur qui génére à partir de code source Java des fichiers JavaScript, XML et HTML.
Pour rendre dynamique le site vous pouvez ajouter une couche client-serveur RPC (Remote Protocol Call) entre le JavaScript côté client et le Java côté serveur. Cela permet de faire transiter par HTTP des objets Java entre le client et le serveur et des objets JSON entre le serveur et le client.
Afin de simplifier les étapes de tests et de débug, GWT fourni une JRE permettant d’exécuter l’application en local : Hosted Mode. Ceci évite la compilation de l’application et le déploiement sur le serveur.
GWT a donc pour but principal de simplifier et d’unifier le développement d’application Web : le développeur crée les classes Java nécessaire à l’application et GWT s’occupe du reste.
Le compilateur GWT
Dans cet objectif le compilateur GWT génère du code Javascript compatible pour la plupart des navigateurs : Firefox (version 1 à 3), IE (version 6 et 7), Safari (version 2) et Opéra (version 9).
Le code Java écrit par le développeur doit être compatible Java 1.4 minimum. GWT simule le comportement d’une JRE pour générer le Javascript, mais seulement certaines classes de l’API sont supportées : classes supportées par GWT.
Démarrage de l’application GWT
Chargement des paramètres du navigateur
Afin d’avoir une application qui fonctionne peu importe les paramètres de l’utilisateur (langue, version du navigateur, …) GWT va générer à la compilation un fichier JavaScript par type de navigateur supporté et par langue de l’application.
Lorsqu’un utilisateur accède à la page d’acceuil de l’application GWT va charger le fichier JavaScript correspondant à la configuration de l’utilisateur.
Page HTML
La page HTML d’entrée dans l’application ne contient qu’une frame vide qui va charger le JavaScript adéquat selon la configuration de l’utilisateur.
L’application démarre en plusieurs étapes :
- Chargement de la page HTML par le navigateur.
- Chargement et exécution du JavaScript .nocache.js.
- Le code JavaScript récupère la configuration du navigateur et récupère à partir d’une table (générée par GWT) le nom du fichier HTML à utiliser.
- Le JavaScript crée alors une frame cachée qui est insérée à la fin du body de la page.
- Lorsque le fichier HTML est chargée l’application est démarée.
Fichiers générés par le compilateur
Fichier JavaScript .nocache.js
Ce fichier permet de chargée une version de l’application compatible avec le navigateur du client.
Ce fichier contient une table avec en clé la configuration du client et en valeur l’URL du fichier HTML à charger. Par exemple ce fichier contiendra une entrée avec ‘Firefox en français’, ‘IE en anglais’, ‘Opera en allemand’, …
Chaque navigateur ayant une interprétation du JavaScript différent, cela permet de tirer parti de toutes les spécificités du navigateur.
Ce fichier nocache doit être re-téléchargé par le navigateur à chaque chargement de la page car il est recréé lorsque l’on recompile l’application. Cependant le nom ne change pas.
Fichier HTML .cache.html
Ces fichiers HTML (il y en à un par navigateur et par langue) contient uniquement le JavaScript compressé de l’application. Le fichier JavaScript n’est pas envoyé directement car certains navigateur ne supporte pas le JavaScript compressé. Il est donc inclus dans du HTML afin d’éviter les problèmes de compatibilité.
Chaque fichier HTML a pour nom la signature MD5 de son contenu afin d’éviter que plusieurs fichiers HTML aient le même nom. Ainsi si vous modifiez le code de votre application, les fichiers n’auront pas le même nom.
Ces fichiers étant différents à chaque compilation, ils peuvent être mis en cache par le navigateur. D’où leurs noms cache.html.
Fichier .gwt.rpc
Si votre application utilise des appels RPC vers le serveur et que les requêtes utilisent les objets Java que vous avez créé, ces objets doivent être sérialisés pour pouvoir transiter par le protocole HTTP.
Ces fichiers définissent quels objets doivent être sérialisés et leur politique de sérialisation.
Conclusion
Voilà une première introduction au framework GWT. Ce framework est très prometteur car il permet de s’abstraire de tous les problèmes que l’on rencontre pendant le développement d’une application AJAX.