martes, 22 de julio de 2014

¿Como funciona Struts?

[Desde la página Kickstart FAQ]

"Java Servlet está diseñado para manejar solicitudes hechas por el browser. Las páginas del servidor están diseñadas  para crear páginas web dinámicas que puedan turnar los sitios en cartelera dentro de aplicaciones interactivas. Struts usa un servlet especial como un centro de control para la rutas de solicitudes desde el browser a las apropiadas páginas del servidor. Esto hace que las aplicaciones web sean mucho mas fácil para diseñar, crear y mantener."

Esta es una buena descripción de alto nivel, pero dejar describir el mecanismo y las dependencias del framework en más detalle.
  • La aplicación web que desarrolles tiene un deployment descriptor[descriptor de despliegue](WEB-INF/web.xml) el cual deberás escribir. Este archivo describe la configuración de tu aplicación web, incluyendo páginas de bienvenida(el archivo que es mostrados en un directorio cuando ninguna es especificada por la solicitud), mapeando los servlets(rutas o extensiones de nombre) y parámetros de aquellos servlets. En el archivo web.xml, configuras el framework ActionServlet como un servlet que manejará todas las solicitudes por un mapeo dado(usualmente la extensión usada es .do). El ActionServlet es el "centro de control" mencionado en el párrafo de apertura. También en el web.xml, configuras el ActionServlet para usar uno o más archivos de configuración para el mismo Struts. Por ahora, digamos instalamos la aplicación web en el servidor usando como ubicación /myapp y usaremos la mas simple configuración posible de esta. Si necesitas mas detalles sobre deployment descriptors,  revisa las Especificaciones  de Servlet disponibles en el sitio de Java de Oracle.
  • En los archivos de configuración del framework, se asocian rutas con los componentes del controlador de la aplicación, conocido como clases Action(es decir "login" ==> clase LoginAction). Este le dice al ActionServlet que para una solicitud de entrada http://myhost/myapp/login.do este deberá invocar al componente controlador, LoginAction. Nota la extensión .do en esta URL. La extensión hace que tu contenedor (por ejemplo Tomcat) llame al ActionServlet, el cual ve la palabra "login" como una cosa que quieres hacer. La configuración es referenciada y tu LoginAction es ejecutado.
  • Por cada Action, también puedes configurar el framework con los nombres del resultado de las páginas que se muestran como resultado de la acción. Ahí puede haber más de una vista como resultado de una acción(a menudo hay al menos dos: una para los "success"[éxitos] y una para las "failure"[fracaso] ). Tu Action (el componente controlador que escribiste) es basado sobre estas lógicas de resultados de nombres de mapeo. Este reporte al ActionServlet usando palabras como "success", "failure", "ready", "ok", "UserError", etc. El framework(a traves de la configuración escrita) conoce como avanzar a la página específica correcta. Tienes que añadir la ventaja de reconfigurar la capa vista por simple edición del archivo de configuración XML. En este punto, el framework conoce como delegar los componentes del controlador  y que mostrará como resultado del proceso del controlador.
  • Puedes también asociar un JavaBean con una acción(o conjunto de acciones) en el archivo de configuración del framework. El JavaBean es usado como un repositorio para un form o mostrar datos que se puedan comunicar entre las vistas y la capa del controlador. Estos Beans son automáticamente hechos visibles a los componentes del controlador(como la clase LoginAction) y cualquier página vista que es asociada con este controlador. Estos Beans pueden también ser validados con la ayuda del framework para ayudar asegurar que el usuario poner buenos datos en el form. Ellos pueden ser realizados a lo largo de una sesión, permitiendo forms para el lapso de múltiples páginas del a vista, Actions en el controlador. Nota: Deberías usar alguna tecnología pequeña del lado del servidor(JSP, Velocity, XSLT) para la capa vista(hacia el cliente) para ver este dato(HTML plano no funciona). El framework trabaja en el lado del servidor, así que las vistas del cliente estarán compuestas. Las alimentaciones del cliente al dato regresan a través de los métodos de form normal de entrega(POST/GET) y el framework actualiza estos datos en el Bean antes de llamar a los componentes del controlador.
  • Dentro de tu aplicación web estarán las páginas que representan las vistas de los usuarios verán. Estas pueden ser páginas JSP, plantillas Velocity, páginas XSLT y así sucesivamente. Conjuntos de tags de JSP y JSTL están disponibles para el framework así que puedes iniciar inmediatamente, pero cualquier tecnología estándar de presentación puede ser usada con el framework. Aun archivos planos HTML pueden ser usados dentro de la aplicación, sin embargo estos no tomaran ventaja de todas las características dinámicas. Siguiendo el ejemplo de las taglibs Struts JSP, varios paquetes están disponibles para hacer el framework fácil de usar con tu tecnología favorita de presentación. Para plantillas Velocity hay las ViewTools Velocity para Struts. Si quieres usar XSLT en tu aplicación, puedes escoger entre stxx y StrutsCX. Estos paquetes hacen el elemento estándar Struts framework se vea y se sienta como una parte de la tecnología de presentación original sin costura. Struts también lo hace fácil de mezclar e igualar. Si lo necesitas puedes utilizar JSP, plantillas Velocity y XSLT todo en la misma aplicación! Desde Struts depende en los estándares de tecnologías Servlet, deberías ser capaz de usar cualquier tecnología de presentación Java con Struts.
  • Mientras el enfoque del framework Struts es en el controlador, la capa de presentación es una parte significante de cualquier aplicación. Los taglib Struts JSP incluye un número de tag genéricos y específicos de Struts para ayudar al uso dinámico de datos en la vista. Los tags a cuenta personalizados JSP para un buen  trato del código base de Struts. Esto es educacional para anotar como de la versión 1.1b3 el código Java para el corazón de Struts fue de 28,000 lineas y el código Java para las bibliotecas tag(incluyendo baldosas) fue acerca de 41,000 lineas. Estos tags ayudan pegar a la capa vista a la capa controlador sin tener que empotrar un poco de Java en el JSP. Este da la página una vista XML y puede ser más fácil para los diseñadores web para tratar  con un JSP plano. Este también ayuda minimizar dependencias entre el controlador y la vista. Los tags personalizados son usados para crear forms(y interactuar invisiblemente con el Bean mencionado previamente), lógicamente hacia adelante a otras páginas e invocar otras acciones de las aplicaciones web. Hay también tags que ayudan con la internacionalización, errores de mensajes, etc. Todas de estas habilidades depende en el mismo camino en la configuración de archivos suministrados a Struts.
 Esto es importante para recordar que el mecanismo descrito aquí es solo un efecto cuando el ActionServlet es manejado por la solicitud.

Desde esto solo pasa cuando una solicitud es entregada que causa al contenedor(por ejemplo Tomcat, WebShere, etc) para llamar ActionServlet, deberás estar seguro que cualquier página depende en Struts esta hecho a través que será mapeado al ActionServlet(por ejemplo este tiene la extensión .do).

© 2000-2008 Apache Software Foundation

No hay comentarios:

Publicar un comentario