Création d'une première application Struts avec Eclipse

stessy delcroix

Ce document est destiné à expliquer la création et le déploiement d'une application Struts.
Cette application sera développée avec Eclipse.

- Titre : Création d'une première application Struts avec Eclipse

- Auteur : stessy delcroix

- Parution : 18 mai 2004

- Mise à jour : 23 mars 2020

- Licence : Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2004 Stessy. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Sommaire

- Avant-propos

- I. Installation des différents outils

- I-A. Installation d'Eclipse

- I-B. Installation de JOnAS

- I-C. Installation du plugin Jope

- I-D. Installation du framework Struts

- I-E. Installation du plugin EasyStruts

- II. Configuration d'Eclipse

- II-A. Configuration des différents plugins

- II-A-1. Configuration des préférences

- II-A-2. Configuration de la perspective

- III. Développement de l'application

- III-A. Création du projet

- III-B. Création de l'ActionForm, de l'Action et de la page jsp

- III-C. Code généré

- III-D. Création de la vue useroutput.jsp

- III-E. Modification du code

- III-F. Modification du fichier ApplicationResources

- III-G. Modification du fichier struts-config.xml

- III-H. Modification du fichier web.xml

- IV. Création de l'archive et déploiement de l'application

- IV-A. Modification du fichier build.xml

- IV-B. Création et déploiement de l'application

- IV-C. Test de l'application

Avant-propos

Je tiens tout d'abord à remercier les membres de Developpez.com, pour la correction apportée à mon article tant au niveau du fond que de la forme.

Je ne suis pas un gourou de Struts, j'ai voulu simplement découvrir ce framework qui était pour moi une grande inconnue. Travaillant actuellement avec l'EDI Eclipse pour le développement de mes applications, j'ai parcouru le site dédié aux plugins disponibles pour Eclipse et testé un peu les outils permettant de développer simplement une application web sur la base du framework Struts.

Voici à présent les outils utilisés pour le développement de l'application

La version de java utilisée est la J2SE 1.4.2_03.

La version d'Eclipse utilisée est la version 2.1.3.

La version de JOnAS est la version 3.3.6. Cette Version intègre Tomcat comme conteneur web qui est indispensable pour faire tourner notre première application.

La version du plugin Jope utilisée pour la création et le déploiement d'application sur le serveur d'application JOnAS est la version 1.1.2.

La version du plugin EasyStruts utilisée pour la gestion d'applications basées sur le framework Struts est la version 0.6.4.

La première partie de mon article expliquera la mise en place de l'environnement de travail nécessaire pour le développement de l'application.

La deuxième partie traitera de la configuration d'Eclipse pour faire fonctionner les différents plugins utilisés pour permettre de gérer et déployer l'application.

La troisième partie parlera du développement de l'application.

La quatrième partie montrera comment déployer et mettre en production l'application à l'aide des outils fournis.

I - Installation des différents outils

I-A - Installation d'Eclipse

Pour l'installation d'Eclipse, je vous conseille de lire l'excellent didacticiel rédigé par Jean-Michel Doudoux.
Vous le trouverez à l'adresse suivante : https://jmdoudoux.developpez.com/java/Eclipse/

I-B - Installation de JOnAS

Pour l'installation de JOnAS je vous renvoie vers l'excellent article écrit par Debernad pour l'installation de JOnAS sur plateforme Windows et Linux.
Vous les trouverez aux adresses suivantes :
Installation de JOnAS sur plateforme Linux ;
Installation de JOnAS sur plateforme Windows.

I-C - Installation du plugin Jope

Pour cette partie, rien de plus simple. Il suffit de dézipper le plugin dans le répertoire

$Eclipse_HOME/plugins

où Eclipse_HOME représente le répertoire d'installation d'Eclipse.

I-D - Installation du framework Struts

Pour l'instant, dézippez simplement l'archive dans un répertoire. Vous aurez besoin des bibliothèques lors de la configuration du plugin.

I-E - Installation du plugin EasyStruts

Installation identique que pour le plugin Jope. Dézippez simplement le plugin dans le répertoire

$Eclipse_HOME/plugins

où Eclipse_HOME représente le répertoire d'installation d'Eclipse.

II - Configuration d'Eclipse

Vous pouvez dès à présent lancer Eclipse.
Voici normalement ce que vous devriez avoir comme représentation graphique.

II-A - Configuration des différents plugins

