Programación Web Profesor: Ing. Juan Talavera Asistentes: Ing. Marcelo Alvarez Univ. Eduardo Rivas...

88
Programación Web Profesor: Ing. Juan Talavera Asistentes: Ing. Marcelo Alvarez Univ. Eduardo Rivas Univ. Santiago Yegros 2008 Frameworks para el Desarrollo de Aplicaciones Web

Transcript of Programación Web Profesor: Ing. Juan Talavera Asistentes: Ing. Marcelo Alvarez Univ. Eduardo Rivas...

Page 1: Programación Web Profesor: Ing. Juan Talavera Asistentes: Ing. Marcelo Alvarez Univ. Eduardo Rivas Univ. Santiago Yegros 2008 Frameworks para el Desarrollo.

Programación Web

Profesor: Ing. Juan Talavera

Asistentes: Ing. Marcelo Alvarez Univ. Eduardo Rivas Univ. Santiago Yegros

2008

Frameworks para el Desarrollo de Aplicaciones Web

Page 2: Programación Web Profesor: Ing. Juan Talavera Asistentes: Ing. Marcelo Alvarez Univ. Eduardo Rivas Univ. Santiago Yegros 2008 Frameworks para el Desarrollo.

Objetivos

Explicar lo que son los frameworks, su propósito y sus características principales.

Reconocer la importancia de la utilización de los mismos hoy en día.

Ofrecer una introducción básica a los frameworks actuales y las herramientas disponibles para los mismos.

Discutir sobre el uso conveniente de los mismos.

Page 3: Programación Web Profesor: Ing. Juan Talavera Asistentes: Ing. Marcelo Alvarez Univ. Eduardo Rivas Univ. Santiago Yegros 2008 Frameworks para el Desarrollo.

Contenido

Frameworks. Concepto. Características. Struts Spring MVC Java Server Faces Ruby on Rails ASPX.NET Otros frameworks Conclusiones

Page 4: Programación Web Profesor: Ing. Juan Talavera Asistentes: Ing. Marcelo Alvarez Univ. Eduardo Rivas Univ. Santiago Yegros 2008 Frameworks para el Desarrollo.

Concepto de Framework

En su forma más simple, un framework es un conjunto de interfaces, clases y/o componentes que cooperan entre sí de manera a resolver un tipo de problema de software específico.

Page 5: Programación Web Profesor: Ing. Juan Talavera Asistentes: Ing. Marcelo Alvarez Univ. Eduardo Rivas Univ. Santiago Yegros 2008 Frameworks para el Desarrollo.

Características

Posee múltiples clases o componentes, cada uno de los cuales proveen una abstracción de algún concepto en particular.

El framework define como sus abstracciones trabajarán juntos de manera a resolver el problema.

Sus componentes son reutilizables.

Utilización de patrones para la solución de problemas comunes.

Page 6: Programación Web Profesor: Ing. Juan Talavera Asistentes: Ing. Marcelo Alvarez Univ. Eduardo Rivas Univ. Santiago Yegros 2008 Frameworks para el Desarrollo.

Características que se encuentran en la mayoría de los frameworks actuales

Abstracción de URLs y sesiones.

Acceso a datos.

Controladores.

Autentificación y Control de Acceso.

Internacionalización.

Separación entre diseño y contenido.

Page 7: Programación Web Profesor: Ing. Juan Talavera Asistentes: Ing. Marcelo Alvarez Univ. Eduardo Rivas Univ. Santiago Yegros 2008 Frameworks para el Desarrollo.

Propósitos (1)

Facilitar el desarrollo de software.

Pasar más tiempo identificando requerimientos de SW que tratar con detalles de bajo nivel.

Proveer una estructura y una metodología de trabajo definida.

Page 8: Programación Web Profesor: Ing. Juan Talavera Asistentes: Ing. Marcelo Alvarez Univ. Eduardo Rivas Univ. Santiago Yegros 2008 Frameworks para el Desarrollo.

Propósitos (2)

Ayudar al desarrollo de software, proporcionando una estructura definida, la cual ayuda a crear aplicaciones con mayor rapidez.

Ayudar a realizar el mantenimiento del sitio gracias a la organización que se mantiene durante el desarrollo de la aplicación.

Page 9: Programación Web Profesor: Ing. Juan Talavera Asistentes: Ing. Marcelo Alvarez Univ. Eduardo Rivas Univ. Santiago Yegros 2008 Frameworks para el Desarrollo.

Tipos de Frameworks. Ejemplos:

Orientados a la interfaz de usuario: Java Server Faces.

Orientado a publicación de documentos: Cocoon.

Orientado a eventos: Struts, Tapestry, etc.

Page 10: Programación Web Profesor: Ing. Juan Talavera Asistentes: Ing. Marcelo Alvarez Univ. Eduardo Rivas Univ. Santiago Yegros 2008 Frameworks para el Desarrollo.

MVC – Model 2

Page 11: Programación Web Profesor: Ing. Juan Talavera Asistentes: Ing. Marcelo Alvarez Univ. Eduardo Rivas Univ. Santiago Yegros 2008 Frameworks para el Desarrollo.
Page 12: Programación Web Profesor: Ing. Juan Talavera Asistentes: Ing. Marcelo Alvarez Univ. Eduardo Rivas Univ. Santiago Yegros 2008 Frameworks para el Desarrollo.

Struts 1

Page 13: Programación Web Profesor: Ing. Juan Talavera Asistentes: Ing. Marcelo Alvarez Univ. Eduardo Rivas Univ. Santiago Yegros 2008 Frameworks para el Desarrollo.

Struts 1

Implementa la arquitectura del modelo 2 - patrón de diseño MVC.

Creada por Craig McClanahan y donada a la Apache Software Foundation en el 2000 (Actualmente pertenece a Apache Jakarta)

Page 14: Programación Web Profesor: Ing. Juan Talavera Asistentes: Ing. Marcelo Alvarez Univ. Eduardo Rivas Univ. Santiago Yegros 2008 Frameworks para el Desarrollo.

