Google Web Toolkit : créer son premier projet Structure d'un projet GWT

Même s'il est coutume d'affirmer qu'on développe avec GWT comme en Java, un projet GWT, contrairement à un projet Java classique, possède une structure très particulière qui reprend celle du module.

Cela est d'autant plus compréhensible qu'une partie du code est destinée à passer sous la moulinette d'un compilateur Java vers JavaScript. Il faut donc délimiter les portions du projet de nature à être traduites en JavaScript de celles qui resteront sur le serveur.

On peut globalement identifier quatre délimitations logiques dans un projet GWT :
 le code client (ou partagé entre client et serveur) ;
 le code serveur ;
 les fichiers de configuration de module ;
 le répertoire WAR.

figure 1-8 - la structure d'un projet gwt
Figure 1-8 - La structure d'un projet GWT © Eyrolles

Le package client

Par défaut, le compilateur GWT part du principe que toutes les classes présentes dans un package contenant le mot-clé "client" (ex : com.dng.projet.client.XX) sont traduites en JavaScript. Notez qu'il est possible de redéfinir ce nom dans le fichier de configuration du module. Lorsqu'on souhaite partager ce code avec le serveur, il est de coutume de l'appeler "shared" ou "common". Ce package intervient juste en dessous du nom du module (ex : com.dng.projet).

Le fait d'écrire du code dans le package client (ou shared) impose un certain nombre de contraintes. Tout d'abord, celles sur le type des classes utilisées côté client. Le compilateur GWT ne sait traduire que certaines classes Java du JDK en JavaScript. Ces classes sont un sous-ensemble de celles présentes dans les packages java.lang, java.lang.annotation, java.util, java.io et java.sql.

Pour plus d'informations, n'hésitez pas à vous référer à la javadoc GWT qui dénombre tous les types reconnus.

On pourrait penser que cette contrainte est pénalisante, mais dans la pratique un développeur web n'aura pas nécessairement besoin des sept mille classes du JDK. L'émulation des classes du JRE réalisée par GWT correspond généralement à des traitements fréquents effectués dans une couche d'interface graphique. Cela va de la création de listes ou collections à l'utilisation de types primitifs ou complexes (Char, String, int, Date, etc.). Les traitements plus évolués ou consommateurs en ressources sont généralement dévolus au serveur.