II-A-1 - Configuration des préférences

Nous allons commencer par configurer les préférences. Nous devons aller dans l'onglet « Window --> Preferences ».

La configuration à mettre en place pour utiliser le plugin Jope est très simple.
Il vous suffit de spécifier le répertoire d'installation de JOnAS dans les champs « jonas root » et « jonas server ». Ne vous préoccupez pas pour l'instant de la configuration de la datasource. Comme nous n'utilisons pas pour l'instant d'accès à une base de données, nous n'en aurons tout simplement pas besoin.

Passons maintenant à la configuration du plugin EasyStruts.
Choisissez l'onglet « Struts 1.1 ».
Ajoutez les archives ainsi que les Tld requises par Struts.

II-A-2 - Configuration de la perspective

Nous allons dès à présent configurer la perspective pour nous permettre :

- de créer un projet ;

- de gérer ce projet ;

- de pouvoir démarrer et stopper JonAS ;

- d'ajouter le support de struts à ce projet ;

- …

Comme vous pouvez le constater, ces plugins permettent la gestion complète d'une application.
Aussi bien une application web qu'une application j2ee complète.

Passons maintenant à la configuration proprement dite de cette perspective.
Nous devons aller dans l'onglet « Window --> Customize Perspective ».

Selectionnez « File > New ».

Cochez les cases suivantes :

- Add Easy Struts support ;

- Easy Action ;

- Easy Action associated with a form ;

- Easy Datasource ;

- Easy Exception ;

- Easy Form ;

- Easy Forward ;

- Esay Message ressources ;

- Easy Module ;

- Easy Plugin ;

- Jonas project ;

- Jonas EJB.

Selectionnez « Window > Show view ».
Cochez la case suivante :

- easy Struts.

Selectionnez « Other ».
Cochez la case suivante :

- Jonas

Validez vos choix.
Vous devriez normalement voir apparaître un nouveau menu ainsi que de nouvelles icônes dans la barre d'outils.

Nous en avons terminé avec la configuration d'Eclipse.

III - Développement de l'application

III-A - Création du projet

La configuration étant à présent terminée, nous allons pouvoir rentrer dans le vif du sujet, c'est-à-dire le développement de notre première application web basée sur le framework Struts.

La première chose à faire est de créer un nouveau projet.
Pour ce faire, nous devons aller dans le menu « File --> New --> Project ».

- Choisissez « Jonas Project ».

- Cliquez sur « next ».

- Choisissez le nom du projet : par exemple "FirstStruts.

- Cliquez sur « next ».

- Cochez la case « Create a web application ».

- Cliquez sur « Finish ».

Voici normalement à quoi ressemblera l'arborescence de votre projet.

Nous voilà maintenant prêts à ajouter le support de Struts à notre application.

- Choisissez votre projet dans l'explorateur.

- Faites un clic droit pour faire apparaître le menu.

- Choisissez « New --> Add Easy Struts support »

- Modifiez la valeur du champ « Webapp folder » par : « /webApplication ».

- Modifiez également la valeur dans le champ « Base package for generation ». Par exemple : com.personalStruts.struts.

III-B - Création de l'ActionForm, de l'Action et de la page jsp

Struts étant maintenant ajouté à notre application, nous allons pouvoir créer notre premier ActionForm, notre première Action ainsi que la page jsp correspondante.

- Choisissez votre projet dans l'arborescence.

- Faites un clic droit.

- Choisissez New --> Easy Action associated with a form

- Cet écran va vous permettre de configurer votre ActionForm ainsi que votre page jsp.

- Dans le champ Use case, mettez la valeur « userinput ».

- Dans le champ « Form properties », vous pouvez ajouter des éléments tels que le « nom », le « prenom » et l'« email ».

- Cliquez sur « next ».

- L'écran suivant va vous permettre de configurer la classe Action. Vous ne devez rien modifier dans cet écran.

- Cliquez sur « next » et sur « Finish »

Vous remarquerez qu'une série de classes ont été générées lors de la création de notre premier ActionForm, Action et page jsp. Sans rentrer dans les détails, ces classes vont servir à valider les données entrées par l'utilisateur ainsi qu'à la redirection vers d'autres pages.

III-C - Code généré

Voici le code de la page jsp générée par le plugin.

userinput.jsp

<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean"%>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html"%>
<html>
<head>
<meta name = "Generator" content = "Easy Struts Xslt generator for Eclipse (http://easystruts.sf.net).">

