viernes, julio 13, 2007

Struts 2 - Round 1

Bien, aquí va el primer intento de correr Struts 2. He tratado de empezar a interactuar con un formulario, pasando por alto el Hola Mundo. Para los que quieran más información, les recomiendo el Core Developers Guide y este tutorial.
El objetivo del ejercicio es simplemente hacer el formulario de login de una aplicación. Esto va a requerir copiar librerías, conocer la arquitectura de Struts 2 y escribir 3 JSP, 1 clase y un XML.

1. Arquitectura básica
Este gráfico muestra sólo una parte de la arquitectura de Struts 2 (la que nos sirve para ahora). Si quieren ver algo un poco más detallado, hacer click aquí.

2. Estructura del Proyecto
Vamos a hacer 3 páginas JSP:
  • index.jsp: contendrá simplemente un link y un botón.
  • login.jsp: el formulario de entrada de usuario.
  • principal.jsp: la página de resultado de comprobación.
También vamos a necesitar de una clase:
  • Login.java: esta será nuestra Action. Struts 2 no requiere que herede funcionalidad de ninguna otra clase o implemente alguna interfaz, pero para no darle trabajo al reflection, voy a hacer que herede funcionalidad de ActionSupport.
3. Los paquetes JAR a instalar en el lib del proyecto
  • struts2-core-2.0.8.jar
  • xwork-2.0.3.jar
  • freemaker-2.3.8.jar
  • ognl-2.6.11.jar
  • commons-logging-1.1.jar
4. login.jsp
Voy a utilizar aquí los tags de Struts, para lo cual, necesito la directiva tag:
<%@ taglib prefix="s" uri="/struts-tags" %>
Y entre las etiquetas :
<s:form action="Login">
<s:textfield key="usuario" label="Usuario registrado :">
<s:password key="password" label="Contraseña">
<s:submit/>
</s:form>

La única consideración importante aquí es action="Login". Sucede que para que Struts pueda verificar que se está invocando a un Action, se debería invocar (por GET o POST) a Login.action, sin embargo, y debido a que estamos usando las etiquetas de Struts, esto Login aparecerá de forma correcta cuando sea procesada la JSP. Pero esto no es del todo cierto, ya que si la página JSP no es mostrada al usuario como resultado de la invocación a alguna acción, seguirá saliendo en el HTML resultante un action="Login" y esto resultará en un error 404. ¿Te preguntas por qué? Yo también, aunque por el momento no tengo respuesta...

Las páginas index.jsp y principal.jsp no tienen nada de especial, así que las saltearé casi con desprecio.

4. La clase Login.java
Esta es la acción propiamente dicha, aquí va el código:





Lo importante de desatacar es que ya no necesitamos ActionForms ni ningún otro tipo de clase que represente el formulario a tratar. Aquí Struts 2 utiliza el patrón Dependency Injection para rellenar los atributos que se necesiten, por esa razón, si tenemos que tener en cuenta la creación de un get/set para cada componente de presentación que queramos tratar.
Con respecto al método execute(), como ven no recibe parámetros y retorna un String representando el resultado de la acción (error, exito o cualquier otro string).

4. Todo muy lindo, pero ¿cómo configuro esto?. El archivo struts.xml



Lo importante a destacar son las etiquetas:
  • package: simboliza una unidad de trabajo, es exactamente el mismo concepto que paquetes en UML y en Java.
  • action: la acción propiamente dicha
  • result: el resultado posible. Si no incluimos un nombre, será utilizado por defecto cuando la acción resulte en SUCCESS.
OK, estoy ya se hizo muy largo, les dejo los fuentes para que jueguen un poco y en próximos post veremos cómo acceder a la sesión, al request, etc.

Saludos

18 Comments:

At 6:48 a. m., Anonymous Anónimo said...

Muy útil ;)

 
At 10:47 a. m., Blogger Leandro said...

No se ve bien el código de la clase Login ni del struts.xml

 
At 7:36 p. m., Blogger Pablo Frias said...

Leandro: finalmente encontré tiempo y lo solucionè.

Saludos

 
At 5:36 p. m., Blogger Frank Zambrano said...

gracias me ayudo mucho,... si tienes mas material estaria agradecido,.. igual tratare de compartir mis experiencias ahora que comienzo un proyecto empleando este framework

 
At 1:47 p. m., Blogger David said...

Hola, me he bajado los fuentes, he tenido que cambiar la version de java 6 por la 5, ya que tengo tomcat 5.5, pero cuando le doy a submit en index.jsp me da el siguiente error:

No configuration found for the specified action: '/Welcome' in namespace: ''. Form action defaulting to 'action' attribute's literal value.

