Focus Le terme Ajax fait fureur dans le monde du logiciel. L’acronyme signifiait originellement Asynchronous JavaScript and XML (XML et JavaScript asynchrones), mais il fait aujourd’hui référence à un large champ de techniques qui peuvent, par exemple, ne pas inclure XML. Au-delà du jargon technique, Ajax désigne l’architecture d’un logiciel conçu pour être utilisé avec n’importe quel navigateur web, mais qui inclut une interface offrant la même impression de réactivité qu’une application de bureau. Cela signifie, par exemple, qu’un composant de grille, tel qu’un tableur qui apparaît sur une page web, répond instantanément à la manipulation des données par l’utilisateur, sans les délais temporels ou les perturbations visuelles causés par la mise à jour ou la reconstruction de la page avec de nouvelles requêtes HTTP. Les services Gmail et Agenda de Google, ainsi que le portail web français netvibes.com sont trois exemples d’applications Ajax typiques. Ajax fonctionne en communiquant avec le logiciel médiateur et/ou la base de données tierce en utilisant un objet JavaScript du côté du client. Celui-ci est appelé XMLHttpRequest (XHR). La page web est construite et programmée avec des technologies standard et courantes, connues sous le nom de HTML/XHTML, feuilles de style en cascade (cascading style sheets, ou CSS), JavaScript, et le modèle objet de document (Document Object Model) qui se cache derrière la structure de chaque page web. Les données que la page échange avec son serveur tiers, telles qu’une base de données de produits, peuvent être en pur texte, en XML, ou dans un format appelé notation objet issue de JavaScript (JavaScript Object Notation, ou JSON). • Par exemple, l’utilisateur peut sélectionner un nom de produit dans une liste sur une page web. En réponse à cet événement, l’application utilise XHR afin d’envoyer une requête pour les données concernant ce produit. La page ne change jamais, car l’application envoie la requête de manière asynchrone en arrière-plan. Le composant serveur, comme un fichier PHP ou un servlet, reçoit la requête HTTP et retourne une réponse contenant les informations à propos du produit, par exemple au format XML ou JSON. L’application traite cette dernière en utilisant la bibliothèque DOM de JavaScript, ou en convertissant la valeur JSON en un objet côté client (voir plus loin dans ce Focus). L’utilisateur voit la nouvelle information sur la page web, idéalement dans un délai très court. 2 Focus L’approche d’Ajax de Google Web Toolkit Un développeur créera habituellement son application Ajax en écrivant des pages XHTML et du code JavaScript avec son environnement de développement intégré favori (integrated development environment, IDE), ou même un éditeur de texte. Il existe de nombreuses bibliothèques et cadres de développement différents, avec lesquels les programmeurs peuvent utiliser des classes JavaScript préfabriquées pour implanter des comportements dynamiques qui leur prendraient autrement beaucoup de temps, comme le glisser-déposer ou des structures visuelles arborescentes sophistiquées. Ces bibliothèques incluent la boîte à outils Dojo, Prototype, Yahoo! User Interface Library, et script.aculo.us. Elles sont conçues pour les développeurs plutôt bien avancés dans leur connaissance de JavaScript. Ces méthodes simples changent à mesure que des outils puissants prolifèrent pour les développeurs Ajax. GWT adopte une approche d’Ajax différente de la plupart des boîtes à outils. En utilisant le cadre de développement GWT, vous pouvez concevoir et programmer votre interface en vous servant uniquement du langage Java. Vous pouvez utiliser les outils en ligne de commande de GWT pour vérifier la syntaxe des classes Java, puis générer automatiquement le JavaScript pour le côté client de l’application. La conception de l’interface utilisateur est très similaire à celle de l’interface de programmation Swing de Java. Vous pouvez donc voir GWT à la fois comme un outil de génération de JavaScript pour les programmeurs Java, et comme un cadre de développement pour créer des éléments d’interface utilisateur redistribuables ou extensibles.Vous n’avez pas besoin de connaître une once de JavaScript, bien que vous puissiez inclure du JavaScript brut dans votre code en utilisant les constructions de programmation spéciales que fournit GWT. • Les bénéfices de GWT sont les suivants : • Vous pouvez utiliser vos outils favoris et les connaissances que vous possédez déjà pour créer des applications Ajax sophistiquées, souvent sans vous plonger dans JavaScript. • Vous pouvez concevoir et développer votre application de manière purement orientée objet, puisque vous utilisez Java. JavaScript ne possède pas nativement toutes les fonctionnalités OO incluses dans Java. • Utiliser GWT retire de nombreux problèmes induits par l’adaptation du code Ajax à tous les différents navigateurs. Ces problèmes peuvent représenter une véritable épine dans le pied des développeurs, car deux navigateurs peuvent traiter la même portion de code de manière complètement différente. Vous n’avez généralement pas besoin 3 Focus de penser à ces incompatibilités potentielles lorsque vous concevez votre application, excepté pour la tester dans les divers navigateurs par la suite. • Le JavaScript que le compilateur GWT génère est rendu vraiment obscur ou difficile à lire, ce qui fournit à votre application un niveau sommaire de sécurité ou la protection de matériel propriétaire. Vous pouvez optionnellement « débrancher » cette fonctionnalité d’obscurcissement, comme le décrit plus loin ce Focus. • Google et des tierces parties continuent à ajouter des bibliothèques à GWT, ou à en rendre disponibles de nouvelles qui sont interopérables avec GWT. Ces activités continuent à étendre les fonctionnalités et la portée de GWT. Un exemple est une bibliothèque Open Source nommée GWT Widget Library. Ce fichier JAR inclut des classes qui enveloppent les objets Scriptaculous Effects, vous permettant d’ajouter ces intéressants effets visuels dynamiques à vos applications GWT. Vous pouvez en savoir plus à propos de cette bibliothèque à l’adresse http://gwt-widget .sourceforge.net. D’accord, nous avons assez discuté de l’aspect haut niveau de GWT. Écrivons un programme et regardons un peu de code ! Bien débuter D’abord, quelques prérequis. Vous avez besoin d’installer le kit de développement Java (Java Development Kit, ou JDK) en version 1.4 ou plus récente. Au moment de l’écriture de ce Focus, nous utilisons la distribution de GWT gwt-mac1.2.22. Vous ne pouvez pas utiliser les fonctionnalités de Java 5 telles que les génériques ou l’autoboxing avec votre code client, mais vous pouvez bien sûr utiliser le compilateur JDK de Java 5 quand vous écrivez ces classes. GWT 1.3 Release Candidate • Les développeurs de GWT ont livré GWT Release Candidate (RC) 1.3 au moment où nous avons publié la version originelle en anglais de ce Focus. Cette mouture est cependant associée à l’annonce du passage de GWT en Open Source, et n’a fourni aucune nouvelle fonctionnalité. L’application de démonstration a été compilée et testée avec gwt-mac-1.3.1 RC et la version officielle gwt-mac-1.2.22. 4 Focus Vous devez télécharger et décompresser le cadre de développement GWT. L’adresse de téléchargement est http://code .google.com/webtoolkit. Vous pouvez télécharger le cadre de développement pour Windows, Linux, ou Mac OS X. L’archive décompressée inclut : • La documentation, incluant un dossier au format Javadoc pour les classes de l’API de GWT ; • Le fichier d’archive Java (JAR) gwt-user.jar, contenant les classes de l’interface utilisateur et d’autres morceaux de l’API GWT (tels que les modules pour manipuler les formats JSON et XML, et pour faire des requêtes HTTP à partir de votre code client) ; • Le fichier JAR (par exemple, gwt-dev-mac.jar) contenant les outils de développement propriétaires de GWT, tels que la classe Java qui « compile » votre code et génère le JavaScript ; • Le fichier JAR gwt-servlet.jar, que vous pouvez déployer vers Tomcat ou un autre conteneur de servlet, et qui inclut l’API pour les éléments de l’interface utilisateur et d’autres objets. Il s’agit essentiellement de gwt-user.jar sans les classes de l’API Servlet du paquet javax. La spécification Java Servlet, un standard accepté pour les conteneurs de servlet, n’autorise pas les paquets tels que javax.servlet à être chargés à partir de JAR, en particulier les applications web. Par conséquent, gwt-servlet.jar peut être placé dans WEB-INF/lib dans vos applications web Java, si votre code côté serveur requiert que les classes GWT soient présentes dans le classpath de l’application ; • Quelques outils en ligne de commande (voir plus bas). Code côté client dans les applications déployées Maintenant, nous sommes presque prêts à commencer à programmer. • Vous n’avez pas besoin d’inclure le fichier gwt-servlet.jar dans le chemin de classe (classpath) de votre application web Java, à moins que vous ayez des classes côté serveur qui utilisent l’API GWT, comme les classes et interfaces relatives à l’appel de procédure à distance (Remote Procedure Call, RPC). C’est parce que l’API Java relative à l’interface utilisateur de GWT est seulement utilisée en développement, avant que les outils ou compilateurs GWT génèrent le JavaScript. Vous déployez ensuite juste le JavaScript généré vers votre application web. Le JavaScript est en fait exécuté dans le navigateur et n’a plus aucune relation avec l’API Java de GWT (et le fichier JAR associé). À ce moment, ce n’est plus que du JavaScript ! 5