Struts + Spring + Hibernate MVC + Servicios
Modelo General Acceso a Datos: Hibernate Servicios: DAO’s Control: Struts Action’s Vista: Struts + JSP Factory: Spring
Configuración JLPP Configuración del Proyecto
Configuración de Proyecto <ul><li>Desde CVS </li></ul><ul><ul><li>Pregunte a su administrador de CVS </li></ul></ul><ul><l...
Creación del Proyecto (Librerias) <ul><li>Crear un nuevo proyecto en Eclipse </li></ul><ul><li>Agregar las  librerías requ...
Creación del Proyecto (Librerias) <ul><li>Recargar el proyecto </li></ul><ul><li>Deberían aparecer los WebLibraries en el ...
Creación del Proyecto (Source) <ul><li>Agregar el sourcefolder WEB-INF/classes al proyecto. </li></ul><ul><ul><li>Ver proc...
Creación del Proyecto (Spring) <ul><li>En la cartepa WEB-INF/classes crear un archivo applicationContext.xml </li></ul>Con...
applicationContext.xml <?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?> <beans xmlns=&quot;http://www.springfram...
Creación del Proyecto (Spring) <ul><li>Abrir el descriptor de aplicación del Proyecto y agregar el código de Spring. </li>...
Creación del Proyecto (Spring) <ul><li>La clase Decorator puede ser reemplazada por la clase original de Spring, pero Deco...
Creación del Proyecto (Hibernate) <ul><li>Crear el paquete mapping donde se colocaran los mapeos de Hibernate. </li></ul><...
hibernate.propeties hibernate.connection.driver_class=driver_jdbc hibernate.connection.url=url_odbc hibernate.connection.u...
Creación del Proyecto (Hibernate + Spring) <ul><li>En la carpeta WEB-INF/classes crear el archivo  hibernate.xml . </li></...
hibernate.xml (parte 1) <bean class=&quot;org.springframework.beans.factory.config.PropertyPlaceholderConfigurer&quot;> <p...
hibernate.xml (parte 2) <bean id=&quot;sf&quot; class=&quot;org.springframework.orm.hibernate3.LocalSessionFactoryBean&quo...
Creación del proyecto (Struts) <ul><li>En la carpeta WEB-INF/classes crear un archivo struts.xml </li></ul><?xml version=&...
Creación del proyecto (Struts) <ul><li>En el descriptor de aplicación agregar el filter de Struts. </li></ul><filter> <fil...
Prueba Inicial <ul><li>Arrancar el contexto para revisar si este esta funcionando de manera adecuada. </li></ul><ul><li>La...
Los Mapeos Hibernate JLPP Acceso a Datos: Hibernate
Consideraciones <ul><li>Los mapeos deberian estar en su propio paquete llamado mapping. </li></ul><ul><li>El modelo genera...
Clases <ul><li>Los mapeos hibernate se crean a partir de clases. </li></ul><ul><li>Estas clases se definen como elementos ...
Mapeo Básico de Clase <class name=“Clase” table=“tabla”> <id name=“id_de_clase” column=“id_de_tabla” type=“int|long”> <gen...
Mapeo de relaciones Uno a Varios <class name=“Padre” table=“padre”> <id name=“id” type=“long” column=“id_padre”> <generato...
Mapeo de relaciones Uno a Uno <class name=“Padre” table=“padre”> <id name=“id” type=“long” column=“id_padre”> <generator c...
Mapeo de relaciones Varios a Varios <class name=“Libro” table=“libro”> <id name=“id” type=“long” column=“id_libro”> <gener...
Mapeo de Herencia <class name=“Padre” table=“padre”> <id name=“id” type=“long” column=“id_padre”> <generator class=“increm...
Generación de Base de Datos y POJO’s <ul><li>Si el proyecto incluye un archivo build.xml o build-hibernate.xml puede utili...
Servicios JLPP Servicios: DAO’s
Consideraciones <ul><li>Los servicios se localizan en un paquete service o bien en paquetes services de cada paquete de mo...
Modelo Básico de Servicio <ul><li>Un servicio es una interfaz que debería implementar métodos para: </li></ul><ul><ul><li>...
Interfaz Básica de Servicio Servicios: DAO’s public interface BasicDao { public boolean agregar(Object o); public boolean ...
Implementación <ul><li>Los DAO’s pueden implementarse en base a código puro de Hibernate o bien utilizando HibernateTempla...
Herencia Sugerida Servicios: DAO’s BasicDao GenericDao SpecialDao SpecificDao1 SpecificDao2 Métodos extra y operaciones es...
Struts JLPP Control: Struts Action’s Vista: Struts + JSP
Consideraciones <ul><li>Los actions deberían estar en el paquete action o en el paquete action de cada paquete de modulo. ...
Struts + DAO’s <ul><li>Los Action de Struts y las JSP van a seguir funcionando igual, salvo que las operaciones con objeto...
Cambios al struts.xml <ul><li>El atributo class de cada Action cargado y configurado por Spring deberá de corresponder con...
Spring JLPP Factory: Spring
Consideraciones <ul><li>Traten de poner nombres significativos a los beans. </li></ul><ul><li>Si son muchos beans utilizar...
Descripción General <ul><li>Spring se encarga de instanciar objetos y configurarlos en tiempo de ejecución. </li></ul><ul>...
Ejemplo de Spring Factory: Spring <bean name=“un_dao” class=“clase_de_dao”> <!-- Le configura el SessionFactory al dao -->...
Implicaciones <ul><li>Solamente declarando geters y seters en las clases y registrando los beans con spring podemos usarlo...
Upcoming SlideShare
Loading in...5
×

Curso de Desarrollo Web

7,830

Published on

Material del curso de web develop en ITSUR

Published in: Technology, News & Politics
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
7,830
On Slideshare
0
From Embeds
0
Number of Embeds
8
Actions
Shares
0
Downloads
414
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Transcript of "Curso de Desarrollo Web"

  1. 1. Struts + Spring + Hibernate MVC + Servicios
  2. 2. Modelo General Acceso a Datos: Hibernate Servicios: DAO’s Control: Struts Action’s Vista: Struts + JSP Factory: Spring
  3. 3. Configuración JLPP Configuración del Proyecto
  4. 4. Configuración de Proyecto <ul><li>Desde CVS </li></ul><ul><ul><li>Pregunte a su administrador de CVS </li></ul></ul><ul><li>Desde Cero </li></ul><ul><ul><li>Siguiente diapositiva </li></ul></ul>Configuración del Proyecto
  5. 5. Creación del Proyecto (Librerias) <ul><li>Crear un nuevo proyecto en Eclipse </li></ul><ul><li>Agregar las librerías requeridas al directorio WebContent/WEB-INF/lib. </li></ul><ul><ul><li>Hibernate </li></ul></ul><ul><ul><li>Struts </li></ul></ul><ul><ul><li>Spring </li></ul></ul><ul><ul><li>TLD’s comunes (consultar administrador) </li></ul></ul>Configuración del Proyecto
  6. 6. Creación del Proyecto (Librerias) <ul><li>Recargar el proyecto </li></ul><ul><li>Deberían aparecer los WebLibraries en el mismo. </li></ul>Configuración del Proyecto
  7. 7. Creación del Proyecto (Source) <ul><li>Agregar el sourcefolder WEB-INF/classes al proyecto. </li></ul><ul><ul><li>Ver procedimiento . </li></ul></ul>Configuración del Proyecto
  8. 8. Creación del Proyecto (Spring) <ul><li>En la cartepa WEB-INF/classes crear un archivo applicationContext.xml </li></ul>Configuración del Proyecto
  9. 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. 10. Creación del Proyecto (Spring) <ul><li>Abrir el descriptor de aplicación del Proyecto y agregar el código de Spring. </li></ul><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. 11. Creación del Proyecto (Spring) <ul><li>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. </li></ul>Configuración del Proyecto
  12. 12. Creación del Proyecto (Hibernate) <ul><li>Crear el paquete mapping donde se colocaran los mapeos de Hibernate. </li></ul><ul><li>Crear el archivo hibernate.properties en la carpeta src. </li></ul><ul><li>Crear los archivos de mapeo de Hibernate necesarios. </li></ul>Configuración del Proyecto
  13. 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. 14. Creación del Proyecto (Hibernate + Spring) <ul><li>En la carpeta WEB-INF/classes crear el archivo hibernate.xml . </li></ul><ul><li>En el archivo applicationContext.xml incluir el archivo hibernate.xml </li></ul><import resource=“hibernate.xml” /> Configuración del Proyecto
  15. 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. 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. 17. Creación del proyecto (Struts) <ul><li>En la carpeta WEB-INF/classes crear un archivo struts.xml </li></ul><?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. 18. Creación del proyecto (Struts) <ul><li>En el descriptor de aplicación agregar el filter de Struts. </li></ul><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. 19. Prueba Inicial <ul><li>Arrancar el contexto para revisar si este esta funcionando de manera adecuada. </li></ul><ul><li>La configuración del proyecto esta entonces completa. </li></ul>Configuración del Proyecto
  20. 20. Los Mapeos Hibernate JLPP Acceso a Datos: Hibernate
  21. 21. Consideraciones <ul><li>Los mapeos deberian estar en su propio paquete llamado mapping. </li></ul><ul><li>El modelo general de mapeo: </li></ul><?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. 22. Clases <ul><li>Los mapeos hibernate se crean a partir de clases. </li></ul><ul><li>Estas clases se definen como elementos class dentro del mapeo. </li></ul><ul><li>Toda clase debe tener un id. </li></ul><ul><li>Las clases pueden tener varias propiedades. </li></ul>Acceso a Datos: Hibernate
  23. 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. 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. 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. 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. 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. 28. Generación de Base de Datos y POJO’s <ul><li>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. </li></ul><ul><li>Por seguridad los POJO’s quedan en otra carpeta con el nombre hibernate. </li></ul>Acceso a Datos: Hibernate
  29. 29. Servicios JLPP Servicios: DAO’s
  30. 30. Consideraciones <ul><li>Los servicios se localizan en un paquete service o bien en paquetes services de cada paquete de modulo. </li></ul><ul><li>Son clases JAVA que implementan las funcionalidades necesarias para abstraer Hibernate de las capas superiores. </li></ul>Servicios: DAO’s
  31. 31. Modelo Básico de Servicio <ul><li>Un servicio es una interfaz que debería implementar métodos para: </li></ul><ul><ul><li>Agregar datos </li></ul></ul><ul><ul><li>Editar datos </li></ul></ul><ul><ul><li>Eliminar datos </li></ul></ul><ul><ul><li>Recuperar datos </li></ul></ul><ul><ul><li>Recuperar un dato unico </li></ul></ul>Servicios: DAO’s
  32. 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. 33. Implementación <ul><li>Los DAO’s pueden implementarse en base a código puro de Hibernate o bien utilizando HibernateTemplate, una clase de Spring. </li></ul><ul><li>Cuando una clase requiera determinadas funciones extra estas pueden agregarse en un Dao heredado. </li></ul>Servicios: DAO’s
  34. 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. 35. Struts JLPP Control: Struts Action’s Vista: Struts + JSP
  36. 36. Consideraciones <ul><li>Los actions deberían estar en el paquete action o en el paquete action de cada paquete de modulo. </li></ul><ul><li>Los JSP’s que usan struts deberían estar organizados en paquetes que representen los modulos y los casos de uso. </li></ul>Control: Struts Action’s Vista: Struts + JSP
  37. 37. Struts + DAO’s <ul><li>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. </li></ul><ul><li>Cada action debe agregar un geter y seter para un DAO interno que realice las operaciones. </li></ul>Control: Struts Action’s Vista: Struts + JSP
  38. 38. Cambios al struts.xml <ul><li>El atributo class de cada Action cargado y configurado por Spring deberá de corresponder con el nombre del bean que lo crea. </li></ul>Control: Struts Action’s Vista: Struts + JSP <action name=“nombre” class=“el_bean”> </action> <bean id=“el_bean” />
  39. 39. Spring JLPP Factory: Spring
  40. 40. Consideraciones <ul><li>Traten de poner nombres significativos a los beans. </li></ul><ul><li>Si son muchos beans utilizar archivos separados y la etiqueta import. </li></ul>Factory: Spring
  41. 41. Descripción General <ul><li>Spring se encarga de instanciar objetos y configurarlos en tiempo de ejecución. </li></ul><ul><li>Crea objetos como el SessionFactory (o Hfactory o Singleton) y los hace accesibles de una manera sencilla. </li></ul>Factory: Spring
  42. 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. 43. Implicaciones <ul><li>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. </li></ul>Factory: Spring
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×