Struts 2 - Tutorials (Cameron McKenzie)
Struts 2 - Tutorials (Cameron McKenzie)
1
Contenido
2
Struts 2 - Tutorials
3
pom.xml: https://drive.google.com/open?id=1-bb3h-
3gdrBl3QUmVKufZJ4ezmXi617f&authuser=kvdprin88%40gmail.com&usp=drive_fs
Una vez terminado con el pom, tenemos que crear el fichero web.xml, dentro del directorio
WEB-INF:
4
En este fichero creamos filter y filter-mapping:
web.xml: https://drive.google.com/open?id=1-
iAe3MJy2p4JBZ5G357tOF7bbP9ISsWo&authuser=kvdprin88%40gmail.com&usp=drive_fs
Vamos a crear el fichero index.html, donde ubicaremos la página inicial del proyecto:
Lo que hacemos aquí es crear una acción, a la que recurrir el formulario, una vez el usuario
pulse el botón submit. Mandará el valor del campo firstname.
5
Index.html: https://drive.google.com/open?id=1-ij4ch2Lx-
loXComlITcQhgSaj9oNcvR&authuser=kvdprin88%40gmail.com&usp=drive_fs
Creamos la propiedad llamada firsName (igual que en index.html), le asignamos sus getters y
setters.
Creamos un método llamado execute, que se ejecutará cuando se lance la acción relacionada
con esta clase, lo que haremos en este caso es imprimir por consola el nombre introducido en
el formulario index.html y devolver un String con “success”.
Nos tenemos que fijar en que hacemos uso de anotaciones, en primer lugar la anotación
@Action, que permite identificar la acción en concreto, lo hemos reflejado en index.html y en
segundo lugar @Result que capta el resultado y en este caso concreto, nos redirige a una
página llada results.jsp.
6
HelloAction.java: https://drive.google.com/open?id=1-
nUx7D5fw5PUQjXBQEhnUbDiw7bc5rxK&authuser=kvdprin88%40gmail.com&usp=drive_fs
Por último, tenemos que crear la página results.jsp a la que redirigimos al usuario, al
ejecutarse la operación con éxito:
En esta página usaremos las etiquetas de Struts, para poder hacer, necesitamos declarar un
prefijo, lo hacemos con el comando: <%@ taglib prefix="s" uri="/struts-tags"%>.
De esta manera le indicamos el IDE que todo lo que comience por el prefijo s, será una
etiqueta de struts.
Result.jsp: https://drive.google.com/open?id=1-
s0SyWV64ytoJvx1SexaIte1Y4FT14_K&authuser=kvdprin88%40gmail.com&usp=drive_fs
7
Ficheros: https://drive.google.com/open?id=1-
Wp2Yor0r4W_g51xIjLuRDpO_qB6TYld&authuser=kvdprin88%40gmail.com&usp=drive_fs
8
Creamos un nuevo proyecto Maven simple:
Rellenamos el fichero pom.xml, web.xml, index.html, result.jsp con los mismos datos que el
video 1.
9
El contenido de esta clase es similar a la del video 1, la diferencia es que no va a utilizar
anotaciones, si no que recurriremos al fichero de configuración de struts, como lo veremos
más adelante:
Aquí nos podemos fijar en que el nombre de action es “hello”, es el nombre que utilizamos en
index.html, cuando indicamos el action al enviar el formulario: <form
action="hello.action">
Ficheros: https://drive.google.com/open?id=1-
ymNj6GRfzHXmgnw99rikohi04rIfXDW&authuser=kvdprin88%40gmail.com&usp=drive_fs
10
Video 4 – Struts Tags and the Struts 2 Taglib library for HTML in JSPs
En este video vamos a hacer uso de etiquetas struts en el fichero index, que en vez de html
pasará a ser jsp.
Creamos el fichero index.jsp y le agregamos las dos primeras líneas del fichero result.jsp, en
concreto:
Lo que podemos notar es que en action no tenemos que indicar toda la clase, si no únicamente
el action, puesto que está mapeado dentro del fichero struts.xml
También utilizamos label para escribir el texto anterior al campo editable.
Por último en submit podemos ver que se trata de una versión simplificada de la etiqueta.
11
Vamos a ver un par de etiquetas más, en concreto:
Lo que hacemos aquí es en primer lugar, crear una url que contiene una acción y un nombre,
en su interior colocamos un parámetro, que será el que se enviará a la clase que lo maneje.
Pasamos por parámetro el nombre (es el nombre de la propiedad de la clase) y su valor.
Por último, creamos un enlace, mediante la etiqueta <a> y referenciamos la url creada
anteriormente dentro de href.
Ficheros:
https://drive.google.com/open?id=10IUP0THrxndJNLIdi8gwTmN_B8Y_AtAF&authuser=kvdprin
88%40gmail.com&usp=drive_fs
12
Video 5 – Struts Form Handling and Annotation Action Mappings Tutorial
En este video creamos un formulario de registro, donde recogeremos una serie de variables,
relacionadas con las propiedades de una clase.
Una vez terminado con el formulario de registro, tenemos que crear una clase nueva, vamos a
llamarla RegisterAction (la clase padre en este caso es ActionSupport):
13
El fichero tendrá el siguiente contenido:
Como podemos observar vamos a utilizar las anotaciones de struts2, en vez de usar el fichero
de configuración. La acción que registramos con esta clase será register y en caso de que el
método execute() devuelva “success”, nos redirigirá al fichero thankyou.jsp.
Más abajo vemos que tenemos registrado una variable de tipo long, es un requisito por
heredar de la clase ActionSupport.
Por último, en el método execute, vemos que imprimimos la edad de la persona y devolvemos
una constante (a la que podemos acceder por heredar de ActionSupport).
14
Ahora creamos el fichero thankyou.jsp al que se redirigirá al usuario, si la operación tiene
éxito:
Ficheros:
https://drive.google.com/open?id=10gXzlrIvyLZnU70WucMVMuYFKlbRNaYt&authuser=kvdpri
n88%40gmail.com&usp=drive_fs
15
Video 6 – Form Validation Example Apache Struts Tutorial
Para añadir una validación, tenemos que hacer el uso del método validate(), dentro de la clase
RegisterAction. El nombre del método es predefinido y es algo así:
16
Lo que ocurrirá si falla la validación, es que se va a pedir más información para input, de esta
manera se generará un resultado de tipo input, igual que hicimos con el success, tenemos que
capturar ese mensaje para tratar el caso:
Como podemos ver, creamos una especie de array de resultados contenidos dentro de la
etiqueta Results, en caso de que el resultado sea “input” redirigimos al usuario a la página de
registro de nuevo.
Nos indica que campos están mal y lo que tenemos que hacer. Si queremos resaltar los
errores, podemos añadir la etiqueta <s:head> dentro de las etiquetas <head>, en el fichero
register.jsp:
17
Volvemos a realizar la prueba:
18
Video 7 – Annotations, Struts 2 Actions and Properties Files as Message
Bundles Tutorial
Vamos a crear un fichero de propiedades donde iremos almacenando las propiedades con las
que trabajaremos en el programa.
Lo que hacemos es usar una clave para obtener los datos de estos campos, tampoco tenemos
que indicar el label, pues utiliza el valor que hay dentro del fichero properties.
19
Si ejecutamos el fichero register.jsp ahora, veremos que:
En vez de obtener los valores de las claves dentro del fichero properties, lo que hace es
imprimir el nombre de las claves, sin embargo, si pulsamos el botón Submit:
Vemos que ahora sí que interpreta bien los valores de las claves. La razón de esto está en que
para que interprete bien las claves, tenemos que pasar obligatoriamente a través de los
actions. De esta manera, cuando ejecutamos el register.jsp directamente, se hace una
interpretación directa del fichero y su contenido, sin embargo, cuando pulsamos el botón
Submit, pasamos por los actions correspondientes.
Para solucionarlo, creamos otro método dentro de la clase RegisterAction y lo asociamos con
la acción “display”, de tal manera que cuando alguien llame a esa acción a través del URL, nos
mandará al formulario, puesto que por defecto el método devuelve la cadena input y está
asociada en los resultados a la redirección a la página register.jsp:
20
El problema que tendremos ahora es la validación, la cadena input devuelta por el método
hace que salte la validación del formulario, por lo que el programa intentará validar el
formulario antes de ser mostrado, lo que terminará provocando un error:
21
Para ejecutar la acción display, podemos crear un enlace en la página inicial que se encargará
de llamar el método correspondiente:
El resultado:
Al pinchar sobre el enlace, nos lleva al formulario de registro, a través de action, por lo que
toma bien los valores de las claves:
Ficheros:
https://drive.google.com/open?id=116wlcW07OW5tTbBQm7fM6yz3C7PZ9wMM&authuser=k
vdprin88%40gmail.com&usp=drive_fs
22
Video 8 – Struts 2 i18n with ApplicationResources as MessageResources
Properties File
Vamos a crear un nuevo fichero properties, llamado package.properties, dentro del cual
colocaremos una propiedad a la que recurriremos en el fichero de inicio:
Como ya sabemos si no pasamos por action, esto no va a funcionar, nos mostrará el texto del
name:
23
Vamos a ver cómo realizar lo mismo, utilizando el fihero de recursos.
Para ello, en primer lugar, nos dirigimos al fichero web.xml y añadimos las siguientes líneas:
Añadimos una línea más en el fichero register.jsp, pero en esta vez referenciando
global.greeting:
24
Ahora, nada más ejecutar el fichero register.jsp, vemos que coge los datos guardados en el
fichero properties sin tener que pasar por actions:
Podemos observar que aquí, la variable global greeting toma el valor de “Bonjour”.
25
Ahora nos dirigimos al fichero register.jsp y añadimos un enlace:
- Se ejecuta la action “display” que muestra los nombres de los textfields, referenciados
por sus claves.
- El URL, mediante el parámetros pide una versión localizada de la página, en este caso,
fr, lo que cambia el valor asociado a la propiedad global “global.greeting”.
Ficheros:
https://drive.google.com/open?id=11XwdDjnL80eCpGc3TtyzbftZ9H0HIBfl&authuser=kvdprin8
8%40gmail.com&usp=drive_fs
26
Video 9 – Exception Handling with Struts 2 Annotations
Antes de nada, vamos a crear una redirección dentro de la clase RegisterAction, que nos
mandará a la página error.jsp en caso de encontrar errores:
Podemos manejar las excepciones tanto a nivel de clase, mediante ExceptionMappgin, por
ejemplo:
O sobre un método:
27
Como hemos visto, al producirse un error, la aplicación nos tendrá que redirigir a la págin
error.jsp, procedemos a crearla:
Vamos a añadir una URL que haga saltar la excepción, por llamar action “badcall”:
28
Ejecutamos la aplición:
El resultado:
Ficheros:
https://drive.google.com/open?id=1214SLeK67yyhtiVJuxWsZw6swM244eiz&authuser=kvdprin
88%40gmail.com&usp=drive_fs
29
Video 10 – Apache Struts Debugging Tools Tutorial v2.5
En este video veremos algunas de las herramientas de debugging que incorpora el propio
Struts.
El primer paso para poder utilizar interceptores de Struts, es habilitar el modo desarrollador.
Hay varias formas de hacerlo, nosotros lo haremos a través del fichero web.xml:
En el fichero register.jsp, añadimos un enlace con action register, pero con un namespace
especial:
30
Esto nos permite explorar nuestra aplicación, buscando todo tipo de datos y viendo el
funcionamiento.
Ficheros: https://drive.google.com/open?id=132RKzH9u9oiqMPjKODurT9gt--
0ElZq6&authuser=kvdprin88%40gmail.com&usp=drive_fs
31
Video 11 - Struts Input Validation with Annotation Based Validators
32
Añadimos los campos al fichero register.jsp:
Como podemos observar, struts cuenta con plantillas de validación específicas para ciertos
campos, como la página web y el email. Para el teléfono, utilizamos una expresión regular y
para la edad usamos la plantilla de comprobación para int.
33
Si lanzamos la aplicación, podemos observar la validación en acción:
Ficheros: https://drive.google.com/open?id=13Hujv3Vr-W-
jqPhBXrf7MMCMC9rkiuKz&authuser=kvdprin88%40gmail.com&usp=drive_fs
34
Video 12 - How to use Apache Struts interceptors tutorial
Los interceptores son herramientas que capturan cierta información que ocurre mientras se
ejecuta el programa.
Para que esto tengo lugar, lo tenemos que declarar en nuestra clase Action:
Ahora tenemos que agregar la dependencia de log4j, para ello, escribimos lo siguiente en
nuestro pom.xml:
Una vez actualizado el proyecto desde Maven, tenemos que crear el fichero log4j2.xml dentro
de la carpeta resources:
35
Si ahora ejecutamos la aplicación, veremos mensajes informativos acerca de la ejecución de
distintas partes de código:
Ficheros:
https://drive.google.com/open?id=148m7L7G8U_txglTVCruS5xFbq0v8p9lu&authuser=kvdprin
88%40gmail.com&usp=drive_fs
36
Video 13 - Apache Struts Unit Testing with JUnit Tutorial
Creamos una clase nueva, en src/test/java, la clase se llamar-a RegisterActionTest y tendrá las
siguientes características:
37
En el interior de la clase, creamos los métodos que se encargarán de comprobar algunos casos.
Vamos a probar dos, cuando no introducimos ningún dato y cuando rellenamos todos los
campos, en ambos casos comprobamos que el String que devuelve el método execute, es el
que corresponde.
En primer caso, como no introducimos ningún dato, esperamos que nos devuelve un input,
para volver a pedir los datos, tras no superar la validación. En el segundo, esperamos que nos
devuelva success, puest todos los campos están rellenados correctamente.
Pinchamos con el botón derecho sobre la clase y escogemos la opción, ejecutar como Junit
Test:
Observamos el resultado:
Los ficheros:
https://drive.google.com/open?id=159Yo0Mh45Z3reIeysK2teDj1UfKKuifJ&authuser=kvdprin8
8%40gmail.com&usp=drive_fs
38
Video 14 - How to Integrate Struts and Ajax
Para este tutorial vamos a crear un proyecto Maven nuevo, con las siguientes características:
39
Típicamente, como en todos los proyectos de struts, creamos el fichero web.xml:
En esta página podemos observar que tenemos añadidos dos prefijos, uno s, para las etiquetas
de struts y el otro sj para las etiquetas de jquery.
Posteriormente podemos ver que declaramos una url que apunta a una action y tiene un
parámetro llamado handle.
40
Justo debajo, colocamos un enlace Ajax que hace referencia al url declarado anteriormente y
cuyo target es un div que vamos a declarar en este momento.
Por último, declaramos ese div, que es donde irá el resultado de interacción con Ajax.
En esta clase podemos ver la acción asociada y que se ejecutará si el resultado es success.
También tenemos la propiedad handle, que usaremos para almacenar la información que pasa
entre el ajax-link y results. De esta manera, cuando se presione sobre el enlace en la clase ajax-
link, el parámetro que lleva en su interior: <s:param name="handle"> @kvoziyan </s:param>
será mapeado a la propiedad de la clase, por lo que podremos imprimirla en la consola.
Por último, creamos el fichero resutls.jsp donde tendremos únicamente una etiqueta <h3>,
con el siguiente contenido:
Solo mandamos una etiqueta <h3> con la propiedad handle, ya que Ajax funciona
intercambiando partes de la página web de manera asíncrona, sin recargar todo el contenido.
Ficheros: https://drive.google.com/open?id=15e3BmbKy70VehqUIMJ8AIB1vcIZT-
mh6&authuser=kvdprin88%40gmail.com&usp=drive_fs
41