Professional Documents
Culture Documents
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