El API Struts

Esta gua de usuario est escrita para desarrolladores Web activos, y asume que tenemos conocimientos sobre como funcionan las aplicaciones Web Java. Antes de empezar, deberamos entender los bsico de estas tecnologas:

Si hemos creamos aplicaciones Web sobre otras plataformas, probablemente podremos seguir, y luego visitar las referencias arriba indicadas cuando lo necesitemos. Estas son tecnologas corazn que se utilizan en casi todos los proyectos desarrollados en Java

.Prefacio: Un paso hacia el pasado (o una breve historia de Struts)

Cuando se inventaron los Servlets Java, muchos programadores se dieron cuenta de que eran una Buena Cosa. Eran ms rpidos y ms potentes que el CGI estndard, portables, y extensibles infinitamente.

Pero escribir infinitas sentencias println() para enviar HTML al navegador era tirano y problemtico. La respuesta fueron las JavaServer Pages, que nos dejaron escribir servlets dentro de ellas. Ahora los desarrolladores podan mezclar fcilmente HTML con cdigo Java, y tener todas las ventajas de los servlets. El cielo era el lmite!

Las aplicaciones web Java se convirtieron rpidamente en "centradas-en-JSP". Esto, por s slo no era en una mala cosa, pero hacan poco por resolver problemas de control de flujo y otros problemas endmicos de las aplicaciones Web.

Claramente se necesitaba otro modelo...

Muchos desarrolladores inteligentes se dieron cuenta que las JavaServer Pages Y y los servlets se podran usar juntos para desplegar aplicaciones web. Los servlets podran ayudar con el control de flujo, y las JPSs podran enfocarse en el negocio odioso de escribir HTML. Usar JSP y servlets juntos se ha dado ha conocer como el Modelo 2 (cuando usar slo JSPs era el Modelo 1).

Por supuesto, no hay nada nuevo bajo el Sol (Sun)... y muchos han apuntado rpidamente que el Modelo 2 de JSPs sigue el clsico patrn de diseo Modelo-Vista-Controlador de SmallTalk. Ahora es muy comn usar los terminos Modelo 2 y MVC indistintamente.

El proyecto Struts lo lanz en Mayo del 2000, Craig R. McClanahan para proporcionar un marco de trabajo MVC estndard a la comunidad Java. En Julio del 2001, se liber Struts 1.0, e IOHO, el modelo 2 de desarrollo Java nunca ser lo mismo.

.El Patrn de Diseo ('MVC') Modelo-Vista-Controlador

En el patrn de diseo MVC, el flujo de la aplicacin est dirigido por un Controlador central. El Controlador delega solicitudes - en nuestro caso, solicitudes HTTP -- a un manejador apropiado. Los manejadores estn unidos a un Modelo, y cada manejador acta como un adaptador entre la solicitud y el Modelo. El Modelo representa, o encapsula, un estado o lgica de negocio de la aplicacin. Luego el control normalmente es devuelto a travs del Controlador hacia la Vista apropiada. El reenvo puede determinarse consultando los conjuntos de mapeos, normalmente cargados desde una base de datos o un fichero de configuracin. Esto proporciona un acoplamiento cercano entre la Vista y el Modelo, que puede hacer las aplicaciones significativamente ms fciles de crear y de mantener.

.Introduccin al Marco de Trabajo de Struts

Creyendo en el patrn de diseo Modelo-Vista-Controlador, las aplicaciones Struts tiene tres componentes principales: un servlet controlador, que est proporcionado por el propio Struts, pginas JSP (la "vista"), y la lgica de negocio de la aplicacin (o el "modelo"). Veamos como esto funciona todo junto.

El servlet controlador Struts une y enruta solicitudes HTTP a otros objetos del marco de trabajo, incluyendo JavaServer Pages y subclases org.apache.struts.action.Action porporcionadas por el desarrollador Struts. Una vez inizializado, el controlador analiza un fichero de configuracin de recursos, La configuracin de recursos define (entre otras cosas) los org.apache.struts.action.ActionMapping para una aplicacin. El controlador usa estos mapeos para convertir las solicitudes HTTP en acciones de aplicacin.

Un ActionMapping normalmente especificar:

  • una path solicitado (o "URI"),
  • El tipo objeto (subclase de Action) para actuar sobre la solicitud,
  • y otras propiedades segn se necesite.

El objeto Action puede manejar la solicitud y responder al cliente (normalmente un navegador Web), o indicar a que control debera ser reenviado. Por ejemplo, si un logn tiene xito, una accin logn podra desear reenviar la peticin hacia el mainMenu.

Los objetos Action tienen acceso al servlet controlador de la aplicacin, y por eso tienen acceso a los mtodos del servlet. Cuando se reenvia un control, un objeto Action puede reenviar indirectametne uno o ms objetos compartidos, incluyendo JavaBeans, situndolos en una de las colecciones estndard compartidas por los servlets Java.

