Vous êtes sur la page 1sur 80

Frameworks

Unidad 2 Struts, Turbine, Cocoon

FRWK - U2

ISC Beatriz A. Olivares Zepahua

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

ISC Beatriz A. Olivares Zepahua

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

ISC Beatriz A. Olivares Zepahua

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

ISC Beatriz A. Olivares Zepahua

Modelo de Clases Struts

Fuente: Davis, M (Feb. 01). Struts, an open-source MVC implementation. IBM. http://www.ibm.com/developerworks/library/j-struts/

FRWK - U2

ISC Beatriz A. Olivares Zepahua

Proceso con Struts

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

Archivos de Configuracin para Struts


web.xml
Es el archivo de configuracin de cualquier aplicacin web sobre plataforma Java Indica cul se considera la pgina de inicio de la aplicacin (generalmente index.jsp) y el mapeo de servlets (de <form action=MiServlet> a edu.aplic.srv.MiServlet) Se agrega el mapeo a la estructura de Struts

<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

Archivos de Configuracin para Struts


struts-config.xml
Es el archivo donde se indica cmo mapear cada clase Action, ActionForm, jsp y la navegacin de un lado a otro Una seccin action por cada clase ActionX o por cada paso directo a un jsp
<action path="/miAccion type=edu.aplic.ActionX"> <forward name="success" path="/ok.jsp"/> </action> <action path="/Welcome forward="/welcomeStruts.jsp" />
FRWK - U2 ISC Beatriz A. Olivares Zepahua 9

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

ISC Beatriz A. Olivares Zepahua

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

Debe existir en struts-config.xml


11

<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

ISC Beatriz A. Olivares Zepahua

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

Dos mtodos particulares


public void reset (ActionMapping mapping,HttpServletRequest request) { }
Llena los atributos (y eventualmente los controles) con sus valores por omisin
FRWK - U2 ISC Beatriz A. Olivares Zepahua 14

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

Proceso con ActionForm y manejo de errores


API genera ActionFormX y lo llena con la informacin del request Valida datos de entrada

Captura.jsp
Pgina con <html:form>

ActionFormX.java
Procesa reglas de negocio

Errores?

ActionX.java forward vista

FRWK - U2

ISC Beatriz A. Olivares Zepahua

16

Ejemplo: login fijo


Se requiere
jsp
De captura (login.jsp) De xito (firmado.jsp)

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.

Fuente: http://j2ee.masslight.com/Chapter4.html y http://j2ee.masslight.com/Chapter5.html


FRWK - U2 ISC Beatriz A. Olivares Zepahua 18

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

Bean tags (cont.)


<bean:message key=valorEnResources arg0=valorPorOmision/>
Escribe en el objeto response el mensaje indicado en el archivo de recursos indicado por el atributo key; en caso de no encontrarlo, muestra lo que indique arg0

<bean:write name=variable property=propiedad/>


Escribe en el objeto response variable.getPropiedad() o el valor de variable si no se indica la propiedad; el framework se encarga de ubicar la variable
FRWK - U2 ISC Beatriz A. Olivares Zepahua 21

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

Existe notPresent, que es la comprobacin contraria (checar que no exista algo)


FRWK - U2 ISC Beatriz A. Olivares Zepahua 22

Logic tags (cont.)


Comparacin
equal (=), notEqual (!=), greaterThan (>), greaterEqual (>=), lessThan (<), lessEqual (<=)
Atributos a usar
value: valor con el que se realizar la comparacin name: nombre de la variable (bean) a comparar cookie: nombre de la cookie a comparar parameter: nombre del parmetro del request a comparar

<logic:equal name=nombre value=yo>


nombre.equals(yo) //bajo el supuesto de que nombre haya sido definido como String

<logic:greaterThan name=calif value=1>


calif > 1? int //bajo el supuesto de que calif haya sido definido como

<logic:notEqual parameter=txtNom value=Admor>


!((String)request.getParameter(txtNom)).equals(Admor)
FRWK - U2 ISC Beatriz A. Olivares Zepahua 23

Logic tags (cont.)


<logic:iterate>
Realiza ciclos Atributos
id: variable con el elemento actual collection/name: nombre del conjunto (arreglo) sobre el cual se realiza la iteracin type: tipo (paquete.clase) al que pertenecen los elementos del conjunto; es opcional length: lmite del ciclo; es opcional offset: inicio del ciclo; es opcional

