Struts 2 - Ejemplo de Hola mundo

Como ya aprendió de la arquitectura de Struts 2, cuando hace clic en un hipervínculo o envía un formulario HTML en una aplicación web de Struts 2, el controlador recopila la entrada y la envía a una clase de Java llamada Acciones. Una vez que se ejecuta la acción, un resultado selecciona un recurso para generar la respuesta. El recurso es generalmente un JSP, pero también puede ser un archivo PDF, una hoja de cálculo de Excel o una ventana de subprograma de Java.

Suponiendo que ya ha creado su entorno de desarrollo. Ahora, procedamos a construir nuestro primerHello World Struts2proyecto. El objetivo de este proyecto es crear una aplicación web que recopile el nombre del usuario y muestre "Hello World" seguido del nombre del usuario.

Tendríamos que crear los siguientes cuatro componentes para cualquier proyecto de Struts 2:

No Señor Componentes y descripción
1

Action

Cree una clase de acción que contendrá lógica empresarial completa y controlará la interacción entre el usuario, el modelo y la vista.

2

Interceptors

Cree interceptores si es necesario, o utilice interceptores existentes. Esto es parte de Controller.

3

View

Cree un JSP para interactuar con el usuario para recibir información y presentar los mensajes finales.

4

Configuration Files

Cree archivos de configuración para acoplar Acción, Vista y Controladores. Estos archivos son struts.xml, web.xml, struts.properties.

Voy a utilizar Eclipse IDE, de modo que todos los componentes necesarios se crearán en un proyecto web dinámico. Comencemos ahora con la creación de un proyecto web dinámico.

Crear un proyecto web dinámico

Inicie su Eclipse y luego vaya con File > New > Dynamic Web Project e ingrese el nombre del proyecto como HelloWorldStruts2 y configure el resto de las opciones como se muestra en la siguiente pantalla:

Seleccione todas las opciones predeterminadas en las siguientes pantallas y finalmente verifique Generate Web.xml deployment descriptoropción. Esto creará un proyecto web dinámico para usted en Eclipse. Ahora ve conWindows > Show View > Project Explorer, y verá la ventana de su proyecto como se muestra a continuación:

Ahora copie los siguientes archivos de la carpeta lib de struts 2 C:\struts-2.2.3\lib a nuestro proyecto WEB-INF\libcarpeta. Para hacer esto, simplemente puede arrastrar y soltar todos los archivos siguientes en la carpeta 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

Crear clase de acción

La clase de acción es la clave para la aplicación Struts 2 e implementamos la mayor parte de la lógica empresarial en la clase de acción. Así que creemos un archivo Java HelloWorldAction.java enJava Resources > src con un nombre de paquete com.tutorialspoint.struts2 con el contenido que se indica a continuación.

La clase Acción responde a una acción del usuario cuando el usuario hace clic en una URL. Se ejecutan uno o más de los métodos de la clase Action y se devuelve un resultado de cadena. Según el valor del resultado, se representa una página JSP específica.

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

Esta es una clase muy simple con una propiedad llamada "nombre". Tenemos métodos getters y setter estándar para la propiedad "name" y un método de ejecución que devuelve la cadena "success".

El marco de Struts 2 creará un objeto del HelloWorldActionclass y llamar al método ejecutado en respuesta a la acción de un usuario. Pones tu lógica empresarial dentro de este método que finalmente devuelve la constante String. En otras palabras, para cada URL, tendría que implementar una clase de acción y puede usar ese nombre de clase directamente como su nombre de acción o puede asignar otro nombre usando el archivo struts.xml como se muestra a continuación.

Crear una vista

Necesitamos una JSP para presentar el mensaje final, esta página será llamada por el framework Struts 2 cuando ocurra una acción predefinida y esta asignación se definirá en el archivo struts.xml. Así que vamos a crear el archivo jsp a continuaciónHelloWorld.jspen la carpeta WebContent de su proyecto eclipse. Para hacer esto, haga clic derecho en la carpeta WebContent en el explorador de proyectos y seleccioneNew >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 directiva taglib le dice al contenedor Servlet que esta página usará el Struts 2 etiquetas y que estas etiquetas irán precedidas de s.

La etiqueta s: property muestra el valor de la propiedad de la clase de acción "nombre> que es devuelto por el método getName() de la clase HelloWorldAction.

Crear página principal

