JavaEE: Struts2

El siguiente ejemplo que vamos a hacer es sobre Struts2. Ya se que ha día de hoy no se utiliza demasiado ya que hay otras muchas soluciones para implementar el modelo MVC, pero aún así, os asombraría la cantidad de empresas que todavía usan este framework y, que a día de hoy, no están pensando cambiar todavía ya que la migración les implicaría una ingente cantidad de trabanjo en sistemas que están más que probados y funcinando. Por este motivo, considero que es interesante que veamos aunque sea un pequeño ejemplito.

Lo primero, es crear nuestro proyecto en eclipse sin arquetipo, tras lo cual, introduciremos en nuestro fichero pom.xml el siguiente contenido:

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <groupId>com.wordpress.infow</groupId>
        <artifactId>struts</artifactId>
        <version>1.0</version>
        <packaging>war</packaging>
        <name>struts</name>
        <url>http://www.infow.wordpress.com</url>

        <dependencies>
                <dependency>
                        <groupId>org.apache.struts</groupId>
                        <artifactId>struts2-core</artifactId>
                        <version>2.3.14.3</version>
                </dependency>
        </dependencies>
        <build>
                <finalName>StrutsExample</finalName>
                <plugins>
                        <plugin>
                                <groupId>org.apache.maven.plugins</groupId>
                                <artifactId>maven-compiler-plugin</artifactId>
                                <configuration>
                                        <source>1.7</source>
                                        <target>1.7</target>
                                </configuration>
                        </plugin>
                </plugins>
        </build>
</project>

Al ser, como en veces anteriores, una aplicación web, tendremos que añadir el fichero de configuración básico, el fichero web.xml que se encontrará en la ruta webapp/WEB-INF como las veces anteriores:

web.xml

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
        <display-name>Struts Example</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>

Como veís su contenido es muy simple, simplemente es añadir un filtro para Struts y un mapeo para este.

El siguiente fichero que vamos a añadir es el de configuración de struts propiamente dicho. En él vamos a especificar las diferentes acciones para la navegación, es decir, que URLs van a donde y, donde se navegará dependiendo del resultado de las diferentes acciones. Como contenido de este fichero struts.xml, que estará alojado en src/main/resources, tendremos lo siguiente:

struts.xml

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

        <package name="user" namespace="/User" extends="struts-default">
                <action name="Login">
                        <result>pages/login.jsp</result>
                </action>
                <action name="Message" class="com.wordpress.infow.struts.action.MessageAction">
                        <result name="SUCCESS">pages/welcome_user.jsp</result>
                </action>
        </package>

</struts>

Como podemos ver, para la acción “login” se nos redirijirá a la página de login, y para la accion de “message” en caso de el resultado ser SUCCESS, se nos redirijirá a mostrar el mensaje.

Ya solo nos faltan las página que formar parte del comportamiento de nuestra aplicación. Entre ellas tenemos el jsp de login que tendrá el siguiente contenido:

login.jsp

<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<html>
        <head>
                <title>Login - Struts Example</title>
        </head>
        <body>
                <s:form action="Message">
                        <s:textfield name="username" label="Username" />
                        <s:submit />
                </s:form>

        </body>
</html>

La acción que lanzará el formularío será “Message” que podéis encontrar en el fichero struts.xml.

El siguiente fichero a definir es el que nos mostrará nuestro mensaje que también es un jsp:

welcome_user.jsp

<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<html>
        <head>
                <title>Welcome - Struts Example</title>
        </head>
        <body>
                Hello <s:property value="username" />
        </body>
</html>

Como véis también es bastante trivial.

Finalmente, tenemos nuestra clase java que implementará nuestra acción. En este caso, simplemente devolverá SUCCESS para redirijirnos a la página donde se nos mostrará el mensaje.

MessageAction.java

public class MessageAction {
        private String username;

        public String execute() {
                return "SUCCESS";
        }

        public String getUsername() {
                return this.username;
        }

        public void setUsername(String username) {
                this.username = username;
        }

}

Hasta aquí hemos llegado con el ejemplo. Como siempre, os dejo el código para que podaís echarle un ojo a lo que he estado describiendo y podáis ejecutarlo en vuestros servidores:

Codigo Struts2 Hello World: Struts

Nos vemos.

JavaEE: Struts2

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.