<logic:iterate id=miVar name=datos>


for (int i=0; i<datos.length; i++){
miVar = datos[i]

<logic:iterate id=miVar name=datos offset=2 length=10>


for (int i=2; i<10; i++)
miVar = datos[i]
FRWK - U2 ISC Beatriz A. Olivares Zepahua 24

Proceso general para construir un ciclo request-response con Struts


Crear proyecto Agregar bibliotecas para base de datos (driver) Agregar manejo de base de datos (AccesoDatos.java y los JB necesarios) Crear ActionFormX
Generar atributos y mtodos get/set (o copiarlos del JB equivalente) Codificar mtodo validate (qu campos son requeridos, verificar tipos de datos, datos relacionados, etc.) Netbeans se encarga de modificar el archivo struts-config.xml para agregar el form-bean <form-bean name="ActionFormX" type=paquete.ActionFormX"/>

Crear jsp asociado al formulario


Usar etiquetas <hmtl:tag> indicando como property el equivalente a un mtodo get/set construido en el ActionFormX En el atributo action del formulario indicar ActionX.do (la clase ActionX la construimos despus)
FRWK - U2 ISC Beatriz A. Olivares Zepahua 25

Proceso general para construir un ciclo request-response con Struts (cont.)


Crear ActionX
En Netbeans, al crear la clase, indicar jsp que alimenta a la clase (input), el ActionFormX que realiza el mapeo vista-controlador, el nombre que tomar la variable dentro del jsp (attribute) y su alcance
Esto modificar el archivo struts-config.xml <action attribute="datos" input="/miJspNuevo.jsp" name="ActionFormX" path="/ActionX" scope=alcance" type=paquete.ActionX/>

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

Proceso general para construir un ciclo request-response con Struts (cont.)


Crear el o los jsp necesarios (forwards usados en el ActionX) Modificar el archivo struts-config para indicar los forwards asociados al ActionX
<action attribute > <forward name=referenciaNActionX path=/nombreJspOActionZ/> </action> Donde name toma el nombre de la n-sima referencia usada en el ActionX y path indica el jsp (o en casos especiales otro Action) al que se dirigir
FRWK - U2 ISC Beatriz A. Olivares Zepahua 27

Ejemplo: Hola Mundo con captura


Se requiere
jsp
De captura del nombre (captura.jsp) De xito (saludos.jsp)

ActionForm
Para mapear el campo de captura.jsp

Recursos (archivo properties)


Con la lista de errores

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

Ejemplo: login fijo


Se requiere
jsp
De captura (login.jsp) De xito (firmado.jsp)

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

ISC Beatriz A. Olivares Zepahua

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

Modelo: OJB, Hibernate, EJB de entidad, Torque (propia)


Tool objets: clases para transmitir informacin de una capa a otra

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

Fuente: Art of Java Web Development. (2003) Neal Ford

FRWK - U2

ISC Beatriz A. Olivares Zepahua

35

Ciclo request-response con Turbine

Fuente: Art of Java Web Development. (2003) Neal Ford

FRWK - U2

ISC Beatriz A. Olivares Zepahua

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)

Fuente: Art of Java Web Development. (2003) Neal Ford

FRWK - U2

ISC Beatriz A. Olivares Zepahua

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

ISC Beatriz A. Olivares Zepahua

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

ISC Beatriz A. Olivares Zepahua

41

Turbine + Maven

Fuente: http://turbine.apache.org/meta/ide.html

FRWK - U2

ISC Beatriz A. Olivares Zepahua

42

Turbine
Por omisin, Turbine trabaja con Velocity

Para trabajar con JSP es necesario hacer una adaptacin en la configuracin


services.JspService.default.layout = DefaultLayout

Adems, los archivos JSP deben colocarse en


<app>/templates/app/screens

Las llamadas se indican como


.../template/app/<xxx>.jsp
FRWK - U2 ISC Beatriz A. Olivares Zepahua 43

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

ISC Beatriz A. Olivares Zepahua

45

Glosario previo Cocoon


DOM
Document Objet Model Representacin jerrquica de un documento HTML

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

XML HTML WML

FRWK - U2

ISC Beatriz A. Olivares Zepahua

48

Framework de publicacin
Framework

Productor de contenido
XML Transformacin