También necesitamos crear index.jspen la carpeta WebContent. Este archivo servirá como la URL de acción inicial donde un usuario puede hacer clic para decirle al marco Struts 2 que llame a un método definido de la clase HelloWorldAction y renderice la 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>

los helloLa acción definida en el archivo de vista anterior se asignará a la clase HelloWorldAction y su método de ejecución mediante el archivo struts.xml. Cuando un usuario hace clic en el botón Enviar, hará que el marco Struts 2 ejecute el método de ejecución definido en la clase HelloWorldAction y, según el valor devuelto del método, se seleccionará una vista adecuada y se mostrará como respuesta.

Archivos de configuración

Necesitamos un mapeo para unir la URL, la clase HelloWorldAction (Modelo) y HelloWorld.jsp (la vista). El mapeo le dice al marco Struts 2 qué clase responderá a la acción del usuario (la URL), qué método de esa clase se ejecutará y qué vista renderizar en función del resultado String que devuelve el método.

Así que creemos un archivo llamado struts.xml. Dado que Struts 2 requiere que struts.xml esté presente en la carpeta de clases. Por lo tanto, cree el archivo struts.xml en la carpeta WebContent / WEB-INF / classes. Eclipse no crea la carpeta "clases" de forma predeterminada, por lo que debe hacerlo usted mismo. Para hacer esto, haga clic derecho en la carpeta WEB-INF en el explorador de proyectos y seleccioneNew > Folder. Su struts.xml debería verse así:

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

Pocas palabras que deben entenderse con respecto al archivo de configuración anterior. Aquí, establecemos la constantestruts.devMode a true, porque estamos trabajando en un entorno de desarrollo y necesitamos ver algunos mensajes de registro útiles. Luego, definimos un paquete llamadohelloworld.

La creación de un paquete es útil cuando desea agrupar sus acciones. En nuestro ejemplo, nombramos nuestra acción como "hola" que corresponde a la URL/hello.action y está respaldado por elHelloWorldAction.class. losexecute método de HelloWorldAction.class es el método que se ejecuta cuando la URL /hello.actionse invoca. Si el resultado del método de ejecución devuelve "éxito", llevamos al usuario aHelloWorld.jsp.

El siguiente paso es crear un web.xmlarchivo que es un punto de entrada para cualquier solicitud a Struts 2. El punto de entrada de la aplicación Struts2 será un filtro definido en el descriptor de implementación (web.xml). Por lo tanto, definiremos una entrada de la clase org.apache.struts2.dispatcher.FilterDispatcher en web.xml. El archivo web.xml debe crearse en la carpeta WEB-INF en WebContent. Eclipse ya había creado un archivo esqueleto web.xml para usted cuando creó el proyecto. Entonces, modifiquémoslo de la siguiente manera:

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

Hemos especificado index.jsp para que sea nuestro archivo de bienvenida. Luego, configuramos el filtro Struts2 para que se ejecute en todas las URL (es decir, cualquier URL que coincida con el patrón / *)

Para habilitar el registro detallado

Puede habilitar la funcionalidad de registro completa mientras trabaja con Struts 2 creando logging.properties archivar bajo WEB-INF/classescarpeta. Mantenga las siguientes dos líneas en su archivo de propiedad:

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

El logging.properties predeterminado especifica un ConsoleHandler para enrutar el registro a stdout y también un FileHandler. El umbral de nivel de registro de un manejador se puede establecer usando SEVERE, WARNING, INFO, CONFIG, FINE, FINER, FINEST o ALL.

Eso es. Estamos listos para ejecutar nuestra aplicación Hello World usando el marco Struts 2.

Procedimiento para ejecutar la aplicación

Haga clic derecho en el nombre del proyecto y haga clic en Export > WAR File para crear un archivo War.

Luego implemente este WAR en el directorio de aplicaciones web de Tomcat.

Finalmente, inicie el servidor Tomcat e intente acceder a la URL http://localhost:8080/HelloWorldStruts2/index.jsp. Esto le dará la siguiente pantalla:

Ingrese un valor "Struts2" y envíe la página. Debería ver la página siguiente

Tenga en cuenta que puede definir index como una acción en el archivo struts.xml y, en ese caso, puede llamar a la página de índice como http://localhost:8080/HelloWorldStruts2/index.action. Compruebe a continuación cómo puede definir el índice como una acción:

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