¿Qué proporciona Struts?

Lógica de navegación entre páginas

Binding entre java y el html

Validación de entradas

Mecanismos para el manejo y reporte de errores

Internacionalización (i18n)

Page 15: Programación Web Profesor: Ing. Juan Talavera Asistentes: Ing. Marcelo Alvarez Univ. Eduardo Rivas Univ. Santiago Yegros 2008 Frameworks para el Desarrollo.

Flujo de Control de Struts

Page 16: Programación Web Profesor: Ing. Juan Talavera Asistentes: Ing. Marcelo Alvarez Univ. Eduardo Rivas Univ. Santiago Yegros 2008 Frameworks para el Desarrollo.

Componentes Principales (1)

Actions: Posible acción a invocar. Son objetos que heredan de la clase Action donde se escribe que es lo que se hará. Por ejemplo se puede decidir invocar alguna regla de negocio y en base a su resultado mostrar la vista que corresponda.

ActionMapping: mapea las URLs a acciones (objetos). Es decir, se le da un nombre a cada Clase Action de manera que puedan ser invocadas desde el cliente como un String.

ActionServlet: El Servlet Controlador. Ejecuta acciones invoacndo al método execute() de la Clase Action.

Page 17: Programación Web Profesor: Ing. Juan Talavera Asistentes: Ing. Marcelo Alvarez Univ. Eduardo Rivas Univ. Santiago Yegros 2008 Frameworks para el Desarrollo.

Componentes Principales (2) ActionForm: JavaBean con propiedades que

corresponden a los controles de un formulario HTML. Los parámetros son mapeados a propiedades del bean.

El programador define un form bean extendiendo la clase org.apache.struts.action.ActionForm (o de forma declarativa usando org.apache.struts.action.DynaActionForm)

Hay que definir cada una de las propiedades en la clase y escribir los getters/setters correspondientes, siguiendo las reglas de JavaBeans.

Después de escribir el código del form bean, es necesario asociarlo con una o más acciones a través del fichero de configuración de Struts struts-config.xml

Page 18: Programación Web Profesor: Ing. Juan Talavera Asistentes: Ing. Marcelo Alvarez Univ. Eduardo Rivas Univ. Santiago Yegros 2008 Frameworks para el Desarrollo.

Struts-config.xml (1)

El archivo <struts-config> contiene dos elementos importantes que son usados para describir las acciones:

<form-beans> contiene la definición de los beans para cada formulario. Atributos importantes:

- name: identificador único para el bean.

- type: tipo del bean de formulario.

Page 19: Programación Web Profesor: Ing. Juan Talavera Asistentes: Ing. Marcelo Alvarez Univ. Eduardo Rivas Univ. Santiago Yegros 2008 Frameworks para el Desarrollo.

Struts-config.xml (2)

<action-mapping> contiene nuestras definiciones de acciones. Usamos un elemento <action> por cada una de las acciones que se desea definir. Cada elemento action requiere que se definan los siguientes atributos:

- path: el path a la clase action en relación al contexto de la aplicación.

- type: el nombre de la clase Action.

- name: el nombre del elemento <form-bean> asociado a la

acción.

Page 20: Programación Web Profesor: Ing. Juan Talavera Asistentes: Ing. Marcelo Alvarez Univ. Eduardo Rivas Univ. Santiago Yegros 2008 Frameworks para el Desarrollo.

Struts-config.xml - Ejemplo<form-beans>

<form-bean name="loginForm" type="com.empresa.LoginForm"/>

</form-beans>

<action-mappings> <action path="/inicio" forward="/jsp/inicio.jsp"/> <action path="/login" forward="/jsp/login.jsp"/> <action path="/slogin" type="com.empresa.LoginAction"

name="loginForm" scope="request" validate="true" input="/jsp/login.jsp">

<forward name="exito" path="/jsp/inicio.jsp"/> <forward name="falla" path="/jsp/login.jsp"/>

</action> </action-mappings>

Page 21: Programación Web Profesor: Ing. Juan Talavera Asistentes: Ing. Marcelo Alvarez Univ. Eduardo Rivas Univ. Santiago Yegros 2008 Frameworks para el Desarrollo.

Struts Tag LibrariesLa framework Struts proporciona un conjunto de 4 librerías de etiquetas, que asisten en la tarea de la creación de la vista de MVC para evitar incluir código Java en los JSPs :

Bean Tags: manejo de los beans a los que tiene acceso la página.

HTML Tags: utilizado para generar formularios HTML que interatuan con la API de Struts.

Logic Tags: permite direccionar el flujo de ejecución de la página según condiciones.

Nested Tags: permite el anidado de componentes.

Page 22: Programación Web Profesor: Ing. Juan Talavera Asistentes: Ing. Marcelo Alvarez Univ. Eduardo Rivas Univ. Santiago Yegros 2008 Frameworks para el Desarrollo.

Struts Tag Libraries - Ejemplo

<%@ taglib uri="/tags/struts-html" prefix="html" %>…<html:errors/><html:form action="/LogonSubmit" focus="username"><TABLE border="0" width="100%"><TR><TH align="right">Username:</TH><TD align="left"><html:text property="username"/></TD></TR><TR><TH align="right">Password:</TH><TD align="left"><html:password property="password"/></TD></TR><TR><TD align="right"><html:submit/></TD><TD align="left"><html:reset/></TD></TR></TABLE></html:form>…

Page 23: Programación Web Profesor: Ing. Juan Talavera Asistentes: Ing. Marcelo Alvarez Univ. Eduardo Rivas Univ. Santiago Yegros 2008 Frameworks para el Desarrollo.

Validación de Entradas

Struts provee 2 mecanismos de validación de las entradas ingresadas:

Redefiniendo el método validate() de los ActionForms

A través de lo que primero fue un plugin y luego se incorporó a la versión principal y que se denomina struts-validator.

Permite la validación tanto en el lado cliente (javascript) como el lado servidor.

