TP 6 : Struts

Objectifs pédagogiques du TP

Introduction

Présentation de Struts

Dans ce TP, vous utiliserez Struts 1, afin de comprendre comment mettre en oeuvre les principes de conception du pattern MVC dans le contexte d'une application Web. Struts est un framework MVC de type 2 (avec contrôleurs délégués), push-based (le contrôleur pousse les informations à la vue une fois qu'elles sont disponibles).

Struts est développé par la fondation Apache (http://struts.apache.org/). Même si Struts a progressivement été supplanté par d'autres outils plus complexes - dont il est d'ailleurs souvent à l'origine - il reste utilisé dans de nombreuses applications Web grand public.

Architecture et fonctionnement

Cette section vous présente très brièvement comment sont implémentés modèle, vue et contrôleur dans le framework Struts. Ces explications sont une adaptation libre de l'introduction à Struts : http://struts.apache.org/1.x/userGuide/introduction.html 

Contrôleur

Le contrôleur est l'intérêt majeur de Struts (vous aviez déjà plus ou moins séparé les couches vue et métier entre différents JSP et JavaBeans dans les dernières versions de votre chat). Pour chaque application, Struts fournit un contrôleur unique et déjà implémenté, appelé ActionServlet. Comme son nom l'indique, ActionServlet traite les requêtes HTTP et détermine à quelle "action" elle correspond. Une action est un contrôleur délégué dédié à une opération particulière. Elle permet de "mapper" une URL à une vue particulière : elle provoque le traitement métier et délègue le traitement de la réponse à la vue en lui transmettant (si nécessaire) une référence vers les données métier.

Pour cela, ActionServlet fait appel à un RequestProcessor, lequel s'appuie sur une liste d'ActionMappings, décrits dans un fichier de configuration spécifique : struts-config.xml.

Modèle

La logique métier est tout d'abord implémentée sous forme de javaBeans, lesquels peuvent masquer d'autres technologies plus complexes. Les propriétés d'un bean représentent les états internes du modèle de l'application (qui peuvent être ensuite représentés par des objets ad hoc ou renvoyés vers des supports de persistance). Le reste de l'implémentation de la logique métier est au choix du développeeur de l'application.

Vue

Bien que Struts ne soit pas lié à une technologie de rendu particulière, la couche vue est le plus souvent réalisée sous forme de pages JSP. Dans ce cas, la page est composée d'un ensemble de tags statiques ("template text"), dans lesquels on insère des contenus dynamiques issus du traitement de la requête réalisé par la couche modèle (contrôlée par les "actions" décrites ci-dessus).

Par ailleurs, Struts fournit plusieurs bibliothèque de tags spécifiques :

Architecture générale de Struts

L'image ci-dessous vous présente les différents éléments de l'architecture générique de Struts.

Struts Architecture (http://www.vaannila.com)
Architecture générale de Struts
(source :
http://www.vaannila.com/)

Ressources utiles pour ce TP

Tutoriels

tutoriel sur le site de NetBeans : http://netbeans.org/kb/docs/web/quickstart-webapps-struts.html

exemple de TP Struts en français : http://www.droit.univ-paris5.fr/futtersack/francais/Enseignement/CAAOO/TP%20Struts.pdf

référence de la TLD HTML de Struts : http://struts.apache.org/1.x/struts-taglib/dev_html.html

référence de la TLD Bean de Struts : http://struts.apache.org/1.x/struts-taglib/dev_bean.html

Outils

Préambule

Créez un répertoire "TP6", dans lequel vous archiverez tous les fichiers à rendre dans ce TP. Créez un deuxième répertoire temporaire, dans lequel vous effectuerez les manipulations demandées (merci de ne placer dans "TP6" que les fichiers dont le rendu est demandé).

Installation du plugin Struts

Dans NetBeans, la gestion des plugins se fait dans le menu "Outils -> Plugins". Naviguez dans les différents onglets pour rechercher le plugin "Struts", et déterminer s'il est installé et activé.

Si ce n'est pas le cas, téléchargez-le, installez-le et activez-le (la configuration du proxy se fait dans "Outils -> Options -> Généralités". Le tutoriel suivant (en anglais peut vous y aider) : http://gwttutorials.com/2009/07/23/getting-started/

Premier projet Struts

Création d'un projet

Créez un nouveau projet de type "Java Web -> Web application", et suivez les différents menus jusqu'à celui qui vous permettra de choisir un "framework", et cochez "Struts". N'oubliez pas de cocher la case "Add Struts TLDs" pour avoir accès aux bibliothèques de tags spécifiques.

Une fois votre projet créé, observez les différents éléments générés et notamment les éléments spécifiques suivants :

Pour comprendre comment fonctionne ce code, faites-le tourner, et analysez le comportement de la page visualisée en fonction du fichier struts-config.xml.

Déterminez l'URL qui permet d'attaquer directement la page JSP associée à l'action affichée.

Ajout d'une nouvelle action

Vous allez commencer par créer une nouvelle JSP "byeStruts.jsp", que vous mapperez sur une action nommée "Bye" dans le fichier de configuration, et qui permettra d'afficher d'autres messages que ceux de l'action "Welcome". Faites un lien vers l'URL qui permet d'accéder à cette nouvelle action depuis la vue de l'action Welcome. 

Utilisation des bibliothèques de tags Struts

Reprenez votre page welcomeStruts.jsp, et changez à nouveau les messages pour avertir l'utilisateur que votre application va se comporter différemment pour les garçons et pour les filles.

Utilisez la bibliothèque de tags de Struts pour réaliser un formulaire simple permettant de saisir son prénom sous forme de texte et d'indiquer sous forme de liste déroulante si l'utilisateur est un homme ou une femme.

Création d'un FormBean et validation de formulaire

A l'aide du tutoriel NetBeans, créez un ActionForm bean qui va vous permettre de :

stocker les valeurs entrées par l'utilisateur

valider le formulaire précédent (aucun champ vide).

Pour cela, déclarez-le dans la section form-beans du fichier struts-config.xml. Vérifiez également que vous avez bien modifié le fichier de messages ApplicationResources.properties et rajouté l'affichage des messages d'erreur dans votre page JSP.

Création d'une action

Toujours à l'aide du même tutoriel,  réalisez maintenant une action qui va vous permettre de forwarder la requête à deux pages différentes, que vous générerez rapidement et qui afficheront "Bonjour monsieur" ou "Bonjour madame" + le prénom de l'utilisateur, à partir des informations récupérées dans le bean. Associez le bean de la question précédente à l'action (attribut "name" de l'élément "action"). Testez.