FRWK - U2

ISC Beatriz A. Olivares Zepahua

49

Framework de aplicacin
1 request
<<controler>> Cocoon Servlet 3 new

ActionX
6 regresa coleccin JBs 5 proceso 7 transforma XSTL

2 lee 8 response 7 transforma sitemap

4 new

XSP

FRWK - U2

ISC Beatriz A. Olivares Zepahua

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: =, !=, &lt; , &gt;
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

<xsl:choose> <xsl:when></xsl:when><xsl:otherwise></xsl:otherwise> </xsl:choose>


when lleva atributo test Dos o ms condiciones
FRWK - U2 ISC Beatriz A. Olivares Zepahua 54

Generar aplicacin Cocoon


Crear directorio de trabajo En lnea de comando
mvn archetype:generate -DarchetypeCatalog=http://cocoon.apache.org

Aparece una serie de descargas y pregunta


Choose archetype: 1: http://cocoon.apache.org -> cocoon-22-archetype-block-plain (Creates an empty Cocoon block; useful if you want to add another block to a Cocoon application) 2: http://cocoon.apache.org -> cocoon-22-archetype-block (Creates a Cocoon block containing some small samples) 3: http://cocoon.apache.org -> cocoon-22-archetype-webapp (Creates a web application configured to host Cocoon blocks. Just add the block dependencies) Choose a number: (1/2/3):

Elegir 3 (aplicacin web para rellenar)

FRWK - U2

ISC Beatriz A. Olivares Zepahua

55

Generar aplicacin Cocoon


Realiza dos descargas ms Pregunta los datos de la aplicacin
Define value for groupId: : edu.itorizaba.ejemplosC2 Define value for artifactId: : holaC2 Define value for version: 1.0-SNAPSHOT: : 1 Define value for package: edu.itorizaba.ejemplosC2: : edu.itorizaba.ejemplosC2

Termina la creacin del arquetipo (esquema de directorios)


FRWK - U2 ISC Beatriz A. Olivares Zepahua 56

Generar aplicacin Cocoon


Genera el siguiente esquema de directorios
+ holaC2 pom.xml +src +main +resources +webapp +WEB_INF applicationContext.xml log4j.xml web.xml
FRWK - U2 ISC Beatriz A. Olivares Zepahua 57

Generar aplicacin Cocoon


Editar pom.xml para generar referencias (al final)
<dependencies> <dependency> <groupId>org.apache.cocoon</groupId> <artifactId>cocoon-core</artifactId> <version>2.2.0-RC2</version> </dependency> <dependency> <groupId>org.apache.cocoon</groupId> <artifactId>cocoon-servlet-service-components</artifactId> <version>1.0.0-RC1</version> </dependency> </dependencies>
FRWK - U2 ISC Beatriz A. Olivares Zepahua 58

Generar aplicacin Cocoon


Editar applicationContext.xml para que reconozca el espacio de nombres de los servlets y el inicio de stos
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:util="http://www.springframework.org/schema/util" xmlns:configurator="http://cocoon.apache.org/schema/configurator" xmlns:servlet="http://cocoon.apache.org/schema/servlet" xmlns:avalon="http://cocoon.apache.org/schema/avalon" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.0.xsd http://cocoon.apache.org/schema/configurator http://cocoon.apache.org/schema/configurator/cocoon-configurator-1.0.xsd http://cocoon.apache.org/schema/avalon http://cocoon.apache.org/schema/avalon/cocoon-avalon-1.0.xsd http://cocoon.apache.org/schema/servlet http://cocoon.apache.org/schema/servlet/cocoon-servlet-1.0.xsd">
FRWK - U2 ISC Beatriz A. Olivares Zepahua 59

Generar aplicacin Cocoon


<avalon:bridge/>

<!-- Bean para mi ejemplo -->


<bean id=" edu.itorizaba.ejemplosC2.holaC2" class= "org.apache.cocoon.sitemap.SitemapServlet"> <servlet:context mount-path="" context-path="file:///C:/Documents and Settings/Betty/.netbeans/6.0/apachetomcat-6.0.14_base/webapps/holaC21.0.0"/> </bean>
FRWK - U2 ISC Beatriz A. Olivares Zepahua 60

Generar aplicacin Cocoon