Page 24: Programación Web Profesor: Ing. Juan Talavera Asistentes: Ing. Marcelo Alvarez Univ. Eduardo Rivas Univ. Santiago Yegros 2008 Frameworks para el Desarrollo.

Validación de Entradas - Ejemplo

<form-validation> <formset> <form name="FormInicio"> <field property="nombreusuario“ depends="required">

<arg0 key="forms.nombreusuario"/> </field> </form> </formset> </form-validation>

Definir el archivo de validación. Ejemplo: validation.xml

Page 25: Programación Web Profesor: Ing. Juan Talavera Asistentes: Ing. Marcelo Alvarez Univ. Eduardo Rivas Univ. Santiago Yegros 2008 Frameworks para el Desarrollo.

Manejo de Errores (1)

Se recomienda que el manejo de errores se lleve a cabo dentro del método execute() y el control se transfiera a la vista apropiada

errors.add("passphrase",new ActionError("error.passphrase.required"));

Visualización de los errores en JSP:<html:errors property=“passphrase”/>

Page 26: Programación Web Profesor: Ing. Juan Talavera Asistentes: Ing. Marcelo Alvarez Univ. Eduardo Rivas Univ. Santiago Yegros 2008 Frameworks para el Desarrollo.

Manejo de Errores (2)

Recursos de String

Todos los strings usados en mensajes en JSPs tanto de datos de aplicación como de errores pueden ser colocados en un archivo de recursos (ApplicationResources.properties)

Struts proporciona etiquetas personalizadas JSP tags para acceder a estos recursos:

<bean:message key="prompt.goodguess.heading"/>

Page 27: Programación Web Profesor: Ing. Juan Talavera Asistentes: Ing. Marcelo Alvarez Univ. Eduardo Rivas Univ. Santiago Yegros 2008 Frameworks para el Desarrollo.

Internacionalización (i18n) Struts soporta internacionalización a través de ficheros de

recursos, sus librerías de etiquetas personalizadas y Java Locales. Se pueden definir strings a visualizar y luego utilizarlos en los JSPs. Ej: ApplicationResources.properties

Otros ficheros de recursos adicionales pueden ser definidos que incluyen el idioma a usar en el nombre del fichero. Ejemplos:

ApplicationResources_es.properties

ApplicationResources_br.properties

Para cambiar el idioma preferido en IE: ToolsInternet OptionsLanguages

Los navegadores envían la cabecera HTTP Accept-Language en cada petición que indica cuál es el idioma preferido por el usuario.

Page 28: Programación Web Profesor: Ing. Juan Talavera Asistentes: Ing. Marcelo Alvarez Univ. Eduardo Rivas Univ. Santiago Yegros 2008 Frameworks para el Desarrollo.

Spring MVC

Page 29: Programación Web Profesor: Ing. Juan Talavera Asistentes: Ing. Marcelo Alvarez Univ. Eduardo Rivas Univ. Santiago Yegros 2008 Frameworks para el Desarrollo.

Spring MVC

Spring es un framework open source para desarrollar aplicaciones usando tecnología Java.

Como el alcance de este framework es muy amplio, generalmente se suele mezclar con otros frameworks quedando Spring como una capa intermedia en la que se basan las demás herramientas.

Page 30: Programación Web Profesor: Ing. Juan Talavera Asistentes: Ing. Marcelo Alvarez Univ. Eduardo Rivas Univ. Santiago Yegros 2008 Frameworks para el Desarrollo.

¿Qué permite Spring MVC? Facilidad de mantenimiento.

Separación limpia entre Controladores, Modelos y Vistas. Lo cual, a su vez, facilita el desarrollo en equipo disciplinado.

Independencia en la Vista de la aplicación.

Facilidad a la hora de testear la aplicación.

Validaciones

Facilidad de trabajar con los componentes gracias a la implementación del patrón de diseño DI "Dependency Injection"

Page 31: Programación Web Profesor: Ing. Juan Talavera Asistentes: Ing. Marcelo Alvarez Univ. Eduardo Rivas Univ. Santiago Yegros 2008 Frameworks para el Desarrollo.

Ejemplo de procesamiento de una solicitud en Spring MVC

Page 32: Programación Web Profesor: Ing. Juan Talavera Asistentes: Ing. Marcelo Alvarez Univ. Eduardo Rivas Univ. Santiago Yegros 2008 Frameworks para el Desarrollo.

Componentes Principales de Spring MVC (1)

DispatcherServlet: es la implementación del Front Controller. El cual se encarga de administrar los request.

Controlador: encapsula la lógica de navegación. Crean los componentes necesarios para manejar los request.

Vista: muestra la salida. Ej: JSP, JSTL, Velocity, FreeMarker, PDF, etc.

Page 33: Programación Web Profesor: Ing. Juan Talavera Asistentes: Ing. Marcelo Alvarez Univ. Eduardo Rivas Univ. Santiago Yegros 2008 Frameworks para el Desarrollo.

Componentes Principales de Spring MVC (2)

ModelAndView: creados por el controlador. Permiten asociar modelos a las vistas.

ViewResolver: permiten mapear nombres lógicos de vistas a una implementación de la misma.

HandlerMapping: interfaz utilizado por el DispatcherServlet para mapear los request a los respectivos controladores.

Page 34: Programación Web Profesor: Ing. Juan Talavera Asistentes: Ing. Marcelo Alvarez Univ. Eduardo Rivas Univ. Santiago Yegros 2008 Frameworks para el Desarrollo.

Spring MVC & Dependency Injection (DI)

Todos los componentes MVC son configurados en un fichero de recursos como por ej: ApplicationContext.

De este modo, todos los componentes MVC pueden ser configurados utilizando DI.

<bean id="springCheersController" class="com...web.SpringCheersController"> <property name="methodNameResolver“ ref=“springCheersMethodResolver"/> <property name="service" ref="service"/></bean>

Page 35: Programación Web Profesor: Ing. Juan Talavera Asistentes: Ing. Marcelo Alvarez Univ. Eduardo Rivas Univ. Santiago Yegros 2008 Frameworks para el Desarrollo.

Validación en Spring MVC (1)

public class CustomerValidator implements Validator {

public boolean supports(Class cls) { return (cls == Customer.class); }

public void validate(Object obj, Errors errors) { Customer customer = (Customer) obj; ValidationUtils.rejectIfEmptyOrWhitespace(errors, "name", "required", "required"); }}

Page 36: Programación Web Profesor: Ing. Juan Talavera Asistentes: Ing. Marcelo Alvarez Univ. Eduardo Rivas Univ. Santiago Yegros 2008 Frameworks para el Desarrollo.

Validación en Spring MVC (2)

<bean id="customerForm" class="com.springcheers.web.CustomerForm"> <property name="formView" value="editCustomer"/> <property name="successView" value="redirect:list.htm"/> <property name="service" ref="service"/> <property name="validator" ref="customerValidator"/></bean>

Luego se debe configurar el Controlador del CustomerForm: WEB-INF/springmvc-servlet.xml

Page 37: Programación Web Profesor: Ing. Juan Talavera Asistentes: Ing. Marcelo Alvarez Univ. Eduardo Rivas Univ. Santiago Yegros 2008 Frameworks para el Desarrollo.

Spring MVC - EjemploDefinición del Modelo

…public class Product implements Serializable {

private String description;private Double price;public void setDescription(String s) {

description = s;}public String getDescription() {

return description;}…Getters & Setters

}

Page 38: Programación Web Profesor: Ing. Juan Talavera Asistentes: Ing. Marcelo Alvarez Univ. Eduardo Rivas Univ. Santiago Yegros 2008 Frameworks para el Desarrollo.

Spring MVC - EjemploDefinición del Manager

package …import …public class ProductManager implements Serializable {

private List products;

public void setProducts(List p) {products = p;

}

public List getProducts() {return products;

}}

Page 39: Programación Web Profesor: Ing. Juan Talavera Asistentes: Ing. Marcelo Alvarez Univ. Eduardo Rivas Univ. Santiago Yegros 2008 Frameworks para el Desarrollo.

Spring MVC - EjemploDefinición del Controlador

public class SpringappController implements Controller {protected final Log logger = LogFactory.getLog(getClass());private ProductManager prodMan;public ModelAndView handleRequest(HttpServletRequest request,

HttpServletResponse response)throws ServletException, IOException {String now = (new java.util.Date()).toString();logger.info("returning hello view with " + now);Map myModel = new HashMap();myModel.put("now", now);

myModel.put("products",getProductManager().getProducts());return new ModelAndView("hello", "model", myModel);

}…

}

Page 40: Programación Web Profesor: Ing. Juan Talavera Asistentes: Ing. Marcelo Alvarez Univ. Eduardo Rivas Univ. Santiago Yegros 2008 Frameworks para el Desarrollo.

Spring MVC - EjemploDefinir el controlador y manejador que utilizará la

aplicación: springapp-servlet.xml

<bean id="springappController" class="web.SpringappController">

<property name="productManager"><ref bean="prodMan"/>

</property></bean>

<bean id=" productManager " class="bus.ProductManager"><property name="productDao" ref="productDao"/>

</bean>…

Page 41: Programación Web Profesor: Ing. Juan Talavera Asistentes: Ing. Marcelo Alvarez Univ. Eduardo Rivas Univ. Santiago Yegros 2008 Frameworks para el Desarrollo.

Spring MVC - EjemploDefinición de la Vista: hello.jsp

…<h1><fmt:message key="heading"/></h1><p><fmt:message key="greeting"/> <c:out value="${model.now}"/></p><h3>Products</h3><c:forEach items="${model.products}" var="prod">

<c:out value="${prod.description}"/> <i>$<c:out

value="${prod.price}"/></i><br><br></c:forEach>…

Page 42: Programación Web Profesor: Ing. Juan Talavera Asistentes: Ing. Marcelo Alvarez Univ. Eduardo Rivas Univ. Santiago Yegros 2008 Frameworks para el Desarrollo.

Spring MVC Vs. Struts

Spring MVC es muy flexible, ya que implementa toda su estructura mediante interfaces no como Struts que obliga a heredar de clases concretas tanto en sus Actions como en sus Forms.

Spring MVC no obliga a utilizar JSP, permite utilizar XLST, Velocity o implementar tu propio lenguaje para integrarlo en la Vista de la aplicación.

Los controllers de Spring MVC se configuran mediante IoC como los demás objetos.

No existen ActionForms, se enlaza directamente con los beans de negocio.

Page 43: Programación Web Profesor: Ing. Juan Talavera Asistentes: Ing. Marcelo Alvarez Univ. Eduardo Rivas Univ. Santiago Yegros 2008 Frameworks para el Desarrollo.

Struts 2

Page 44: Programación Web Profesor: Ing. Juan Talavera Asistentes: Ing. Marcelo Alvarez Univ. Eduardo Rivas Univ. Santiago Yegros 2008 Frameworks para el Desarrollo.

Struts 2

Apache Struts 2 fue originalmente conocido como WebWork 2.

Luego de trabajar de manera independiente por varios años, las comunidades de WebWork y Struts unen sus fuerzas para crear lo que hoy día conocemos como Struts2.

Page 45: Programación Web Profesor: Ing. Juan Talavera Asistentes: Ing. Marcelo Alvarez Univ. Eduardo Rivas Univ. Santiago Yegros 2008 Frameworks para el Desarrollo.

Algunas Mejoras en Struts 2 Soporte para Ajax.

Fácil integración con Spring & DI.

Tecnología de renderizado: JSP, Freemarker, Velocity, JasperReports, …

Los formularios son clases Java planas (POJO). No más ActionForm.

Las acciones son clases Java planas (POJO). Se puede utilizar cualquier clase como Action.

Tecnología basada en plugins. No más configuración.

Facilidad de realizar pruebas sobre las acciones

Y más…

Page 46: Programación Web Profesor: Ing. Juan Talavera Asistentes: Ing. Marcelo Alvarez Univ. Eduardo Rivas Univ. Santiago Yegros 2008 Frameworks para el Desarrollo.

Struts 2 en una Arquitectura Web

Page 47: Programación Web Profesor: Ing. Juan Talavera Asistentes: Ing. Marcelo Alvarez Univ. Eduardo Rivas Univ. Santiago Yegros 2008 Frameworks para el Desarrollo.

Arquitectura MVC de Struts 2

Page 48: Programación Web Profesor: Ing. Juan Talavera Asistentes: Ing. Marcelo Alvarez Univ. Eduardo Rivas Univ. Santiago Yegros 2008 Frameworks para el Desarrollo.

Ciclo de Vida de las Peticiones en Struts 2

1. El usuario envía una petición: Llega un Request.

2. El Request es interpretado por el DispatcherFilter y determina que Action y que conjunto de Interceptors invocar.

3. Cada Interceptor ejecuta sus acciones previas a la ejecución del método de Action a invocar: I18nInterceptor, ValidationInterceptor, etc.

4. Ejecución de la acción.

5. Se examina el resultado obtenido del Action y se determina el Result correspondiente.

6. Mediante el Result determinado se genera la vista.

7. La vista generada retorna al cliente.

Page 49: Programación Web Profesor: Ing. Juan Talavera Asistentes: Ing. Marcelo Alvarez Univ. Eduardo Rivas Univ. Santiago Yegros 2008 Frameworks para el Desarrollo.

Struts 2 - Ejemplo

http://www.appfuse.org

POJO + JPA Annotations

@Entitypublic class Person extends BaseObject { private Long id; private String firstName; private String lastName;

@Id @GeneratedValue(strategy = GenerationType.AUTO) public Long getId() { return this.id; }

@Column(name="first_name", length=50) public String getFirstName() { return this.firstName; }

@Column(name="last_name", length=50) public String getLastName() { return this.lastName; }

/* And setters */ }

Page 50: Programación Web Profesor: Ing. Juan Talavera Asistentes: Ing. Marcelo Alvarez Univ. Eduardo Rivas Univ. Santiago Yegros 2008 Frameworks para el Desarrollo.

Struts 2 - Ejemplo

http://www.appfuse.org

Action. Controlador y Modelo

public class PersonAction extends BaseAction { private GenericManager<Person, Long> personManager; private List persons;

public void setPersonManager(GenericManager<Person, Long> personManager) {

this.personManager = personManager; }

public List getPersons() { return persons;

}

public String list() { persons = personManager.getAll(); return SUCCESS;

} }

Page 51: Programación Web Profesor: Ing. Juan Talavera Asistentes: Ing. Marcelo Alvarez Univ. Eduardo Rivas Univ. Santiago Yegros 2008 Frameworks para el Desarrollo.

Struts 2 - Ejemplo

http://www.appfuse.org

Definición de la Vista: personList.jsp

<c:out value="${buttons}" escapeXml="false" />

<s:set name="persons" value="persons" scope="request"/>

<display:table name="persons" class="table" id="personList" export="true" pagesize="25">

<display:column property="id" href="editPerson.html" paramId="id" paramProperty="id" titleKey="person.id"/>

<display:column property=“firstName" titleKey="person.firstName"/>

<display:column property=“lastName " titleKey="person.lastName"/>

</display:table>

Page 52: Programación Web Profesor: Ing. Juan Talavera Asistentes: Ing. Marcelo Alvarez Univ. Eduardo Rivas Univ. Santiago Yegros 2008 Frameworks para el Desarrollo.

Struts 2 - Ejemplo

http://www.appfuse.org

Definición de la acción: struts.xml

<action name="persons" class=“...PersonAction" method="list"> <result>/WEB-INF/pages/personList.jsp</result>

</action>

Page 53: Programación Web Profesor: Ing. Juan Talavera Asistentes: Ing. Marcelo Alvarez Univ. Eduardo Rivas Univ. Santiago Yegros 2008 Frameworks para el Desarrollo.

Struts 2 - EjemploVista: personList.jsp

Page 54: Programación Web Profesor: Ing. Juan Talavera Asistentes: Ing. Marcelo Alvarez Univ. Eduardo Rivas Univ. Santiago Yegros 2008 Frameworks para el Desarrollo.

Struts 2 - Ejemplo

http://www.appfuse.org

Agregando edit() & delete() a PersonAction.java

private Person person; private Long id; …public String delete() { personManager.remove(person.getId()); saveMessage(getText("person.deleted"));

return SUCCESS; } public String edit() {

if (id != null) { person = personManager.get(id);

} else { person = new Person(); } return SUCCESS;

}

Page 55: Programación Web Profesor: Ing. Juan Talavera Asistentes: Ing. Marcelo Alvarez Univ. Eduardo Rivas Univ. Santiago Yegros 2008 Frameworks para el Desarrollo.

Struts 2 - Ejemplo

http://www.appfuse.org

Agregando el método save() a PersonAction.java

public String save() throws Exception {if (cancel != null)

return "cancel"; if (delete != null)

return delete();

boolean isNew = (person.getId() == null);person = personManager.save(person);

String key = (isNew) ? "person.added" : "person.updated"; saveMessage(getText(key)); if (!isNew)

return INPUT; else

return SUCCESS; }

Page 56: Programación Web Profesor: Ing. Juan Talavera Asistentes: Ing. Marcelo Alvarez Univ. Eduardo Rivas Univ. Santiago Yegros 2008 Frameworks para el Desarrollo.

Struts 2 - Ejemplo

http://www.appfuse.org

Definición de la acción: struts.xml

<action name="editPerson" class=“..PersonAction" method="edit"> <result>/WEB-INF/pages/personForm.jsp</result> <result name="error">/WEB-INF/pages/personList.jsp</result></action>

