Struts 2 - Exemple Hello World

Comme vous l'avez déjà appris de l'architecture Struts 2, lorsque vous cliquez sur un lien hypertexte ou que vous soumettez un formulaire HTML dans une application Web Struts 2, l'entrée est collectée par le contrôleur qui est envoyée à une classe Java appelée Actions. Une fois l'action exécutée, un résultat sélectionne une ressource pour rendre la réponse. La ressource est généralement un JSP, mais il peut également s'agir d'un fichier PDF, d'une feuille de calcul Excel ou d'une fenêtre d'applet Java.

En supposant que vous ayez déjà construit votre environnement de développement. Maintenant, procédons à la construction de notre premierHello World Struts2projet. Le but de ce projet est de créer une application Web qui collecte le nom de l'utilisateur et affiche «Hello World» suivi du nom d'utilisateur.

Nous devrons créer les quatre composants suivants pour tout projet Struts 2 -

Sr. Non Composants et description
1

Action

Créez une classe d'action qui contiendra une logique métier complète et contrôlera l'interaction entre l'utilisateur, le modèle et la vue.

2

Interceptors

Créez des intercepteurs si nécessaire ou utilisez des intercepteurs existants. Cela fait partie de Controller.

3

View

Créez des JSP pour interagir avec l'utilisateur pour prendre des entrées et présenter les messages finaux.

4

Configuration Files

Créez des fichiers de configuration pour coupler l'action, la vue et les contrôleurs. Ces fichiers sont struts.xml, web.xml, struts.properties.

Je vais utiliser Eclipse IDE, de sorte que tous les composants requis soient créés sous un projet Web dynamique. Commençons maintenant par créer un projet Web dynamique.

Créer un projet Web dynamique

Démarrez votre Eclipse et continuez avec File > New > Dynamic Web Project et entrez le nom du projet comme HelloWorldStruts2 et définissez le reste des options comme indiqué dans l'écran suivant -

Sélectionnez toutes les options par défaut dans les écrans suivants et vérifiez enfin Generate Web.xml deployment descriptoroption. Cela créera un projet Web dynamique pour vous dans Eclipse. Maintenant allez avecWindows > Show View > Project Explorer, et vous verrez votre fenêtre de projet quelque chose comme ci-dessous -

Maintenant, copiez les fichiers suivants du dossier struts 2 lib C:\struts-2.2.3\lib à notre projet WEB-INF\libdossier. Pour ce faire, vous pouvez simplement faire glisser et déposer tous les fichiers suivants dans le dossier WEB-INF \ lib.

  • commons-fileupload-x.y.z.jar
  • commons-io-x.y.z.jar
  • commons-lang-x.y.jar
  • commons-logging-x.y.z.jar
  • commons-logging-api-x.y.jar
  • freemarker-x.y.z.jar
  • javassist-.xy.z.GA
  • ognl-x.y.z.jar
  • struts2-core-x.y.z.jar
  • xwork-core.x.y.z.jar

Créer une classe d'action

La classe d'action est la clé de l'application Struts 2 et nous implémentons la plupart de la logique métier dans la classe d'action. Alors créons un fichier java HelloWorldAction.java sousJava Resources > src avec un nom de package com.tutorialspoint.struts2 avec le contenu donné ci-dessous.

La classe Action répond à une action de l'utilisateur lorsque l'utilisateur clique sur une URL. Une ou plusieurs méthodes de la classe Action sont exécutées et un résultat String est renvoyé. En fonction de la valeur du résultat, une page JSP spécifique est rendue.

package com.tutorialspoint.struts2;

public class HelloWorldAction {
   private String name;

   public String execute() throws Exception {
      return "success";
   }
   
   public String getName() {
      return name;
   }

   public void setName(String name) {
      this.name = name;
   }
}

C'est une classe très simple avec une propriété appelée "nom". Nous avons des getters et des méthodes de définition standard pour la propriété "name" et une méthode d'exécution qui renvoie la chaîne "success".

Le framework Struts 2 créera un objet du HelloWorldActionclass et appelez la méthode exécutée en réponse à l'action d'un utilisateur. Vous mettez votre logique métier dans cette méthode qui renvoie finalement la constante String. En d'autres termes, pour chaque URL, vous devrez implémenter une classe d'action et soit vous pouvez utiliser ce nom de classe directement comme nom d'action, soit vous pouvez mapper vers un autre nom en utilisant le fichier struts.xml comme indiqué ci-dessous.

