17 jun 2017

Struts2 - construyendo la aplicacion

Objetivos


En esta serie de POSTs vamos a dejar preparado el entorno, para que simplemente nos dediquemos a desarrollar sobre Struts2.
Vamos a abarcar las anotaciones, enlace con GIT, Paginas de resultados, etc.

1. Introducción


Como comentaba en el anterior post (Struts - Start Project) hay varias maneras de hacer o referenciar a Struts2. Estas podríamos resumirlas en:
1. struts.xml
2. Por nomenclatura de las clases (sufijos)
3. Anotaciones

No te voy a decir cual es mejor o peor, porque dependerá de la estructura del proyecto en sí misma. Lo que sí debes pensar siempre, en que en los equipos de trabajos, que suelen ser grandes, cuanto más doc implícita haya, mejor para el equipo. El tema de la doc da para otro post al completo, y no nos pondríamos de acuerdo nunca.


2. Configuracion de Anotations


Vamos a dar por hehco, que hemos seguido el anterior post y tenemos la aplicación tal cual estaba.

Paso 1.

Vamos a "eliminar", yo nunca hago borrados físicos, siempre es mejor hacer copias de seguridad y renombrados.

$ cp struts.xml struts.xml.bck


Paso 2.


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
<?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" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
  <display-name>MiAppStruts2</display-name>
  <filter>
    <filter-name>struts2</filter-name>
    <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
    <init-param>
      <param-name>actionPackages</param-name>
      <param-value>com.mr.knight.struts2.actions</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
</web-app>

Si nos fijamos estamos diciendole a Struts que los Actions los busque en ese paquete.

Paso 3.


Tenemos que editar las classes y añadir lo necesario para las anotaciones:.
HomeAction.java

package com.mr.knight.struts2.action;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Actions;
import org.apache.struts2.convention.annotation.Namespace;
import org.apache.struts2.convention.annotation.Namespaces;
import org.apache.struts2.convention.annotation.Result;

import com.opensymphony.xwork2.ActionSupport;
/**
 * An empty class for default Action implementation for:
 * 
 *  
 *      /login.jsp
 *  
 * HomeAction class will be automatically mapped for home.action
 * Default page is login.jsp which will be served to client
 * @author jf
 *
 */

@Namespaces(value={@Namespace("/User"),@Namespace("/")})
@Result(location="/login.jsp")
@Actions(value={@Action(""),@Action("home")})
public class HomeAction extends ActionSupport{

}



Vemos que la nomenclatura es autoexplicativa. Y si volvemos a abrir el Struts.xml (ves como no tenías que haberlo borrado ;) ), te darás cuenta que es prácticamente igual.

Paso 4.


Vamos a transformar LoginAction.java:

package com.mr.knight.struts2.action;

import org.apache.struts2.convention.annotation.Action;

/**
 * Notice the @Action annotation where action and result pages are declared
 * Also notice that we don't need to implement Action interface or extend ActionSupport
 * class, only we need is an execute() method with same signature
 * @author jf
 *
 */
@Action(value = "login", results = {
        @Result(name = "SUCCESS", location = "/welcome.jsp"),
        @Result(name = "ERROR", location = "/error.jsp") })
@Namespaces(value={@Namespace("/User"),@Namespace("/")})
public class LoginAction{
 
 public String execute() throws Exception {
  if("jose".equals(getName()) && "admin".equals(getPwd()))
  return "SUCCESS";
  else return "ERROR";
 }
 
 //Java Bean to hold the form parameters
 private String name;
 private String pwd;
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 public String getPwd() {
  return pwd;
 }
 public void setPwd(String pwd) {
  this.pwd = pwd;
 }
 
}


En este caso podemos observar, como los resultados se los podemos indicar la igual que hacíamos con el xml.

Paso 5. Control de versiones.


Como el proyecto empieza a crecer, y a nadie le gusta perder su trabajo, os dejo una reseña de como unir vuestro proyecto a GIT.
Lo voy a hacer desde Eclipse, aunque sinceramente, todo lo podría resumir en un git init, git commit, y git push, por consola y a partir de ahí que usaráis vuestra aplicacion de GIT preferida.
Pero por si no quereis salir de Eclipse.

Lo primero es en vuestra cuenta de GIT preferida (GITHub, Bitbucket, etc...), creais el proyecto, solo eso.
Y os quedais con la URL del repositorio:

Acto seguido desde Eclipse:
Boton Derecho en el proyecto > Team > Commit
Resultado de imagen de eclipse team commit

Seleccionais los ficheros, dais siguiente, y llegará un momento que os pedirá el repo al que quereis hacer commit en Origin y rama Master (ver doc de GIT).
Le poneis la URL que habeis copiado antes de GITHub, vuestro user y pass, y listo.



Hasta aquí, la primera parte de cómo podemos arrancar la aplicación, y como vamos a empezar a darle forma para que nos permita trabajar de manera colaborativa.

Share This!



No hay comentarios:

Publicar un comentario

Nota: solo los miembros de este blog pueden publicar comentarios.