Struts 2 - Hello World Example

Come hai già appreso dall'architettura Struts 2, quando fai clic su un collegamento ipertestuale o invii un modulo HTML in un'applicazione web Struts 2, l'input viene raccolto dal controller che viene inviato a una classe Java chiamata Actions. Dopo che l'azione è stata eseguita, un risultato seleziona una risorsa per eseguire il rendering della risposta. La risorsa è generalmente un JSP, ma può anche essere un file PDF, un foglio di calcolo Excel o una finestra di applet Java.

Supponendo che tu abbia già creato il tuo ambiente di sviluppo. Ora, procediamo per costruire il nostro primoHello World Struts2progetto. Lo scopo di questo progetto è costruire un'applicazione web che raccolga il nome dell'utente e visualizzi "Hello World" seguito dal nome utente.

Dovremmo creare i seguenti quattro componenti per qualsiasi progetto Struts 2:

Suor n Componenti e descrizione
1

Action

Creare una classe di azioni che conterrà la logica aziendale completa e controllerà l'interazione tra l'utente, il modello e la vista.

2

Interceptors

Se necessario, creare intercettori o utilizzare intercettori esistenti. Questo fa parte di Controller.

3

View

Creare un JSP per interagire con l'utente per ricevere input e presentare i messaggi finali.

4

Configuration Files

Crea file di configurazione per accoppiare Azione, Vista e Controller. Questi file sono struts.xml, web.xml, struts.properties.

Userò Eclipse IDE, in modo che tutti i componenti richiesti vengano creati in un progetto Web dinamico. Cominciamo ora con la creazione di Dynamic Web Project.

Crea un progetto Web dinamico

Avvia il tuo Eclipse e poi vai con File > New > Dynamic Web Project e inserisci il nome del progetto come HelloWorldStruts2 e impostare il resto delle opzioni come indicato nella schermata seguente:

Seleziona tutte le opzioni predefinite nelle schermate successive e infine controlla Generate Web.xml deployment descriptoropzione. Questo creerà un progetto web dinamico per te in Eclipse. Adesso vai conWindows > Show View > Project Explorere vedrai la finestra del tuo progetto come di seguito -

Ora copia i seguenti file dalla cartella lib di struts 2 C:\struts-2.2.3\lib al nostro progetto WEB-INF\libcartella. Per fare ciò, puoi semplicemente trascinare e rilasciare tutti i seguenti file nella cartella 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

Crea classe d'azione

La classe di azione è la chiave dell'applicazione Struts 2 e implementiamo la maggior parte della logica di business nella classe di azione. Quindi creiamo un file java HelloWorldAction.java sottoJava Resources > src con un nome di pacchetto com.tutorialspoint.struts2 con i contenuti riportati di seguito.

La classe Action risponde a un'azione dell'utente quando l'utente fa clic su un URL. Uno o più metodi della classe Action vengono eseguiti e viene restituito un risultato String. In base al valore del risultato, viene visualizzata una pagina JSP specifica.

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;
   }
}

Questa è una classe molto semplice con una proprietà chiamata "nome". Abbiamo standard getter e metodi setter per la proprietà "name" e un metodo di esecuzione che restituisce la stringa "success".

Il framework Struts 2 creerà un oggetto di HelloWorldActionclass e chiama il metodo eseguito in risposta all'azione di un utente. Metti la tua logica aziendale all'interno di questo metodo che alla fine restituisce la costante String. In altre parole, per ogni URL, dovresti implementare una classe di azione e puoi usare quel nome di classe direttamente come nome di azione oppure puoi mappare un altro nome usando il file struts.xml come mostrato di seguito.

Crea una vista

Abbiamo bisogno di un JSP per presentare il messaggio finale, questa pagina verrà chiamata dal framework Struts 2 quando si verificherà un'azione predefinita e questa mappatura sarà definita nel file struts.xml. Quindi creiamo il file jsp sottostanteHelloWorld.jspnella cartella WebContent nel tuo progetto eclipse. A tale scopo, fare clic con il pulsante destro del mouse sulla cartella WebContent in Esplora progetti e selezionareNew >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 direttiva taglib dice al contenitore Servlet che questa pagina utilizzerà il file Struts 2 tag e che questi tag saranno preceduti da s.

Il tag s: property visualizza il valore della proprietà della classe di azioni "nome> restituito dal metodo getName() della classe HelloWorldAction.

Crea pagina principale

Dobbiamo anche creare index.jspnella cartella WebContent. Questo file servirà come URL dell'azione iniziale su cui un utente può fare clic per indicare al framework Struts 2 di chiamare un metodo definito della classe HelloWorldAction e di eseguire il rendering della vista 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>

Il hellol'azione definita nel file di visualizzazione sopra verrà mappata alla classe HelloWorldAction e al suo metodo di esecuzione utilizzando il file struts.xml. Quando un utente fa clic sul pulsante Invia, il framework Struts 2 esegue il metodo di esecuzione definito nella classe HelloWorldAction e in base al valore restituito del metodo, verrà selezionata una vista appropriata e rappresentata come risposta.

File di configurazione

Abbiamo bisogno di una mappatura per legare insieme l'URL, la classe HelloWorldAction (Model) e HelloWorld.jsp (la vista). La mappatura indica al framework Struts 2 quale classe risponderà all'azione dell'utente (l'URL), quale metodo di quella classe verrà eseguito e quale vista rendere in base al risultato String restituito dal metodo.

Quindi creiamo un file chiamato struts.xml. Poiché Struts 2 richiede che struts.xml sia presente nella cartella delle classi. Quindi, crea il file struts.xml nella cartella WebContent / WEB-INF / classes. Eclipse non crea la cartella "classes" per impostazione predefinita, quindi è necessario farlo da soli. Per fare ciò, fare clic con il pulsante destro del mouse sulla cartella WEB-INF nell'esploratore del progetto e selezionareNew > Folder. Il tuo struts.xml dovrebbe avere il seguente aspetto:

<?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>

Poche parole che devono essere comprese riguardo al file di configurazione di cui sopra. Qui impostiamo la costantestruts.devMode per true, perché stiamo lavorando in un ambiente di sviluppo e abbiamo bisogno di vedere alcuni messaggi di log utili. Quindi, definiamo un pacchetto chiamatohelloworld.

La creazione di un pacchetto è utile quando desideri raggruppare le tue azioni. Nel nostro esempio, abbiamo chiamato la nostra azione "ciao" che corrisponde all'URL/hello.action ed è supportato daHelloWorldAction.class. Ilexecute metodo di HelloWorldAction.class è il metodo che viene eseguito quando l'URL /hello.actionviene invocato. Se il risultato del metodo di esecuzione restituisce "successo", allora portiamo l'utente aHelloWorld.jsp.

Il prossimo passo è creare un file web.xmlfile che rappresenta un punto di ingresso per qualsiasi richiesta a Struts 2. Il punto di ingresso dell'applicazione Struts2 sarà un filtro definito nel descrittore di distribuzione (web.xml). Quindi, definiremo una voce della classe org.apache.struts2.dispatcher.FilterDispatcher in web.xml. Il file web.xml deve essere creato nella cartella WEB-INF in WebContent. Eclipse aveva già creato un file skeleton web.xml quando hai creato il progetto. Quindi, modifichiamolo come segue:

<?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>

Abbiamo specificato index.jsp come nostro file di benvenuto. Quindi abbiamo configurato il filtro Struts2 per funzionare su tutti gli URL (cioè, qualsiasi URL che corrisponde al pattern / *)

Per abilitare il registro dettagliato

È possibile abilitare la funzionalità di registrazione completa mentre si lavora con Struts 2 creando logging.properties file sotto WEB-INF/classescartella. Mantieni le due righe seguenti nel file delle proprietà:

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

Il logging.properties predefinito specifica un ConsoleHandler per l'instradamento della registrazione a stdout e anche un FileHandler. La soglia del livello di registro di un gestore può essere impostata utilizzando SEVERE, WARNING, INFO, CONFIG, FINE, FINER, FINEST o ALL.

Questo è tutto. Siamo pronti per eseguire la nostra applicazione Hello World utilizzando il framework Struts 2.

Procedura per l'esecuzione dell'applicazione

Fare clic con il tasto destro sul nome del progetto e fare clic Export > WAR File per creare un file War.

Quindi distribuire questo WAR nella directory webapps di Tomcat.

Infine, avvia il server Tomcat e prova ad accedere all'URL http://localhost:8080/HelloWorldStruts2/index.jsp. Questo ti darà la seguente schermata:

Immettere un valore "Struts2" e inviare la pagina. Dovresti vedere la pagina successiva

Nota che puoi definire index come azione nel file struts.xml e in tal caso puoi chiamare la pagina indice come http://localhost:8080/HelloWorldStruts2/index.action. Controlla di seguito come definire l'indice come azione:

<?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>