Hoy he acabado de picar el código de mi estudio tecnológico. Para los no-telecos, es una asignatura en la que te encargan algún proyecto, algo así como el PFC pero en pequeño. Algunos profesores proponen cosas como un estudio del estado del arte de algún tema, otros te proponen implementar algo, cosas así.
En mi caso mi profesor me propuso algo que llevaban tiempo buscando: una aplicación de gestión de becas del departamento de Telemática. Le propuse hacerla en dos patadas con CakePHP o incluso en Ruby On Rails, más que nada para aprender algo, pero me dijo que de eso nada, que Java. Así que la hice con Struts2.
Lo que más me ha costado ha sido comenzar el proyecto desde cero. En la documentación hablan de una cosa llamada maven, pero no conseguí hacerlo funcionar bien (vale, sí funcionaba, pero cada vez que hacía alguna cosa me bajaba así como 30 paquetes y era un sufrimiento, algo haría mal). En la charla de Struts2 de las jornadas del pasado Noviembre, Álvaro habló muy bien de esta herramienta, así que seguro que es la caña. Pero bueno, me centro en struts.
Lo que he aprendido de Struts es más o menos lo siguiente: Por supuesto, divides tu aplicación en modelo, vista y controlador. Tu defines una clase que es un controlador, que básicamente tiene un método execute(). Ese método es el que concentra la lógica de la aplicación. Por ejemplo, si quiero hacer una pantalla de login pues ahí tendré la lógica de autenticación. También lo usaré como bean, poniendo métodos get/set de usuario y clave.
Por otro lado, definiré un JSP donde aparezcan los controles y cosas así. Estoy acostumbrado a que un JSP esté plagado de beans, donde se encapsulan los datos que se pasan al servlet y cosas así. Pero en struts2 no. Lo divertido viene aquí:
En un archivo de configuración, que es un XML guarro, defines acciones, que son conjuntos de:
- Una URL, que es donde se accede a la acción
- Una clase controladora, que la escribimos antes
- Los JSP de vistas, con etiquetas propias de Struts
y he aquí que Struts, al renderizar el JSP, engancha los controles del JSP con las propiedades del bean controlador. De esta forma, al tener un formulario con usuario y clave, por ejemplo, se invoca automáticamente a los métodos setUsuario() y setClave() del controlador.
Pero esto, que quien trabaje con JSPs verá que es una delicia, es lo más tonto que tiene Struts. Otra cosa que he usado y que me ha encantado es el mecanismo de validación: defines una serie de reglas en un XML y las relacionas con un controlador. De esa forma, antes de rellenar la información del controlador con los set…() automáticos, se valida cada campo. Hay diferentes tipos de validadores, incluso puedes codificar tu mismo unas sentencias lógicas, si es que no te basta con validadores numéricos, de direcciones de e-mail, del URLs…
Y eso es sólo algunas cosillas que se pueden hacer con Struts2.
La verdad es que a veces desespera un poco que para hacer una pequeñísima cosa tengas que hacer 50 líneas de código Java, definir un XML y crearte alguna interfaz. Si, puede desesperar, pero la verdad es que hacerlo marca una enorme diferencia. Es lo bonito de los lenguajes tan fuertemente tipados: hacer algo cuesta, pero resulta mucho más robusto.
Para la parte del modelo de datos, Spring habría sido una gran opción, pero me hizo gracia que en otra asignatura tuviéramos que hacer algo parecido con una práctica de JSP y no podíamos usar Spring, claro, así que me hice una pequeña clase que encapsula las funciones de un modelo, en plan cakephp (mucho más guarro, claro) y al final acabé usando esa clase para este estudio tecnológico. Creo que voy a tener que aprender Spring, hibernate, anotaciones… eso sí, ahora me toca depurar, que seguro que salen bugs (¡son features!), probarlo en Debian, hacer un manual de instalación completo, un manual de usuario y un manual para el desarrollador. Vaya rollo
Pues eso, quienes uséis Java para la web y no conozcáis Struts, ¡os va a encantar!