Struts Spring Hibernate
In this section, you will learn about the Struts, Spring and Hibernate Integration.
The tools & technology used is given below :
- struts 2.1.8
- spring 2.5.6
- hibernate 3.2.7
- dom4j 1.6.1
- cglib 2.2
- Eclipse 3.5
The SQL query used to create the employee table is given below :
CREATE TABLE `employee` ( `EMPLOYEE_ID` bigint(20) unsigned NOT NULL auto_increment, `NAME` varchar(45) NOT NULL, `ADDRESS` varchar(255) NOT NULL, `CREATED_DATE` datetime NOT NULL, PRIMARY KEY (`EMPLOYEE_ID`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8
Three easy steps to integrate Struts, Spring and Hibernate :
- Collect all the jar file needed into project lib.
- To integrate Struts 2 with Spring, incorporate ContextLoaderListener.
- To integrate Spring with Hibernate, incorporate LocalSessionFactoryBean.
Let us discuss these steps in detail using a example :
Example
The project structure is given below:

The jar file used is given below :
![]() |
![]() |
CODES
web.xml
In the below example, Listener class ContextLoaderListener loads SpringBeans.xml file(which load beans), and also interact with Struts. It also loads bean class LocalSessionFactoryBean which will deal with Hibernate.
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> <display-name>StrutsSpringHibernate</display-name> <filter> <filter-name>struts2</filter-name> <filter-class> org.apache.struts2.dispatcher.FilterDispatcher </filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/SpringBeans.xml</param-value> </context-param> <listener> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class> </listener> </web-app>
SpringBeans.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 -->
<bean
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location">
<value>/WEB-INF/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}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</bean>
<!-- 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>net/roseindia/hibernate/Employee.hbm.xml</value>
</list>
</property>
</bean>
<!-- Beans Declaration -->
<bean id="employeeAction" class="net.roseindia.employee.action.EmployeeAction">
<property name="employeeDAO" ref="employeeDAO" />
</bean>
<bean id="employeeDAO" class="net.roseindia.employee.dao.impl.EmployeeDAOImpl" >
<property name="sessionFactory" ref="sessionFactory" />
</bean>
</beans>
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> <constant name="struts.devMode" value="true" /> <package name="default" extends="struts-default" namespace="/" > <action name="addEmployeeAction" class="net.roseindia.employee.action.EmployeeAction" method="addEmployee" > <result name="success">pages/employee.jsp</result> </action> <action name="listEmployeeAction" class="net.roseindia.employee.action.EmployeeAction" method="listEmployee" > <result name="success">pages/employee.jsp</result> </action> </package> </struts>
Employee.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="net.roseindia.employee.model.Employee" table="employee"> <id name="employeeId" type="java.lang.Long"> <column name="EMPLOYEE_ID" /> <generator class="identity" /> </id> <property name="name" type="string"> <column name="NAME" length="45" not-null="true" /> </property> <property name="address" type="string"> <column name="ADDRESS" not-null="true" /> </property> <property name="createdDate" type="timestamp"> <column name="CREATED_DATE" length="19" not-null="true" /> </property> </class> </hibernate-mapping>
Employee.java
package net.roseindia.employee.model;
import java.util.Date;
public class Employee implements java.io.Serializable {
private Long employeeId;
private String name;
private String address;
private Date createdDate;
public Employee() {
}
public Employee(Long employeeId, String name, String address,
Date createdDate) {
this.employeeId = employeeId;
this.name = name;
this.address = address;
this.createdDate = createdDate;
}
public Long getEmployeeId() {
return employeeId;
}
public void setEmployeeId(Long employeeId) {
this.employeeId = employeeId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public Date getCreatedDate() {
return createdDate;
}
public void setCreatedDate(Date createdDate) {
this.createdDate = createdDate;
}
}
EmployeeDAO.java
package net.roseindia.employee.model;
import java.util.Date;
public class Employee implements java.io.Serializable {
private Long employeeId;
private String name;
private String address;
private Date createdDate;
public Employee() {
}
public Employee(Long employeeId, String name, String address,
Date createdDate) {
this.employeeId = employeeId;
this.name = name;
this.address = address;
this.createdDate = createdDate;
}
public Long getEmployeeId() {
return employeeId;
}
public void setEmployeeId(Long employeeId) {
this.employeeId = employeeId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public Date getCreatedDate() {
return createdDate;
}
public void setCreatedDate(Date createdDate) {
this.createdDate = createdDate;
}
}
EmployeeDAOImpl.java
package net.roseindia.employee.dao.impl;
import java.util.List;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import net.roseindia.employee.dao.EmployeeDAO;
import net.roseindia.employee.model.Employee;
public class EmployeeDAOImpl extends HibernateDaoSupport implements EmployeeDAO{
//add the customer
public void addEmployee(Employee employee){
getHibernateTemplate().save(employee);
}
//return all the customers in list
public List<Employee> listEmployee(){
return getHibernateTemplate().find("from Employee");
}
}
EmployeeAction.java
package net.roseindia.employee.action;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import net.roseindia.employee.dao.EmployeeDAO;
import net.roseindia.employee.model.Employee;
import com.opensymphony.xwork2.ModelDriven;
public class EmployeeAction implements ModelDriven{
Employee employee = new Employee();
List<Employee> employeeList = new ArrayList<Employee>();
EmployeeDAO employeeDAO;
//Spring Dependency Injection
public void setEmployeeDAO(EmployeeDAO employeeDAO) {
this.employeeDAO = employeeDAO;
}
public Object getModel() {
return employee;
}
public List<Employee> getEmployeeList() {
return employeeList;
}
public void setEmployeeList(List<Employee> employeeList) {
this.employeeList = employeeList;
}
//saving employee record
public String addEmployee() throws Exception{
//save employee
employee.setCreatedDate(new Date());
employeeDAO.addEmployee(employee);
//reload the employee list
employeeList = null;
employeeList = employeeDAO.listEmployee();
return "success";
}
//list all customers
public String listEmployee() throws Exception{
employeeList = employeeDAO.listEmployee();
return "success";
}
}
database.properties
jdbc.driverClassName=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://192.168.10.13:3306/company jdbc.username=root jdbc.password=root
employee.jsp
<%@ taglib prefix="s" uri="/struts-tags" %> <html> <head> </head> <body> <h2><i>Integration Example - Struts 2,Spring & Hibernate</i></h2> <hr></hr> <h3><i>Add New Employee</i></h3> <s:form action="addEmployeeAction" > <s:textfield name="name" label="Employee Name" value="" size="37"/> <s:textarea name="address" label="Employee Address" value="" cols="28" rows="3" /> <s:submit align="center"/> </s:form> <hr></hr> <h3><i>Employee List</i></h3> <s:if test="employeeList.size() > 0"> <table border="2px" cellpadding="8px"> <tr> <th>Employee<br/>ID</th> <th>Name</th> <th>Address</th> <th>Created Date</th> </tr> <s:iterator value="employeeList" status="userStatus"> <tr> <td><s:property value="employeeId" /></td> <td><s:property value="name" /></td> <td><s:property value="address" /></td> <td><s:date name="createdDate" format="dd/MM/yyyy" /></td> </tr> </s:iterator> </table> </s:if> <br/> <br/> </body> </html>
OUTPUT
When you call the following URL :
http://localhost:9090/StrutsSpringHibernate/listEmployeeAction.action
you will get the following page :