<title>Struts Form for userinputForm</title>
</head>
<body>
<html:form action="/userinput">
email : <html:text property="email"/><html:errors property="email"/></br>
nom : <html:text property="nom"/><html:errors property="nom"/></br>
prenom : <html:text property="prenom"/><html:errors property="prenom"/></br>
<html:submit/><html:cancel/>
</html:form>
<body>
</html>

Voici le code des deux classes générées.

UserinputForm.java

// Created by Xslt generator for Eclipse.
// XSL :  not found (java.io.FileNotFoundException:  (Bad file descriptor))
// Default XSL used : easystruts.jar$org.easystruts.xslgen.JavaClass.xsl

package com.personalStruts.struts.form;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
/**
* UserinputForm.java created by EasyStruts - XsltGen.
* http://easystruts.sf.net
* created on 05-17-2004
*
* XDoclet definition:
* @struts:form name="userinputForm"
*/
public class UserinputForm extends ActionForm {
// --------------------------------------------------------- Instance Variables
/** prenom property */
private String prenom;
/** email property */
private String email;
/** nom property */
private String nom;
// --------------------------------------------------------- Methods
/**
* Method validate
* @param ActionMapping mapping
* @param HttpServletRequest request
* @return ActionErrors
*/
public ActionErrors validate(
ActionMapping mapping,
HttpServletRequest request) {
throw new UnsupportedOperationException("Generated method 'validate(...)' not implemented.");
}
/**
* Method reset
* @param ActionMapping mapping
* @param HttpServletRequest request
*/
public void reset(ActionMapping mapping, HttpServletRequest request) {
prenom = "";
email = "";
nom = "";
}
/**
* Returns the prenom.
* @return String
*/
public String getPrenom() {
return prenom;
}
/**
* Set the prenom.
* @param prenom The prenom to set
*/
public void setPrenom(String prenom) {
this.prenom = prenom;
}
/**
* Returns the email.
* @return String
*/
public String getEmail() {
return email;
}
/**
* Set the email.
* @param email The email to set
*/
public void setEmail(String email) {
this.email = email;
}
/**
* Returns the nom.
* @return String
*/
public String getNom() {
return nom;
}
/**
* Set the nom.
* @param nom The nom to set
*/
public void setNom(String nom) {
this.nom = nom;
}
}

UserinputAction.java

// Created by Xslt generator for Eclipse.
// XSL :  not found (java.io.FileNotFoundException:  (Bad file descriptor))
// Default XSL used : easystruts.jar$org.easystruts.xslgen.JavaClass.xsl

package com.personalStruts.struts.action;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import com.personalStruts.struts.form.UserinputForm;

