SSH(Struts + Spring + Hibernate)曾是 Java EE 企業級開發的經典整合框架,雖然現代開發轉向 Spring Boot / Spring Cloud,但理解其分層架構與整合原理對掌握企業級應用演進歷程、維護老項目仍有重要價值。
| 框架 | 層級 | 核心作用 | 關鍵技術 |
|---|---|---|---|
| Struts 2 | Web 表現層 | MVC 控制器,接收請求、數據封裝、視圖跳轉 | Action、Interceptor、OGNL、Result、Struts.xml |
| Spring | 業務邏輯層 / 容器 | IOC 容器管理 Bean 生命周期,AOP 事務管理,整合各層 | IOC、AOP、JdbcTemplate、事務管理、Spring MVC |
| Hibernate | 持久化數據層 | ORM 框架,對象關係映射,簡化 JDBC 操作 | SessionFactory、HQL、Criteria、映射文件、緩存 |


<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">...</bean>
<bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="packagesToScan" value="com.entity"/>
<property name="hibernateProperties">...</property>
</bean>
<bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
<tx:annotation-driven transaction-manager="transactionManager"/>
<!-- struts.xml --> <constant name="struts.objectFactory" value="spring" /> <!-- 或在 Spring 配置中掃描 Action 包 --> <context:component-scan base-package="com.action" />
@Repository
public class UserDaoImpl extends HibernateDaoSupport implements UserDao {
@Override
public void save(User user) {
getHibernateTemplate().save(user);
}
}
@Transactional)保證 Session 存活,或使用 OpenSessionInViewFilter。@Transactional 所在類是否被 Spring 掃描、方法是否 public、異常是否為 RuntimeException。