首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Java SSH 框架整合詳解:Struts2 + Spring + Hibernate 架構解析

     編輯:Java 綜合教學

Java SSH 框架整合詳解:Struts2 + Spring + Hibernate 架構解析

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、映射文件、緩存

SSH 架構圖解

SSH架構圖

對象調用流程圖

請求處理流程

  1. 用戶發起 HTTP 請求 → Struts2 Filter 攔截。
  2. ActionMapping 匹配對應 Action,ActionProxy 創建 Action 實例。
  3. 攔截器鏈 執行(參數注入、驗證、文件上傳等)。
  4. Action.execute() 調用 Service 業務邏輯(Spring 注入)。
  5. Service 調用 DAO 操作數據庫(Hibernate Session)。
  6. 返回 ModelAndView 或 JSON → Result 視圖渲染(JSP/FreeMarker/Velocity)。
  7. 響應返回瀏覽器。

關鍵整合配置要點

1. Spring 管理 Service、DAO、Hibernate SessionFactory

<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"/>

2. Struts2 Action 交由 Spring 管理

<!-- struts.xml -->
<constant name="struts.objectFactory" value="spring" />
<!-- 或在 Spring 配置中掃描 Action 包 -->
<context:component-scan base-package="com.action" />

3. Spring 整合 Hibernate 模板簡化 DAO

@Repository
public class UserDaoImpl extends HibernateDaoSupport implements UserDao {
    @Override
    public void save(User user) {
        getHibernateTemplate().save(user);
    }
}

常見問題與避坑指南

  • 懶加載異常:Service 層開啟事務(@Transactional)保證 Session 存活,或使用 OpenSessionInViewFilter。
  • 事務不生效:檢查 @Transactional 所在類是否被 Spring 掃描、方法是否 public、異常是否為 RuntimeException。
  • Jar 包衝突:Struts2 依賴的 XWork、OGNL、Commons-FileUpload 版本需與 Spring/Hibernate 兼容,建議用 Maven/BOM 管理依賴。
  • 性能優化:二級緩存(Ehcache/Redis)、批量插入、FetchType.LAZY 默認、合理使用 HQL/Criteria/原生 SQL。

現代化演進建議

  1. Struts2 → Spring MVC / Spring Boot Web:更輕量、注解驅動、RESTful 原生支持。
  2. Hibernate → JPA (Hibernate 實現) / MyBatis:JPA 規范化、MyBatis SQL 可控性強。
  3. XML 配置 → Java Config / Spring Boot Auto-Configuration:零配置、約定優於配置。
  4. 單體 → 微服務:Spring Cloud / Dubbo + Registry(Nacos/Eureka/Consul)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved