Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Para generar esta estructura de proyecto, parto del supuesto que tiene configurado un
repositorio maven local, eclipse ,un servidor de base de datos MySql y un servidor JBoss o
Tomcat.
Con maven se genera una estructura de multiporyectos un pom.xml padre y los n proyectos
hijos con sus respectivos pom.xml que generaran .jar o .war.
Se pretende crear un temple con proyecto padre que contenga dos hijos un proyecto
backend y otro frontend.En el backend se alojaran las clases entidades del proyecto y en el
frontend los action de struts2, beans con spring , y la conexion a la bd y mapeo con
hibernate.
1.Crear dos carpetas una llamada multiproyecto y otra workspace_maven(en esta
importaremos los proyectos creados con maven y son los que se trabajaran desde eclipse)
Desde consola nos situamos en la carpeta multiproyecto:
cd /home/mvega/multiproyecto
2.Dentro de /multiproyecto correr el siguiente comando maven para crear el proyecto padre:
mvn archetype:create -DgroupId=com.template.main -DartifactId=template-main
El resultado es el siguiente:
3.
3.
3.
3.
3.
3.
5.Dentro del proyecto padre correr el mando maven para generar el proyecto backend:
mvn archetype:create -DgroupId=com.template.backend -DartifactId=template-backend
6.Dentro del proyecto padre correr el mando maven para generar el proyecto frontend:
mvn archetype:create -DgroupId=com.template.frontend -DartifactId=template-frontend
quedando lo siguiente:
<groupId>com.template.frontend</groupId>
<artifactId>template-frontend</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<name>template-frontend</name>
8.Dentro del proyecto template-frontend agregar dentro del pom.xml la dependencia con el
proyecto template-backend:
<!-- dependency to template-backend project -->
<dependency>
<groupId>com.template.backend</groupId>
<artifactId>template-backend</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
10.Situarse dentro del proyecto padre tempate-main agregar los modulos y correr el
siguiente comando maven:
<modules>
<module>template-backend</module>
<module>template-frontend</module>
</modules>
mvn clean install
En este punto se tiene un proyecto que genera un .war, este caso seria el proyecto templatefrontend con dependencia de .jar generado por el proyecto template-backend
Una vez corrido ese comando dentro de eclipse se creara una variable de entorno a maven
M2_REPO que hace referencia ej. /home/mvega/.m2/repository/
12. Hacer el proyecto template-frontend dinamico web para eclipse
mvn eclipse:eclipse -Dwtpversion=1.5
Seleccionar la opcion
General->Existing Project into Workspace
Debemos elegir el proyecto template-main que esta dentro del workspace_maven para este
ejemplo, se veran dentro de la vista de packege del eclipse los proyectos template-backend
y template-frontend con sus respectivos archivos pom.xml
14.Hacer proyecto dinamico para Tomcat o Jboss sobre el proyecto template-frotend hacer
click con el boton derecho de mouse elegir Properties->Project Facets presionar el boton
Apply y Ok
Nota:en este punto fijarse la solapa Problem, hacer click boton derecho en los proyectos
template-backend y template-frontend elegir opcion Quick Fix opcion facect ..1.6
Hasta aqui se tiene multiproyectos con maven, un proyecto padre como template-main y dos
proyectos hijos template-backend y template-frontend
Continuando con la creacion de una aplicacion web multiproyecto con struts2,spring y
hibernate, configuraremos las dependencias y archivos de los respectivos frameworks.
15. En el archivo pom.xml del proyecto template-frontend vamos a colocar las dependencias
de struts2,spring y hibernate.
Struts2...
<!-- Struts 2 -->
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
<version>2.1.8</version>
</dependency>
<!-- Struts 2 + Spring plugins -->
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-spring-plugin</artifactId>
<version>2.1.8</version>
</dependency>
MySql...
<!-- MySQL database driver -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.9</version>
</dependency>
Spring...
<!-- Spring framework -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring</artifactId>
<version>2.5.6</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>2.5.6</version>
</dependency>
Hibernate....
<!-- Hibernate core -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate</artifactId>
<version>3.2.7.ga</version>
</dependency>
<!-- Hibernate core library dependency start -->
<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>1.6.1</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
<version>3.2.1</version>
</dependency>
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib</artifactId>
<version>2.2</version>
</dependency>
<!-- Hibernate core library dependency end -->
<!-- Hibernate query library dependecy start -->
<dependency>
<groupId>antlr</groupId>
<artifactId>antlr</artifactId>
<version>2.7.7</version>
</dependency>
<dependency>
<groupId>javax.transaction</groupId>
<artifactId>jta</artifactId>
<version>1.0.1B</version>
</dependency>
<dependency>
<groupId>javassist</groupId>
<artifactId>javassist</artifactId>
<version>3.4.GA</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>asm</groupId>
<artifactId>asm</artifactId>
<version>3.1</version>
</dependency>
<!-- Hibernate query library dependecy end -->
16. Correr en MySql el siguiente script con esto crearemos una tabla usuario dentro del
schema template:
DROP TABLE IF EXISTS `template`.`usuario`;
CREATE TABLE `template`.`usuario` (
`ID` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
`NOMBRE` VARCHAR(45) NOT NULL,
`PASSWORD` VARCHAR(45) NOT NULL,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8;
INSERT INTO template.usuario (NOMBRE,PASSWORD)VALUES ('admin','admin');
INSERT INTO template.usuario (NOMBRE,PASSWORD)VALUES ('root','root');
INSERT INTO template.usuario (NOMBRE,PASSWORD)VALUES ('admin','1234');
17.Hibernate configuraremos una entidad Usuario.java en el proyecto template-backend
package com.template.backend.modelo;
import java.io.Serializable;
/**
* @author mvega
*
*/
public class Usuario implements Serializable {
private static final long serialVersionUID = -8261984277322134700L;
private Long id;
private String nombre;
private String password;
18.Generamos el jar de template-backend para ser utilizado por el proyecto templatefrontend, en consola ingresamos los siguientes comandos:
cd /home/mvega/workspace_maven/template-backend
mvn clean install -Dmaven.test.skip=true
19.Desde consola ingresamos al proyecto template-frotend, y corremos el siguiente
comando:
mvn eclipse:eclipse
Esto refrescara las referencias de dependencia entre el template-frontend y el templatebackend y las dependencias de struts2,spring y hibernate configuradas en el pom.xml, si no
tenemos los jar automaticamente maven los bajara al repositorio local de la pc.
Usuario.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.template.backend.modelo.Usuario" table="usuario"
catalog="template">
<id name="id" type="java.lang.Long">
<column name="ID" />
<generator class="identity" />
</id>
<property name="nombre" type="string">
<column name="NOMBRE" length="45" not-null="true" />
</property>
<property name="password" type="string">
<column name="PASSWORD" length="45" not-null="true" />
</property>
</class>
</hibernate-mapping>
UsuarioDAO.java
package com.template.frontend.dao;
/**
* @author mvega
*
*/
public interface UsuarioDAO {
public boolean validarUsuario(String nombre,String password);
}
UsuarioDAOImpl.java
package com.template.frontend.dao.impl;
import org.hibernate.Criteria;
import org.hibernate.criterion.Restrictions;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import com.template.backend.modelo.Usuario;
import com.template.frontend.dao.UsuarioDAO;
public class UsuarioDAOImpl extends HibernateDaoSupport implements UsuarioDAO{
public boolean validarUsuario(String nombre,String password) {
boolean usuarioValido = false;
Criteria criteria = this.getSession().createCriteria(Usuario.class);
criteria.add(Restrictions.eq("nombre", nombre));
criteria.add(Restrictions.eq("password", password));
Usuario usuario =(Usuario)criteria.uniqueResult();
if(usuario!=null){
usuarioValido = true;
}
}
}
return usuarioValido;
22.Procedemos a crear la capa BO que sera inyectada al action que recibe los datos del
formulario y es un intermediario en el action y la capa dao.
UsuarioBO.java y UsuarioBOImpl.java
UsuarioBO.java
package com.template.frontend.bo;
/**
* @author mvega
*
*/
public interface UsuarioBO {
public boolean validarUsuario(String nombre, String password);
}
UsuarioBOImpl.java
package com.template.frontend.bo.impl;
import com.template.frontend.bo.UsuarioBO;
import com.template.frontend.dao.UsuarioDAO;
/**
* @author mvega
*
*/
public class UsuarioBOImpl implements UsuarioBO {
private UsuarioDAO usuarioDAO;
public boolean validarUsuario(String nombre, String password) {
password);
login.jsp
<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head></head>
<body>
<h1>Login al sistema con struts2, spring y hibernate</h1>
<s:form action="Usuario">
<s:textfield name="nombre" label="Nombre:"/>
<s:password name="password" label="Password"/>
<s:submit label="Enviar" name="Enviar"/>
</s:form>
</body>
</html>
login_ok.jsp
<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head></head>
<body>
<h1>Login al sistema con struts2, spring y hibernate</h1>
<h4>Bienvenido
</body>
</html>
login_error.jsp
<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head></head>
<body>
<h1>Login al sistema con struts2, spring y hibernate</h1>
<h4>El usuario o password ingresado es invalido, o no esta registrado en el
sistema!!!</h4>
</body>
</html>
struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="login" namespace="/Usuario" extends="struts-default">
<action name="Login">
<result>pages/login.jsp</result>
</action>
<action name="Usuario"
class="com.template.frontend.action.UsuarioAction">
<result name="success">pages/login_ok.jsp</result>
<result name="error">pages/login_error.jsp</result>
</action>
</package>
</struts>
database.properties
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/template
jdbc.username=root
jdbc.password=root
26.Crearemos los archivos de configuracion de spring que crearan los bean de conexion a la
base de datos action bo y dao.
Se crea la carpeta spring dentro de WEB-INF/conf/spring en el se alojaran los archivos
action-spring.xml
bo-spring.xml
dao-spring.xml
data-source.xml
hibernate-session-factory.xml
data-source.xml
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
<bean
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location">
<value>WEB-INF/conf/database/properties/database.properties</value>
</property>
</bean>
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="${jdbc.driverClassName}" />
<property name="url" value="${jdbc.url}" />
hibernate-session-factory.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
<!-- Hibernate session factory -->
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref bean="dataSource"/>
</property>
<property name="hibernateProperties">
<props>
<prop
key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
<property name="mappingResources">
<list>
<value>hibernate/Usuario.hbm.xml</value>
</list>
</property>
</bean>
</beans>
dao-spring.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
<bean id="usuarioDAO" class="com.template.frontend.dao.impl.UsuarioDAOImpl"
>
</beans>
bo-spring.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
<bean id="usuarioBO" class="com.template.frontend.bo.impl.UsuarioBOImpl" >
<property name="usuarioDAO" ref="usuarioDAO" />
</bean>
</beans>
action-spring.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
<bean id="usuarioAction" class="com.template.frontend.action.UsuarioAction">
<property name="usuarioBO" ref="usuarioBO" />
</bean>
</beans>
applicationContext.xml
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
<!-- Database Configuration -->
<import resource="conf/spring/data-source.xml"/>
<import resource="conf/spring/hibernate-session-factory.xml"/>
<!-- Beans Action Declaration -->
<import resource="conf/spring/action-spring.xml"/>
<!-- Beans BO Declaration -->
<import resource="conf/spring/bo-spring.xml"/>
<!-- Beans DAO Declaration -->
<import resource="conf/spring/dao-spring.xml"/>
</beans>
28.Por ultimo vamos a configurar el servlet de struts y el contecxto de spring dentro del
archivo web.xml
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Template Struts 2 Web Application</display-name>
<!-- Servlet de struts2 -->
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- Contexto de spring -->
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
</web-app>
30.Corremos el servidor y se desplegara en el la carpeta deploy del server el templatefrontend.war, y accedemos a la aplicacion para ingresar los datos al fomularios a la siguiente
url
http://localhost:8082/template-frontend/Usuario/Login.action
ingresamos :
usaurio:admin
password: admin
Pantalla de login
Pantalla de bienvenida
Para el caso que se ingrese un usuario o password invalido se mostrara la pantalla de error