Académique Documents
Professionnel Documents
Culture Documents
Yves Bekkers
Outil dvelopp par Google depuis 2006 Principe
Utilisation massive dappels distance asynchrones Dveloppement WEB orient composants pp p Dvelopper en un seul langage : Java Lors du dploiement un compilateur traduit le code client crit en Java vers une application WEB classique (HTML+Javascript) Abstraction complte de la complexit lie HTML, Javascript, CSS
1 GWT - Yves Bekkers 2
Portabilit
Les applications GWT sont supportes automatiquement par tous les principaux navigateurs
IE Mozilla Firefox Safari Google Chrome
Production
Dployer lapplication en utilisant le compilateur crois GWT pour gnrer les pages HTML et le code Javascript partir du code Java
GWT - Yves Bekkers 3
Communications RPC
Appel de mthodes distance bas sur les servlet Esprit RMI
Crer une interface qui spcifie les mthodes distantes Implmenter linterface cot serveur p
Format XML
<menu id="file" value="File"> <popup> <menuitem value="New" onclick="CreateNewDoc()" / () /> <menuitem value="Open" onclick="OpenDoc()" /> <menuitem value="Close" onclick="CloseDoc()" /> </popup> </menu> GWT - Yves Bekkers
Format JSON
{"menu": { "id": "file", "value": "File", "popup": { "menuitem": [ {"value":"New","onclick":"CreateNewDoc()"}, {"value": "Open", "onclick": "OpenDoc()"}, {"value": "Close", "onclick": "CloseDoc()"} ] } }}
GWT - Yves Bekkers 8
Pourquoi GWT
Pas besoin de connaitre Javascript Javacript est un faux langage objet Typage statique de votre application
Dtection de bug la compilation
Code plus simple avec GWT GWT offre en plus un mcanisme de RPC
Remote Procedure Call : appel de mthode distance Srialisation automatique des objets changs GWT - Yves Bekkers 10
Composants de GWT
le compilateur Java vers JavaScript un navigateur spcialement modifi pour permettre l'excution (et le dbogage) de code Java natif sans ncessiter la compilation JavaScript une bibliothque d'mulation JRE: il s'agit d'une q g implmentation en JavaScript d'un sous-ensemble de la bibliothque de classes Java standard (en particulier quasiment tout le package java.lang et une partie de java.util) une bibliothque de composants graphiques contenant des Widgets de base permettant la construction d'une interface graphique
GWT - Yves Bekkers 11
12
Conventions
Module sous Eclipse
Deux fichiers avec une nommage cohrant
monMudule.gwt.xml le descripteur de module monModule.html la page html hte du module
Plusieurs modules sont autoriss dans un mme projet, ils ont chacun leur descripteur, point dentre et leur page HTML Hte Un module na quune page HTML hte Si un module a plusieurs points dentre ils apparaissent tous dans la mme page
GWT - Yves Bekkers 13 GWT - Yves Bekkers 14
Le dossier war
Le dossier war, reprsente larchive WAR qui sera exporte/dploye. Lors de la compilation du projet, les fichiers seront crs dans un sousdossier de celui-l.
Le rpertoire lib du WEB-INF contient les librairies p GWT.
Le dossier src
On trouve deux packages
Client Server
Toutes les ressources (images, css, ) doivent tre places dans le rpertoire war linstar dune application Web classique.
GWT - Yves Bekkers 15 GWT - Yves Bekkers 16
18
Interface graphique
Fichier CSS
.gwt-ListWidget { background-color:black; color:red; } GWT - Yves Bekkers
19
20
Un exemple : le compteur
Plusieurs composants non disponibles dans GWT ont t implmentes dans des librairies tierces, comme Ext GWT, GWT Component Library, GWT-Ext,GWT Widget Library,GWTiger,Rocket GWT,dojo etc .
GWT - Yves Bekkers 21 GWT - Yves Bekkers 22
Structure de linterface
VerticalPanel
HorizontalPanel
HorizontalPanel
Label
TextBox
Button
Button
Button
23
24
Notion de module
Un module est un ensemble de services cohrents rutilisables Toute application est incluse dans un module Un module comporte
Un nom de module Un descripteur de module (document Monmodule.gwt.xml) Une page HTML hte Un ventuel point dentre
GWT - Yves Bekkers 25
26
Le document Compteur.gwt.xml
placer dans le rpertoire src/fr/ifsic/gwt/compteur
<module rename-to='compteur'> <inherits name='com.google.gwt.user.User'/> <inherits name='com.google.gwt.user.theme.standard.Standard'/> g g g <entry-point class='fr.ifsic.gwt.compteur.client.Compteur'/> </module>
27
28
La classe Compteur
public class Compteur implements EntryPoint { public void onModuleLoad() { } }
Structure de linterface
mainPanel visuPanel bouttonPanel
label
visuCompteurTextBox p
addButton
zeroButton
subButton
Composants de la librairie
com.google.gwt.user.client.ui
31
32
34
page html
35
Dmonstration
41
42
43
44
45
46
47
48
49
50
Texte riche
RichTextArea
51
52
Panneau dcor
DecoratorPanel
Panneau extensible
DisclosurePanel
53
54
55
56
57
58
59
60
10
Principe de fonctionnement
Code GWT (client)
Crer un service
1. Cot client, dfinir une interface dite synchrone qui tend RemoteService et qui liste toutes les mthodes RPC 2. 2 Cot serveur, implmenter linterface et serveur l interface tendre RemoteServiceServlet 3. Cot client, dfinir une interface asynchrone base sur la premire interface avec le mme nombre de mthodes que la premire interface
61 GWT - Yves Bekkers 62
On demande un service mais on n attend nattend pas la rponse Celle-ci rponse. Celle ci viendra en son temps grce un objet de rappel .
Interface asynchrone
Interface synchrone
Code serveur
63
64
65
66
11
Conventions de nommage
Nom des classes et interfaces
MyService interface synchrone MyServiceImpl implementation MyServiceAsync interface asynchrone
Chaque mthode dans linterface synchrone doit avoir une mthode correspondante dans linterface asynchrone avec un paramtre extra en dernier argument de type AsyncCallback
GWT - Yves Bekkers 67
68
Utilisation de services
Crer une instance de service
MonServiceAsync monService = GWT .create(MonService.class);
Un second exemple
La calculette dporte
72
12
Interface utilisateur
Structure de linterface
VerticalPanel
HTML
Label
73
74
75
76
Remplissage de la table
lesFields.setText(0,0,"V1"); lesFields.setText(1,0,"V2"); lesFields.setText(2,0,"Rsultat"); lesFields.setWidget(0,1,v1Field); lesFields.setWidget(1,1,v2Field); lesFields.setWidget(2,1,resultField); resultField.setEnabled(false);
77
78
13
79
80
81
82
VALIDATION
84
14
Verifier (1)
public class MaxlengthVerifier { private int taille; public MaxlengthVerifier(int taille) { this.taille = taille; } public boolean isValid(String name) { if (name == null || name.length()==0) { return false; } return name.length() <= taille; } } GWT - Yves Bekkers 85
Verifier (2)
private final Label errorLabel = new Label(); private static final MaxlengthVerifier verif25 = new MaxlengthVerifier(25); errorLabel.setText(""); if (!verif25.isValid(titreField.getText())) { errorLabel.setText("svp entre 1 et 25 lettres dans le titre"); return false; }
86
Verifier (3)
Mettre la procdure dans un rpertoire shared Dans le fichier monFic.gwt.xml
< <source path="client"/> th " li t"/> <source path="shared"/>
Dmonstration
87
88
Notion de session
On utilise les servlets qui implmentent les RPC HttpServletRequest request = this.getThreadLocalRequest(); HTTPSession session = request.getSession(); o = session.getAttribute(key) session.setAttribute(key, o);
Conclusion
89
90
15