Anda di halaman 1dari 7

STRUTS Qu Es? Es un framework que implementa el patrn de arquitectura MVC en Java.

El patrn de arquitectura MVC (Model-View-Controller) es un patrn que define la organizacin independiente del Model (Objetos de Negocio), la View (interfaz con el usuario u otro sistema) y el Controller (controlador del workflow de la aplicacin).

FUNCIONAMIENTO:

El navegador genera una solicitud que es atendida por el Controller (un Servlet especializado). El mismo se encarga de analizar la solicitud, seguir la configuracin que se le ha programado en su XML y llamar al Action correspondiente pasndole los parmetros enviados. El Action instanciar o utilizar los objetos de negocio para concretar la tarea. Segn el resultado que retorne el Action, el Controller derivar la generacin de interfaz a una o ms JSPs, las cuales podrn consultar los objetos del Model a fines de realizar su tarea. FUNCIONALIDAD Evidentemente, como todo framework intenta, simplifica notablemente la implementacin de una arquitectura segn el patrn MVC. El mismo separa muy bien lo que es la gestin del workflow de la aplicacin, del modelo de objetos de negocio y de la generacin de interfaz. El controlador ya se encuentra implementado por Struts, aunque si fuera necesario se puede heredar y ampliar o modificar, y el workflow de la aplicacin se puede programar desde un archivo XML Las acciones que se ejecutarn sobre el modelo de objetos de negocio se implementan basndose en clases predefinidas por el framework y siguiendo el patrn Facade. Y la generacin de interfaz se soporta mediante un conjunto de Tags predefinidos por Struts cuyo objetivo es evitar el uso de Scripts envebidos (los trozos de cdigo Java entre "<%" y "%>"), lo cual genera ventajas de mantenibilidad y de perfomance. Logsticamente, separa claramente el desarrollo de interfaz del workflow y lgica de negocio permitiendo desarrollar ambas en paralelo o con personal especializado. Tambin es evidente que potencia la reutilizacin, soporte de mltiples interfaces de usuario (Html, sHtml, Wml, Desktop applications, etc.) y de mltiples idiomas.

MODEL(MODELO) El Model comprende todos los Objetos de Negocio donde se implementa la lgica de negocio (el "how it's done") y donde se debe soportar todos los requisitos funcionales del Sistema sin mezclarlo con partes correspondientes al workflow (el "what to do") que corresponden al Controller. Action Bean Generalmente, los Action Beans siempre realizan las siguientes acciones: Obtener los valores necesarios del Action Form, JavaBean, request, session o de cualquier parte. Llamar a los objetos de negocio del Model. Analizar los resultados, y segn los mismos retornar el ActionForward correspondiente. System State Beans Los System State Beans son el conjunto de objetos de negocio que representan el estado actual del sistema, por ejemplo: el carrito de la compra que el usuario va modificando a lo largo de su interaccin con la aplicacin. Estos objetos de negocio sern tpicamente JavaBeans o EJBs de los que se guardar referencia en la sesin del usuario, que sern modificados desde los Action y que sern consultados desde las JSPs. Esta clase de objetos no debiera tener ningn conocimiento de la View. BusinessLogic Beans Los objetos de negocio son los que implementan la lgica de negocio, el cmo hacer las cosas y su propia persistencia. Estos objetos de negocio no debiera tener ningn conocimiento de la View o el Controller de forma que debieran ser perfectamente reutilizables para implementar soporte a distintas interfaces y hasta para incluirse en nuevas aplicaciones. Struts y Action Con Struts se puede definir un datasource para una aplicacin desde el struts-config.xml Este datasource nos permite obtener una connection desde un Action y desde all utilizarlo o pasarlo al Model.

VIEW (VISTA) La View comprende las JSP (principalmente) y los servlets involucrados en la generacin de la interfaz de usuario o con otros Sistemas. Struts provee soporte para construir aplicaciones multi-idioma, interaccin con formularios y otras utilidades mediante la utilizacin de Tags especiales (TagLibraries). Internacionalizacin Se maneja un archivo con la informacin del idioma con la terminacion .properties. Por ejemplo (MiAplicacion.properties) en el directorio donde se encuentren las clases de la aplicacin donde se contengan las claves y valores con el formato de los textos que pertenezcan al idioma principal Por defecto Struts asigna a cada usuario el idioma principal de la aplicacin. Si se utiliza el tag <html:html locale="true"> (reemplaza a "<html>" y debe cerrarse con "</html:html>") entonces se utilizar el primero de los idiomas soportados por la aplicacin que se encuentre en el header "Accept-Language" enviado por su navegador. Pero si se desea proponerle al usuario una lista de idiomas entonces ste podr cambiarse mediante :
session.setAttribute( Action.LOCALE_KEY, new java.util.Locale(country, language))

