Bienvenue dans le tutoriel Struts pour débutants. Struts est l’un des plus anciens frameworks pour construire une application Web Java.
Tutoriel Struts
Struts était la première implémentation du modèle de conception MVC et il a beaucoup évolué avec les dernières améliorations des technologies Java et Java EE. Cet article de tutoriel sur Struts vise à fournir des informations de base sur Struts 2 et comment créer notre première application « Hello World » avec Struts 2.
Struts 2
Apache Struts 2 est un framework open source, standard de l’industrie, flexible et extensible pour construire des applications Web Java EE. Struts 2 est basé sur le framework OpenSymphony WebWork. Struts 2 est très flexible en termes de développement et de configurations, et nous verrons à quel point il est facile de développer une application Web en utilisant le framework Struts 2.
Diagramme d’architecture de Struts 2
Le diagramme ci-dessous montre les différents composants de Struts 2 dans une application web.
Intercepteurs Struts 2
Les intercepteurs Struts sont similaires aux Filtres Servlet qui s’exécutent avant et après le traitement de la requête. Ils sont utilisés pour effectuer des opérations courantes pour différentes actions. Par exemple, le journalisation, la validation de session, l’ajout d’en-têtes communs à la réponse, etc.
ValueStack et OGNL de Struts 2
ValueStack est la zone de stockage où les données de l’application sont stockées par Struts 2 pour le traitement d’une requête client. Les données sont stockées dans des objets ActionContext
qui utilisent ThreadLocal pour avoir des valeurs spécifiques au thread de requête particulier. Le Langage de Navigation dans les Graphes d’Objets (OGNL) est un puissant langage d’expression utilisé pour manipuler les données stockées sur ValueStack. Comme vous pouvez le voir dans le diagramme d’architecture, à la fois les intercepteurs et les pages de résultat peuvent accéder aux données stockées sur ValueStack en utilisant OGNL.
Action Struts 2
Les composants d’action Struts 2 gèrent les demandes des clients. Struts 2 fournit différentes façons de créer des classes Action.
- En implémentant l’interface
com.opensymphony.xwork2.Action
. - En étendant la classe
com.opensymphony.xwork2.ActionSupport
. Habituellement, cela est utilisé pour créer des classes d’action vides pour transférer la demande vers une autre ressource. - En annotant une classe avec @Action ou @Actions.
- En suivant la convention de nommage pour les classes, le nom doit se terminer par Action et doit avoir la méthode execute().
Résultat Struts 2
Les composants de résultat sont généralement des pages JSP ou HTML pour créer une vue pour la réponse client. Struts 2 fournit ses propres balises que nous pouvons utiliser dans les pages JSP pour créer une réponse. Les balises Struts sont un excellent exemple de balises personnalisées JSP.
Architecture déclarative et câblage Struts 2
Struts 2 propose deux façons de configurer notre application pour les classes d’action et les pages de résultat.
- Fichier XML Struts: Nous avons un fichier struts.xml dans le répertoire WEB-INF/classes où nous pouvons configurer les classes d’action et les pages de résultat de notre application.
- Annotation: Nous pouvons utiliser des Annotations Java pour fournir des informations de métadonnées sur une classe. Le plugin de convention Struts 2 peut être utilisé pour annoter les classes Java avec les annotations @Action et @Result pour créer configurer les classes d’action et les pages de résultat associées.
Quelle que soit la manière dont nous configurons notre application, le résultat final sera toujours le même.
Tutoriel Struts – Application Hello World basée sur XML
Voyons comment nous pouvons créer notre première application Struts 2 Hello World. Tout d’abord, nous avons besoin des fichiers jar de Struts 2, le moyen le plus simple est de les télécharger depuis la page de téléchargement officielle de Struts 2. Mais lorsque vous vérifierez les bibliothèques dans l’archive téléchargée, vous verrez beaucoup de fichiers jar dont nous n’avons pas besoin pour notre application simple. Je vais donc créer un projet Maven et ajouter uniquement la dépendance struts-core, tous les autres fichiers jar de dépendance transitive seront automatiquement téléchargés et ajoutés à l’application. La structure finale de notre projet sera comme l’image ci-dessous. Créez un nouveau Projet Web Dynamique Struts2XMLHelloWorld dans Eclipse, puis convertissez-le en projet Maven comme indiqué dans l’image ci-dessous.
Vous remarquerez que le fichier pom.xml est ajouté dans le répertoire racine du projet. Notre configuration de projet dans Eclipse est prête, regardons maintenant les différents composants dans l’ordre.
pom.xml
Ouvrez le fichier pom.xml et ajoutez la dépendance au noyau de Struts, le pom.xml final ressemblera à ceci.
<project xmlns="https://maven.apache.org/POM/4.0.0" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>Struts2XMLHelloWorld</groupId>
<artifactId>Struts2XMLHelloWorld</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<dependencies>
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
<version>2.3.15.1</version>
</dependency>
</dependencies>
<build>
<sourceDirectory>src</sourceDirectory>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>2.3</version>
<configuration>
<warSourceDirectory>WebContent</warSourceDirectory>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
</plugins>
<finalName>${project.artifactId}</finalName>
</build>
</project>
Remarquez que j’ai remplacé l’élément finalName
pour éviter que le numéro de version ne soit ajouté dans le fichier WAR lorsque nous effectuons la construction maven. D’autres parties sont ajoutées par Eclipse lui-même, la seule dépendance dont nous avons besoin est struts2-core dont la version actuelle est 2.3.15.1 (au 10 septembre 2013). Faites simplement une construction maven de l’application et vous verrez beaucoup de jars ajoutés au répertoire lib de l’application et affichés dans la section Dépendances Maven du projet comme indiqué dans l’image ci-dessous.
Configuration web.xml de Struts 2
Nous devons ajouter le filtre org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
à l’application web et fournir le motif d’URL où nous voulons que Struts prenne en charge la demande du client. Notre web.xml ressemble à ce qui suit ;
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
xmlns="https://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="https://java.sun.com/xml/ns/javaee https://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<display-name>Struts2XMLHelloWorld</display-name>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
Pour les versions de Struts 2 inférieures à 2.1.3, la classe de filtre était org.apache.struts2.dispatcher.FilterDispatcher
.
Tutoriel Struts – Pages de résultat
Nous avons trois pages JSP qui seront utilisées par l’application, nous utilisons des balises Struts 2 pour créer nos pages JSP. login.jsp
<%@ page language="java" contentType="text/html; charset=US-ASCII"
pageEncoding="US-ASCII"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "https://www.w3.org/TR/html4/loose.dtd">
<%-- Using Struts2 Tags in JSP --%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>Login Page</title>
</head>
<body>
<h3>Welcome User, please login below</h3>
<s:form action="login">
<s:textfield name="name" label="User Name"></s:textfield>
<s:textfield name="pwd" label="Password" type="password"></s:textfield>
<s:submit value="Login"></s:submit>
</s:form>
</body>
</html>
Remarquez que les noms des champs de formulaire sont name et pwd, nous verrons comment ils sont utilisés dans les classes d’action. welcome.jsp
<%@ page language="java" contentType="text/html; charset=US-ASCII"
pageEncoding="US-ASCII"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "https://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>Welcome Page</title>
</head>
<body>
<h3>Welcome <s:property value="name"></s:property></h3>
</body>
</html>
Remarquez la balise struts s:property que nous pouvons utiliser pour obtenir les attributs de requête, le nom est le même que dans login.jsp. error.jsp
<%@ page language="java" contentType="text/html; charset=US-ASCII"
pageEncoding="US-ASCII"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "https://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>Error Page</title>
</head>
<body>
<h4>User Name or Password is wrong</h4>
<s:include value="login.jsp"></s:include>
</body>
</html>
C’est une page JSP simple où nous ajoutons un message d’erreur et incluons la page de connexion en réponse.
Tutoriel Struts – Classes d’action
Notre application n’a qu’une seule classe d’action où nous implémentons l’interface d’action Struts 2. LoginAction.java
package com.journaldev.struts2.action;
import com.opensymphony.xwork2.Action;
public class LoginAction implements Action {
@Override
public String execute() throws Exception {
if("pankaj".equals(getName()) && "admin".equals(getPwd()))
return "SUCCESS";
else return "ERROR";
}
//Bean Java pour contenir les paramètres du formulaire
private String name;
private String pwd;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
}
Remarquez que la classe d’action est également un bean Java avec les mêmes variables que login.jsp et leurs méthodes getter et setter. Struts se chargera de mapper les paramètres de requête aux variables de la classe d’action.
Tutoriel Struts – Fichier de configuration
Depuis que nous utilisons une configuration basée sur XML pour connecter notre application, nous devons créer un fichier de configuration Struts qui devrait être nommé struts.xml et placé à l’intérieur du répertoire WEB-INF/classes. struts.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"https://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<package name="user" namespace="/User" extends="struts-default">
<action name="home">
<result>/login.jsp</result>
</action>
<action name="login" class="com.journaldev.struts2.action.LoginAction">
<result name="SUCCESS">/welcome.jsp</result>
<result name="ERROR">/error.jsp</result>
</action>
</package>
</struts>
Pour l’action « home », il n’y a pas de classe Action et seulement un résultat, donc la requête sera renvoyée vers la page login.jsp. Pour l’action « login », LoginAction est la classe d’action et si la méthode execute() renvoie « SUCCESS », la requête sera traitée par welcome.jsp et pour « ERROR », elle sera renvoyée vers la page error.jsp. namespace= »/User » est important et utilisé dans l’URL pour accéder aux classes d’action, il est fourni pour créer différents modules. Ainsi, nous pouvons accéder à notre application avec l’URL https://localhost:8080/Struts2XMLHelloWorld/User/home.action
. Remarquez que l’URL se termine par .action qui est le suffixe par défaut pour l’action Struts 2, tout comme .do pour Struts 1.
Struts Tutorial – Struts 2 Hello World Test
Lorsque nous exécutons notre application, nous obtenons les pages de réponse suivantes.
Télécharger le projet d’exemple Struts2 Hello World
C’est tout pour le tutoriel débutant sur Struts 2, consultez l’article suivant où nous utilisons des annotations pour créer une application web Struts 2 sans utiliser le fichier de configuration struts.xml.
Source:
https://www.digitalocean.com/community/tutorials/struts-tutorial-for-beginners