<action name="savePerson" class=“..PersonAction" method="save"> <result name="input">/WEB-INF/pages/personForm.jsp</result> <result name="cancel" type="redirect-action">persons</result> <result name="delete" type="redirect-action">persons</result> <result name="success" type="redirect-action">persons</result></action>

Page 57: Programación Web Profesor: Ing. Juan Talavera Asistentes: Ing. Marcelo Alvarez Univ. Eduardo Rivas Univ. Santiago Yegros 2008 Frameworks para el Desarrollo.

Struts 2 - Ejemplo

http://www.appfuse.org

Definición de la Vista: personForm.jsp

<s:form id="personForm" action="savePerson" method="post" validate="true">

<s:hidden name="person.id" value="%{person.id}"/>

<s:textfield key="person.firstName" required="true" cssClass="text medium"/>

<s:textfield key="person.lastName" required="true"

cssClass="text medium"/> …

</s:form>

Page 58: Programación Web Profesor: Ing. Juan Talavera Asistentes: Ing. Marcelo Alvarez Univ. Eduardo Rivas Univ. Santiago Yegros 2008 Frameworks para el Desarrollo.

Struts 2 - Ejemplo

http://www.appfuse.org

Vista: personForm.jsp

Page 59: Programación Web Profesor: Ing. Juan Talavera Asistentes: Ing. Marcelo Alvarez Univ. Eduardo Rivas Univ. Santiago Yegros 2008 Frameworks para el Desarrollo.

Java Server Faces (JSF)

Page 60: Programación Web Profesor: Ing. Juan Talavera Asistentes: Ing. Marcelo Alvarez Univ. Eduardo Rivas Univ. Santiago Yegros 2008 Frameworks para el Desarrollo.

Java Server Faces (JSF)

Es un framework de desarrollo basado en el patrón MVC.

Al igual que Struts, JSF pretende normalizar y estandarizar el desarrollo de aplicaciones web.

El creador de Struts (Craig R. McClanahan) también es líder de la especificación de JSF.

JSF nos ofrece un marco de trabajo que facilita el desarrollo de aplicaciones, separando las diferentes capas de una arquitectura: presentación, reglas y entidades de negocio.

Page 61: Programación Web Profesor: Ing. Juan Talavera Asistentes: Ing. Marcelo Alvarez Univ. Eduardo Rivas Univ. Santiago Yegros 2008 Frameworks para el Desarrollo.

JSF - Características

JSF trata la vista (el interfaz de usuario) de una forma algo diferente a lo que estamos acostumbrados en aplicaciones web. Trata de emular a Swing, VB o Delphi.

JSF es muy flexible. Por ejemplo nos permite crear nuestros propios componentes.

Un modelo de trabajo basado en componentes UI (user interface), definidos por medio de etiquetas y XML.

Asocia (de forma modular) cada componente gráfico con los datos.

Incluye la capa de control, definida de forma declarativa en archivos XML. Lo que implica control de eventos y errores.

Page 62: Programación Web Profesor: Ing. Juan Talavera Asistentes: Ing. Marcelo Alvarez Univ. Eduardo Rivas Univ. Santiago Yegros 2008 Frameworks para el Desarrollo.

JSF – Características (2)

Validación en cliente y en servidor. Control de mensajes y roles. Navegación. JSF proporciona un modelo de

navegación declarada, que permite enlazar en las aplicaciones una vista a otra(faces-config.xml).

Page 63: Programación Web Profesor: Ing. Juan Talavera Asistentes: Ing. Marcelo Alvarez Univ. Eduardo Rivas Univ. Santiago Yegros 2008 Frameworks para el Desarrollo.

JSF – Ejemplo

En el archivo faces-config.xml

Estando en la pagina inputname.jsp, si el resultado de ejecutar la misma es greeting pasamos a la pagina greeting.jsp

<navigationrule> <fromviewid>/pages/inputname.jsp </fromviewid> <navigationcase> <fromoutcome>greeting</fromoutcome> <toviewid>/pages/greeting.jsp</toviewid> </navigationcase></navigationrule>

Page 64: Programación Web Profesor: Ing. Juan Talavera Asistentes: Ing. Marcelo Alvarez Univ. Eduardo Rivas Univ. Santiago Yegros 2008 Frameworks para el Desarrollo.

JSF – Ejemplo (2)

Creamos luego un JSF- Manager Bean.

public class PersonBean { String personName; public String getPersonName() { return personName; } public void setPersonName(String name) { personName = name; }}

Page 65: Programación Web Profesor: Ing. Juan Talavera Asistentes: Ing. Marcelo Alvarez Univ. Eduardo Rivas Univ. Santiago Yegros 2008 Frameworks para el Desarrollo.

JSF – Ejemplo (3)

Entonces en nuestro archivo faces-config.xml, tendríamos que registrar el Bean.

<managedbean> <managedbeanname>personBean</managedbeanname> <managedbeanclass>pack.PersonBean</managedbeanclass> <managedbeanscope>request</managedbeanscope></managedbean>

Page 66: Programación Web Profesor: Ing. Juan Talavera Asistentes: Ing. Marcelo Alvarez Univ. Eduardo Rivas Univ. Santiago Yegros 2008 Frameworks para el Desarrollo.

JSF – Ejemplo (4)

Entonces creamos nuestro formulario inputname.jsp.

<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %><%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %> <f:loadBundle basename="jsfks.bundle.messages" var="msg"/><html> <head> <title>Pagina de Prueba</title> </head> <body> <f:view> <h1><h:outputText value="JSF prueba"/></h1> <h:form id="helloForm"> <h:outputText value="Escribe tu nombre"/> <h:inputText value="#{personBean.personName}" /> <h:commandButton action="greeting" value="Saludame" /> </h:form> </f:view> </body></html>

Page 67: Programación Web Profesor: Ing. Juan Talavera Asistentes: Ing. Marcelo Alvarez Univ. Eduardo Rivas Univ. Santiago Yegros 2008 Frameworks para el Desarrollo.

JSF – Ejemplo (5)