Donde country y language sern el string del pas e idioma a establecer. Adems de texto podran incluirse variables (al igual que se hace en los println) y hasta formato de datos. Forms Una de las tareas que durante el desarrollo de una aplicacin insume mucho trabajo es la interaccin con formularios, ya sea para editar u obtener nueva informacin. Las comprobaciones, la gestin de errores, el volver a presentarle el mismo form al usuario con los valores que puso y los mensajes de error y un largo etctera estn soportadas por Struts a fines de hacernos la vida un poco ms fcil. La idea es la siguiente: todo el trabajo de comprobaciones y generacin de mensajes de error se implementa en los ActionForm y todo el trabajo de generacin de interfaz en los JSP.

Tags: Bsicamente,

un

Tag

de

JSP

consiste

en

un

Tag

con

formato

<prefijoTagLib:nombreTag atributo=valor ... > que cuando la JSP se compila es

sustituido por una llamada a la clase TagHandler que se encarga de resolver su funcionalidad. El TagHandler extiende BodyTagSupport o TagSupport (segn si es un tag que tiene body), que implementa su funcionalidad en los mtodos doStartTag(), doEndTag(),doInitBody(), doAfterBody() (los dos ltimos slo en las que extienden BodyTagSupport), adems de los getters y setters correspondientes a sus atributos. Esta clase se define en un Tag Library Definition (archivo xml con extensin TLD donde se define el nombre del tag, la clase TagHandler que lo atiende, la definicin de sus atributos, si tiene body, etc.) que a su vez se debe declarar en el web.xml (dentro de <web-app> se pone <taglib> <taglib-uri> nombreTagLib </taglib-uri>
<taglib-location>/directorios/nombreArchivo.tld </taglib-location> </taglib>) y en la JSP donde se utilizar (<%@ taglib uri="nobreTagLib" prefix="prefijoTagLib" %>). Finalmente, el Tag que se usa en la JSP consiste en <prefijoTagLib:nombreTag atributo=valor ... >.

CONTROLLER El Controller comprende la funcionalidad involucrada desde que un usuario genera un estmulo (click en un link, envo de un formulario, etc.) hasta que se genera la interfaz de respuesta. Entre medio, llamar a los objetos de negocio del Model para que resuelvan funcionalidad propia de la lgica de negocio y segn el resultado de la misma ejecutar la JSP que deba generar la interfaz resultante. Struts incluye un servlet que a partir de la configuracin de struts-config.xml recibe las solicitudes del usuario, llama al ActionBean que corresponda y, segn lo que ste retorne, ejecuta una JSP. Por consiguiente, las tareas que se deben realizar son: Escribir una clase Action que extienda de org.apache.action.Action. Configurar el struts-config.xml para que incluya el nuevo action mapping y sus posibles forwards de salida. Un global-forward que, como su nombre lo indica, viene a ser un forward que se aplica a todos los action-mappings (excepto que se re-defina para alguno en particular). Incluir los links (preferentemente utilizando <html:link>) o forms (necesariamente utilizando <html:form>) necesarios en las JSPs correspondientes.

ActionForm Beans Los ActionForm Beans son clases que extienden ActionForm y que implementan mtodos get y set para cada una de los inputs de un form de una pgina, y los mtodos validate y reset.

Cuando un usuario completa un formulario y lo enva, el Controller busca en el scope especificado el ActionForm Bean correspondiente (todo esto configurado en el strutsconfig.xml) y si no lo encuentra lo crea. Luego realiza un set por cada input del form y finalmente llama al mtodo validate. Si ste retornara uno o ms errores, el Controller llamara a la JSP del formulario para que sta lo volviera a generar (con los valores establecidos por el usuario) e incluyera el o los mensajes de error correspondientes. Si todo estuviese bien, llamara al mtodo perform del Action (tambin configurado en el struts-config.xml) pasndole el ActionForm Bean como parmetro para que sea utilizado para obtener los valores de los datos. Si bien el ActionForm tienen caractersticas que corresponden al Model, los ActionForm pertenecen a la View. Justamente uno de estos puntos comunes es la validacin de datos y a fines de evitar la duplicacin de funcionalidad, si un desde un ActionForm debe realizar controles de validacin que se hubiesen implementado en un objeto de negocio entonces se debera utilizar una instancia de ste para efectuarlos.

Al momento de escribir un ActionForm debemos tener en mente los siguientes principios: No debe tener nada que corresponda a la lgica de negocio No debera tener ms que implementaciones de getters y setters (obligatoriamente un par por cada input del form; si el input se llama nombre entonces tendremos getNombre() y setNombre(String nombre)), y de los mtodos reset y validate Debe ser un Firewall entre el usuario y el Action que detenga todo tipo de errores de incompletitud o inconsistencia Si el formulario se desarrolla en varias pginas (por ejemplo, en las interfaces de tipo "Wizard"/"Asistentes") el ActionForm y el Action debern ser los mismos, lo que permitir, entre otras cosas, que los input se puedan reorganizar en distintas pginas sin cambiar los ActionForm ni los Action

Links: http://www.programacion.com/java/tutorial/struts www.eclipsekickstart.com/chapters/EclipseKickStart-ch11.pdf http://www.laliluna.de/first-java-server-faces-tutorial-es.html