Aller au contenu

Applications web avec Struts 2, Maven et jQuery/Version imprimable

Un livre de Wikilivres.

Ceci est la version imprimable de Applications web avec Struts 2, Maven et jQuery.
  • Si vous imprimez cette page, choisissez « Aperçu avant impression » dans votre navigateur, ou cliquez sur le lien Version imprimable dans la boîte à outils, vous verrez cette page sans ce message, ni éléments de navigation sur la gauche ou en haut.
  • Cliquez sur Rafraîchir cette page pour obtenir la dernière version du wikilivre.
  • Pour plus d'informations sur les version imprimables, y compris la manière d'obtenir une version PDF, vous pouvez lire l'article Versions imprimables.


Applications web avec Struts 2, Maven et jQuery

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

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. Une copie de cette licence est incluse dans l'annexe nommée « Licence de documentation libre GNU ».

Introduction

Pourquoi Struts ?

[modifier | modifier le wikicode]

Wikipédia propose un article sur : « Apache Struts ».

Parmi 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 ?

[modifier | modifier le wikicode]

Wikipédia propose un article sur : « Apache Maven ».

Maven 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 ?

[modifier | modifier le wikicode]

Wikipédia propose un article sur : « jQuery ».

Comme 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 :
  1. Il est possible de consulter ce référentiel sur le site du ministère.


Démarrer le projet

Disponible ici.

Pour plus de détails voir : Développer en Java/Introduction à Apache Maven.
Pour plus de détails voir : Programmation JavaScript/jQuery.

Il suffit de télécharger le fichier.


Débogguer l'application

Configurer le config-browser

[modifier | modifier le wikicode]
http://localhost:8080/mon-application/config-browser/showConfig.action

Être strict avec OGNL

[modifier | modifier le wikicode]

Dans le fichier struts.properties :

struts.ognl.logMissingProperties=true
struts.el.throwExceptionOnFailure=true

En savoir plus sur le contexte dans une page

[modifier | modifier le wikicode]

Dans une JSP, on peut ajouter :

<s:debug />

Utiliser l'intercepteur Debugging

[modifier | modifier le wikicode]

Pour 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 | modifier le wikicode]

« Type Conversion » dans la documentation officielle


Améliorer les performances

Utiliser le cache FreeMarker

[modifier | modifier le wikicode]

Mê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
  1. Voir l'article Freemarker Template Caching – Analyzing a Struts2 Performance Problem


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

[modifier | modifier le wikicode]

Nous 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

  • (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)
GFDL GFDL 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.