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

SSH (Struts2+Spring+Hibernate) 整合實戰指南:依賴管理、配置順序與包衝突解決

     編輯:程式設計綜合問答

SSH 框架整合是 Java Web 經典架構,但版本兼容性、Jar 包衝突、配置順序常讓初學者卡殼。本文提供基於 MyEclipse 的標準化整合流程,涵蓋核心庫選型、配置文件編寫、衝突排查全過程。

整合版本基線 (經驗驗證穩定組合)

框架推薦版本核心 Jar 包組
Struts 22.3.x / 2.5.xStruts2 Core Libraries + Struts2 Spring Libraries
Spring4.3.x / 5.0.xCore, AOP, Context, Web, JDBC, ORM, Tx, Expression
Hibernate5.2.x / 5.4.xCore, EntityManager, JPA API, Validator

標準化整合步驟

1. 創建 Web 項目並導入 Struts 2


web.xml 核心配置:
<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>

關鍵包:struts2-core-xxx.jar, struts2-spring-plugin-xxx.jar (整合 Spring 必須)

2. 導入 Spring 框架


web.xml 添加監聽器:
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/classes/applicationContext.xml</param-value>
</context-param>
<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

核心包 (Spring 5 為例):

  • spring-core, spring-beans, spring-context, spring-aop
  • spring-web, spring-webmvc (Web 環境必須)
  • spring-jdbc, spring-orm, spring-tx (Hibernate 整合必須)
  • spring-expression (SpEL 表達式支持)

3. 導入 Hibernate 框架

核心包:

  • hibernate-core
  • hibernate-entitymanager (JPA 支持)
  • hibernate-validator (Bean Validation)

關鍵依賴:數據庫驅動 (MySQL: mysql-connector-java, Oracle: ojdbc8 等)

4. 核心配置文件



<bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close">
    <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
    <property name="url" value="jdbc:mysql://localhost:3306/dbname"/>
    <property name="username" value="root"/>
    <property name="password" value="password"/>
</bean>

<bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="packagesToScan" value="com.example.entity"/>
    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
            <prop key="hibernate.show_sql">true</prop>
            <prop key="hibernate.hbm2ddl.auto">update</prop>
        </props>
    </property>
</bean>

<bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
    <property name="sessionFactory" ref="sessionFactory"/>
</bean>

<tx:annotation-driven transaction-manager="transactionManager"/>

包衝突診斷與解決策略

常見衝突類型

衝突現象典型原因解決方案
NoSuchMethodError同一類不同版本 (如 asm, cglib)統一版本,排除傳遞依賴
ClassNotFoundException缺少必要包 (如 jta, slf4j-api)補全缺失依賴
LinkageError類加載器雙親委派衝突檢查 WEB-INF/lib 與服務器共享庫
多個 SLF4J 綁定警告classpath 存在多個 logging 實現保留一個 (如 logback-classic),排除其它

Maven/Gradle 依賴管理最佳實踐



<properties>
    <struts2.version>2.5.28</struts2.version>
    <spring.version>5.3.21</spring.version>
    <hibernate.version>5.6.10.Final</hibernate.version>
</properties>


<dependency>
    <groupId>org.apache.struts</groupId>
    <artifactId>struts2-spring-plugin</artifactId>
    <version>${struts2.version}</version>
    <exclusions>
        <exclusion><groupId>org.springframework</groupId><artifactId>spring-core</artifactId></exclusion>
        <exclusion><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId></exclusion>
    </exclusions>
</dependency>

啟動順序與依賴關係


容器啟動順序:
1. ServletContextListener (Spring ContextLoaderListener) 
   → 初始化 Spring 容器 (applicationContext.xml)
   → 創建 DataSource, SessionFactory, TransactionManager
   
2. Filter (StrutsPrepareAndExecuteFilter)
   → 初始化 Struts 2 (struts.xml)
   → 通過 Spring 插件獲取 Action Bean (從 Spring 容器)
   
3. Servlet (如 DispatcherServlet 若配置)
   → 初始化 Spring MVC (若使用)

關鍵點:Spring 必須先於 Struts 2 初始化,否則 Action 注入失敗。

避坑清單

  1. 版本鎖定:全項目統一 Spring 版本,禁止混用 4.x/5.x
  2. 插件匹配:struts2-spring-plugin 版本必須與 Struts2 核心版本一致
  3. Hibernate 版本對應 Spring ORM:Spring 5.x 需 Hibernate 5.2+
  4. 數據庫驅動版本:MySQL 8.0+ 需 mysql-connector-java 8.0+ 且驅動類名 com.mysql.cj.jdbc.Driver
  5. 日誌統一:引入 slf4j-api + logback-classic,排除 commons-logging, log4j
  6. 編碼統一:所有配置文件、Java 文件、數據庫連接均用 UTF-8

總結

SSH 整合核心在於版本兼容矩陣、配置加載順序 (Spring 先於 Struts)、依賴傳遞去重。建議使用 Maven/Gradle 管理依賴,鎖定版本屬性,排除衝突傳遞依賴。新項目優先考慮 Spring Boot 簡化配置,維護舊項目時遵循「最小驚訝原則」最小化變更。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved