Vous êtes sur la page 1sur 10

Les exemples cités tout au long de cet ouvrage sont téléchargeables

à l'adresse suivante : http://www.editions-eni.fr.


Saisissez la référence ENI de l'ouvrage EI2STRU dans la zone de recherche et validez.
Cliquez sur le titre du livre puis sur le lien de téléchargement.

Chapitre 1
Présentation
1. Qu'est-ce qu'un framework ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2. Pourquoi utiliser un framework ? . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.1 Normes et standards . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.2 Framework et développement web . . . . . . . . . . . . . . . . . . . . . 13
3. Les différents frameworks. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
4. Quel framework choisir ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
5. Introduction à la programmation Java Entreprise Edition . . . . . . . . 15
6. Struts 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
7. Struts 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
8. Installation du framework Struts 2. . . . . . . . . . . . . . . . . . . . . . . . . 20
9. En résumé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

Chapitre 2
Modèle de conception MVC et Java EE
1. Présentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
2. Premier projet MVC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
3. Projet MVC avec filtre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
4. En résumé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
2 Struts 2
Le framework de développement d'applications Java EE

Chapitre 3
Commencer avec Struts 2
1. Présentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
2. Fonctionnement général de Struts 2 . . . . . . . . . . . . . . . . . . . . . . . . 42
3. Les intercepteurs Struts 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
4. Le fichier de configuration struts.xml . . . . . . . . . . . . . . . . . . . . . . . 45
4.1 La balise <package/> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
4.2 La balise <include/>. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
4.3 La balise <action/> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
4.4 La balise <result/> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
4.5 La balise <param/> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
4.6 La balise <constant/> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
4.7 La balise <global-results/> . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
4.8 La balise <interceptors/> . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
5. Architecture Struts 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
6. Les fichiers de propriétés struts.properties et default.properties . . . 55
7. Le fichier de propriétés de l'application web.xml. . . . . . . . . . . . . . . 59
8. Le fichier de configuration struts-default.xml . . . . . . . . . . . . . . . . . 60
9. Une première application Struts . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
10. En résumé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67

Chapitre 4
Gestion des traces et débogage
1. Présentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
2. Gestion du débogage. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
3. Gestion du profilage (Profiling). . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
4. En résumé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
Table des matières 3

Chapitre 5
Gestion des actions
1. Présentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
2. Classes d'action . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
3. Gestion des ressources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
3.1 Accès aux ressources par classe . . . . . . . . . . . . . . . . . . . . . . . . 85
3.2 Accès aux ressources par interface . . . . . . . . . . . . . . . . . . . . . . 86
3.3 Passage de paramètres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
4. Gestion dynamique du mapping. . . . . . . . . . . . . . . . . . . . . . . . . . . 93
5. Invocation dynamique de méthodes . . . . . . . . . . . . . . . . . . . . . . . . 98
6. Gestion des résultats. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
6.1 Redirection avec paramètres . . . . . . . . . . . . . . . . . . . . . . . . . 104
6.2 Redirection sans paramètre . . . . . . . . . . . . . . . . . . . . . . . . . . 104
6.3 Redirection vers action . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
6.4 Redirection chaînée . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
6.5 FreeMarker et Velocity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
6.6 HttpHeader . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
6.7 Stream . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
6.8 XSLT. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
6.9 PlainText. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
7. Gestion des exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
8. En résumé. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120

Chapitre 6
Bibliothèque de tag Struts
1. Présentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
2. Les tags de formulaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
2.1 La balise <s:form/> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
2.2 Les thèmes de présentation et l’attribut theme . . . . . . . . . . . 124
2.3 La balise <s:textfield/>. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
4 Struts 2
Le framework de développement d'applications Java EE

2.4 La balise <s:password/> . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127


2.5 La balise <s:submit/>. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
2.6 La balise <s:reset/> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
2.7 La balise <s:label/> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
2.8 La balise <s:head/> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
2.9 La balise <s:textarea/> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
2.10 La balise <s:checkbox/> . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
2.11 La balise <s:select/> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
2.12 La balise <s:optgroup/> . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
2.13 La balise <s:radio/> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
2.14 La balise <s:checkboxlist/> . . . . . . . . . . . . . . . . . . . . . . . . . 146
2.15 Les autres balises de formulaire Struts . . . . . . . . . . . . . . . . . . 149
3. Les tags de contrôle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
3.1 La balise <s:property/> . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
3.2 La balise <s:a/> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
3.3 La balise <s:action/> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
3.4 La balise <s:param/> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
3.5 La balise <s:bean/> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
3.6 La balise <s:date/> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
3.7 La balise <s:set/> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
3.8 La balise <s:push/> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
3.9 La balise <s:url/> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
3.10 Les balises <s:if/>, <s:else/> et <s:elseif/>. . . . . . . . . . . . . 158
3.11 La balise <s:iterator/> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
3.12 La balise <s:append/> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
3.13 La balise <s:sort/> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165
4. En résumé. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
Table des matières 5

Chapitre 7
Messages et internationalisation
1. Présentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169
2. Mise en application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170
3. Accès aux propriétés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
4. Données multilingues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176
5. Sélection dynamique des fichiers . . . . . . . . . . . . . . . . . . . . . . . . . 182
6. Accès aux ressources dans les classes. . . . . . . . . . . . . . . . . . . . . . . 184
7. En résumé. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186