Un objeto accin puede crear un bean de tarjeta de compra, o un tem de la tarjeta, situando el bean en la coleccin de sesin, y luego reenviando el control a otro mapeo. Este mapeo podra usar una pgina JavaServer Page para mostrar los contenidos de la tarjeta del usuario. Como cada cliente tiene su propia sesin, cada uno tambin tendr su propia tarjeta de compra. En una aplicacin Struts, la mayora de la lgica del negocio se puede representar usando JavaBeans. Una Action puede llamar a las propiedades de un JavaBean sin conocer realmente como funciona. Esto encapsula la lgica del negocio, para que la Action pueda enfocarse en el manejo de errores y dnde reenviar el control.

Los JavaBeans tambin se pueden usar para manejar formularios de entrada. Un problema clave en el diseo de aplicaciones Web es retener y validar lo que el usuario ha introducido entre solicitudes. Con Struts, podemos definir un conjunto de clases bean formulario, subclasificando org.apache.struts.action.ActionForm, y almacenar fcilmente los datos de un formulario de entrada en estos beans formularios. El bean se graba en una de las colecciones estndard o de contexto compartidas, por eso puede ser usado por otros objetos, especialmente un objeto Action.

El bean de formulario puede usarlo una JSP para recoger datos del usuario ... por un objeto Action para validar los datos introducidos por el usuario ... y luego de nuevo por la JSP para rellenar los campos del fomulario. En el caso de validacin de errores, Struts tiene un mecanismo compartido para lanzar y mostrar mensajes de error.

Un bean de formulario Struts se declara en la configuracin de recursos definida en un fichero fuente Java, y enlazado a un ActionMapping usando un nombre de propiedad comnn. Cuando una solicitud llama a un Action que usa un bean de formulario, el servlet controlador recupera o crea el bean formulario, y lo pasa el objeto Action. Este objeto entonces puede chequear los contenidos del bean de formulario antes de que su formulario de entrada se muestre, y tambin la cola de mensajes a manejar por el formulario. Cuando esta listo, el objeto Action puede devolver el control con un reenvio a su formulario de entrada, usando un JSP. El controlador puede responder a la solicitud HTTP y dirigir al cliente a la JavaServer Page.

El marco de trabajo Struts incluye etiquetas personalizadas que pueden rellenar automticamente los campos de un formulario o un bean de formulario. Lo nico que la mayora de las pginas JSP necesitan saber sobre el resto del marco de trabajo son los nombres de los campos apropiados y dnde enviar el formulario. Los componentes como los mensajes "encolados" por el Action pueden salir usando una simple etiqueta personalizada. Tambin se pueden definir otras etiquetas especificas de la aplicacin para ocultar detalles de implementacin de las pginas JSPs.

Las etiquetas personalizadas en el marco de trabajo Struts estn diseadas para usar las caractersticas de internacionaizacin incluidas en la plataforma Java. Todas las etiquetas de campos y los mensajes pueden recuperarse desde un recurso de mensajes, y Java puede proporcionar automticamente el recurso correcto para el idioma y pas de un cliente. Para proporcionar mensajes para otro idioma, simplemente aadimos otro fichero de recurso.

Junto al internacionalismo, otros beneficios de esta aproximacin son las etiquetas consistentes entre formularios, y la posibilidad de revisar todas las etiquetas y mensajes desde una localizacin central.

Para la aplicacin ms simple, un objeto Action podra algunas veces manejar la lgica de negocio asociada con una solicitud. Sin embargo, en lamayora de los casos, un objeto Action, debera llamar a otro objeto, normalmente un JavaBean, para realizar la lgica de negocio real. Esto permite al objeto Action enfocarse en el manejo de errores y el control de flujo, en vez de en la lgica del negocio. Para permitir su reutilizacion en otras plataformas, los JavaBeans de lgica de negocio no deberan referirse a ningn objeto de aplicacin Web. El objeto Action debera traducir los detalles necesarios de la solicitud HTTP y pasarlos a los beans de la lgica del negocio como variables normales de Java.

Por ejemplo, en una aplicacin de base de datos:

  • Un bean de lgica de negocio conectara y consultara la base de datos,
  • El bean de lgica de negocio devolvera el resultado al objeto Action,
  • El objeto Action almacenaria el resultado en un bean formulario en la solicitud,
  • La JavaServer Page mostrara el resultado en un formulario HTML.

Ni el objeto Action ni la pgina JSP necesitan saber (o no les importa) de dnde viene le resultado. Slo necesitan saber cmo empaquetarlo y mostrarlo.

El resto de esta gua de usuario explica varios componentes Struts en gran detalle. La versin Struts tambin incluye varias Guas de Desarrollo que cubren varios aspectos de los marcos de trabajo, junto con aplicaciones de ejemplo, el API estndard JavaDoc, y, por supuesto, el cdigo fuente completo!

Struts se distribuye bajo la licencia de la Apache Software Foundation. El cdigo tiene copyright pero es gratuito para usarlo en cualquier aplciacin. Puedes ver las especificaciones en ASF license.

.El Modelo: Estado del Sistema y JavaBeans de la Lgica de Negocio