Créer une vue

Nous avons besoin d'un JSP pour présenter le message final, cette page sera appelée par le framework Struts 2 lorsqu'une action prédéfinie se produira et ce mappage sera défini dans le fichier struts.xml. Alors créons le fichier jsp ci-dessousHelloWorld.jspdans le dossier WebContent de votre projet eclipse. Pour ce faire, faites un clic droit sur le dossier WebContent dans l'explorateur de projet et sélectionnezNew >JSP File.

<%@ page contentType = "text/html; charset = UTF-8" %>
<%@ taglib prefix = "s" uri = "/struts-tags" %>

<html>
   <head>
      <title>Hello World</title>
   </head>
   
   <body>
      Hello World, <s:property value = "name"/>
   </body>
</html>

La directive taglib indique au conteneur Servlet que cette page utilisera le Struts 2 balises et que ces balises seront précédées de s.

La balise s: property affiche la valeur de la propriété de classe d'action "nom> qui est renvoyée par la méthode getName() de la classe HelloWorldAction.

Créer une page principale

Nous devons également créer index.jspdans le dossier WebContent. Ce fichier servira d'URL d'action initiale où un utilisateur peut cliquer pour indiquer au framework Struts 2 d'appeler une méthode définie de la classe HelloWorldAction et de restituer la vue HelloWorld.jsp.

<%@ page language = "java" contentType = "text/html; charset = ISO-8859-1"
   pageEncoding = "ISO-8859-1"%>
<%@ taglib prefix = "s" uri = "/struts-tags"%>
   <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
"http://www.w3.org/TR/html4/loose.dtd">

<html>
   <head>
      <title>Hello World</title>
   </head>
   
   <body>
      <h1>Hello World From Struts2</h1>
      <form action = "hello">
         <label for = "name">Please enter your name</label><br/>
         <input type = "text" name = "name"/>
         <input type = "submit" value = "Say Hello"/>
      </form>
   </body>
</html>

le hellol'action définie dans le fichier de vue ci-dessus sera mappée à la classe HelloWorldAction et à sa méthode d'exécution à l'aide du fichier struts.xml. Lorsqu'un utilisateur clique sur le bouton Soumettre, le framework Struts 2 exécute la méthode d'exécution définie dans la classe HelloWorldAction et en fonction de la valeur renvoyée de la méthode, une vue appropriée est sélectionnée et rendue en tant que réponse.

Fichiers de configuration

