La idea de este ejemplo es realizar un ejemplo de sistema de inventario con modulo de ventas y ventaOnline en spring mvc. El proyecto lo nombraremos productmarket.
CREATE SCHEMA IF NOT EXISTS `productmarketdb` DEFAULT CHARACTER SET utf8 ; USE `productmarketdb` ; CREATE TABLE `usuario` ( `idusuario` int(11) NOT NULL AUTO_INCREMENT, `nombreusuario` varchar(450) DEFAULT NULL, `usuario` varchar(100) DEFAULT NULL, `password` varchar(45) DEFAULT NULL, PRIMARY KEY (`idusuario`) ) ENGINE=MyISAM AUTO_INCREMENT=20 DEFAULT CHARSET=utf8; CREATE TABLE `producto` ( `idproducto` int(11) NOT NULL AUTO_INCREMENT, `idreferencia` int(11) DEFAULT NULL, `nombreproducto` varchar(500) NOT NULL, `codigobarras` varchar(45) DEFAULT NULL, `descripcion` varchar(900) NOT NULL, `cantidad` int(11) DEFAULT NULL, `precio` decimal(30,2) DEFAULT NULL, `imagen` longblob, `tipoimagen` varchar(45) DEFAULT NULL, `unidad` varchar(45) DEFAULT NULL, PRIMARY KEY (`idproducto`) ) ENGINE=MyISAM AUTO_INCREMENT=23 DEFAULT CHARSET=utf8; CREATE TABLE `pedido` ( `idpedido` int(11) NOT NULL AUTO_INCREMENT, `llave` varchar(250) DEFAULT NULL, `nombre` varchar(250) DEFAULT NULL, `apellidopat` varchar(250) DEFAULT NULL, `apellidomat` varchar(250) DEFAULT NULL, `calle` varchar(250) DEFAULT NULL, `entrecalles` varchar(450) DEFAULT NULL, `colonia` varchar(250) DEFAULT NULL, `municipio` varchar(250) DEFAULT NULL, `estado` varchar(250) DEFAULT NULL, `pais` varchar(250) DEFAULT NULL, `codigopostal` varchar(45) DEFAULT NULL, `telefono` varchar(25) DEFAULT NULL, `email` varchar(250) DEFAULT NULL, `fecha` datetime DEFAULT NULL, PRIMARY KEY (`idpedido`) ) ENGINE=MyISAM AUTO_INCREMENT=37 DEFAULT CHARSET=utf8; CREATE TABLE `ventadetalleonline` ( `idpedido` int(11) NOT NULL, `cantidad` int(11) DEFAULT NULL, `idproducto` int(11) DEFAULT NULL, `costoproducto` decimal(30,2) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8; CREATE TABLE `ventaonline` ( `idpedido` int(11) NOT NULL, `total` decimal(30,2) DEFAULT NULL, PRIMARY KEY (`idpedido`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; CREATE TABLE `venta` ( `idventa` int(11) NOT NULL AUTO_INCREMENT, `llaveventa` varchar(250) DEFAULT NULL, `total` decimal(30,2) DEFAULT NULL, `fecha` datetime DEFAULT NULL, PRIMARY KEY (`idventa`) ) ENGINE=MyISAM AUTO_INCREMENT=47 DEFAULT CHARSET=utf8; CREATE TABLE `ventadetalle` ( `idventa` int(11) NOT NULL, `cantidad` int(11) DEFAULT NULL, `idproducto` int(11) DEFAULT NULL, `total` decimal(30,2) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8; INSERT INTO productmarketdb.usuario VALUES (null,'José Martín Lara López','admin','adminmarket');
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.3</version> <configuration> <source>1.8</source> <target>1.8</target> <verbose>true</verbose> <fork>true</fork> <executable>${JAVA_HOME}/bin/javac</executable> <compilerVersion>1.8</compilerVersion> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.4.2</version> <configuration> <jvm>${JAVA_HOME}/bin/java</jvm> <forkMode>once</forkMode> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-enforcer-plugin</artifactId> <version>1.3.1</version> <inherited>true</inherited> <executions> <execution> <id>enforce</id> <configuration> <rules> <DependencyConvergence /> <requireJavaVersion> <version>1.8</version> </requireJavaVersion> </rules> </configuration> <goals> <goal>enforce</goal> </goals> </execution> </executions> </plugin> </plugins> <pluginManagement> <plugins> <plugin> <groupId>org.eclipse.m2e</groupId> <artifactId>lifecycle-mapping</artifactId> <version>1.0.0</version> <configuration> <lifecycleMappingMetadata> <pluginExecutions> <pluginExecution> <pluginExecutionFilter> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-enforcer-plugin</artifactId> <versionRange>[1.0.0,)</versionRange> <goals> <goal>enforce</goal> </goals> </pluginExecutionFilter> <action> <ignore /> </action> </pluginExecution> </pluginExecutions> </lifecycleMappingMetadata> </configuration> </plugin> </plugins> </pluginManagement> </build>
<web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"> <display-name>Archetype Created Web Application</display-name> <servlet> <servlet-name>mvc-dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> <multipart-config> <max-file-size>5242880</max-file-size><!--5MB--> <max-request-size>20971520</max-request-size><!--20MB--> <file-size-threshold>0</file-size-threshold> </multipart-config> </servlet> <filter> <filter-name>charsetFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>charsetFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <servlet-mapping> <servlet-name>mvc-dispatcher</servlet-name> <url-pattern>*.html</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>
<web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"> <display-name>Archetype Created Web Application</display-name> <servlet> <servlet-name>mvc-dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>mvc-dispatcher</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <filter> <filter-name>charsetFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>charsetFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app>
<web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"> <display-name>Archetype Created Web Application</display-name> <servlet> <servlet-name>mvc-dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <filter> <filter-name>charsetFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>charsetFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <servlet-mapping> <servlet-name>mvc-dispatcher</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> </web-app>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.tutosoftware.productmarket</groupId> <artifactId>productmarket</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>pom</packaging> <name>ProductMarket</name> <properties> <pmc.version>0.0.1-SNAPSHOT</pmc.version> <spring.version>4.3.7.RELEASE</spring.version> <hibernate.version>5.2.9.Final</hibernate.version> <apachetiles.version>3.0.7</apachetiles.version> <mysql.version>5.1.34</mysql.version> <jstl.version>1.2</jstl.version> <jsp-api.version>2.1</jsp-api.version> <servlet-api.version>3.1.0</servlet-api.version> <hibernatevalidator.version>5.3.4.Final</hibernatevalidator.version> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencyManagement> <dependencies> <dependency> <groupId>com.tutosoftware.productmarket</groupId> <artifactId>productmarket-core</artifactId> <version>${pmc.version}</version> </dependency> <!-- Spring 4 dependencies --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.apache.tiles</groupId> <artifactId>tiles-core</artifactId> <version>${apachetiles.version}</version> </dependency> <dependency> <groupId>org.apache.tiles</groupId> <artifactId>tiles-api</artifactId> <version>${apachetiles.version}</version> </dependency> <dependency> <groupId>org.apache.tiles</groupId> <artifactId>tiles-servlet</artifactId> <version>${apachetiles.version}</version> </dependency> <dependency> <groupId>org.apache.tiles</groupId> <artifactId>tiles-jsp</artifactId> <version>${apachetiles.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>${spring.version}</version> <scope>test</scope> </dependency> <!-- bean validation dependencies --> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator</artifactId> <version>${hibernatevalidator.version}</version> </dependency> <!-- Hibernate dependencies --> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>${hibernate.version}</version> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-c3p0</artifactId> <version>${hibernate.version}</version> </dependency> <!-- mysql dependencie --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>${mysql.version}</version> </dependency> <!-- Servlet and JSP --> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>jsp-api</artifactId> <version>${jsp-api.version}</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>${servlet-api.version}</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>${jstl.version}</version> </dependency> </dependencies> </dependencyManagement> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.3</version> <configuration> <source>1.8</source> <target>1.8</target> <verbose>true</verbose> <fork>true</fork> <executable>${JAVA_HOME}/bin/javac</executable> <compilerVersion>1.8</compilerVersion> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.4.2</version> <configuration> <jvm>${JAVA_HOME}/bin/java</jvm> <forkMode>once</forkMode> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-enforcer-plugin</artifactId> <version>1.3.1</version> <inherited>true</inherited> <executions> <execution> <id>enforce</id> <configuration> <rules> <DependencyConvergence /> <requireJavaVersion> <version>1.8</version> </requireJavaVersion> </rules> </configuration> <goals> <goal>enforce</goal> </goals> </execution> </executions> </plugin> </plugins> <pluginManagement> <plugins> <plugin> <groupId>org.eclipse.m2e</groupId> <artifactId>lifecycle-mapping</artifactId> <version>1.0.0</version> <configuration> <lifecycleMappingMetadata> <pluginExecutions> <pluginExecution> <pluginExecutionFilter> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-enforcer-plugin</artifactId> <versionRange>[1.0.0,)</versionRange> <goals> <goal>enforce</goal> </goals> </pluginExecutionFilter> <action> <ignore /> </action> </pluginExecution> </pluginExecutions> </lifecycleMappingMetadata> </configuration> </plugin> </plugins> </pluginManagement> </build> <modules> <module>productmarket-admin</module> <module>productmarket-core</module> <module>productmarket-caja</module> <module>productmarket-ventaonline</module> </modules> </project>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>com.tutosoftware.productmarket</groupId> <artifactId>productmarket</artifactId> <version>0.0.1-SNAPSHOT</version> </parent> <artifactId>productmarket-core</artifactId> <name>Productmarket Core</name> <dependencies> <!-- Spring 4 dependencies --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator</artifactId> </dependency> <!-- Hibernate dependencies --> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-c3p0</artifactId> </dependency> <!-- mysql dependencie --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> </dependencies> </project>
package com.tutosoftware.productmarket.util; import java.io.Serializable; import java.util.List; import org.hibernate.SessionFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Repository; @Repository public class HibernateUtil { @Autowired private SessionFactory sessionFactory; public <T> Serializable create(final T entity) { return sessionFactory.getCurrentSession().save(entity); } public <T> T update(final T entity) { sessionFactory.getCurrentSession().update(entity); return entity; } public <T> void delete(final T entity) { sessionFactory.getCurrentSession().delete(entity); } public <T> void delete(Serializable id, Class<T> entityClass) { T entity = fetchById(id, entityClass); delete(entity); } @SuppressWarnings("unchecked") public <T> List<T> fetchAll(Class<T> entityClass) { return sessionFactory.getCurrentSession().createQuery(" FROM "+entityClass.getName()).list(); } @SuppressWarnings("unchecked") public <T> List<T> fetchAll(String hql) { return sessionFactory.getCurrentSession().createQuery(hql).list(); } public <T> T fetchById(Serializable id, Class<T> entityClass) { return (T)sessionFactory.getCurrentSession().get(entityClass, id); } @SuppressWarnings("unchecked") public <T> T fetchByUniqueResult(String hql) { return (T)sessionFactory.getCurrentSession().createQuery(hql).uniqueResult(); } }
package com.tutosoftware.productmarket.entity; import java.io.Serializable; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table; @Entity @Table(name="usuario") public class Usuario implements Serializable { /** * */ private static final long serialVersionUID = 6294359495119986502L; @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long idUsuario; @Column private String nombreUsuario; @Column private String usuario; @Column private String password; public Usuario(){ } public Long getIdUsuario() { return idUsuario; } public void setIdUsuario(Long idUsuario) { this.idUsuario = idUsuario; } public String getNombreUsuario() { return nombreUsuario; } public void setNombreUsuario(String nombreUsuario) { this.nombreUsuario = nombreUsuario; } public String getUsuario() { return usuario; } public void setUsuario(String usuario) { this.usuario = usuario; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
package com.tutosoftware.productmarket.dao; import java.util.List; import com.tutosoftware.productmarket.entity.Usuario; public interface LoginDAO { public Usuario obtenerLogin(Usuario usuario); public long agregarUsuarioLogin(Usuario usuario); public List<Usuario> obtenerUsuarios(); public Usuario actualizarUsuario(Usuario usuario); public Usuario obtenerUsuario(long id); public void eliminarUsuario(long id); }
package com.tutosoftware.productmarket.dao.impl; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Repository; import com.tutosoftware.productmarket.dao.LoginDAO; import com.tutosoftware.productmarket.entity.Usuario; import com.tutosoftware.productmarket.util.HibernateUtil; @Repository public class LoginDAOImpl implements LoginDAO { @Autowired private HibernateUtil hibernateUtil; public LoginDAOImpl(){ } @Override public Usuario obtenerLogin(Usuario usuario) { String hql="from Usuario as u where u.usuario = '"+usuario.getUsuario()+"' and u.password = '"+usuario.getPassword()+"'"; Usuario usuarioResult = hibernateUtil.fetchByUniqueResult(hql); // TODO Auto-generated method stub return usuarioResult; } @Override public long agregarUsuarioLogin(Usuario usuario) { // TODO Auto-generated method stub return (Long) hibernateUtil.create(usuario); } @Override public List<Usuario> obtenerUsuarios() { // TODO Auto-generated method stub return hibernateUtil.fetchAll(Usuario.class); } @Override public Usuario actualizarUsuario(Usuario usuario) { // TODO Auto-generated method stub return hibernateUtil.update(usuario); } @Override public Usuario obtenerUsuario(long id) { // TODO Auto-generated method stub return hibernateUtil.fetchById(id,Usuario.class); } @Override public void eliminarUsuario(long id) { // TODO Auto-generated method stub Usuario usuario = new Usuario(); usuario.setIdUsuario(id); hibernateUtil.delete(usuario); } }
package com.tutosoftware.productmarket.service; import java.util.List; import com.tutosoftware.productmarket.entity.Usuario; public interface LoginService { public Usuario obtenerLogin(Usuario usuario); public long agregarUsuarioLogin(Usuario usuario); public List<Usuario> obtenerUsuarios(); public Usuario actualizarUsuario(Usuario usuario); public Usuario obtenerUsuario(long id); public void eliminarUsuario(long id); }
package com.tutosoftware.productmarket.service.impl; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.tutosoftware.productmarket.entity.Usuario; import com.tutosoftware.productmarket.service.LoginService; import com.tutosoftware.productmarket.dao.LoginDAO; @Service @Transactional public class LoginServiceImpl implements LoginService { @Autowired private LoginDAO loginDAO; public LoginServiceImpl(){ } @Override public Usuario obtenerLogin(Usuario usuario) { // TODO Auto-generated method stub return loginDAO.obtenerLogin(usuario); } @Override public long agregarUsuarioLogin(Usuario usuario) { // TODO Auto-generated method stub return loginDAO.agregarUsuarioLogin(usuario); } @Override public List<Usuario> obtenerUsuarios() { // TODO Auto-generated method stub return loginDAO.obtenerUsuarios(); } @Override public Usuario actualizarUsuario(Usuario usuario) { // TODO Auto-generated method stub return loginDAO.actualizarUsuario(usuario); } @Override public Usuario obtenerUsuario(long id) { // TODO Auto-generated method stub return loginDAO.obtenerUsuario(id); } @Override public void eliminarUsuario(long id) { // TODO Auto-generated method stub loginDAO.eliminarUsuario(id); } }
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>com.tutosoftware.productmarket</groupId> <artifactId>productmarket</artifactId> <version>0.0.1-SNAPSHOT</version> </parent> <artifactId>productmarket-admin</artifactId> <packaging>war</packaging> <name>Productmarket Admin</name> <build> <finalName>productmarketadmin</finalName> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>2.3</version> <configuration> <webXml>src/main/webapp/WEB-INF/web.xml</webXml> <webResources> <resource> <!-- this is relative to the pom.xml directory --> <directory>src/main/webapp/WEB-INF</directory> <targetPath>WEB-INF</targetPath> </resource> </webResources> </configuration> </plugin> </plugins> </build> <dependencies> <dependency> <groupId>com.tutosoftware.productmarket</groupId> <artifactId>productmarket-core</artifactId> </dependency> <!-- Spring 4 dependencies --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> </dependency> <dependency> <groupId>org.apache.tiles</groupId> <artifactId>tiles-core</artifactId> </dependency> <dependency> <groupId>org.apache.tiles</groupId> <artifactId>tiles-api</artifactId> </dependency> <dependency> <groupId>org.apache.tiles</groupId> <artifactId>tiles-servlet</artifactId> </dependency> <dependency> <groupId>org.apache.tiles</groupId> <artifactId>tiles-jsp</artifactId> </dependency> <!-- Hibernate dependencies --> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-c3p0</artifactId> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator</artifactId> </dependency> <!-- mysql dependencie --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <!-- Servlet and JSP --> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>jsp-api</artifactId> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> </dependency> </dependencies> </project>
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!-- Specifying base package of the Components like Controller, Service, DAO --> <context:component-scan base-package="com.tutosoftware.productmarket" /> <!-- Getting Database properties --> <context:property-placeholder location="classpath:application.properties" /> <!-- Specifying the Resource location to load JS, CSS, Images etc --> <mvc:annotation-driven /> <mvc:resources mapping="/resources/**" location="/resources/" /> <mvc:resources mapping="/css/**" location="/css/" /> <mvc:resources mapping="/fonts/**" location="/fonts/" /> <mvc:resources mapping="/js/**" location="/js/" /> <!-- View Resolver --> <bean id="multipartResolver" class="org.springframework.web.multipart.support.StandardServletMultipartResolver"/> <bean id="viewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver"> <property name="viewClass"> <value> org.springframework.web.servlet.view.tiles3.TilesView </value> </property> </bean> <bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles3.TilesConfigurer"> <property name="definitions"> <list><value>/WEB-INF/views/tiles/tiles.xml</value></list> </property> </bean> <!-- DataSource --> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> <property name="driverClass" value="${database.driverClass}" /> <property name="jdbcUrl" value="${database.url}" /> <property name="user" value="${database.username}" /> <property name="password" value="${database.password}" /> <property name="acquireIncrement" value="${connection.acquireIncrement}" /> <property name="minPoolSize" value="${connection.minPoolSize}" /> <property name="maxPoolSize" value="${connection.maxPoolSize}" /> <property name="maxIdleTime" value="${connection.maxIdleTime}" /> </bean> <!-- Hibernate SessionFactory --> <bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean"> <property name="dataSource" ref="dataSource"></property> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect">${hibernate.dialect}</prop> <prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop> <prop key="hibernate.format_sql">${hibernate.format_sql}</prop> <prop key="hibernate.show_sql">${hibernate.show_sql}</prop> </props> </property> <property name="packagesToScan" value="com.tutosoftware.productmarket.entity"></property> </bean> <!-- Transaction --> <bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory" /> </bean> <tx:annotation-driven transaction-manager="transactionManager" /> </beans>
database.driverClass=com.mysql.jdbc.Driver database.url=jdbc:mysql://localhost:3306/productmarketdb database.username=user database.password=password #Hibernate related properties hibernate.dialect=org.hibernate.dialect.MySQL5Dialect hibernate.hbm2ddl.auto=update hibernate.show_sql=true hibernate.format_sql=true #Connection pool related properties connection.acquireIncrement=2 connection.minPoolSize=20 connection.maxPoolSize=50 connection.maxIdleTime=600
package com.tutosoftware.productmarket.validation; import org.springframework.validation.Errors; import org.springframework.validation.ValidationUtils; import org.springframework.validation.Validator; import com.tutosoftware.productmarket.entity.Usuario; public class UsuarioValidation implements Validator { @Override public boolean supports(Class<?> clazz) { // TODO Auto-generated method stub return Usuario.class.equals(clazz); } @Override public void validate(Object target, Errors errors) { // TODO Auto-generated method stub ValidationUtils.rejectIfEmptyOrWhitespace(errors,"nombreUsuario", "field.nombreUsuario.required","El nombre del administrador es requerido"); ValidationUtils.rejectIfEmptyOrWhitespace(errors,"usuario", "field.usuario.required","El usuario es requerido"); ValidationUtils.rejectIfEmptyOrWhitespace(errors,"password", "field.password.required","El password es requerido"); } }
package com.tutosoftware.productmarket.controller; import java.util.List; import javax.validation.Valid; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.validation.BindingResult; import org.springframework.web.bind.WebDataBinder; import org.springframework.web.bind.annotation.InitBinder; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.SessionAttributes; import org.springframework.web.bind.support.SessionStatus; import org.springframework.web.context.request.WebRequest; import org.springframework.web.servlet.ModelAndView; import com.tutosoftware.productmarket.entity.Usuario; import com.tutosoftware.productmarket.service.LoginService; import com.tutosoftware.productmarket.validation.UsuarioValidation; @Controller @SessionAttributes("userObj") public class LoginController { @Autowired private LoginService loginService; public LoginController(){ } @InitBinder protected void initBinder(WebDataBinder binder) { binder.setValidator(new UsuarioValidation()); // registramos el validador } @RequestMapping("/login") public ModelAndView loginUser(@ModelAttribute Usuario usuario) { return new ModelAndView("login"); } @RequestMapping("/verificarLogin") public ModelAndView verificarLogin(ModelMap model,@ModelAttribute Usuario usuario){ if(usuario.getUsuario().trim().length() != 0 && usuario.getPassword().trim().length() != 0){ usuario=loginService.obtenerLogin(usuario); if(usuario != null){ ModelAndView modelo = new ModelAndView("home"); modelo.addObject("usuario",usuario); modelo.addObject("userObj",usuario); return modelo; }else{ model.put("falla","usuario o password incorrecto"); return new ModelAndView("login"); } }else{ model.put("vacio","falta un dato usuario o password vació"); return new ModelAndView("login"); } } @RequestMapping("/agregarUsuario") public ModelAndView agregarUsuario(@ModelAttribute Usuario usuario) { return new ModelAndView("agregarUsuario"); } @RequestMapping("/guardarUsuario") public ModelAndView guardarUsuario(ModelMap model,@Valid Usuario usuario,BindingResult result) { // si hay errores volvemos a la vista del formulario if ( result.hasErrors() ) { return new ModelAndView("agregarUsuario"); } loginService.agregarUsuarioLogin(usuario); return new ModelAndView("redirect:verUsuarios.html"); } @RequestMapping("/verUsuarios") public ModelAndView verUsuarios() { List<Usuario> usuarioList = loginService.obtenerUsuarios(); return new ModelAndView("verUsuarios","usuarioList",usuarioList); } @RequestMapping("/editarUsuario") public ModelAndView verUsuarios(@RequestParam long id, @ModelAttribute Usuario usuario) { usuario= loginService.obtenerUsuario(id); return new ModelAndView("modificarUsuario","usuarioObj",usuario); } @RequestMapping("/modificarUsuario") public ModelAndView actualizarUsuario(ModelMap model,@Valid Usuario usuario,BindingResult result) { // si hay errores volvemos a la vista del formulario if ( result.hasErrors() ) { return new ModelAndView("modificarUsuario"); } loginService.actualizarUsuario(usuario) ; return new ModelAndView("redirect:verUsuarios.html"); } @RequestMapping("/eliminarUsuario") public ModelAndView eliminarUsuario(@RequestParam long id) { loginService.eliminarUsuario(id); return new ModelAndView("redirect:verUsuarios.html"); } @RequestMapping("/salir") public ModelAndView salir(@ModelAttribute Usuario usuario, WebRequest request, SessionStatus status) { status.setComplete(); request.removeAttribute("userObj", WebRequest.SCOPE_SESSION); return new ModelAndView("login"); } }
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE tiles-definitions PUBLIC "-//Apache Software Foundation//DTD Tiles Configuration 3.0//EN" "http://tiles.apache.org/dtds/tiles-config_3_0.dtd"> <tiles-definitions> <!-- Base Definition --> <definition name="base-definitionlogin" template="/WEB-INF/views/tiles/adminLogin.jsp"> <put-attribute name="title" value="" /> <put-attribute name="header" value="/WEB-INF/views/tiles/headerLogin.jsp" /> <put-attribute name="body" value="" /> <put-attribute name="footer" value="/WEB-INF/views/tiles/footer.jsp" /> </definition> <definition name="base-definition" template="/WEB-INF/views/tiles/admin.jsp"> <put-attribute name="title" value="" /> <put-attribute name="header" value="/WEB-INF/views/tiles/header.jsp" /> <put-attribute name="menu" value="/WEB-INF/views/tiles/menu.jsp" /> <put-attribute name="body" value="" /> <put-attribute name="footer" value="/WEB-INF/views/tiles/footer.jsp" /> </definition> <definition name="login" extends="base-definitionlogin"> <put-attribute name="title" value="Bienvenido" /> <put-attribute name="body" value="/WEB-INF/views/login.jsp" /> </definition> <!-- Home Page --> <definition name="home" extends="base-definition"> <put-attribute name="title" value="Bienvenido" /> <put-attribute name="body" value="/WEB-INF/views/home.jsp" /> </definition> <!-- Product Page --> <definition name="agregarUsuario" extends="base-definition"> <put-attribute name="title" value="Agregar usuario" /> <put-attribute name="body" value="/WEB-INF/views/agregarUsuario.jsp" /> </definition> <definition name="verUsuarios" extends="base-definition"> <put-attribute name="title" value="Ver usuarios" /> <put-attribute name="body" value="/WEB-INF/views/verUsuarios.jsp" /> </definition> <definition name="modificarUsuario" extends="base-definition"> <put-attribute name="title" value="Ver usuarios" /> <put-attribute name="body" value="/WEB-INF/views/modificarUsuario.jsp" /> </definition> <definition name="agregarProducto" extends="base-definition"> <put-attribute name="title" value="Agregar producto" /> <put-attribute name="body" value="/WEB-INF/views/agregarProducto.jsp" /> </definition> <definition name="verProductos" extends="base-definition"> <put-attribute name="title" value="Ver productos" /> <put-attribute name="body" value="/WEB-INF/views/verProductos.jsp" /> </definition> <definition name="modificarProducto" extends="base-definition"> <put-attribute name="title" value="Actualizar producto" /> <put-attribute name="body" value="/WEB-INF/views/modificarProducto.jsp" /> </definition> </tiles-definitions>
<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles"%> <html> <head> <meta http-equiv="Content-Type" content="text/html;UTF-8"> <link href="http://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet"> <link type="text/css" rel="stylesheet" href="css/materialize.min.css" media="screen,projection"/> <script type="text/javascript" src="https://code.jquery.com/jquery-2.1.1.min.js"></script> <script type="text/javascript" src="js/materialize.min.js"></script> <title><tiles:getAsString name="title" /></title> </head> <body> <div class="container"> <header id="header"> <tiles:insertAttribute name="header" /> </header> <section id="site-content"> <tiles:insertAttribute name="body" /> </section> <footer id="footer"> <tiles:insertAttribute name="footer" /> </footer> </div> </body> </html>
<div class="row"> <div class="col s12 indigo accent-4 "><h3>Product Market-Administrador</h3></div> </div>
<div> tutosoftware|isc.José Martín Lara López </div>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page isELIgnored="false" %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles"%> <html> <head> <meta http-equiv="Content-Type" content="text/html;UTF-8"> <link href="http://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet"> <link rel="stylesheet" type="text/css" href="css/style.css" /> <link type="text/css" rel="stylesheet" href="css/materialize.min.css" media="screen,projection"/> <script type="text/javascript" src="https://code.jquery.com/jquery-2.1.1.min.js"></script> <script type="text/javascript" src="js/materialize.min.js"></script> <title><tiles:getAsString name="title" /></title> </head> <body> <div class="container"> <header id="header"> <tiles:insertAttribute name="header" /> </header> <section id="sidemenu"> <tiles:insertAttribute name="menu" /> </section> <section id="site-content"> <tiles:insertAttribute name="body" /> </section> <footer id="footer"> <tiles:insertAttribute name="footer" /> </footer> </div> </body> </html>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <div class="row"> <div class="col s12 indigo accent-4 "><h3>Product Market-Administrador</h3></div> <c:choose> <c:when test="${userObj.nombreUsuario != null}"> Bienvenido:${userObj.nombreUsuario} </c:when> <c:otherwise> <c:redirect url="salir.html"></c:redirect> </c:otherwise> </c:choose> </div>
<nav> <ul id="menu"> <li><a href="agregarUsuario.html">Agregar Usuario</a></li> <li><a href="verUsuarios.html">Ver Usuarios</a></li> <li><a href="agregarProducto.html">Agregar Producto</a></li> <li><a href="verProductos.html">Ver Productos</a></li> <li><a href="salir.html">Salir</a></li> </ul> </nav>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> <form:form modelAttribute="usuario" method="post" action="verificarLogin.html" > <table> <tr> <td> <div class="input-field col s5"> <form:input path="usuario" /> <label for="usuario">Usuario</label> </div> </td> </tr> <tr> <td> <div class="input-field col s5"> <form:password path="password" /> <label for="password">Password</label> </div> </td> </tr> <tr> <td> <button class="btn waves-effect waves-light" type="submit" name="action">Iniciar sesión <i class="material-icons right">send</i> </button> </td> </tr> </table> <p><span class="red accent-4">${falla}</span></p> <p><span class="red accent-4">${vacio}</span></p> </form:form>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <c:choose> <c:when test="${userObj.nombreUsuario != null}"> <h2>Selecciona en el menú lo quieras realizar</h2> </c:when> <c:otherwise> <c:redirect url="salir.html"></c:redirect> </c:otherwise> </c:choose>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <c:choose> <c:when test="${userObj.nombreUsuario != null}"> <h2>Agregar Usuario</h2> <style type="text/css"> span.campoConError { color: red; } </style> <form:form modelAttribute="usuario" method="post" action="guardarUsuario.html" > <table> <tr> <td> <div class="input-field col s5"> <form:input path="nombreUsuario" /> <label for="nombreUsuario">Nombre de administrador</label> </div> </td> </tr> <tr> <td><form:errors path="nombreUsuario" cssClass="campoConError"/></td> </tr> <tr> <td> <div class="input-field col s5"> <form:input path="usuario" /> <label for="usuario">Usuario</label> </div> </td> </tr> <tr> <td><form:errors path="usuario" cssClass="campoConError"/></td> </tr> <tr> <td> <div class="input-field col s5"> <form:input path="password" /> <label for="password">Password</label> </div> </td> </tr> <tr> <td><form:errors path="password" cssClass="campoConError"/></td> </tr> <tr> <td> <button class="btn waves-effect waves-light" type="submit" name="action">guardarUsuario <i class="material-icons right">send</i> </button> </td> </tr> </table> <p><span class="red accent-4">${insert}</span></p> </form:form> </c:when> <c:otherwise> <c:redirect url="salir.html"></c:redirect> </c:otherwise> </c:choose>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <c:choose> <c:when test="${userObj.nombreUsuario != null}"> <c:if test="${empty usuarioList}"> No hay usarios </c:if> <c:if test="${not empty usuarioList}"> <table class="striped"> <thead> <tr> <th>Administrador</th> <th>Nombre Usuario</th> <th>Pasword</th> <th>Actualizar</th> <th>Eliminar</th> </tr> </thead> <tbody> <c:forEach items="${usuarioList}" var="usr"> <tr> <td><c:out value="${usr.nombreUsuario}"/></td> <td><c:out value="${usr.usuario}"/></td> <td><c:out value="${usr.password}"/></td> <td><a href="editarUsuario.html?id=<c:out value='${usr.idUsuario}'/> " class="waves-effect waves-light btn" >Actualizar</a></td> <td><a href="eliminarUsuario.html?id=<c:out value='${usr.idUsuario}'/>" class="waves-effect waves-light btn" >Eliminar</a></td> </tr> </c:forEach> </tbody> </table> </c:if> </c:when> <c:otherwise> <c:redirect url="salir.html"></c:redirect> </c:otherwise> </c:choose>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <c:choose> <c:when test="${userObj.nombreUsuario != null}"> <h2>Actualizar Usuario</h2> <style type="text/css"> span.campoConError { color: red; } </style> <form:form modelAttribute="usuario" method="post" action="modificarUsuario.html" > <table> <tr> <td> <div class="input-field col s5"> <form:hidden path="idUsuario" value="${usuarioObj.idUsuario}"/> <form:input path="nombreUsuario" value="${usuarioObj.nombreUsuario}"/> <label for="nombreUsuario">Nombre de administrador</label> </div> </td> </tr> <tr> <td><form:errors path="nombreUsuario" cssClass="campoConError"/></td> </tr> <tr> <td> <div class="input-field col s5"> <form:input path="usuario" value="${usuarioObj.usuario}"/> <label for="usuario">Usuario</label> </div> </td> </tr> <tr> <td><form:errors path="usuario" cssClass="campoConError"/></td> </tr> <tr> <td> <div class="input-field col s5"> <form:input path="password" value="${usuarioObj.password}"/> <label for="password">Password</label> </div> </td> </tr> <tr> <td><form:errors path="password" cssClass="campoConError"/></td> </tr> <tr> <td> <button class="btn waves-effect waves-light" type="submit" name="action">actualizarUsuario <i class="material-icons right">send</i> </button> </td> </tr> </table> <p><span class="red accent-4">${insert}</span></p> </form:form> </c:when> <c:otherwise> <c:redirect url="salir.html"></c:redirect> </c:otherwise> </c:choose>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <link href="http://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet"> <link type="text/css" rel="stylesheet" href="css/materialize.min.css" media="screen,projection"/> <script type="text/javascript" src="https://code.jquery.com/jquery-2.1.1.min.js"></script> <script type="text/javascript" src="js/materialize.min.js"></script> <title>Inventario product market</title> </head> <body> <div class="container"> <div class="row"> <div class="col s12 indigo accent-4 "><h3>Product Market - Admin</h3></div> </div> <ul> <li> <a href="login.html" class="waves-effect waves-light btn">Iniciar sesión</a></li> </ul> </div> </body> </html>
@CHARSET "ISO-8859-1"; body {font-family: Verdana, Arial, sans-serif;font-size: 14px;} fieldset {margin: 25px 0 0 0;padding: 15px;border: 4px solid; } legend {padding: 8px; font-size: 16px;} label {float: left; width: 200px;} label.error { color: #D60404;} input, select, textarea { float:left; padding: 5px;background: #cccccc; margin:5px 30px 5px 10px;} .contenido { margin: 0 auto; width: 900px;} .input {width: 250px;} .enviar{margin: 20px auto;color: #000;} .enviar:hover {background: #A4A4A4;} .clear {clear: both;}