• Like
Curso de Desarrollo Web
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

Curso de Desarrollo Web

  • 7,778 views
Published

Material del curso de web develop en ITSUR

Material del curso de web develop en ITSUR

Published in Technology , News & Politics
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
7,778
On SlideShare
0
From Embeds
0
Number of Embeds
6

Actions

Shares
Downloads
413
Comments
0
Likes
1

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Struts + Spring + Hibernate MVC + Servicios
  • 2. Modelo General Acceso a Datos: Hibernate Servicios: DAO’s Control: Struts Action’s Vista: Struts + JSP Factory: Spring
  • 3. Configuración JLPP Configuración del Proyecto
  • 4. Configuración de Proyecto
    • Desde CVS
      • Pregunte a su administrador de CVS
    • Desde Cero
      • Siguiente diapositiva
    Configuración del Proyecto
  • 5. Creación del Proyecto (Librerias)
    • Crear un nuevo proyecto en Eclipse
    • Agregar las librerías requeridas al directorio WebContent/WEB-INF/lib.
      • Hibernate
      • Struts
      • Spring
      • TLD’s comunes (consultar administrador)
    Configuración del Proyecto
  • 6. Creación del Proyecto (Librerias)
    • Recargar el proyecto
    • Deberían aparecer los WebLibraries en el mismo.
    Configuración del Proyecto
  • 7. Creación del Proyecto (Source)
    • Agregar el sourcefolder WEB-INF/classes al proyecto.
      • Ver procedimiento .
    Configuración del Proyecto
  • 8. Creación del Proyecto (Spring)
    • En la cartepa WEB-INF/classes crear un archivo applicationContext.xml
    Configuración del Proyecto
  • 9. applicationContext.xml <?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?> <beans xmlns=&quot;http://www.springframework.org/schema/beans&quot; xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot; xmlns:aop=&quot;http://www.springframework.org/schema/aop&quot; xmlns:tx=&quot;http://www.springframework.org/schema/tx&quot; xsi:schemaLocation=&quot; http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd&quot;> </beans> Configuración del Proyecto
  • 10. Creación del Proyecto (Spring)
    • Abrir el descriptor de aplicación del Proyecto y agregar el código de Spring.
    <listener> <listener-class> edu.conalep.moroleon.common.spring.Decorator </listener-class> </listener> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </context-param> Configuración del Proyecto
  • 11. Creación del Proyecto (Spring)
    • La clase Decorator puede ser reemplazada por la clase original de Spring, pero Decorator lanza un mensaje de error en caso de que este ocurra.
    Configuración del Proyecto
  • 12. Creación del Proyecto (Hibernate)
    • Crear el paquete mapping donde se colocaran los mapeos de Hibernate.
    • Crear el archivo hibernate.properties en la carpeta src.
    • Crear los archivos de mapeo de Hibernate necesarios.
    Configuración del Proyecto
  • 13. hibernate.propeties hibernate.connection.driver_class=driver_jdbc hibernate.connection.url=url_odbc hibernate.connection.username=usuario_base_de_datos hibernate.connection.password=contraseña hibernate.dialect=dialecto_hibernate hibernate.show_sql=true Configuración del Proyecto
  • 14. Creación del Proyecto (Hibernate + Spring)
    • En la carpeta WEB-INF/classes crear el archivo hibernate.xml .
    • En el archivo applicationContext.xml incluir el archivo hibernate.xml
    <import resource=“hibernate.xml” /> Configuración del Proyecto
  • 15. hibernate.xml (parte 1) <bean class=&quot;org.springframework.beans.factory.config.PropertyPlaceholderConfigurer&quot;> <property name=&quot;locations&quot;> <value>classpath:hibernate.properties</value> </property> </bean> <bean id=&quot;ds&quot; class=&quot;org.apache.commons.dbcp.BasicDataSource&quot; destroy-method=&quot;close&quot;> <property name=&quot;driverClassName&quot; value=&quot;${hibernate.connection.driver_class}&quot; /> <property name=&quot;url&quot; value=&quot;${hibernate.connection.url}&quot; /> <property name=&quot;username&quot; value=&quot;${hibernate.connection.username}&quot; /> <property name=&quot;password&quot; value=&quot;${hibernate.connection.password}&quot; /> </bean> Configuración del Proyecto
  • 16. hibernate.xml (parte 2) <bean id=&quot;sf&quot; class=&quot;org.springframework.orm.hibernate3.LocalSessionFactoryBean&quot;> <property name=&quot;dataSource&quot; ref=&quot;ds&quot; /> <property name=&quot;mappingResources&quot;> <list> <value>xml’s de mapeo</value> </list> </property> <property name=&quot;hibernateProperties&quot;> <value> hibernate.dialect=dialecto_hibernate hibernate.show_sql=true </value> </property> </bean> Configuración del Proyecto
  • 17. Creación del proyecto (Struts)
    • En la carpeta WEB-INF/classes crear un archivo struts.xml
    <?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?> <!DOCTYPE struts PUBLIC &quot;-//Apache Software Foundation//DTD Struts Configuration 2.0//EN&quot; &quot;http://struts.apache.org/dtds/struts-2.0.dtd&quot;> <struts> <constant name=&quot;struts.objectFactory&quot; value=&quot;spring&quot; /> </struts> Configuración del Proyecto
  • 18. Creación del proyecto (Struts)
    • En el descriptor de aplicación agregar el filter de Struts.
    <filter> <filter-name>struts2</filter-name> <filter-class> org.apache.struts2.dispatcher.FilterDispatcher </filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> Configuración del Proyecto
  • 19. Prueba Inicial
    • Arrancar el contexto para revisar si este esta funcionando de manera adecuada.
    • La configuración del proyecto esta entonces completa.
    Configuración del Proyecto
  • 20. Los Mapeos Hibernate JLPP Acceso a Datos: Hibernate
  • 21. Consideraciones
    • Los mapeos deberian estar en su propio paquete llamado mapping.
    • El modelo general de mapeo:
    <?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?> <!DOCTYPE hibernate-mapping PUBLIC &quot;-//Hibernate/Hibernate Mapping DTD//EN&quot; &quot;http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd&quot;> <hibernate-mapping package=&quot;edu.conalep.moroleon.opd.mapping&quot;> </hibernate-mapping> Acceso a Datos: Hibernate
  • 22. Clases
    • Los mapeos hibernate se crean a partir de clases.
    • Estas clases se definen como elementos class dentro del mapeo.
    • Toda clase debe tener un id.
    • Las clases pueden tener varias propiedades.
    Acceso a Datos: Hibernate
  • 23. Mapeo Básico de Clase <class name=“Clase” table=“tabla”> <id name=“id_de_clase” column=“id_de_tabla” type=“int|long”> <generator class=“increment” /> </id> <!-- El atributo type puede ser float, double, date, int, long o string --> <property name=“propiedad” column=“columna” type=“int” /> <!-- Las propiedades string pueden llevar una longitud --> <property name=“propiedad2” column=“columna2” type=“string” length=“12” /> <!-- Puede marcarse alguna propiedad como propiedad unica --> <property name=“propiedad3” column=“columna3” type=“int” unique=“true” /> </class> Acceso a Datos: Hibernate
  • 24. Mapeo de relaciones Uno a Varios <class name=“Padre” table=“padre”> <id name=“id” type=“long” column=“id_padre”> <generator class=“increment” /> </id> <set name=“hijos”> <key column=“id_padre” /> <one-to-many class=“Hijo” /> </set> </class> <class name=“Hijo” table=“hijo”> <id name=“id” type=“long” column=“id_padre”> <generator class=“increment” /> </id> <many-to-one name=“padre” column=“id_padre” class=“Padre” /> </class> Acceso a Datos: Hibernate
  • 25. Mapeo de relaciones Uno a Uno <class name=“Padre” table=“padre”> <id name=“id” type=“long” column=“id_padre”> <generator class=“increment” /> </id> <one-to-one name=“hijo” class=“Hijo” /> </class> <class name=“Hijo” table=“hijo”> <id name=“id” type=“long” column=“id_padre”> <generator class=“foreign”> <param name=“property”>padre</param> </generator> </id> <one-to-one name=“padre” class=“Padre” /> </class> Acceso a Datos: Hibernate
  • 26. Mapeo de relaciones Varios a Varios <class name=“Libro” table=“libro”> <id name=“id” type=“long” column=“id_libro”> <generator class=“increment” /> </id> <set name=“autores” table=“libro_autor”> <key column=“id_libro” /> <many-to-many class=“Autor” /> </set> </class> <class name=“Autor” table=“autor”> <id name=“id” type=“long” column=“id_autor”> <generator class=“increment” /> </id> <set name=“libros” table=“libro_autor” inverse=“true”> <key column=“id_autor” /> <many-to-many class=“Libro” /> </set> < /class> Acceso a Datos: Hibernate
  • 27. Mapeo de Herencia <class name=“Padre” table=“padre”> <id name=“id” type=“long” column=“id_padre”> <generator class=“increment” /> </id> <joined-subclass name=“Hijo1” table=“hijo1”> <key column=“id_hijo1” /> <property … /> </joined-subclass> <joined-subclass name=“Hijo2” table=“hijo2”> <key column=“id_hijo2” /> </joined-subclass> </class> Acceso a Datos: Hibernate
  • 28. Generación de Base de Datos y POJO’s
    • Si el proyecto incluye un archivo build.xml o build-hibernate.xml puede utilizarse el target export-ddl para crear la base de datos y gen-java para crear los POJO’S.
    • Por seguridad los POJO’s quedan en otra carpeta con el nombre hibernate.
    Acceso a Datos: Hibernate
  • 29. Servicios JLPP Servicios: DAO’s
  • 30. Consideraciones
    • Los servicios se localizan en un paquete service o bien en paquetes services de cada paquete de modulo.
    • Son clases JAVA que implementan las funcionalidades necesarias para abstraer Hibernate de las capas superiores.
    Servicios: DAO’s
  • 31. Modelo Básico de Servicio
    • Un servicio es una interfaz que debería implementar métodos para:
      • Agregar datos
      • Editar datos
      • Eliminar datos
      • Recuperar datos
      • Recuperar un dato unico
    Servicios: DAO’s
  • 32. Interfaz Básica de Servicio Servicios: DAO’s public interface BasicDao { public boolean agregar(Object o); public boolean editar(Object o); public boolean borrar(Object o); //Buscar duplicados antes de agregar public boolean hayRepetido(Object o); //Buscar dependientes antes de borrar public boolean hayDependiente(Object o); public List cargar(); public List cargarUno(Serializable id); public List cargarCondicion(String prop, Object val); //Seter y Getter del SessionFactory de Hibernate public void setSessionFactory(SessionFactry sf); public SessionFactory getSessionFactory(); }
  • 33. Implementación
    • Los DAO’s pueden implementarse en base a código puro de Hibernate o bien utilizando HibernateTemplate, una clase de Spring.
    • Cuando una clase requiera determinadas funciones extra estas pueden agregarse en un Dao heredado.
    Servicios: DAO’s
  • 34. Herencia Sugerida Servicios: DAO’s BasicDao GenericDao SpecialDao SpecificDao1 SpecificDao2 Métodos extra y operaciones especializadas, como cargarLibrosDeAutor o un eliminar diferente podrían estar aqui Operaciones Triviales colocadas aquí
  • 35. Struts JLPP Control: Struts Action’s Vista: Struts + JSP
  • 36. Consideraciones
    • Los actions deberían estar en el paquete action o en el paquete action de cada paquete de modulo.
    • Los JSP’s que usan struts deberían estar organizados en paquetes que representen los modulos y los casos de uso.
    Control: Struts Action’s Vista: Struts + JSP
  • 37. Struts + DAO’s
    • Los Action de Struts y las JSP van a seguir funcionando igual, salvo que las operaciones con objetos Hibernate se van a realizar por medio de DAO’s.
    • Cada action debe agregar un geter y seter para un DAO interno que realice las operaciones.
    Control: Struts Action’s Vista: Struts + JSP
  • 38. Cambios al struts.xml
    • El atributo class de cada Action cargado y configurado por Spring deberá de corresponder con el nombre del bean que lo crea.
    Control: Struts Action’s Vista: Struts + JSP <action name=“nombre” class=“el_bean”> </action> <bean id=“el_bean” />
  • 39. Spring JLPP Factory: Spring
  • 40. Consideraciones
    • Traten de poner nombres significativos a los beans.
    • Si son muchos beans utilizar archivos separados y la etiqueta import.
    Factory: Spring
  • 41. Descripción General
    • Spring se encarga de instanciar objetos y configurarlos en tiempo de ejecución.
    • Crea objetos como el SessionFactory (o Hfactory o Singleton) y los hace accesibles de una manera sencilla.
    Factory: Spring
  • 42. Ejemplo de Spring Factory: Spring <bean name=“un_dao” class=“clase_de_dao”> <!-- Le configura el SessionFactory al dao --> <property name=“sessionFactory” ref=“sf” /> </bean> <!– Cada vez que se requiera el action crea una nueva instancia --> <bean name=“action_dao” class=“clase_action” scope=“prototype”> <!-- Y establece el dao para el action --> <property name=“dao” ref=“un_dao” /> </bean>
  • 43. Implicaciones
    • Solamente declarando geters y seters en las clases y registrando los beans con spring podemos usarlos con la certeza de que estarán completamente configurados.
    Factory: Spring