No he cambiado nada más de los fuentes. ¿Sabéis a que puede deberse?

 
At 3:01 p. m., Blogger Patrick said...

tambien tengo problemas con el tomcat 5.5 segun el log dice que no mapee bien -.-

There is no Action mapped for namespace / and action name XXXXX

 
At 3:56 p. m., Anonymous Anónimo said...

Hola David a mi me funciono quitando namespace="/" en el struts.xml.

 
At 3:07 p. m., Blogger SUDO said...

Hola... muy interesante trabajar en cosas mas nuevas... esto es STRUTS 2.1.6?

Gracias.

 
At 9:37 p. m., Anonymous Anónimo said...

Hola amigo no me funciona bien el ejercicio que bajaste del libro "Struts in Action", espero que en mas publicaciones hagas mejores trabajos.

 
At 2:37 a. m., Blogger Pablo Frias said...

Querido anónimo: bienvenido al mundo open-source. Si no reniegas, no aprendes.

 
At 10:55 p. m., Anonymous Anónimo said...

Buenisimo, estoy apenas comenzando con esto, corre bien, hasta imprimi en la pagina principal.jsp el nombre del usuario. Continuare probando otras cosas con el mismo ejemplo.... Muchas Gracias

 
At 7:35 p. m., Blogger Marcos Jara said...

Espectacular tutorial,

Me sirvio para hacer mi primera aplicacion en struts 2. : )

Saludos
www.marcosjara.com

 
At 3:28 p. m., Blogger JAVAMAN said...

Que tal Doc. acabo de pulsar el link para verificar las fuentes de tu demo y esta errada, podrias enviarme el link para la descarga a mi email: cesarricardo_guerra19@hotmail.com

Aqui comparto 2 links interesantes:

http://viviendoconjavaynomoririntentandolo.blogspot.com

http://frameworksjava2008.blogspot.com

 
At 7:10 a. m., Anonymous Anónimo said...

estoy haceindo un ejercicio pero no sale podria alguien ayudarme de urgencia sip gracias este es el error q me sale –>

Undeploying …
undeploy?path=/HolaMundoaStruts2
OK – Replegada aplicación en trayectoria de contexto /HolaMundoaStruts2
In-place deployment at C:\Users\oxrl\Documents\NetBeansProjects\HolaMundoaStruts2\build\web
deploy?config=file%3A%2FC%3A%2FUsers%2Foxrl%2FAppData%2FLocal%2FTemp%2Fcontext2529827775334901372.xml&path=/HolaMundoaStruts2
FAIL – Deployed application at context path /HolaMundoaStruts2 but context failed to start
C:\Users\oxrl\Documents\NetBeansProjects\HolaMundoaStruts2\nbproject\build-impl.xml:696: The module has not been deployed.
BUILD FAILED (total time: 4 seconds)

 
At 7:20 a. m., Anonymous Anónimo said...

Aqui les dejo mi codigo a ver si ustedes me pueden ayudar y decirme que hacer para q me corra este programa uso netbeans 6.9.1 y tomcat y strust2

este es el --struts.xml--








/pages/HelloWorld.jsp

 
At 7:23 a. m., Anonymous Anónimo said...

no me dejan ponder el codigo pero espero q me ayuden con lo q les dije del error de mi ejercicio struts2
que no me corre :

Undeploying …
undeploy?path=/HolaMundoaStruts2
OK – Replegada aplicación en trayectoria de contexto /HolaMundoaStruts2
In-place deployment at C:\Users\oxrl\Documents\NetBeansProjects\HolaMundoaStruts2\build\web
deploy?config=file%3A%2FC%3A%2FUsers%2Foxrl%2FAppData%2FLocal%2FTemp%2Fcontext2529827775334901372.xml&path=/HolaMundoaStruts2
FAIL – Deployed application at context path /HolaMundoaStruts2 but context failed to start
C:\Users\oxrl\Documents\NetBeansProjects\HolaMundoaStruts2\nbproject\build-impl.xml:696: The module has not been deployed.
BUILD FAILED (total time: 4 seconds)

 
At 2:10 p. m., Anonymous Anónimo said...

muy malo este tutorial, no apto para gente que no sabe struts, lo cual es una estupidez ya que el curso es de struts!!!! NO RECOMENDABLE

 
At 12:33 p. m., Anonymous MasterJava said...

que ridiculo post, si tu sabes algo debes compartirlo, pero hacerlo bien, sin ser tan petulante, estuvo en algo para ser un practicante, pero para la proxima COPIA y PEGA todo el ejemplo del libro "Struts in Action" y trata de darle un valor agregado...

 

Publicar un comentario

<< Home