Nous avons besoin d'un mappage pour lier l'URL, la classe HelloWorldAction (Model) et HelloWorld.jsp (la vue) ensemble. Le mappage indique au framework Struts 2 quelle classe répondra à l'action de l'utilisateur (l'URL), quelle méthode de cette classe sera exécutée et quelle vue afficher en fonction du résultat String retourné par cette méthode.

Alors créons un fichier appelé struts.xml. Puisque Struts 2 nécessite que struts.xml soit présent dans le dossier classes. Par conséquent, créez le fichier struts.xml dans le dossier WebContent / WEB-INF / classes. Eclipse ne crée pas le dossier «classes» par défaut, vous devez donc le faire vous-même. Pour ce faire, faites un clic droit sur le dossier WEB-INF dans l'explorateur de projet et sélectionnezNew > Folder. Votre struts.xml devrait ressembler à -

<?xml version = "1.0" Encoding = "UTF-8"?>
<!DOCTYPE struts PUBLIC
   "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
   "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
   <constant name = "struts.devMode" value = "true" />
   
   <package name = "helloworld" extends = "struts-default">
     <action name = "hello" 
         class = "com.tutorialspoint.struts2.HelloWorldAction" 
         method = "execute">
         <result name = "success">/HelloWorld.jsp</result>
      </action>
   </package>
</struts>

Quelques mots à comprendre concernant le fichier de configuration ci-dessus. Ici, nous définissons la constantestruts.devMode à true, car nous travaillons dans un environnement de développement et nous avons besoin de voir des messages de journal utiles. Ensuite, nous définissons un package appeléhelloworld.

La création d'un package est utile lorsque vous souhaitez regrouper vos actions. Dans notre exemple, nous avons nommé notre action "bonjour", ce qui correspond à l'URL/hello.action et est soutenu par leHelloWorldAction.class. leexecute méthode de HelloWorldAction.class est la méthode qui est exécutée lorsque l'URL /hello.actionest invoquée. Si le résultat de la méthode d'exécution renvoie "succès", alors nous amenons l'utilisateur àHelloWorld.jsp.

La prochaine étape consiste à créer un web.xmlfichier qui est un point d'entrée pour toute demande à Struts 2. Le point d'entrée de l'application Struts2 sera un filtre défini dans le descripteur de déploiement (web.xml). Par conséquent, nous allons définir une entrée de la classe org.apache.struts2.dispatcher.FilterDispatcher dans web.xml. Le fichier web.xml doit être créé dans le dossier WEB-INF sous WebContent. Eclipse avait déjà créé un fichier squelette web.xml pour vous lorsque vous avez créé le projet. Alors, modifions-le comme suit -

<?xml version = "1.0" Encoding = "UTF-8"?>
<web-app xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
   xmlns = "http://java.sun.com/xml/ns/javaee" 
   xmlns:web = "http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
   xsi:schemaLocation = "http://java.sun.com/xml/ns/javaee 
   http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
   id = "WebApp_ID" version = "3.0">
   
   <display-name>Struts 2</display-name>
   
   <welcome-file-list>
      <welcome-file>index.jsp</welcome-file>
   </welcome-file-list>
   
   <filter>
      <filter-name>struts2</filter-name>
      <filter-class>
         org.apache.struts2.dispatcher.FilterDispatcher
      </filter-class>
   </filter>

   <filter-mapping>
      <filter-name>struts2</filter-name>
      <url-pattern>/*</url-pattern>
   </filter-mapping>
</web-app>

Nous avons spécifié index.jsp comme fichier de bienvenue. Ensuite, nous avons configuré le filtre Struts2 pour qu'il s'exécute sur toutes les URL (c'est-à-dire, toute URL qui correspond au modèle / *)

Pour activer le journal détaillé

Vous pouvez activer la fonctionnalité de journalisation complète tout en travaillant avec Struts 2 en créant logging.properties fichier sous WEB-INF/classesdossier. Conservez les deux lignes suivantes dans votre dossier de propriété -

org.apache.catalina.core.ContainerBase.[Catalina].level = INFO
org.apache.catalina.core.ContainerBase.[Catalina].handlers = \
   java.util.logging.ConsoleHandler

Le logging.properties par défaut spécifie un ConsoleHandler pour le routage de la journalisation vers stdout et également un FileHandler. Le seuil de niveau de journal d'un gestionnaire peut être défini à l'aide de SEVERE, WARNING, INFO, CONFIG, FINE, FINER, FINEST ou ALL.

C'est ça. Nous sommes prêts à exécuter notre application Hello World en utilisant le framework Struts 2.

Procédure d'exécution de l'application

Faites un clic droit sur le nom du projet et cliquez sur Export > WAR File pour créer un fichier War.

Déployez ensuite ce WAR dans le répertoire webapps de Tomcat.

Enfin, démarrez le serveur Tomcat et essayez d'accéder à l'URL http://localhost:8080/HelloWorldStruts2/index.jsp. Cela vous donnera l'écran suivant -

Entrez une valeur "Struts2" et soumettez la page. Vous devriez voir la page suivante

Notez que vous pouvez définir index comme une action dans le fichier struts.xml et dans ce cas, vous pouvez appeler la page d'index comme http://localhost:8080/HelloWorldStruts2/index.action. Vérifiez ci-dessous comment vous pouvez définir l'index comme une action -

<?xml version = "1.0" Encoding = "UTF-8"?>
<!DOCTYPE struts PUBLIC
   "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
   "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
   <constant name = "struts.devMode" value = "true" />
   <package name = "helloworld" extends = "struts-default">

      <action name = "index">
         <result >/index.jsp</result>
      </action>

      <action name = "hello" 
         class = "com.tutorialspoint.struts2.HelloWorldAction" 
         method = "execute">
         <result name = "success">/HelloWorld.jsp</result>
      </action>

   </package>
</struts>