Chapitre 8
Validation des entrées
1. Présentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187
2. Mise en place . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188
3. Validations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
3.1 required. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
3.2 requiredstring . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
3.3 stringlength. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
3.4 int . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197
3.5 date. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197
3.6 e-mail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197
3.7 url . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199
3.8 regex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199
3.9 fieldexpression et expression . . . . . . . . . . . . . . . . . . . . . . . . . 200
3.10 conversion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203
3.11 visitor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205
4. Mise en place d'un exemple complet. . . . . . . . . . . . . . . . . . . . . . . 206
5. Gestion des messages d'erreurs et succès . . . . . . . . . . . . . . . . . . . . 212
6 Struts 2
Le framework de développement d'applications Java EE

6. Écrire un validateur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219


6.1 L'interface Validator et les classes ValidatorSupport
et FieldValidatorSupport . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219
6.2 Déclarer les validateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220
6.3 Mise en application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221
6.4 Validation dans les classes d’action . . . . . . . . . . . . . . . . . . . . 228
7. En résumé. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230

Chapitre 9
Gestion des types et conversions
1. Présentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231
2. Gestion des conversions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231
3. Gestion des types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234
4. Mise en application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235
5. En résumé. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241

Chapitre 10
Couche modèle et accès aux données
1. Présentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243
2. Mise en application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245
3. L’intercepteur Preparable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250
4. Accès et manipulation de données . . . . . . . . . . . . . . . . . . . . . . . . 259
4.1 Le modèle Data Access Object DAO . . . . . . . . . . . . . . . . . . . 260
5. En résumé. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281
Table des matières 7

Chapitre 11
Gestion de l'upload ou chargement de données
1. Présentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283
2. La balise <s:file/> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284
3. L’intercepteur fileUpload . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284
4. Chargement unique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286
5. Chargement multiple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294
6. Chargement en Ajax. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295
7. En résumé. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 300

Chapitre 12
Gestion du téléchargement de données
1. Présentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301
2. Résultat stream . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302
3. Téléchargement dynamique de fichiers . . . . . . . . . . . . . . . . . . . . . 306
4. En résumé. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310

Chapitre 13
Gestion des chargements de pages
1. Présentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311
2. Mise en place . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312
3. En résumé. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316

Chapitre 14
Développer des intercepteurs
1. Présentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317
2. Écrire un intercepteur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318
8 Struts 2
Le framework de développement d'applications Java EE

3. En résumé. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325

Chapitre 15
Développer des résultats
1. Présentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327
2. Écrire un résultat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328
3. En résumé. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332

Chapitre 16
Gérer le double clic ou double envoi
1. Présentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333
2. Mise en place du jeton . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334
3. En résumé. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340

Chapitre 17
Struts et Ajax JQuery
1. Présentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 341
2. Installation du framework JavaScript . . . . . . . . . . . . . . . . . . . . . . 342
3. Technologie Ajax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343
4. Optimisations. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353
4.1 Utilisation de boutons dynamiques . . . . . . . . . . . . . . . . . . . . 353
4.2 Gestion des boîtes (box) dynamiques pour les confirmations
et messages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355
4.3 Utilisation du plug-in Widget . . . . . . . . . . . . . . . . . . . . . . . . 358
4.4 Utilisation d’outils dynamiques. . . . . . . . . . . . . . . . . . . . . . . 364
4.5 Utilisation d’un service d’autocomplétion
pour les recherches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 368
4.6 Gestion des tris dynamiques . . . . . . . . . . . . . . . . . . . . . . . . . 377
5. En résumé. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 380
Table des matières 9

Chapitre 18
Les moteurs de templates
1. Velocity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381
2. Utilisation de Velocity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 382
3. FreeMarker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 386
4. En résumé. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 390

Chapitre 19
XSLT
1. Présentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391
2. Utilisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 392
3. En résumé. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 399

Chapitre 20
Plug-ins Struts
1. Présentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 401
2. Le plug-in JFreeChart . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 402
3. Le plug-in Tiles. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 409
3.1 Page de mise en forme du modèle . . . . . . . . . . . . . . . . . . . . . 412
3.2 Définition du modèle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 413
3.3 Mise en place du plug-in Tiles . . . . . . . . . . . . . . . . . . . . . . . . 415
4. Écrire un plug-in . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 417
5. Utiliser le plug-in . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 421
6. Les autres plug-ins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 424
7. En résumé. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 425
10 Struts 2
Le framework de développement d'applications Java EE

Chapitre 21
Struts sans configuration
1. Présentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 427
2. Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 427
3. Utilisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 428
3.1 Nommage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 429
3.2 Annotations d’actions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 429
3.3 Annotations de résultats . . . . . . . . . . . . . . . . . . . . . . . . . . . . 432
3.4 Annotations d’intercepteurs . . . . . . . . . . . . . . . . . . . . . . . . . 432
3.5 Annotations d’espace de nommage . . . . . . . . . . . . . . . . . . . . 437
3.6 Annotations des vues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 438
3.7 Annotations des exceptions. . . . . . . . . . . . . . . . . . . . . . . . . . 438
3.8 Chargement automatique des configurations. . . . . . . . . . . . . 439
4. En résumé. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 439

Annexe
1. Présentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 441
2. Intercepteurs Struts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 441
3. Object-Graph Navigation Language OGNL. . . . . . . . . . . . . . . . . . 444
4. En résumé. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 452

Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 453