Académique Documents
Professionnel Documents
Culture Documents
FRWK - U2
Struts
Framework de cdigo abierto para desarrollar aplicaciones Web siguiendo el patrn de diseo MVC (modelo2) Es parte de los proyectos de Apache Foundation (mayo 2000, Craig McClanahan) Su nombre (puntal o cimiento) es porque provee las bases invisibles para poder desarrollar aplicaciones web Versiones
Struts 1.x
Maduro, documentado, es el framework ms usado PERO ya no tiene soporte a partir de mediados de 2013 Netbeans incluye Struts 1.3.10
Se fusiona con WebWork, menos maduro, para equipos ms experimentados
Struts 2.x
FRWK - U2
Elementos de Struts
Modelo
Struts no provee ayuda particular en este sentido, podemos implementar JB, Hibernate, EJB de entidad, etc. (Hightower, R. 2004. Jakarta Struts Live) Otros autores (Mercay, Bouzeid, Davis) consideran que s lo hace mediante la clase ActionForm ActionForm
Mantiene el estado de la sesin (capturas) Representa una captura en HTML (una clase hija por cada formulario de captura, sea que la codifiquemos o la genere de forma automtica Struts) Sus atributos se llenan con la informacin capturada en el formulario correspondiente (evitamos request.getParameter) Tiene un mtodo validation() que puede ser redefinido (no siempre es deseable hacerlo) La relacin entre el formulario html y la clase ActionForm se encuentra en el archivo struts-config.xml
Varias solicitudes (request) pueden mapearse al mismo ActionForm Un ActionForm puede mapearse en varios formularios
FRWK - U2
Elementos de Struts
Controlador
Procesa los datos de la solicitud y los datos de la sesin para aplicar, con ayuda del Modelo, reglas de negocio y selecciona la vista que aplique Struts provee 3 clases:
ActionServlet controla la instanciacin y uso de clases Action, ActionForm y ActionForward. Lo usamos pero no lo extendemos, se configura en struts-config.xml Action, controla las reglas de negocio (validaciones, relacin con el modelo, etc.), se hereda de sta (tantas clases hija como procesamiento diferente en el servidor) y se redefine el mtodo execute() ActionForward
Casi equivale a la vista de salida esperada, aunque puede tratarse del siguiente paso del proceso de negocio; le indica a Struts si debe llamar a otro Action o directamente a un JSP
FRWK - U2 ISC Beatriz A. Olivares Zepahua 4
Elementos de Struts
Vista
Como tal, Struts NO provee algo especfico (puede utilizarse con otros frameworks como Velocity) Provee etiquetas especiales para JSP que ayudan a disminuir la mezcla de cdigo
HTML: para etiquetas normales que tienen algn llenado a partir de beans. Bean: para manipular beans. Logic: para estatutos de control. Template: para manejar plantillas
FRWK - U2
Fuente: Davis, M (Feb. 01). Struts, an open-source MVC implementation. IBM. http://www.ibm.com/developerworks/library/j-struts/
FRWK - U2
Fuente: Mercay, J. Bouzeid, G. Boost (Feb. 02) Struts with XSLT and XML. JavaWorld.com http://www.javaworld.com/javaworld/jw-02-2002/jw-0201-strutsxslt.html FRWK - U2 ISC Beatriz A. Olivares Zepahua 7
<servlet>
<servlet-name>action</servlet-name> <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<param-name>config</param-name> <param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
</servlet> <servlet-mapping>
<servlet-name>action</servlet-name> <url-pattern>*.do</url-pattern>
</servlet-mapping>
FRWK - U2 ISC Beatriz A. Olivares Zepahua 8
Clase ActionX
Es responsable de las operaciones asociadas con reglas del negocio (clculos, decisiones, operaciones) y con la invocacin de los beans. Hereda de org.apache.struts.action.Action y sobreescribe el mtodo execute El mtodo execute
Regresa un ActionForward, es decir, un objeto que representa el siguiente paso a realizar, por lo general el mapeo a la vista (jsp) pero tambin puede ser otro Action (cuando el procesamiento de la solicitud es tan complejo que debe ser dividido) Recibe
ActionMapping: representacin en objeto de la seccin del archivo strutsconfig.xml que origin la llamada al action ActionForm: representacin en objeto del formulario de captura que origin la llamada HttpServletRequest: solicitud http HttpServletResponse: respuesta http
FRWK - U2
10
Clase ActionX
public class ActionX extends Action {
public ActionForward execute(
ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
return mapping.findForward("success");
}
FRWK - U2 ISC Beatriz A. Olivares Zepahua
<action>
Atributos
input: opcional, indica la URL de la pgina de entrada (formulario) al action name: opcional, nombre de la clase ActionForm que mapea la pgina de entrada attribute: opcional, nombre de la variable de tipo ActionForm que se puede usar dentro de la pgina (sera equivalente a id en la etiqueta <jsp:useBean>) path: URL para llamar a la clase ActionX scope: opcional, alcance del ActionForm type: opcional, paquete y ruta del ActionX forward: opcional, URL de lo que ser invocado al terminal el ActionX (puede ser un JSP u otro Action)
Un Action puede tener ms de una posible continuacin (caso de xito, caso de error, caso alterno, etc.), de ser as forward ser una etiqueta y no un atributo
FRWK - U2 ISC Beatriz A. Olivares Zepahua 12
<forward>
Atributos
name: nombre con el que ser buscado por la instruccin mapping.findForward(nombre") para poder obtener el paso siguiente al terminar el Action path: URL del siguiente paso (jsp o Action)
FRWK - U2
13
Clase ActionFormX
Representa la entrada de datos desde el navegador (formulario convertido a objeto) o desde el servidor hacia la vista (objeto para llenar un formulario) Trabaja como un JB
Tantos atributos como controles, son de tipo String preferentemente (puesto que HTML no maneja otra cosa) aunque en las nuevas versiones ya se soporta la conversin automtica a otros tipos. Mtodos get/set
Atributos + get/set = propiedades del formulario
Clase ActionFormX
public ActionErrors validate (ActionMapping mapping, HttpServletRequest request) {
ActionErrors errors = new ActionErrors(); return errors
} Valida la entrada (si los campos vienen llenos, si corresponden a tipos esperados (nmeros, fechas, formatos, etc.) NO trabaja directamente con request, sino con sus atributos (Struts se encarga de hacer el paso) En caso de que no se cumpla una validacin
errors.add(nomError", new ActionError(mapeoError"));
nomError = nombre del error mapeoError = ruta dentro del archivo de recursos de la aplicacin
Regresa el conjunto de errores que se haya formado Para visualizar los errores, en el jsp se agrega las etiquetas <html:form action=path_del_action"> y <html:errors/>
FRWK - U2 ISC Beatriz A. Olivares Zepahua 15
Captura.jsp
Pgina con <html:form>
ActionFormX.java
Procesa reglas de negocio
Errores?
FRWK - U2
16
ActionForm
Para mapear campos de login.jsp
Action
Para verificar los datos respecto a la base (datos fijos en este caso); si todo es correcto pasa a firmado.jsp, en caso de error se regresa a login.jsp afectando errores
struts-config.xml
Agregar <action> para que reconozca todo lo anterior
FRWK - U2 ISC Beatriz A. Olivares Zepahua 17
JSP tags
Tres tipos:
html
Para generar formularios ligados a un ActionForm
logic
Para establecer estatutos de control dentro de una pgina, asociados a un atributo de pgina, sesin, etc.
bean
Para trabajar con atributos de pgina, sesin, etc.
HTML tags
<html:tag>
errors: lista de errores (ActionErrors) que se hayan generado form: formulario asociado a un ActionForm; es decir, los controles del formulario estarn ligados a los atributos de la clase; usa atributos action (ActionX.do) y method (post/get) submit: invoca la siguiente pgina de acuerdo al formulario, asegurando que la informacin de los controles llena los atributos del ActionForm Existen todas las etiquetas correspondientes a los controles normales de HTML (text, textarea, radio, etc.), para poder hacer la relacin con el ActionForm, es necesario que incluyan el atributo property, cuyo valor debe ser igual a xyz, donde xyz equivale a los mtodos getXyz o setXyz de dicha clase (ntese que en el atributo la primera letra es minscula y en el mtodo es mayscula)
FRWK - U2 ISC Beatriz A. Olivares Zepahua 19
Bean tags
<bean:tag>
Un bean corresponde a una variable que puede ser usada dentro del jsp sin importar su alcance (page, session, application, etc.) Formas de definicin
<% String sVal = (String)session.getAttribute(val); <jsp:useBean id=val scope=session class=java.lang.String/> <bean:define id=sVal property=val scope=session/>
En el caso de las etiquetas de Struts, NO es necesario definir el bean, el framework hace lo necesario para encontrar la variable
FRWK - U2 ISC Beatriz A. Olivares Zepahua 20
Logic tags
<logic:tag>
present
Verifica si algo existe
name: nombre de la variable (bean) a verificar (<logic:present name=datos> verifica que exista una variable con ese nombre en cualquier mbito (sesin, pgina, aplicacin) cookie: nombre de la cookie a verificar (<logic:present cookie=nomUsu> verifica si existe alguna cookie con el nombre de nomUsu parameter: nombre del parmetro del request a verificar
Agregar los import correspondientes (ActionErrors, ActionMessage, ActionFormX y los JBs necesarios) Codificar el mtodo execute que bsicamente har:
Casting del formulario recibido al formulario especfico (ActionFormX) Instanciar JB(s) Pasar informacin al JB a partir del formulario especfico (oJB.setValor( formulario.getValor() ) Realizar operaciones (insercin, bsqueda, modificacin, etc.) Indicar el forward especfico de acuerdo al resultado de las operaciones FRWK - U2 ISC Beatriz A. Olivares Zepahua 26
ActionForm
Para mapear el campo de captura.jsp
Action
Para verificar los datos respecto al negocio (capturar un nombre de al menos 5 posiciones); si todo es correcto pasa a saludos2.jsp, en caso de error se regresa a captura.jsp avisando los errores
struts-config.xml
Agregar <action> para que reconozca todo lo anterior
FRWK - U2 ISC Beatriz A. Olivares Zepahua 28
ActionForm
Para mapear campos de login.jsp
Action
Para verificar los datos respecto a la base (datos fijos en este caso); si todo es correcto pasa a firmado.jsp, en caso de error se regresa a login.jsp afectando errores
struts-config.xml
Agregar <action> para que reconozca todo lo anterior
FRWK - U2 ISC Beatriz A. Olivares Zepahua 29
Turbine
Framework basado en servlets para desarrollar aplicaciones Web, orientado a usuarios experimentados en Java Considera una arquitectura orientada a servicios A diferencia de Cocoon, su foco son las aplicaciones web, no la publicacin de informacin web Aunque ligado a plataforma Java, es independiente de la tecnologa de presentacin (soporta JSP y Velocity), de datos (Hibernate, Torque, OJB ObJectRelationalBridge , EJB de persistencia) y de servicios (EJB de sesin) MAVEN se origin en Turbine
FRWK - U2
30
Turbine
Aunque tiene dos versiones actuales (2.3.2 y 2.4), se recomienda usar la versin 2.3.2 por ser estable mientras que la 2.4 todava parece ser de experimentacin Segn su propio sitio, su mayor ventaja es que es gratuita y tiene disponible el cdigo fuente Funciona como una base para integrar varios servicios (propios o de terceros); una aplicacin debe crear servlets (actions) para invocarlos
FRWK - U2 ISC Beatriz A. Olivares Zepahua 31
Turbine
Servicios
Se implementan siguiendo el patrn de diseo GoF Singleton (slo existe una instancia viva de una clase particular) y una interface Todos los clientes comparten el mismo objeto y configuracin Pueden usar el archivo de configuracin de Turbine (xml) Para extender la funcionalidad de un servicio, basta asegurar que se implemente la interface original Hasta la versin 2.3.x, los servicios son parte de la instalacin de Turbine; a partir de la 2.4.x, son componentes de Avalon (y el sitio recomienda evitarlos)
FRWK - U2 ISC Beatriz A. Olivares Zepahua 32
Turbine
Algunos servicios:
IntakeService
Validacin de formularios web mediante el uso de beans; sera equivalente a ActionForm de Struts Se configura utilizando archivos xml
UploadService
Carga de archivos del cliente al servidor
XSTLService
Transformacin de archivos XML usando hojas de estilo extensibles
SegurityService
Usuarios y permisos dentro de Turbine; puede estar relacionado con una bd
FRWK - U2 ISC Beatriz A. Olivares Zepahua 33
Turbine
MVC con Turbine
Vista: JSP o Velocity
Validaciones de formularios con Servicio Intake
Controlador:
TurbineServlet ActionEventHandler
Manipulan cualquier captura del usuario que tenga relacin con el modelo Un elemento HTML puede tener relacionado varios Action Un mismo Action puede aplicar a varias pginas (o secciones)
FRWK - U2 ISC Beatriz A. Olivares Zepahua 34
Elementos Turbine
FRWK - U2
35
FRWK - U2
36
Ensamblado de pginas
Layout assembler: responsable de la distribucin del contenido en la pgina. Navigation assembler: responsable de un estilo de navegacin en cabecera y pie (puede ser JSP o Velocity). Screen assembler: responsable de "seccin media" de la pgina (puede ser JSP o Velocity)
FRWK - U2
37
Turbine
"Instalacin" de Turbine
Pese a ser un jar, el sitio de Turbine propone el uso de Maven para la instalacin, esto debido a que con ste es posible crear un "esqueleto" estndar de la aplicacin META = Maven Environment for Turbine Applications Maven puede utilizarse de forma independiente (lnea de comandos) o configurar un IDE (como Netbeans) para relacionarlos Al menos la primera vez debe tenerse conexin a Internet
FRWK - U2 ISC Beatriz A. Olivares Zepahua 38
Maven
Herramienta de Java para compilar, probar, empaquetar (jar, war, ear, etc.) aplicaciones. Se basa en un archivo de configuracin para decidir qu acciones debe realizar con qu elementos (pom.xml) Se obtiene la versin ms actual de http://maven.apache.org/
FRWK - U2 ISC Beatriz A. Olivares Zepahua 39
Maven (cont.)
Para instalar:
Asegurar que exista la variable de ambiente JAVA_HOME y que en el path tambin se encuentre %JAVA_HOME%\bin Desempacar el archivo (en XP puede ser en c:\Archivos de Programa\Apache Software Foundation) Crear la variable de ambiente M2_HOME apuntando al directorio donde se desempac (por ejemplo c:\Archivos de Programa\Apache Software Foundation\apache-maven-2.0.9) Crear la variable de ambiente M2 apuntando a %M2_HOME%\bin Agregar a la variable Path %M2% Abrir una sesin de consola y escribir mvn version para verificar la instalacin
FRWK - U2
40
Maven (cont.)
Para crear aplicacin con Turbine
mvn archetype:generate (Ver documento de Word)
Desde Netbeans
Abrir proyecto indicando el directorio creado por Maven
FRWK - U2
41
Turbine + Maven
Fuente: http://turbine.apache.org/meta/ide.html
FRWK - U2
42
Turbine
Por omisin, Turbine trabaja con Velocity
Cocoon (capullo)
Creado por Stefano Mazzocchi en 1998 Framework de publicacin
Genera, transforma, procesa y presenta datos; tanto la entrada como la salida manejan distintos formatos Est centrado en los datos (XML) y no en la vista (HTML) Cambia ligeramente el concepto de Modelo2
Modelo: documento XML Controlador: framework de publicacin (Cocoon) Vista: se genera a tiempo de ejecucin de forma dinmica (HTML, WML, binario para PDF, etc.)
FRWK - U2 ISC Beatriz A. Olivares Zepahua 44
Cocoon (cont.)
Cocoon 1
Servlet que usaba un procesador XSL para convertir XML a un formato HTML basado en la API para DOM; tuvo algunos problemas de arquitectura y diseo La idea era separar estilo (vista) de contenido (modelo)
Cocoon 2
Cambia api DOM por api SAX (Simple API for XML) Usa el concepto de lnea de produccin (pipeline) para describir las diferentes etapas por las que debe atravesar un documento Incorpora XSTL No est atado a ninguna plataforma, pero lo usaremos con java
FRWK - U2
45
SAX
Simple API for XML API de Java para el manejo de documentos XML
XML
eXtensible Markup Language Lenguaje extensible de marcas (etiqueta)
XSL
Extensible Stylesheet Language Lenguaje Extensible de hojas de estilo, describe cmo formatear un archivo XML para poder presentarlo
XSLT
Extensible Stylesheet Language Transformations Transformaciones XSL, describe cmo transformar un archivo XML a otro formato (XML o no)
FRWK - U2 ISC Beatriz A. Olivares Zepahua 46
Pipeline
Considera tres grandes etapas:
Generacin
Maneja la entrada de informacin y genera eventos SAX Por lo general trabaja con archivos (FileGenerator) pero puede ser cualquier fuente que pueda generar eventos SAX
Proceso y transformacin
Procesa la informacin y la transforma usando hojas de estilo (XSTL + XSL)
Serializacin
Crea la salida especfica de la informacin transformada (HTML a la salida HTTP por ejemplo)
Puede haber ms de un elemento en cada etapa (como en Struts puede invocarse a varios Action seguidos antes de generar la salida jsp) La definicin de pipelines, generadores, transformadores, etc., se encuentra en un archivo de configuracin, en XML, llamado sitemap.xmap
FRWK - U2 ISC Beatriz A. Olivares Zepahua 47
Pipeline (cont.)
SAX request SAX response
File GENERATOR
XSLT TRANSFORMER
HTML SERIALIZER
Fuente
XML
Destino
FRWK - U2
48
Framework de publicacin
Framework
Productor de contenido
XML Transformacin
FRWK - U2
49
Framework de aplicacin
1 request
<<controler>> Cocoon Servlet 3 new
ActionX
6 regresa coleccin JBs 5 proceso 7 transforma XSTL
4 new
XSP
FRWK - U2
50
Actions y XSP
Action
Se invocan dentro del pipeline para realizar algn tipo de proceso Inicializan condiciones para que el pipeline pueda trabajar, pero no pueden alterar la configuracin de ste
XSP
Extensible Server Pages Mezcla de lenguaje y contenido (xml) Semejantes a JSP, pero
Es XML estricto, no necesariamente HTML. Usa etiquetas que substituyen a HTML (por ejemplo <para> en lugar de <p>) No necesariamente usan Java Tienen asociado un transformador especfico porque son convertidos a un Generador
FRWK - U2 ISC Beatriz A. Olivares Zepahua 51
XSL
eXtensible Stylesheet Language Tres partes
XSTL
Transforma archivos XML Usa XPath para encontrar informacin dentro de un documento XML
XPath
Navega (y consulta) archivos XML
XSL-FO
Formatea archivos XML
FRWK - U2 ISC Beatriz A. Olivares Zepahua 52
XSTL
<xsl:template></xsl:template>
Atributo match
Para asociar la plantilla con un documento XML o parte de l, se iguala con una expresin XPath (una diagonal significa todo el documento)
<xsl:value-of/>
Atributo select
Para extraer el valor de un elemento XML y mostrar su contenido; se iguala con una expresin XPath
<xsl:for-each></xsl:for-each>
Atributo select
Para extraer un conjunto de elementos XML (posteriormente se mostrar su contenido); se iguala con una expresin Xpath Puede llevar un filtro [atributo comp valor_entre_apstrofes] Comp: =, !=, < , >
FRWK - U2 ISC Beatriz A. Olivares Zepahua 53
XSTL
<xsl:sort/>
Atributos select
Para ordernar un conjunto (foreach), se iguala con el atributo sobre el que se realizar la ordenacin
<xsl:if></xsl:if>
Atributo test
Para condicionar cierta parte del conjunto (foreach), se iguala con una expresin del tipo atributo comp valor
FRWK - U2
55
</servlet:connections> </servlet:context> Donde ${webroot} es la ruta fija donde se encuentra la aplicacin (ver diapositiva anterior)
FRWK - U2 ISC Beatriz A. Olivares Zepahua 61
org.apache.cocoon.reloading.config=true
FRWK - U2
62
FRWK - U2
68
Deben extender a la clase AbstractAction, que implementa la interface y mantiene relacin con las bitcoras Trabajan con un objeto especial para manejar la bitcora (log), que se puede obtener va el mtodo getLogger()
FRWK - U2 ISC Beatriz A. Olivares Zepahua 69
import edu.aplic.datos.*;
public class MiCocoonAction extends AbstractAction {
FRWK - U2 ISC Beatriz A. Olivares Zepahua 70
FRWK - U2
71
Actions en el sitemap
<map:actions>
<map:action name="nombre_en_pipeline" src="paquete_clase" />
</map:actions> <map:pipeline>
<map:match pattern=""> <map:redirect-to uri="home.html" /> </map:match> <map:match pattern=referencia_invocada_desde_web"> <map:act type=nombre_en_pipeline"> <map:generate />
FRWK - U2 ISC Beatriz A. Olivares Zepahua 72
FRWK - U2
75
FRWK - U2
76
Ejemplo Controlador JS
function main() {
var nCve = 0; var sError = ; while (true) { cocoon.sendPageAndWait("frmCapt.jx", { "error": sError}); nCve = parseInt(cocoon.request.get("txtCve")); if (nCve){ break; } else { sError = "Faltan datos"; } } cocoon.sendPage(ok.jx", { "Cve": nCve} ); }
FRWK - U2
77
FRWK - U2
78
Referencias
Struts, an open-source MVC implementation http://www.ibm.com/developerworks/library/j-struts/ JavaServer Faces (JSF) vs Struts. A brief comparison. (Oct. 04).Roland Barcia. http://websphere.sys-con.com/node/46516 Jakartas-Struts Live. (2004) Rick Hightower Art of Java Web Development. (2003) Neal Ford. Struts in Action (2002). Ted N. Husted et al. Java & XML. (2000) Cap. 9 Web Publishing Frameworks. Brett McLaughlin. http://oreilly.com/catalog/javaxml/chapter/ch09.html J2EE for Enterprise Computing. Masslight (2002). Cap. 4. http://j2ee.masslight.com/Chapter4.html Moczar, L. et al. (Sep. 2002). Transform data into Web applications with Cocoon. Javaworld. http://www.javaworld.com/javaworld/jw-09-2002/jw-0920-cocoon.html Brogden, W. et al (2002) Cocoon 2 Programming : Web Publishing with XML and Java (disponible en Bivitec, coleccin ebrary) Sparks, H. (Ago 2008). Cocoon 2.2 without tears. http://www.csparks.com/cocoon/c22without/index.xhtml Sitio Struts http://struts.apache.org Sitio Turbine http://turbine.apache.org Sitio Cocoon http://cocoon.apache.org
FRWK - U2
80