domingo, septiembre 18, 2011

JAVA - Struts 2 Hola Mundo Tutorial – Lo básico de Struts 2


"Si usa algún código del siguiente tutorial, den el icono de ME GUSTA del Facebook que se encuentra en su mano derecha, para que se vuelva Seguidor del Blog y también comentenos que tal les pareció el tutorial"

Hola, mi nombre es Felipe Vásquez Ganoza, y Henry me ha proporcionado esta oportunidad para poder publicar algunas entradas en el blog. Empezaremos por un tutorial muy básico de Struts 2, el famoso Hola Mundo.


Struts 2 Hola Mundo Tutorial – Lo básico de Struts 2

Struts 2 es un framework de desarrollo del lado web, como framework está basado en automatizar las tareas comunes y proveer un marco común de trabajo para el desarrollador, en otras palabras, define la arquitectura de la aplicación o componente.
A diferencia de Struts 1, Struts 2 es un marco completamente nuevo, basado en los proyectos OpenSymphony  y Web Works Framework. Usa el modelo MVC y es lo bastante flexible para poder escalarlo con otros frameworks como Hibernate, Spring, etc.
Struts 2 define el Controlador con el FilterDispatcher, el cual procesa todas las peticiones (request) por parte del cliente, se encarga de verificar en el struts.xml los filtros y acciones a llevar a cabo según corresponda.
El Modelo lo implementan las clases Action, las cuales son básicamente simples POJO (plain old java object), los cuales no necesariamente deben implementar una interfaz, pero sí implementar el método execute(); sin embargo es una buena práctica que implemente la interfaz ActionSupport, de esa forma nos aseguramos automáticamente de implementar  otras interfaces que nos permiten validar y no sobre cargar el método exectue(). Cabe recordar que el Modelo es la parte que implementa la lógica del negocio.
Por último, la Vista puede ser definida por varias tecnologías como JSP, Html, XHtml, Velocity, etc.
A continuación explicaré una simple aplicación conocida por cualquier programador como Hola Mundo, la desarrollaremos en Eclipse y Apache Tomcat.
Los requisitos para desarrollarla son:
  • Tener instalada el SDK a partir de 1.5 o superior.
  • Eclipse (http://www.eclipse.org/downloads/)
  • Apache Tomcat (http://tomcat.apache.org/index.html)
  • Descargar las librerías de Struts 2 (http://struts.apache.org/download), es recomendable descargar la última y más estable versión.

  1. Creamos un proyecto dinámico en Eclipse: File à  New à Dynamic web Project

Le damos un nombre: HolaMundo


Ya tengo instalado previamente el Apache Tomcat, el cual lo descargan desde la página de Apache, el ejecutable según el SO que tengáis. Luego lo pueden agregar en Eclipse, ya sea desde la ventana anterior (la parte de Target runtime à  New Runtime, y seleccionan la carpeta donde se instaló en el disco) o desde el menú: window à  preferences à  server à  runtime enviroments, y agrergar la home del Apache Tomcat.

Luego de creado el proyecto, Eclipse nos mostrará la siguiente estructura:



Donde crearemos el siguiente directorio para las clases:
Click derecho sobre JavaResources à  src à  Folder à  le damos el nombre que deseemos: org.per.trux.actions
Recordando un poco la estructura del proyecto web, apreciemos que tenemos varias carpetas, pero las que nos interesan son WebContent, WEB-INF, lib y src, por ahora. Las páginas de vista (Jsp, Html, velocity, etc) van en la raíz de WebContent (la mayoría de veces, dependiendo de la arquitectura se puede reubicarlas), en la raíz de WEB-INF va el web.xml, dentro de lib van las librerías (.jar) que necesitemos según las tecnologías a utilizar), y dentro de src van las clases (.java) y el struts.xml. Todo esto se puede modificar dependiendo de la arquitectura que se defina, pero por defecto son como las he mencionado.
  1. Ahora agregamos las librerías y archivos de configuración básicos del proyecto para Struts 2. Primero descomprimir el .zip con las librerías descargadas de Struts 2 (en esta aplicación he utilizado: Struts 2.2.3.1), seleccionamos las siguientes librerías del folder lib:
  • struts2-core-2.2.3.1.jar
  • xwork-core-2.2.3.1.jar
  • ognl-3.0.1.jar
  • freemarker-2.3.16.jar
  • commons-logging-1.1.1.jar
  • commons-fileupload-1.2.2.jar
Para este proyecto tan simple, con estas librerías nos basta por ahora. Copiamos esos archivos, damos click derecho sobre la carpeta lib del proyecto en Eclipse, y elegimos: pegar. Nos debe quedar así:



Ahora creamos la página de inicio (Index.jsp), damos click derecho sobre WebContent à  New à  JSP File (si no encuentran esa opción directamente, seleccionen Others y busquen en una de las secciones).


Creamos ahora los archivos de configuración necesarios: web.xml y struts.xml. Click derecho sobre WEB-INFà Newà File, le damos el nombre de web.xml
Click derecho sobre el directorio srcà Newà File, le damos el nombre de struts.xml


Ahora agregamos el contenido en los archivos recién creados, primero en web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
    <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>
    <session-config>
        <session-timeout>
            30
        </session-timeout>
    </session-config>
    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
    </welcome-file-list>
</web-app>

Esta configuración es la más básica y por defecto para usar struts 2, podemos apreciar que se hace referencia al controlador (FilterDispatcher), el mapeo de las urls: /*, el cual indica al controlador que revise todas las peticiones (request) que envíe el cliente, y por último la página de inicio por defecto: index.html. Esta es una configuración muy básica, pero podemos explicar que aquí se pueden agregar más parámetros, como cadenas de conexiones, más servlets, etc. Esto dependerá de la arquitectura del proyecto.
Ahora editamos el archivo 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="default" extends="struts-default">

            <action name="holaMundo" class="org.per.trux.actions.HolaMundo">
                  <result name="SUCCESS">/HolaMundo.jsp</result>
            </action>
     
    </package>
</struts>

Aquí podemos apreciar las acciones a ejecutar por Struts 2, previo definimos el paquete, el cual nos proporciona el poder definir una estructura elegante y separar las diferentes acciones según sea el caso, cabe destacar que  se pueden incluir (include) más archivos Xml que hereden de este base, de esa forma podemos organizar la estrutura del proyecto y no hacer que el archivo por defecto crezca y sea inmanejable, una vez más acoto que esto dependerá de la arquitectura del proyecto.
Dentro del paquete van las acciones, <action>, la cual tiene los atributos básicos: name, el cual es el nombre de la acción a realizar, en este caso, cuando en la url termine en: holaMundo.action (notar que en el archivo struts.xml no viene ese nombre, no es necesario ya que struts es lo suficiente inteligente para mapearla), luego en este caso hay una clase en el atributo class que ejecutará la acción (Modelo, la clase Action), la cual tiene la Uri donde se encuentra: actions.HolaMundo. luego tenemos el resultado que se mostrará con el result al cliente en caso que sea exitosa la acción: <result name="ok">/bienvenida.jsp</result>, esto nos dice que en caso de devolver la cadena (String) ok la acción (HolaMundo.java), nos envíe a la página: bienvenida.jsp
Esta es una simple aplicación, pero se pueden definir mucho más complejas acciones a realizar.
Por último creamos un archivo más: bienvenida.jsp, damos click derecho sobre WebContent à  New à  JSP File.
  
  1. Ahora creamos nuestra clase y agregamos contenido a nuestras páginas jsp. Primero la clase que estará en la carpeta: src/actions/HolaMundo.java

Hay que darle a refresh al proyecto para poder visualizarlo en la carpeta src.
Agregamos las propiedades de tipo String: nombre y saludo, luego usamos la funcionalidad de Eclipse para que nos autogenere los get y set de ambos atributos de clase:



Implementamos el método obligatorio execute, el cual devuelve por defecto un String:

package org.per.trux.actions;

/**
*
* @author Felipe Vásquez Ganoza
*/

import com.opensymphony.xwork2.ActionSupport;

public class HolaMundo extends ActionSupport{

      private static final long serialVersionUID = 1L;
      private String saludo;
     
      public String execute() throws Exception {
            setSaludo("Hola Mundo en Struts 2");
            return "SUCCESS";
      }
      public String getSaludo() {
            return saludo;
      }
      public void setSaludo(String saludo) {
            this.saludo = saludo;
      }

}

  1. Ahora editamos nuestras vistas: index.html


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
      <head>
    <META HTTP-EQUIV="Refresh" CONTENT="0;URL=holaMundo.action">
      </head>

      <body>
                  <h3>Cargando...</h3>
      </body>
     
</html>


y bienvenida.jsp:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<%@taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
      <h1><s:property value="saludo" /></h1>
</body>
</html>

  1. Ejecutamos el proyecto: Click derecho sobre el proyecto à  Run As à  Run on server
O podemos exportar el .war y copiarlo directamente en el directorio de nuestro servidor, para exportar el .war desde eclipse, damos click derecho sobre el proyecto à  Export à  war file
Espero haya sido explicativo este pequeño tutorial  y poder expandir o volverlo más complejo en futuros posts.

Un saludo,
Felipe Vásquez Ganoza


4 comentarios:

Muchas gracias por el manual de struts 2, me ayudo bastante. Soy principiante en esto y etoy trabajando con struts 2 en eclipse. Tengo una consultita estoy intentando mostrar los datos de un formulario dentro de un grig a medida que presiono unbotón "agregar" pero he tenido un poco de problemas para lograrlo. No se si puedas ayudarme te lo agradeceria bastante....

Sandra

Muchas gracias por compartir lo que sabes.

Muchas gracias por compartir tu texto, me sirvió mucho!

Que bueno que les haya servido y eso es gracias al apoyo de nuestro amigo Felipe, que desde España siempre apoya.