Struts+Hibernate+Spring组合简单范例("Struts、Hibernate与Spring整合实战简易教程")
原创
一、引言
Struts、Hibernate和Spring是Java Web开发中非常流行的三个框架,它们分别解决了Web开发中的不同问题。Struts负责Web层的请求处理,Hibernate负责数据持久化,而Spring则负责业务逻辑和事务管理。本文将通过一个简洁的例子,介绍怎样将这三个框架整合在一起,实现一个完整的Java Web应用程序。
二、环境准备
在起初整合之前,需要确保以下环境已经准备好:
- Java开发工具包(JDK)1.8或以上版本
- Eclipse或IntelliJ IDEA等集成开发环境
- Apache Struts 2.5.18
- Hibernate 5.2.10
- Spring 5.0.3.RELEASE
- MySQL数据库
三、创建项目
在Eclipse或IntelliJ IDEA中创建一个Dynamic Web Project,并添加以下依靠项到项目的lib目录中:
- struts2-core-2.5.18.jar
- hibernate-core-5.2.10.Final.jar
- spring-core-5.0.3.RELEASE.jar
- spring-web-5.0.3.RELEASE.jar
- spring-orm-5.0.3.RELEASE.jar
- mysql-connector-java-5.1.47.jar
四、整合步骤
4.1 配置Struts2
首先,在项目的WEB-INF目录下创建struts.xml文件,并添加以下内容:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
"http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
<package name="default" extends="struts-default">
<action name="userAction" class="com.example.action.UserAction">
<result name="success">/success.jsp</result>
</action>
</package>
</struts>
4.2 配置Hibernate
在项目的src目录下创建hibernate.cfg.xml文件,并添加以下内容:
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost:3306/your_database</property>
<property name="connection.username">root</property>
<property name="connection.password">your_password</property>
<property name="connection.pool_size">1</property>
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="show_sql">true</property>
<property name="hibernate.temp.dir">java.io.tmpdir</property>
<mapping resource="com/example/domain/User.hbm.xml"/>
</session-factory>
</hibernate-configuration>
4.3 配置Spring
在项目的src目录下创建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"
xmlns:context="http://www.springframework.org/schema/context"
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/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd">
<context:component-scan base-package="com.example"/>
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/your_database"/>
<property name="username" value="root"/>
<property name="password" value="your_password"/>
</bean>
<bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<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>com/example/domain/User.hbm.xml</value>
</list>
</property>
</bean>
<bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
<tx:annotation-driven transaction-manager="transactionManager"/>
</beans>
4.4 配置Web.xml
在项目的WEB-INF目录下的web.xml文件中添加以下内容:
<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">
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
五、创建实体类和映射文件
创建一个名为User的实体类,位于com.example.domain包下,并添加以下内容:
package com.example.domain;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private String username;
private String password;
// 省略getter和setter方法
}
创建User.hbm.xml映射文件,位于com.example.domain包下,并添加以下内容:
<?xml version="1.0" encoding="UTF-8"?>
<!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.example.domain.User" table="user">
<id name="id" column="id">
<generator class="native"/>
</id>
<property name="username" column="username"/>
<property name="password" column="password"/>
</class>
</hibernate-mapping>
六、创建Action类
创建一个名为UserAction的Action类,位于com.example.action包下,并添加以下内容:
package com.example.action;
import com.example.domain.User;
import com.example.service.UserService;
import com.opensymphony.xwork2.ActionSupport;
public class UserAction extends ActionSupport {
private UserService userService;
private User user;
public String execute() {
userService.saveUser(user);
return SUCCESS;
}
// 省略getter和setter方法
}
七、创建Service类
创建一个名为UserService的Service类,位于com.example.service包下,并添加以下内容:
package com.example.service;
import com.example.domain.User;
public interface UserService {
void saveUser(User user);
}
创建UserService的实现类,名为UserServiceImpl,并添加以下内容:
package com.example.service.impl;
import com.example.domain.User;
import com.example.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.hibernate5.HibernateTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@Service
public class UserServiceImpl implements UserService {
@Autowired
private HibernateTemplate hibernateTemplate;
@Override
@Transactional
public void saveUser(User user) {
hibernateTemplate.save(user);
}
}
八、测试程序
完成上述步骤后,部署项目到Tomcat服务器,并启动服务器。在浏览器中访问http://localhost:8080/your_project/userAction.action,并传入以下参数:
- username: admin
- password: 123456
如果胜利保存数据到数据库,并且页面跳转到success.jsp,则即整合胜利。
九、总结
本文通过一个简洁的例子,介绍了怎样将Struts、Hibernate和Spring三个框架整合在一起。在实际项目中,这三个框架的整合可以减成本时间开发快速,降低耦合度,允许项目更加易于维护。当然,本文只是一个入门级的教程,还有很多高级特性等待读者去探索。