Les composants de Struts



Dans cette partie nous allons nous intéressés aux principaux composants de Struts.


Le contrôleur principal : l’ActionServlet


Comme son nom l’indique, il s’agit d’une servlet. C’est aussi le contrôleur principal de Struts qui reçoit toutes les requêtes du client et qui dispatche ensuite ces requêtes vers les sous contrôleur grâce aux informations contenues dans le fichier de configuration ‘Struts-config.xml’.

Une application Struts contient généralement une seule implémentation de la classe ActionServlet. Il s’agit alors de la servlet principale de notre application, et comme pour toute application WEB, cette servlet doit être déclarée et instanciée dans le fichier ‘web.xml’ :


	<web-app>
	  <servlet>
	    <servlet-name>action</servlet-name>
	    <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
	    ...
	  </servlet>
	  <servlet-mapping>
	    <servlet-name>action</servlet-name>
	    <url-pattern>*.do</url-pattern>
	  </servlet-mapping>
	  ...
	</web-app>
	
Ici, la balise servlet mapping permet de préciser que toutes les requêtes se terminant par ‘.do’ devront être traitées par la servlet action (instance de ActionServlet). Cette extension est automatiquement ajoutée lorsqu’on utilise les bibliothèques de tags spécifiques propre à Struts.

L’ActionServlet sert ensuite de ‘Factory’ pour les sous contrôleurs (Action) puisqu’elle instancie les Actions en fonction des requêtes reçues et par rapport au ficher de configuration ‘Struts-config.xml’. Dans la majeure partie des cas, ce mécanisme est automatique et transparent pour l’utilisateur qui doit seulement implémenter les sous contrôleurs et renseigner le fichier de configuration de Struts.

Il est possible d’étendre de la classe ActionServlet pour définir son propre contrôleur principal et ainsi personnaliser ses actions (ex : journalisation des informations contenues dans les requêtes traitées…) mais nous verrons par la suite qu’il est plus simple de passer par une autre classe, le RequestProcessor.

retour au sommaire

Les sous contrôleurs : les Actions


La classe Action va nous permettre de définir un traitement spécifique. Le développeur doit donc étendre de cette classe afin d’implémenter les différents sous contrôleurs de l’application.

Cette classe définie une méthode ‘execute’ qui est automatiquement appelée par le contrôleur principal lorsque le traitement doit être effectué.

Le développeur peut donc redéfinir cette méthode pour effectuer les opérations nécessaires (traitement, interactions avec un modèle…).

Chaque Action créée doit être déclarée dans le fichier de configuration XML. En voici un exemple pour une la classe MyAction qui étend de Action :


	<action
	  path="/actionPerso"
	  input="/index.jsp"
	  name="myForm"
	  type="myPackage.MyAction">
	  <forward name="action_failed" path="/index.jsp" />
	  <forward name="action_ok" path="/autre.jsp" />
	</action>
	
L’attribut ‘path’ représente le chemin d’accès de la requête, il est utilisé par la pages JSP pour désigner l’action à appeler (il doit être unique et commencer par ‘/’).

L’attribut ‘input’ permet de spécifier la page retournée en cas d’erreur.

L’attribut ‘name’ correspond au nom de l’ActionForm utilisé pour effectuer l’action (il s’agit du nom de l’instanciation également déclaré dans le fichier de configuration).

Les éléments ‘forward’ reprennent les différentes valeurs pouvant être retournées par l’action et définissent la redirection associée. Ce composant est utilisé par l’ActionServlet pour renvoyer un résultat au client (la page indiquée dans le ‘forward’ correspondant).

Il existe des attributs supplémentaires en relation avec les autres composants de Struts. Ainsi, l’attribut ‘validate’ (pouvant prendre les valeurs true ou false) permet de forcer ou non l’appel à la méthode ‘validate’ de l’ActionForm lié à l’Action.

retour au sommaire

Les containers : les ActionForm


Les ActionForm sont les containers pour les pages JSP, ils fonctionnent comme un bean et à ce titre sont conformes au standard Java Bean.

Les ActionForm vont donc permettre de stocker les différentes valeurs saisies dans une page JSP grâce aux accesseurs sur ses différents membres. Comme pour les Action, le développeur étend de cette classe pour créer ses propres containers.

Comme la majeur partie des composants Struts, les ActionForm doivent être déclarés dans le fichier de configuration XML à l’aide des lignes suivantes :


	<form-beans>
	  <form-bean name="myForm" type="myPackage.MyForm">
	    <form-property name="membre1" type="java.lang.String" />
	    <form-property name="membre2" type="java.lang.String" />
	  </form-bean>
	</form-beans>
	
Les ActionForm définissent également une méthode ‘validate’ qui permet de traiter les erreurs. Nous y reviendront ultérieurement dans le chapitre consacré aux exceptions.

retour au sommaire

Le fichier de configuration XML


Ce fichier est le descripteur de déploiement, il permet de faire le lien entre les différents composants de Struts.

Il permet de décrire les différents éléments, dont :

    - les ActionForm
    - les Action
    - les ressources
    - les redirections…

Ce fichier de configuration est précisé dans le fichier ‘web.xml’ de l’application à l’aide des lignes suivantes (celles-ci se situent à l’intérieur des balises ‘servlet’ avec le déclaration de la servlet principale) :


	<init-param>
	  <param-name>config</param-name>
	  <param-value>/WEB-INF/struts-config.xml</param-value>
	</init-param>
	
De plus, comme le fichier ‘web.xml’, ‘Struts-config.xml’ doit obéir à une DTD. Par conséquent la définition des balises et leur ordre d’apparition ont leur importance.

retour au sommaire



Page précédente    Page suivante