La parte del Modelo de un sistema basado en MVC puede dividirse en conceptos--el estado interno del sistema, y las acciones que pueden tomarse para cambiar el estado. En trminos gramticos, podramos pensar en la informacin de estado como nombres (cosas) y las acciones como verbos (cambios del estado de esas cosas).

Generalmente, nuestra aplicacin representar un estado interno del sistema como un conjunto de uno o ms JavaBeans, con propiedades que representan los detalles del estado. Dependiendo de la complejidad de nuestra aplciacin, estos beans pueden ser autocontenidos (y saber como guardar su informacin de estado persistentemente de alguna forma), o podran ser fachadas que saben cmo recuperar informacin de fuentes externas (como una base de datos) cuando es solicitado. Los Entity Enterprise JavaBeans (Entity EJBs) tambin se usan comunmente para representar estados internos.

Las aplicaciones de gran escala normalmente representarn un conjunto de posibles acciones lgicas de negocio con mtodos que pueden ser llamados sobre los beans que mantienen su informacin de estado. Por ejemplo, podramos tener un bean de una tarjeta de compra, almacenado en el mbito de sesin por cada usuario actual con las propiedades que representan el conjunto actual de tems que el usuario ha decidio comprar. Este bean tambin podra tener un mtodo checkOut() que autorice la tarjeta de crdito del usuario, y enve el pedio al almacen para que sea remitido. Otros sistemas representarn las acciones disponibles de forma separada, quizas como Session Enterprise JavaBeans (Session EJBs).

Por otro lado, en algunas aplicaciones de menor escala, las acciones disponibles podran estar embebidas dentro de clases Action que son parte del rol del Controlador. Esto es apropiado cuando la lgica es muy simple, o donde no est contemplada la reutilizacin de la lgica de negocio en otros entornos. El marco de trabajo Struts soporta cualquiera de estas aproximaciones, pero nosotros recomendamos encarecidamente separar la lgica de negocio ("cmo se hace") del rol que juegan las clases Action ("que hace").

.La Vista: Pginas JSP y Componentes de Presentacin

La parte de la Vista de una aplicacin basada en Struts generalmente est construida usando tecnologa JavaServer Pages (JSP). Las pgnas JSP pueden contener texto HTML esttico (o XML) llamado "plantilla de texto", adems de la habilidad de insertar contenido dinmico basado en la interpretacin (en el momento de solicitud de la pgina) de etiquetas de accin especiales. El entorno JSP incluye un conjunto de etiquetas estndard, como <jsp:useBean>. Adems, hay una facilidad estndard para definir nuestras propias etiquetas, que estn organizadas en "libreras de etiquetas personalizadas".

Struts incluye una extensa librera de etiquetas personalizadas que facilitan la creacin de interfaces de usuario que estn completamente internacionalizados, y que interactan amigablemente con beans ActionForm que son parte del Modelo del sistema. El uso de estas etiquetas se explica ms adelante en detalle.

Adems de las pginas JSP y la accin y las etiquetas personalizadas que contienen, normalmente los objetos de negocio necesitan poder dibujarse a s mismos en HTML (o XML), basndose en su estado actual en el momento de la solicitud. La salida renderizada desde dichos objetos puede incluirse fcilmente en una pgina JSP resultante usando la etiqueta de accin estndard <jsp:include>.

.El Controlador: ActionServlet y ActionMapping

La parte Controlador de la aplicacin est enfocada en las solicitudes recibidas desde el cliente (normalmente un usuario ejecutando un navegador Web), decidiendo qu funcin de la lgica de negocio se va a realizar, y luego delegando la responsabilidad para producir la siguiente fase del interface de usuario en un componente Vista apropiado. En Struts, el componente principal del Controlador es un servlet de la clase ActionServlet. Este servlet est configurado definiendo un conjunto de ActionMappings. Un ActionMapping define un path que se compara contra la URI solicitada de la solicitud entrante, y normalmente especifica el nombre totalmente cualificado de clase de una clase Action. Todas las Actions son subclases de org.apache.struts.action.Action. Las acciones encapsulan la lgica del negocio, interpretan la salida, y por ltimo despachan el control al componente Vista apropiado para la respuesta creada.

Struts tambin soporta la habilidad de usar clases ActionMapping que tienen propiedades adicionales ms all de las estndard requeridas para operar el marco de trabajo. Esto nos permite almacenar informacin adicional especfica de nuestra aplciacin, pero an utiliza las caractersticas restantes del marco de trabajo. Adems, Struts nos permite definir nombres lgicos para los controles a los que se debera reenviar para que un mtodo actin pueda preguntar por la pgina "Main Menu" (por ejemplo), sin saber el nombre real de la pgina JSP correspondiente. Estas caractersticas nos ayudan a separar la lgica de control (qu hacer) de la lgica de la vista (cmo se renderiza).

COMPARTE ESTE ARTÍCULO

ENVIAR A UN AMIGO
COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN GOOGLE +
¡SÉ EL PRIMERO EN COMENTAR!
Conéctate o Regístrate para dejar tu comentario.