Entonces creamos nuestro formulario greeting.jsp

<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %><%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %><f:loadBundle basename="jsfks.bundle.messages" var="msg"/><html> <head>

<title>greeting page</title> </head> <body> <f:view> <h:form>

<h:outputText value="Bienvenido" />, <h:outputText value="#{personBean.personName}" /></h:form>

</f:view> </body></html>

Page 68: Programación Web Profesor: Ing. Juan Talavera Asistentes: Ing. Marcelo Alvarez Univ. Eduardo Rivas Univ. Santiago Yegros 2008 Frameworks para el Desarrollo.

Ruby on Rails

Page 69: Programación Web Profesor: Ing. Juan Talavera Asistentes: Ing. Marcelo Alvarez Univ. Eduardo Rivas Univ. Santiago Yegros 2008 Frameworks para el Desarrollo.

RoR

Ruby on Rails es un entorno de desarrollo web de código abierto que está optimizado para satisfacción de los programadores y de la productividad. Te permite escribir un buen código favoreciendo la convención antes que la configuración.

Rails está basado en estos principios de desarrollo: No te Repitas (Don’t Repeat Yourself). Convención por encima de la Configuración

(Convention Over Configuration).

Page 70: Programación Web Profesor: Ing. Juan Talavera Asistentes: Ing. Marcelo Alvarez Univ. Eduardo Rivas Univ. Santiago Yegros 2008 Frameworks para el Desarrollo.

RoR - Esquema

Page 71: Programación Web Profesor: Ing. Juan Talavera Asistentes: Ing. Marcelo Alvarez Univ. Eduardo Rivas Univ. Santiago Yegros 2008 Frameworks para el Desarrollo.

RoR - Características

Basado en la arquitectura MVC Código Limpio, compacto y legible. Brinda Abstracción de objetos Persistentes Brinda soporte para pruebas unitarias y funcionales Contiene unos generadores de código, llamados Helpers Gran integración con Ajax Dispone de Ruby Gems que permite una fácil instalación,

añadir nuevos módulos y actualización del software. Tiene soporte para varias bases de datos, como MySQL,

PostgreSQL, SQLite, Oracle, SQL Server, DB2, o Firebird.

Page 72: Programación Web Profesor: Ing. Juan Talavera Asistentes: Ing. Marcelo Alvarez Univ. Eduardo Rivas Univ. Santiago Yegros 2008 Frameworks para el Desarrollo.

RoR - Modelo

En las aplicaciones web orientadas a objetos sobre bases de datos, el Modelo consiste en las clases que representan a las tablas de la base de datos.

En Ruby on Rails, las clases del Modelo son gestionadas por ActiveRecord. Por lo general, lo único que tiene que hacer el programador es heredar de la clase ActiveRecord::Base, y el programa averiguará automáticamente qué tabla usar y qué columnas tiene (No siempre).

Page 73: Programación Web Profesor: Ing. Juan Talavera Asistentes: Ing. Marcelo Alvarez Univ. Eduardo Rivas Univ. Santiago Yegros 2008 Frameworks para el Desarrollo.

RoR – Modelo (2)

Las definiciones de las clases también detallan las relaciones entre clases con sentencias de mapeo objeto relacional.

class Persona < ActiveRecord::Base has_one :detalle has_many :telefono end

class Detalle < ActiveRecord::Base belongs_to :persona end

class Telefono < ActiveRecord::Base belongs_to :persona end

Page 74: Programación Web Profesor: Ing. Juan Talavera Asistentes: Ing. Marcelo Alvarez Univ. Eduardo Rivas Univ. Santiago Yegros 2008 Frameworks para el Desarrollo.

RoR - Vista

En MVC, Vista es la lógica de visualización, o cómo se muestran los datos de las clases del Controlador.

Con frecuencia en las aplicaciones web la vista consiste en una cantidad mínima de código incluido en HTML.

Existen en la actualidad muchas maneras de gestionar las vistas. El método que se emplea en Rails por defecto es usar Ruby Embebido (archivos .rhtml), que son básicamente fragmentos de código HTML con algo de código en Ruby, siguiendo una sintaxis similar a JSP

Page 75: Programación Web Profesor: Ing. Juan Talavera Asistentes: Ing. Marcelo Alvarez Univ. Eduardo Rivas Univ. Santiago Yegros 2008 Frameworks para el Desarrollo.

RoR - Controlador

La implementación del Controlador es manejada por el ActionPack de Rails, que contiene la clase ApplicationController.

Una aplicación Rails simplemente hereda de esta clase y define las acciones necesarias como métodos, que pueden ser invocados desde la web, por lo general en la forma http://aplicacion/ejemplo/metodo, que invoca a EjemploController#metodo, y presenta los datos usando el archivo de plantilla /app/views/ejemplo/metodo.rhtml, a no ser que el método redirija a algún otro lugar.

Page 76: Programación Web Profesor: Ing. Juan Talavera Asistentes: Ing. Marcelo Alvarez Univ. Eduardo Rivas Univ. Santiago Yegros 2008 Frameworks para el Desarrollo.

RoR - Ejemplo

Primeramente crearemos nuestro proyecto. $ rails prueba

Ahora supongamos que nuestra tabla personas tiene las siguientes columnas:

Id Nombre Apellido

Creamos un modelo Persona $ ruby script\generate model Persona Esto creara un archivo persona.rb

class Persona < ActiveRecord::Baseend

Page 77: Programación Web Profesor: Ing. Juan Talavera Asistentes: Ing. Marcelo Alvarez Univ. Eduardo Rivas Univ. Santiago Yegros 2008 Frameworks para el Desarrollo.

RoR – Ejemplo (2)

Ahora debemos crear el controlador de forma similar al modelo:

$ ruby script\generate controller Persona Esto creara un archivo persona_controller.rb

class PersonaController < ApplicationController scaffold :persona

def index render_text “Hola Mundo” endend

