Applications web avec Struts 2, Maven et jQuery/Version imprimable
Une version à jour et éditable de ce livre est disponible sur Wikilivres,
une bibliothèque de livres pédagogiques, à l'URL :
https://fr.wikibooks.org/wiki/Applications_web_avec_Struts_2,_Maven_et_jQuery
Introduction
Pourquoi Struts ?
modifierParmi les nombreux frameworks d'application web Java disponibles, Stuts présente les caractéristiques suivantes :
- L'ensemble de l'application peut être écrite en POJO, il n'y a pas de dépendances vers des composants JEE, Spring ou autre composants lourds. On peut donc tester les actions Struts comme de simple classe, un simple outil de test unitaire tel que JUnit.
- Struts a une culture d'indépendance, c'est vous qui faites les choix.
- Struts est indépendant de la technologie utilisée pour le rendu, on peut utiliser de simples JSP ou des templates Velocity ou FreeMarker.
- Struts n'essaie pas de gérer AJAX, vous pouvez adopter votre framework JavaScript préféré.
- Struts est un frawework qui suit une architecture MVC et est orienté actions, par opposition aux frameworks orientés composants (Apache Tapestry, Apache Wicket pour ne citer qu'eux).
- Struts est reconnu comme une brique strandard et éprouvée. Par exemple, Le référentiel ACAÏ, publié par le Service pour le développement de l'administration électronique de la Direction Générale de la Modernisation de l’État[1] recommande d'utiliser Struts dans les applications Java pour la réalisation des sites intranet ou extranet.
- Struts est un projet open-source, sous la très permissive licence Apache et est hébergé par la fondation Apache.
Pourquoi Maven ?
modifierMaven est un outil de build pour projets Java parmi les plus puissants. En ce qui nous préoccupe ici, Maven nous permettra (en une ligne de commande)
- De fournir à notre application toutes les dépendances dont elles a besoin : Struts et ses différentes plug-ins ;
- De packager l'application au format war, le format pour les application Web en Java ;
- De compiler les JSP en amont (habituellement, elles ne le sont qu'au dernier moment, quand on accède à la page pour la première fois) pour vérifier qu'elles sont bien écrites sans se laisser la surprise ;
- De lancer l'application pour la tester avec votre navigateur préféré. Ainsi, pas de serveur d'application à installer sur votre machine ni de déploiement à la main de l'application, ce qui s'avère souvent répétitif quand on développe de façon incrémentale et qu'on veut tester vite ce qu'on vient de modifier.
Pourquoi jQuery ?
modifierComme nous l'avons indiqué, Struts ne permet pas nativement de faire du AJAX ou des formulaires dynamiques. Si vous souhaitez réaliser des pages dynamiques avec JavaScript, vous devez utiliser le framework JavaScript de votre choix. Nous avons fait le choix de jQuery, pour plusieurs raisons :
- Il existe un plugin jQuery pour Struts qui permet d'inclure simplement jQuery dans les en-têtes des pages web générées. En plus, ce plug-in ajoute des taglibs qui vous faciliteront la tâche quand vous écrirez des pages dynamiques.
- Parmi les frameworks javaScript (qui sont des concepts encore nouveaux), jQuery semble être une solution de prédilection. Pour savoir cela, nous nous sommes appuyés sur les faits suivants :
- Des solutions majeures telles que Ruby on Rails et Drupal sont livrées avec jQuery ;
- jQuery est le plus populaire si on en croit de nombreux sondages (1, 2, 3) et les tendances selon Google Trends.
Références
modifier- ↑ Il est possible de consulter ce référentiel sur le site du ministère.
Démarrer le projet
Installation
modifierStruts
modifierDisponible ici.
Maven
modifier- Pour plus de détails voir : Développer en Java/Introduction à Apache Maven.
jQuery
modifier- Pour plus de détails voir : Programmation JavaScript/jQuery.
Il suffit de télécharger le fichier.
Configuration
modifier
Débogguer l'application
Configurer le config-browser
modifierhttp://localhost:8080/mon-application/config-browser/showConfig.action
Être strict avec OGNL
modifierDans le fichier struts.properties :
struts.ognl.logMissingProperties=true
struts.el.throwExceptionOnFailure=true
En savoir plus sur le contexte dans une page
modifierDans une JSP, on peut ajouter :
<s:debug />
Utiliser l'intercepteur Debugging
modifierPour l'activer, il suffit d'ajouter à la main, directement dans l'URL une valeur au paramètre debug
?debug=xml
?debug=console
?debug=command
?debug=browser
« Debugging Struts » dans la documentation officielle
Conversion de types
modifier« Type Conversion » dans la documentation officielle
Améliorer les performances
Utiliser le cache FreeMarker
modifierMême si vous n'utilisez pas FreeMarker dans vos vues, Struts cherche des templates dans le classpath, provoquant des temps de rendus de page longs[1].
On peut remédier au problème, dans struts.properties
:
struts.freemarker.templatesCache=true # false par défaut
Il faut ensuite créer un fichier freemarker.properties
à côté du struts.properties
et y ajouter
template_update_delay=600000 # par défaut 500ms
Références
modifier
Formulaires
Ajouter disabled="true"
sur un champ a deux effets :
- L'élément HTML généré aura
disabled="disabled"
- La valeur du paramètre ne sera pas injecté dans l'action (le setter ne sera pas appelé)
Divers/Accéder à une variable dans une itération
Pour récupérer la variable utilisée dans une itération :
<s:iterator value="trips" var="trip">
<s:set name="catchSpecies" value="%{methodFromAction(#trip}"/>
</s:iterator>
Réaliser des pages dynamiques avec jQuery
Mettre en place jQuery
modifierNous allons utiliser struts-jquery. Attention à ne pas le confondre avec struts2-jquery-plugin.
Dans le pom :
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-json-plugin</artifactId>
<version>${strutsVersion}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.jgeppert.struts2.jquery</groupId>
<artifactId>struts2-jquery-plugin</artifactId>
<version>${struts2jqueryVersion}</version>
<scope>runtime</scope>
</dependency>
<properties>
<!-- ... -->
<struts2jqueryVersion>3.7.1</struts2jqueryVersion>
</properties>
Dans les JSP qui utilisent jQuery, il faut déclarer la taglig pour rendre tous les tags struts-jQuery disponibles :
<%@ taglib prefix="sj" uri="/struts-jquery-tags" %>
Dans la JSP chargée de générer l'entête (tag <head>
) des pages générées, il faudra ajouter :
<sj:head jqueryui="true" jquerytheme="start" />
Réaliser des pages dynamiques avec jQuery/Grilles
Au moment de générer l'URL vers l'action JSON, ne pas oublier escapeAmp="false"
, sinon l'URL sera mal formatée au moment de la requête et les paramètres ne seront pas injectés dans l'action.
<s:url id="remoteurl" action="browseJson" escapeAmp="false">
<s:param name="param1" value="%{param1}" />
<s:param name="param2" value="%{param2}" />
</s:url>
Ressources externes
Bibliographie
modifier- (en) Dave Newton, Apache Struts 2 Web Application Development : Design, develop, test, and deploy your web applications using the Struts 2 framework, Birmimgham - Mumbai, Packt Publishing, , 359 p. (ISBN 978-1-847193-39-1, lire en ligne)Ce livre est une bonne introduction malgré quelques manques pour mettre en place la validation.
- (en) Ian Roughley, Starting Struts2, InfoQ, , 122 p. (ISBN 978-1-4303-2033-3, lire en ligne)
Voir aussi
modifierGFDL | Vous avez la permission de copier, distribuer et/ou modifier ce document selon les termes de la licence de documentation libre GNU, version 1.2 ou plus récente publiée par la Free Software Foundation ; sans sections inaltérables, sans texte de première page de couverture et sans texte de dernière page de couverture. |