Struts2Spring3Hibernate4
Jump to navigation
Jump to search
Vademecum
Create the project skeleton
mvn archetype:generate -DarchetypeArtifactId=maven-archetype-webapp -DgroupId=org.tSprStrHib -DartifactId=TestStruts2Spring3Hibernate4 -Dversion=0.1 -DinteractiveMode=false cd TestStruts2Spring3Hibernate4
Configure the encoding to use [optional]
Edit the pom.xml and add the follow config
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> </properties>
Add the dependencies list
Find your libraries coordinates from http://search.maven.org/ and add at pom.xml file.
For example, edit pom.xml and replace the dependencies list with the follow:
<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <!--scope>test</scope--> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-config-browser-plugin</artifactId> <version>2.3.8</version> <!--scope>test</scope--> </dependency> <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-spring-plugin</artifactId> <version>2.3.8</version> </dependency> <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-dojo-plugin</artifactId> <version>2.3.8</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>3.2.0.RELEASE</version> <!--scope>test</scope--> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>3.2.0.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>3.2.0.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>3.2.0.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId> <version>3.2.0.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>3.2.0.RELEASE</version> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>4.1.9.Final</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.22</version> </dependency> <dependency> <groupId>javax.persistence</groupId> <artifactId>persistence-api</artifactId> <version>1.0.2</version> </dependency> </dependencies>
Downolad and test the dependencies with the command
mvn clean install mkdir -p src/main/java src/test/java
Create a new Eclipse Dynamic Web Project
Open Eclipse J2ee and create a new Dynamic Web Project in this way:
- on menu, click on 'File' -> 'New' -> 'Other...'
- select 'Web' -> 'Dynamic Web Project' and click 'Next ->'
- 'Project name:' "TestStruts2Spring3Hibernate4"
- click 'Next ->'
- select 'src' and click 'Remove'
- click 'Finish'
- on left panel, right click on 'TestStruts2Spring3Hibernate4' and select 'New' -> 'Folder'
- 'Folder name:' "main"
- click on 'Advanced > >'
- 'Link to alternate location': "YOUR_CREATED_MAVEN_PROJECT_PATH/src/main/java"
- click 'Finish'
- on left panel, right click on 'TestStruts2Spring3Hibernate4/main' and select 'Build Path' -> 'Use as Source Folder'
- on left panel, right click on 'TestStruts2Spring3Hibernate4' and select 'New' -> 'Folder'
- 'Folder name:' "test"
- click on 'Advanced > >'
- 'Link to alternate location': "YOUR_CREATED_MAVEN_PROJECT_PATH/src/test/java"
- click 'Finish'
- on left panel, right click on 'TestStruts2Spring3Hibernate4/test' and select 'Build Path' -> 'Use as Source Folder'
- on left panel, right click on 'TestStruts2Spring3Hibernate4/WebContent -> 'Delete' -> 'Ok'
- on left panel, right click on 'TestStruts2Spring3Hibernate4' and select 'New' -> 'Folder'
- 'Folder name:' "WebContent"
- click on 'Advanced > >'
- 'Link to alternate location': "YOUR_CREATED_MAVEN_PROJECT_PATH/src/main/webapp"
- click 'Finish'
- on left panel, right click on 'TestStruts2Spring3Hibernate4/WebContent/WEB-INF/' and select 'New' -> 'Folder'
- click on 'Advanced > >'
- 'Link to alternate location': "YOUR_CREATED_MAVEN_PROJECT_PATH/target/TestStruts2Spring3Hibernate4/WEB-INF/lib"
- click 'Finish'
- on left panel, right click on 'TestStruts2Spring3Hibernate4/Java Resources/Libraries/Web App Libraries' and select -> 'Build Path' -> 'Remove from Build Path'
- on left panel, select all files on 'TestStruts2Spring3Hibernate4/lib' and right click -> 'Build Path' -> 'Add to Build Path'
Test the project
Finally, you can run the example with your eclipse server or by
mvn tomcat:run
Create a first example
- File 'TestStruts2Spring3Hibernate4/WebContent/WEB-INF/index.jsp'
<html> <head> <title>Index</title> </head> <body> <a href="config-browser/index.action">index struts actions</a> </body> </html>
- File 'TestStruts2Spring3Hibernate4/WebContent/WEB-INF/classes/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="default" extends="struts-default"> <action name="listAllPersons" method="listAll" class="BeanActionPerson"> <result name="success">person/list.jsp</result> </action> <action name="deletePerson" method="delete" class="BeanActionPerson"> <result type="redirect">listAllPersons.action</result> </action> <action name="addPersonForm" class="BeanActionPerson"> <result>person/add.jsp</result> </action> <action name="addPerson" method="add" class="BeanActionPerson"> <result type="redirect">listAllPersons.action</result> </action> </package> </struts>
- File 'TestStruts2Spring3Hibernate4/WebContent/WEB-INF/web.xml'
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <display-name>TestStruts2Spring3Hibernate4</display-name> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <!-- Spring beans --> <context-param> <param-name>log4jConfigLocation</param-name> <param-value>/WEB-INF/resources/log4j.properties</param-value> </context-param> <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/applicationContext.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class> </listener> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!-- Struts 2 --> <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>*.action</url-pattern> </filter-mapping> </web-app>
- File 'TestStruts2Spring3Hibernate4/WebContent/WEB-INF/resources/log4j.properties'
### direct log messages to stdout ### log4j.rootLogger=ERROR, console, file log4j.appender.console=org.apache.log4j.ConsoleAppender log4j.appender.console.Target=System.out log4j.appender.console.layout=org.apache.log4j.SimpleLayout # AdminFileAppender - used to log messages in the admin.log file. log4j.appender.file=org.apache.log4j.FileAppender log4j.appender.file.File=logs/admin.log log4j.appender.file.layout=org.apache.log4j.SimpleLayout log4j.logger=DEBUG, console, file
- File 'TestStruts2Spring3Hibernate4/WebContent/WEB-INF/applicationContext.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.xsd"> <!-- Database Configuration --> <import resource="resources/spring/data_source.xml"/> <import resource="resources/spring/hibernate.xml"/> <!-- Beans Declaration --> <import resource="resources/spring/beans/person.xml"/> </beans>
- File 'TestStruts2Spring3Hibernate4/WebContent/WEB-INF/resources/spring/data_source.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.xsd"> <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="location"> <value>WEB-INF/resources/database.properties</value> </property> </bean> <!-- Data Source Declaration --> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="${jdbc.driverClassName}"/> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> </bean> </beans>
- File 'TestStruts2Spring3Hibernate4/WebContent/WEB-INF/resources/database.properties'
jdbc.driverClassName=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://127.0.0.1:3306/tSprStrHib jdbc.username=tSprStrHib jdbc.password=tSprStrHib
- File 'TestStruts2Spring3Hibernate4/WebContent/WEB-INF/resources/spring/hibernate.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" xmlns:tx="http://www.springframework.org/schema/tx" 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"> <!-- Hibernate session factory --> <bean id="sessionFactory" class="org.springframework.orm.hibernate4.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> <prop key="hibernate.hbm2ddl.auto">update</prop> </props> </property> <property name="packagesToScan" value="org.tSprStrHib.entity"/> </bean> <!-- Transaction Manager is defined --> <bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory"/> </bean> <tx:annotation-driven transaction-manager="transactionManager"/> </beans>
- File 'TestStruts2Spring3Hibernate4/WebContent/WEB-INF/resources/spring/beans/person.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.xsd"> <!-- DAO --> <bean id="BeanDAOPerson" class="org.tSprStrHib.hibernate.DAOPersonHibernate"> <property name="SessionFactory" ref="sessionFactory"/> </bean> <!-- BO --> <bean id="BeanBOPerson" class="org.tSprStrHib.domain.BOPerson"> <property name="DAOPerson" ref="BeanDAOPerson"/> </bean> <!-- Actions --> <bean id="BeanActionPerson" class="org.tSprStrHib.action.ActionPerson"> <property name="BOPerson" ref="BeanBOPerson"/> </bean> </beans>
- File 'TestStruts2Spring3Hibernate4/WebContent/person/list.jsp'
<%@ taglib prefix="s" uri="/struts-tags"%> <%@ taglib prefix="sx" uri="/struts-dojo-tags"%> <html> <head> <title>Person List</title> <sx:head debug="true" cache="false" compressed="false"/> </head> <body> <p>Person List</p> <div><s:url id="addPerson" value="addPersonForm.action"> </s:url><s:a href="%{addPerson}">Add</s:a></div> <s:if test="persons.size > 0"> <table id="persons"> <s:iterator value="persons"> <tr> <td><s:property value="firstname"/></td> <td><s:property value="lastname"/></td> <td><s:url id="deletePerson" value="deletePerson.action"> <s:param name="id" value="id"/></s:url> <s:a href="%{deletePerson}">Delete</s:a></td> </tr> </s:iterator> </table> </s:if> </body> </html>
- File 'TestStruts2Spring3Hibernate4/WebContent/person/add.jsp'
<%@ taglib prefix="s" uri="/struts-tags"%> <%@ taglib prefix="sx" uri="/struts-dojo-tags"%> <html> <head> <title>Add Person</title> <sx:head debug="true" cache="false" compressed="false"/> </head> <body> <p>Add User</p> <s:form name="addPersonForm" method="post" action="addPerson.action"> <s:textfield name="firstname" label="First Name"/> <s:textfield name="lastname" label="Last Name"/> <s:submit type="button" name="Add"/> </s:form> </body> </html>
- File 'TestStruts2Spring3Hibernate4/Java Resources/main/org/tSprStrHib/entity/Person'
package org.tSprStrHib.entity; 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 = "person") public class Person { @Id @Column @GeneratedValue(strategy = GenerationType.AUTO) private int id; @Column private String firstname; @Column private String lastname; public int getId() { return id; } public void setId(int _id) { id = _id; } public String getFirstname() { return firstname; } public void setFirstname(String _firstname) { firstname = _firstname; } public String getLastname() { return lastname; } public void setLastname(String _lastname) { lastname = _lastname; } }
- File 'TestStruts2Spring3Hibernate4/Java Resources/main/org/tSprStrHib/persistence/DAOPerson'
package org.tSprStrHib.persistence; import java.util.List; import org.tSprStrHib.entity.Person; public interface DAOPerson { public void add(Person _person); public void save(Person _person); public void delete(Person _person); public List<Person> getAll(); public Person getById(int _id); }
- File 'TestStruts2Spring3Hibernate4/Java Resources/main/org/tSprStrHib/hibernate/DAOHibernate'
package org.tSprStrHib.hibernate; import org.hibernate.Session; import org.hibernate.SessionFactory; public abstract class DAOHibernate { private SessionFactory m_session_factory; public void setSessionFactory(SessionFactory _sessionFactory) { m_session_factory = _sessionFactory; } public Session getSession() { return m_session_factory.getCurrentSession(); } }
- File 'TestStruts2Spring3Hibernate4/Java Resources/main/org/tSprStrHib/hibernate/DAOHibernatePerson'
package org.tSprStrHib.hibernate; import java.util.List; import org.springframework.transaction.annotation.Transactional; import org.tSprStrHib.entity.Person; import org.tSprStrHib.persistence.DAOPerson; public class DAOPersonHibernate extends DAOHibernate implements DAOPerson { @Override @Transactional public void add(Person _person) { getSession().save(_person); } @Override @Transactional public void save(Person _person) { getSession().save(_person); } @Override @Transactional public void delete(Person _person) { getSession().delete(_person); } @Override @Transactional public List<Person> getAll() { @SuppressWarnings("unchecked") List<Person> list = (List<Person>) getSession().createCriteria(Person.class).list(); return list; } @Override @Transactional public Person getById(int _id) { Person person = (Person) getSession().get(Person.class, _id); return person; } }
- File 'TestStruts2Spring3Hibernate4/Java Resources/main/org/tSprStrHib/domain/BOPerson'
package org.tSprStrHib.domain; import java.util.List; import org.apache.log4j.Logger; import org.tSprStrHib.entity.Person; import org.tSprStrHib.persistence.DAOPerson; public class BOPerson { private static final Logger LOGGER = Logger.getLogger(BOPerson.class.getName()); private DAOPerson m_dao_person; public void setDAOPerson(DAOPerson _dao_person) { m_dao_person = _dao_person; } public void add(Person _person) { LOGGER.debug("Adding the following person: " + _person.getFirstname() + ", " + _person.getLastname()); m_dao_person.add(_person); } public void delete(Person _person) { LOGGER.debug("Deleting the following person: " + _person.getFirstname() + ", " + _person.getLastname()); m_dao_person.delete(_person); } public void update(Person _person) { LOGGER.debug("Updating the following person: " + _person.getFirstname() + ", " + _person.getLastname()); m_dao_person.save(_person); } public List<Person> getAll() { LOGGER.debug(BOPerson.class.getName() + ": Getting all persons"); return m_dao_person.getAll(); } public Person getById(int _id) { return m_dao_person.getById(_id); } }
- File 'TestStruts2Spring3Hibernate4/Java Resources/main/org/tSprStrHib/action/ActionPerson'
package org.tSprStrHib.action; import java.util.List; import org.apache.log4j.Logger; import com.opensymphony.xwork2.Action; import com.opensymphony.xwork2.Preparable; import org.tSprStrHib.entity.Person; import org.tSprStrHib.domain.BOPerson; public class ActionPerson implements Preparable { private static final Logger LOGGER = Logger.getLogger(ActionPerson.class.getName()); private BOPerson m_bo_person; public void setBOPerson(BOPerson _bo_person) { this.m_bo_person = _bo_person; } private List<Person> m_persons; public List<Person> getPersons() { return m_persons; } private int m_id; public int getId() { return m_id; } public void setId(int _id) { m_id = _id; } private String m_firstname; public String getFirstname() { return m_firstname; } public void setFirstname(String _firstname) { m_firstname = _firstname; } private String m_lastname; public String getLastname() { return m_lastname; } public void setLastname(String _lastname) { m_lastname = _lastname; } public void prepare() throws Exception { } public String execute() { return Action.SUCCESS; } public String listAll() { LOGGER.debug("Get all persons"); m_persons = m_bo_person.getAll(); LOGGER.debug("Number of persons: " + m_persons.size()); return Action.SUCCESS; } public String delete() { Person person = m_bo_person.getById(m_id); LOGGER.debug("Delete person " + person.getFirstname() + " with id " + person.getId()); m_bo_person.delete(person); return Action.SUCCESS; } public String add() { Person person = new Person(); person.setFirstname(m_firstname); person.setLastname(m_lastname); LOGGER.debug("Add person: " + person.getFirstname()); m_bo_person.add(person); return Action.SUCCESS; } }
Create database and user
mysql -h 127.0.0.1 -u root mysql> CREATE USER 'tSprStrHib' IDENTIFIED BY 'tSprStrHib'; mysql> CREATE DATABASE tSprStrHib CHARACTER SET 'utf8'; mysql> GRANT ALL PRIVILEGES ON tSprStrHib.* TO 'tSprStrHib' WITH GRANT OPTION; mysql> FLUSH PRIVILEGES; mysql> \q
Test the example project
mvn tomcat:run
References