Page 78: Programación Web Profesor: Ing. Juan Talavera Asistentes: Ing. Marcelo Alvarez Univ. Eduardo Rivas Univ. Santiago Yegros 2008 Frameworks para el Desarrollo.

RoR – Ejemplo (3)

Ahora solo debemos levantar el servidor WeBring: $ ruby script\server

Y probar nuestra aplicación, en http://127.0.0.1:3000/persona/index

Ahora probaremos lo mas importante, con la simple línea scaffold:persona RoR no genera los siguiente:

Creación de Persona en http://127.0.0.1:3000/persona/new Modificación de Persona en http://127.0.0.1:3000/persona/edit Listado de Personas en http://127.0.0.1:3000/persona/list Eliminación de Persona en http://127.0.0.1:3000/persona/delete

Page 79: Programación Web Profesor: Ing. Juan Talavera Asistentes: Ing. Marcelo Alvarez Univ. Eduardo Rivas Univ. Santiago Yegros 2008 Frameworks para el Desarrollo.

RoR – Ejemplo (4)

Pero todo lo mostrado anteriormente se puede lograr ejecutando: $ ruby /script/generate scaffold Persona

Page 80: Programación Web Profesor: Ing. Juan Talavera Asistentes: Ing. Marcelo Alvarez Univ. Eduardo Rivas Univ. Santiago Yegros 2008 Frameworks para el Desarrollo.

ASPX.NET

Page 81: Programación Web Profesor: Ing. Juan Talavera Asistentes: Ing. Marcelo Alvarez Univ. Eduardo Rivas Univ. Santiago Yegros 2008 Frameworks para el Desarrollo.

ASP.net

ASP.NET es un framework para aplicaciones web desarrollado y comercializado por Microsoft.

ASP.NET esta construido sobre el Common Language Runtime, permitiendo a los programadores escribir código ASP.NET usando cualquier lenguaje admitido por el .NET Framework.

Page 82: Programación Web Profesor: Ing. Juan Talavera Asistentes: Ing. Marcelo Alvarez Univ. Eduardo Rivas Univ. Santiago Yegros 2008 Frameworks para el Desarrollo.

ASP.net (2)

Los formularios web están contenidos en archivos con una extensión ASPX; en jerga de programación, estos archivos típicamente contienen etiquetas HTML o XHTML estático , y también etiquetas definiendo Controles Web que se procesan del lado del servidor y Controles de Usuario donde los desarrolladores colocan todo el código estático y dinámico requerido por la pagina web.

Page 83: Programación Web Profesor: Ing. Juan Talavera Asistentes: Ing. Marcelo Alvarez Univ. Eduardo Rivas Univ. Santiago Yegros 2008 Frameworks para el Desarrollo.

ASP.net - Características

Mejor rendimiento de su predecesor. Rapidez en la programación,

mediante el uso de diversos tipos de controles.

Servicios Web, herramientas para compartir datos entre distintos sitios.

Mayor seguridad.

Page 84: Programación Web Profesor: Ing. Juan Talavera Asistentes: Ing. Marcelo Alvarez Univ. Eduardo Rivas Univ. Santiago Yegros 2008 Frameworks para el Desarrollo.

ASP.net – Ejemplo Simple

<%@ Page language="VB"%> <%@ Import Namespace="System.data.oledb" %> <script runat="server"> Sub Nombre_change(sender as object, e as EventArgs) Mensaje.text = "Buenos días " + Nombre.text End sub </script> <html><body> <font face="verdana" size=2>Esta es la página </font><br> <form runat="server"> Tu nombre: <asp:TextBox id="Nombre" OnTextChanged="Nombre_change" runat="server" autopostback="true"/> <asp:label id="Mensaje" runat="server" /> </form> </body></html>

Page 85: Programación Web Profesor: Ing. Juan Talavera Asistentes: Ing. Marcelo Alvarez Univ. Eduardo Rivas Univ. Santiago Yegros 2008 Frameworks para el Desarrollo.

Otros Frameworks

Page 86: Programación Web Profesor: Ing. Juan Talavera Asistentes: Ing. Marcelo Alvarez Univ. Eduardo Rivas Univ. Santiago Yegros 2008 Frameworks para el Desarrollo.

Otros Frameworks

Tapestry

Google Web Toolking (GWT)

EJB

RIFE

Trails

Wicket

Etc, etc, etc..

Page 87: Programación Web Profesor: Ing. Juan Talavera Asistentes: Ing. Marcelo Alvarez Univ. Eduardo Rivas Univ. Santiago Yegros 2008 Frameworks para el Desarrollo.

En Resumen…

Los frameworks permiten:

La elección de un framework depende del tipo de aplicación a ser desarrollada.

El desarrollo ágil de aplicaciones.

Diseño reutilizable.

Mantenimiento de aplicaciones.

Page 88: Programación Web Profesor: Ing. Juan Talavera Asistentes: Ing. Marcelo Alvarez Univ. Eduardo Rivas Univ. Santiago Yegros 2008 Frameworks para el Desarrollo.

Tarea 4• Volver a implementar el mismo sistema desarrollado en la Tarea 2 pero esta

vez haciendo uso exclusivo de algún framework web propuesto en clase.

Fecha de entrega: Martes 02-09-2008Integrantes: 2 personas.

Entregar en un CD conteniendo:

• Directorio IMPLEMENTACION, dentro del cual estaría la estructura de directorios de la aplicación. Y un archivo esquema.sql, con el script de creación de la base de datos.

• Documento Integrates.txt, con los nombres de los integrantes del grupo.

• Documento Indicaciones.txt, con las indicaciones necesarias para hacer las pruebas a la aplicación.

• Documento Consideraciones.pdf, donde se expliquen problemas encontrados durante la implementación, y sus soluciones, así como cualquier observación que consideren relevante en relación al trabajo y las herramientas utilizadas.

OBS 1: Al igual que la Tarea 2, utilizar el gestor de base de datos PostgreSQL.

OBS 2: Se evaluará, más que nada, la correcta utilización del framework.