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 . 4.1 La balise <package/> . . . . . . . . . 4.2 La balise
. . . . . . . . . . 4.3 La balise
. . . . . . . . . . 4.4 La balise . . . . . . . . . . . 4.5 La balise <param/> . . . . . . . . . . 4.6 La balise . . . . . . . . 4.7 La balise . . . . . 4.8 La balise . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
45 46 47 48 49 51 51 52 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
3
Table des matières Chapitre 5
Gestion des actions 1. Présentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 2. Classes d'action . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 3. Gestion des ressources . . . . . . . . . . . . . 3.1 Accès aux ressources par classe . . . 3.2 Accès aux ressources par interface . 3.3 Passage de paramètres . . . . . . . . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
84 85 86 91
4. Gestion dynamique du mapping. . . . . . . . . . . . . . . . . . . . . . . . . . . 93 5. Invocation dynamique de méthodes . . . . . . . . . . . . . . . . . . . . . . . . 98 6. Gestion des résultats. . . . . . . . . . 6.1 Redirection avec paramètres 6.2 Redirection sans paramètre . 6.3 Redirection vers action . . . . 6.4 Redirection chaînée . . . . . . . 6.5 FreeMarker et Velocity . . . . 6.6 HttpHeader . . . . . . . . . . . . . 6.7 Stream . . . . . . . . . . . . . . . . 6.8 XSLT. . . . . . . . . . . . . . . . . . 6.9 PlainText. . . . . . . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
102 104 104 108 111 112 113 114 114 114
7. Gestion des exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115 8. En résumé. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120 Chapitre 6
Bibliothèque de tag Struts 1. Présentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121 2. Les 2.1 2.2 2.3
tags de formulaire . . . . . . . . . . . . . . . . . . . . . . . La balise <s:form/> . . . . . . . . . . . . . . . . . . . . Les thèmes de présentation et l’attribut theme La balise <s:textfield/>. . . . . . . . . . . . . . . . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
121 122 124 127
4
Struts 2 Le framework de développement d'applications Java EE 2.4 La balise <s:password/> . . . . . . . . . . . 2.5 La balise <s:submit/>. . . . . . . . . . . . . 2.6 La balise <s:reset/> . . . . . . . . . . . . . . 2.7 La balise <s:label/> . . . . . . . . . . . . . . 2.8 La balise <s:head/> . . . . . . . . . . . . . . 2.9 La balise <s:textarea/> . . . . . . . . . . . . 2.10 La balise <s:checkbox/> . . . . . . . . . . . 2.11 La balise <s:select/> . . . . . . . . . . . . . . 2.12 La balise <s:optgroup/> . . . . . . . . . . . 2.13 La balise <s:radio/> . . . . . . . . . . . . . . 2.14 La balise <s:checkboxlist/> . . . . . . . . 2.15 Les autres balises de formulaire Struts .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
127 128 129 130 130 130 131 133 139 142 146 149
3. Les tags de contrôle . . . . . . . . . . . . . . . . . . . . . . . 3.1 La balise <s:property/> . . . . . . . . . . . . . . . . 3.2 La balise <s:a/> . . . . . . . . . . . . . . . . . . . . . . 3.3 La balise <s:action/> . . . . . . . . . . . . . . . . . . 3.4 La balise <s:param/> . . . . . . . . . . . . . . . . . . 3.5 La balise <s:bean/> . . . . . . . . . . . . . . . . . . . 3.6 La balise <s:date/> . . . . . . . . . . . . . . . . . . . . 3.7 La balise <s:set/> . . . . . . . . . . . . . . . . . . . . . 3.8 La balise <s:push/> . . . . . . . . . . . . . . . . . . . 3.9 La balise <s:url/> . . . . . . . . . . . . . . . . . . . . . 3.10 Les balises <s:if/>, <s:else/> et <s:elseif/>. 3.11 La balise <s:iterator/> . . . . . . . . . . . . . . . . . 3.12 La balise <s:append/> . . . . . . . . . . . . . . . . . 3.13 La balise <s:sort/> . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
150 150 153 153 154 155 156 157 158 158 158 159 163 165
4. En résumé. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
5
Table des matières 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 . . . . . . . . . . . . . . . . . . 3.1 required. . . . . . . . . . . . . . . . . 3.2 requiredstring . . . . . . . . . . . . 3.3 stringlength. . . . . . . . . . . . . . 3.4 int . . . . . . . . . . . . . . . . . . . . . 3.5 date. . . . . . . . . . . . . . . . . . . . 3.6 e-mail . . . . . . . . . . . . . . . . . . 3.7 url . . . . . . . . . . . . . . . . . . . . . 3.8 regex . . . . . . . . . . . . . . . . . . . 3.9 fieldexpression et expression . 3.10 conversion . . . . . . . . . . . . . . . 3.11 visitor . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
195 195 195 195 197 197 197 199 199 200 203 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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.1 L'interface Validator et les classes ValidatorSupport et FieldValidatorSupport . . . . . . . . . . . . . . . . . . . . . 6.2 Déclarer les validateurs . . . . . . . . . . . . . . . . . . . . . . 6.3 Mise en application . . . . . . . . . . . . . . . . . . . . . . . . . 6.4 Validation dans les classes d’action . . . . . . . . . . . . .
. . . . . . . 219 . . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
219 220 221 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 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
7
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. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.1 Utilisation de boutons dynamiques . . . . . . . . . . . . . . . . . . . . 4.2 Gestion des boîtes (box) dynamiques pour les confirmations et messages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.3 Utilisation du plug-in Widget . . . . . . . . . . . . . . . . . . . . . . . . 4.4 Utilisation d’outils dynamiques. . . . . . . . . . . . . . . . . . . . . . . 4.5 Utilisation d’un service d’autocomplétion pour les recherches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.6 Gestion des tris dynamiques . . . . . . . . . . . . . . . . . . . . . . . . .
353 353 355 358 364 368 377
5. En résumé. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 380
9
Table des matières 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. . . . . . . . . . . . . . . . . . 3.1 Page de mise en forme du modèle 3.2 Définition du modèle . . . . . . . . . 3.3 Mise en place du plug-in Tiles . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
409 412 413 415
4. Écrire un plug-in . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 417 5. Utiliser le plug-in . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 421 6. Les autres plug-ins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 424 7. En résumé. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 425
Struts 2
10
Le framework de développement d'applications Java EE Chapitre 21
Struts sans configuration 1. Présentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 427 2. Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 427 3. Utilisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.1 Nommage . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2 Annotations d’actions . . . . . . . . . . . . . . . . . . 3.3 Annotations de résultats . . . . . . . . . . . . . . . . 3.4 Annotations d’intercepteurs . . . . . . . . . . . . . 3.5 Annotations d’espace de nommage . . . . . . . . 3.6 Annotations des vues . . . . . . . . . . . . . . . . . . 3.7 Annotations des exceptions. . . . . . . . . . . . . . 3.8 Chargement automatique des configurations.
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
428 429 429 432 432 437 438 438 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