/**
* UserinputAction.java created by EasyStruts - XsltGen.
* http://easystruts.sf.net
* created on 05-17-2004
*
* XDoclet definition:
* @struts:action path="/userinput" name="userinputForm" input="/userinput.jsp" validate="true"
*/
public class UserinputAction extends Action {

// --------------------------------------------------------- Instance Variables
// --------------------------------------------------------- Methods
/**
* Method execute
* @param ActionMapping mapping
* @param ActionForm form
* @param HttpServletRequest request
* @param HttpServletResponse response
* @return ActionForward
* @throws Exception
*/
public ActionForward execute(
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Exception {
UserinputForm userinputForm = (UserinputForm) form;
throw new UnsupportedOperationException("Generated method 'execute(...)' not implemented.");
}
}

III-D - Création de la vue useroutput.jsp

Cette vue est la deuxième vue. Elle sera affichée lorsque les valeurs entrées dans la vue userinput.jsp seront valides.
Pour créer cette vue :

- allez dans le menu « File --> New --> File » ;

- choisissez le répertoire webApplication ;

- nommez la page jsp « useroutput.jsp ».

Voici le code à ajouter à la vue pour l'affichage des valeurs valides.

useroutput.jsp

<html>
<head>
<title>useroutput</title>
</head>
<body>
<table width="300" border="0" cellspacing="0" cellpadding="0">
<tr>
<td>Nom : </td>
<td><%=request.getAttribute("nom")%></td>
</tr>
<tr>
<td>Prénom : </td>
<td><%=request.getAttribute("prenom")%></td>
</tr>
<tr>
<td>Email : </td>
<td><%=request.getAttribute("email")%></td>
</tr>
</table>
</body>
</html>

III-E - Modification du code

Nous allons modifier le code de telle sorte que les données entrées par l'utilisateur puissent être validées avant de poursuivre le traitement de l'application.
Pour cela vous devez surcharger la méthode validate() de la classe UserinputForm.

méthode validate()

public ActionErrors validate(
ActionMapping mapping,
HttpServletRequest request)
{
ActionErrors errors = new ActionErrors();
if(nom == null || nom.length()==0)
{
errors.add("nom",new ActionError("error.nom.required"));
}
if(prenom == null || prenom.length()==0)
{
errors.add("prenom",new ActionError("error.prenom.required"));
}
if(email == null || email.length()==0)
{
errors.add("email",new ActionError("error.email.required"));
}
return errors;
}

Nous allons ensuite surcharger la méthode execute() de la classe UserinputAction.

méthode execute()

public ActionForward execute(
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Exception {
UserinputForm userinputForm = (UserinputForm) form;

request.setAttribute("prenom", userinputForm.getPrenom());
request.setAttribute("nom",userinputForm.getNom());
request.setAttribute("email",userinputForm.getEmail());

return mapping.findForward("succes");
}

III-F - Modification du fichier ApplicationResources

Comme vous l'avez peut-être remarqué, dans la méthode validate() de la classe UserinputForm, nous testons la validité des variables provenant de la balise <html:form /> pour vérifier que celles-ci ne contiennent pas de valeur null ou si la longueur est 0.
Une instance d'ActionErrors est créée et une instance d'ActionError décrivant l'erreur est ajoutée à l'ActionErrors en cas de valeur invalide.
Deux paramètres sont également passés à la méthode errors.add() :

- le premier paramètre correspond à la valeur du formulaire où a été décelée l'erreur ;

- le second paramètre est une clé permettant de retrouver une ressource dans un fichier de ressources.

Pour que cette clé soit valide, nous devons la répertorier dans le fichier ApplicationResources.properties.
Voici les lignes à ajouter au fichier.

ApplicationResources.properties

error.prenom.required=<font color=red>Prénom requis</font>
error.nom.required=<font color=red>Nom requis</font>
error.email.required=<font color=red>email requis</font>

III-G - Modification du fichier struts-config.xml

Nous allons dès à présent modifier le fichier struts-config.xml.
Nous allons ajouter une redirection dans l'élément <action/>

struts-config.xml

<action-mappings>
<action
attribute="userinputForm"
input="/userinput.jsp"
name="userinputForm"
path="/userinput"
type="com.personalStruts.struts.action.UserinputAction">
<forward name="succes" path="/useroutput.jsp" />
</action>
</action-mappings>

La ligne que vous devez ajouter est celle-ci :

<forward name="succes" path="/useroutput.jsp" />

III-H - Modification du fichier web.xml

Dernière petite modification pour l'application proprement dite.
Ajoutez le nom du fichier de bienvenue. Ce fichier est envoyé par le conteneur quand il reçoit un URI de requête identifiant un répertoire au lieu d'une page web.
Voici le code à ajouter au fichier web.xml pour lui spécifier la page userinput.jsp comme page de bienvenue.

<welcome-file-list>
<welcome-file>userinput.jsp</welcome-file>
</welcome-file-list>

IV - Création de l'archive et déploiement de l'application

IV-A - Modification du fichier build.xml

Pour générer l'archive web résultant de notre application, le plugin utilise ant qui est une sorte de make pour Java.
Pour pouvoir créer l'archive web complète, nous allons devoir effectuer quelques petites modifications au fichier build.xml pour intégrer tous les fichiers nécessaires au bon fonctionnement de Struts.
Vous trouverez ce fichier dans le répertoire webApplication.
Je vais d'abord vous présenter le squelette de ce fichier.

build.xml

<?xml version="1.0"?>

<project name="Web App build"
default="install"
basedir=".">

<!-- build.properties hold the properties that can be customized -->
<property file="D:\Development\Eclipse\workspace\FirstStruts\..\\FirstStruts\classes/../build.properties" />

<property name="src.dir" value="." />
<property name="classes.dir" value="D:\Development\Eclipse\workspace\FirstStruts\..\\FirstStruts\classes" />
<property name="dist.dir" value="D:\Development\Eclipse\workspace\FirstStruts/output" />
<property name="dist.webapps.dir" value="${dist.dir}/wars" />
<property name="lib.dir" value="${jonas.root}/lib" />
<property name="verbose" value="false"/>

<!-- The classpath to be used to compile examples -->
<path id="base.classpath">
<pathelement location="${classes.dir}" />
<fileset dir="${lib.dir}">
<include name="jonas.jar"/>
</fileset>
</path>

<target name="init">
<!-- directories building -->
<mkdir dir="${dist.dir}" />
<mkdir dir="${dist.webapps.dir}" />
</target>

<target name="clean"
description="Removes all the generated files or directories">
<!-- Delete the generated directories -->
<delete dir="${dist.dir}" />
</target>

<target name="war"
description="Build the war file"
depends="init" >
<war destfile="${dist.webapps.dir}/FirstStruts.war"
webxml="WEB-INF/web.xml">
<zipfileset dir="." prefix="">
<exclude name="build.xml"/>
<exclude name="WEB-INF/web.xml"/>
</zipfileset>
<classes dir="${classes.dir}">
<include name="**/*.class"/>

</classes>
</war>
</target>

<target name="install"
description="Build and install the webapps"
depends="war" >
<copy todir="${jonas.base}/webapps/">
<fileset dir="${dist.webapps.dir}">
<include name="*.war" />
</fileset>
</copy>
</target>

</project>

Voici à présent les modifications à apporter pour que ce fichier soit complètement opérationnel.
Premièrement, dans la section property ajoutez la ligne suivante.

<property name="prop.dir" value="D:\Development\Eclipse\workspace\FirstStruts\source" />

Pensez à remplacer « D:\Development\Eclipse » par le répertoire d'installation d'Eclipse.
Ajouter ensuite cette partie qui va vous permettre de copier le fichier ApplicationResources.properties dans le répertoire classes

<target name="copy"
description="copy ApplicationResources.properties file in classes file">
<copy todir="${classes.dir}">
<fileset dir="${prop.dir}">
<include name="*.properties" />
</fileset>
</copy>
</target>

Pour ajouter le fichier « properties » de l'application dans l'archive, ajoutez la ligne <include name=« **/*.properties »/> dans la portion suivante :

<classes dir="${classes.dir}">
<include name="**/*.class"/>
</classes>

Pour terminer, remplacez la ligne suivante :

<copy todir="${jonas.base}/webapps/">

par celle-ci.

<copy todir="${jonas.base}/webapps/autoload/">

IV-B - Création et déploiement de l'application

Nous pouvons enfin déployer notre application.
Pour ce faire, rien de plus simple.

- Choisissez votre projet dans l'arborescence d'Eclipse.

- Faites un clic droit.

- Choisissez Jonas project --> Create and deploy War file.

Si tout s'est bien passé, voici normalement ce que la console a dû vous afficher.

Buildfile: D:\Development\Eclipse\workspace\FirstStruts\webApplication\build.xml

init:

war:
[war] Building war: D:\Development\Eclipse\workspace\FirstStruts\output\wars\FirstStruts.war

install:
[copy] Copying 1 file to D:\Development\jonas\webapps\autoload
BUILD SUCCESSFUL
Total time: 1 second

Dès à présent vous êtes prêt à mettre en production votre application.

IV-C - Test de l'application

La première chose à faire est de démarrer JOnAS.
Pour cela rien de bien compliqué, vous n'avez juste qu'à appuyer sur le 2e bouton fourni par le plugin.
Si tout se passe bien, Eclipse devrait changer de perspective et passer en mode debug.

Après le démarrage de JOnAS, la console a affiché une série de messages.
Vérifiez que vous apercevez le message suivant :

2004-05-18 14:24:17,431 : AbsJWebContainerServiceImpl.registerWar :
War /D:/Development/jonas/webapps/autoload/FirstStruts.war available at the context /FirstStruts.

Cette ligne explique que l'application a été démarrée et est disponible dans le contexte /FirstStruts.

Il ne vous reste plus qu'à tester votre application.
Ouvrez votre navigateur et tapez l'adresse suivante: http://localhost:8080/FirstStruts/
Voici normalement la page qui devrait apparaître :

Et maintenant la page affichée après avoir rentré des données valides :

Voilà, l'article est terminé, en espérant que vous aurez réussi à faire tourner votre application.
Pour toute suggestion ou amélioration, veuillez me contacter par mail à l'adresse suivante : stessy@redaction-developpez.com