Si se van a usar formularios, tambin hay que agregar a applicationContext.xml
<!-- Para manejo de formularios--> <servlet:context mount-path="" context-path= "file://${webroot}"> <servlet:connections>
<entry key="ajax" value-ref="org.apache.cocoon.ajax.impl.servlet /> <entry key="forms" value-ref="org.apache.cocoon.forms.impl.servlet"/> <entry key="style-default" value-ref="org.apache.cocoon.samples.style.default.servlet"/>

</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

Generar aplicacin Cocoon


Crear subdirectorio cocoon/properties dentro de WEB_INF Ah crear el archivo cocoon.properties con el siguiente contenido
org.apache.cocoon.reloading=true org.apache.cocoon.reloading.sitemap=true org.apache.cocoon.reload-delay.sitemap =5000

org.apache.cocoon.reloading.config=true

FRWK - U2

ISC Beatriz A. Olivares Zepahua

62

Generar aplicacin Cocoon


Crear subdirectorio cocoon/spring dentro de WEB_INF y copiar el archivo core.xml Generar los directorios documents, css, stylesheet dentro del directorio webapp Copiar a webapp\documents el archivo datos.xml del ejercicio anterior ELIMINANDO la lnea de referencia a la hoja de estilos Copiar a webapp\stylesheets el archivo consultas.xsl del ejercicio anterior
FRWK - U2 ISC Beatriz A. Olivares Zepahua 63

Generar aplicacin Cocoon


Crear archivo index.html en webapp <html> <head> <title>Hola Mundo con Cocoon 2.2</title> </head> <body> <h3>Hola mundo</h3> <a href="ej1xsl">Ver ejemplo de uso xsl</a> </body> </html>
FRWK - U2 ISC Beatriz A. Olivares Zepahua 64

Generar aplicacin Cocoon


Crear archivo sitemap.xmap en webapp
<?xml version="1.0" encoding="UTF-8"?> <map:sitemap xmlns:map="http://apache.org/cocoon/sitemap/1.0"> <map:components> <map:generators default="file"/> <map:transformers default="xslt"/> <map:serializers default="html"/> </map:components> <map:pipelines> <map:pipeline> <map:match pattern=""> <map:redirect-to uri="index.html"/> </map:match> <map:match pattern="/"> <map:redirect-to uri="index.html"/> </map:match>
FRWK - U2 ISC Beatriz A. Olivares Zepahua 65

Generar aplicacin Cocoon


<map:match pattern="ej1xsl"> <map:generate type="file" src="documents/datos.xml"/> <map:transform type="xslt" src="stylesheets/consultas.xsl"/> <map:serialize type="html"/> </map:match> <map:match pattern="**.html"> <map:read mime-type="text/html" src="{1}.html"/> </map:match> <map:match pattern="*/**"> <map:mount check-reload="yes" src="{1}/" uri-prefix="{1}"/> </map:match> </map:pipeline> </map:pipelines> </map:sitemap>
FRWK - U2 ISC Beatriz A. Olivares Zepahua 66

Generar aplicacin Cocoon


Compilar la aplicacin
Pasar al directorio de la aplicacin en consola MSDOS En lnea de comandos mvn clean install Realizar una serie de descargas y generar un directorio target, que contiene el war y la aplicacin descompactada Copiar la aplicacin descompactada a tomcat/webapps (direccin indicada en applicationContext.xml) Desde Netbeans, reiniciar Tomcat (servicios) y visualizar la aplicacin
FRWK - U2 ISC Beatriz A. Olivares Zepahua 67

Cocoon con Java - Action


Actions
Cdigo necesario para inicializar la ejecucin del pipeline, por ejemplo obtener los datos que formarn el XML Se ejecutan antes del pipeline Deben aparecer en el sitemap (<map:action/>) dentro de un pipeline y como componente (<map:components> <map:actions/> </map:components>) Se basan en la interface Action de Cocoon que define el mtodo act() que regresa java.util.Map, mismo que sirve para que el pipeline substituya informacin tomndola de ah; si el pipeline no espera parmetros, el mtodo debera regresar un Hashmap vaco y null en caso de errores

FRWK - U2

ISC Beatriz A. Olivares Zepahua

68

Cocoon con Java Action (cont.)


Generalmente se usa en combinacin con XSP (desafortunadamente desaparecieron sin aviso a partir de la versin 2.1 de Cocoon)
El procesamiento de Action sigue vigente, pero utiliza un tipo distinto de Request respecto a FlowControl, por lo que no resulta simple ni la obtencin de session ni el paso de atributos va Request o Session

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

Cocoon con Java Action (cont.)


package edu.aplic.actions; import java.util.HashMap; import java.util.Map; import org.apache.avalon.framework.parameters.Parameters; import org.apache.cocoon.acting.AbstractAction; import org.apache.cocoon.environment.ObjectModelHelper; import org.apache.cocoon.environment.Redirector; import org.apache.cocoon.environment.Request; import org.apache.cocoon.environment.SourceResolver;

import edu.aplic.datos.*;
public class MiCocoonAction extends AbstractAction {
FRWK - U2 ISC Beatriz A. Olivares Zepahua 70

Cocoon con Java Action (cont.)


public Map act(Redirector redirector, SourceResolver resolver, Map objectModel, String source, Parameters par) throws java.lang.Exception { Request request = ObjectModelHelper.getRequest(objectModel);

// proceso de obtencin de datos a partir de JB


//paso de datos a atributos del request request.setAttribute(atributo1", objeto1); request.setAttribute(atributo2", objeto2); return EMPTY_MAP; // no va a substituir, el XSP tomar los atributos del request

FRWK - U2

ISC Beatriz A. Olivares Zepahua

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

Cocoon con pginas dinmicas


jx
JXTemplate Generator procesador de plantillas de pginas que permite incrustar datos de objetos Java o JavaScript que pasan de Cocoon Flowscript hacia un pipeline Representaran la vista dentro de MVC Utilizan las variables cocoon.request.get(nombreCampo) y cocoon.session.get(variable_sesin) Utilizan etiquetas y UEL semejante a JSTL Para el control, se requiere JavaScript que corre del lado del servidor y que puede invocar JB
FRWK - U2 ISC Beatriz A. Olivares Zepahua 73

Para trabajar con pginas dinmicas


Dentro de pom.xml deben indicarse las dependencias con los paquetes FlowControl y Template (jx) <dependency> <groupId>org.apache.cocoon</groupId> <artifactId>cocoon-flowscript-impl</artifactId> <version>1.0.0</version> </dependency> <dependency> <groupId>org.apache.cocoon</groupId> <artifactId>cocoon-template-impl</artifactId> <version>1.1.0</version> </dependency>
FRWK - U2 ISC Beatriz A. Olivares Zepahua 74

Para trabajar con pginas dinmicas


Dentro de sitemap.xmap debe agregarse la referencia a JS, la identificacin de la llamada y el flujo de control <map:components> </map:components> <map:flow language="javascript"> <map:script src="flow/captUsu.js"/> </map:flow> <map:pipelines> <map:pipeline> <map:match pattern="frmCapt"> <map:call function="main"/> </map:match> <map:match pattern="*.jx" internal-only="true"> <map:generate type="jx" src="documents/{1}.jx"/> <map:serialize type="xhtml"/> </map:match> <map:match pattern="*.kont"> <map:call continuation="{1}"/> </map:match>

FRWK - U2

ISC Beatriz A. Olivares Zepahua

75

Para trabajar con pginas dinmicas


Dentro de webapp/document se guardan las pginas dinmicas Dentro de webapp/flow se guardan los archivos JS que harn las veces del Controlador

FRWK - U2

ISC Beatriz A. Olivares Zepahua

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

ISC Beatriz A. Olivares Zepahua

77

Ejemplo pgina dinmica


<?xml version="1.0"?> <html xmlns:jx="http://apache.org/cocoon/templates/jx/1.0"> <head> <title></title> </head> <body> ${error}<br/> <form method="post" action="${cocoon.continuation.id}.kont"> Clave: <input type="text" name="txtCve"/> <br/> <input type="submit" value="Enviar"/> </form> </body> </html>

FRWK - U2

ISC Beatriz A. Olivares Zepahua

78

Ejemplo pgina dinmica (ok.jx)


<?xml version="1.0"?> <html xmlns:jx="http://apache.org/cocoon/templates/jx/ 1.0"> <head> <title></title> </head> <body> Capturado = ${Cve}<br/> </body> </html>
FRWK - U2 ISC Beatriz A. Olivares Zepahua 79

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

ISC Beatriz A. Olivares Zepahua

80

Vous aimerez peut-être aussi