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

SSH 框架整合實戰指南:Struts2 + Spring + Hibernate 核心配置詳解

     編輯:Java 綜合教學

SSH 框架整合實戰指南:Struts2 + Spring + Hibernate 核心配置詳解

SSH(Struts2 + Spring + Hibernate)曾是 Java EE 開發的經典組合。雖然微服務架構下 Spring Boot 更主流,但理解 SSH 整合原理對維護老項目、掌握 IOC/AOP 核心機制仍有重要價值。本文梳理三大核心配置文件的關鍵點,助你快速搭建可運行的 SSH 基礎架構。

一、web.xml:容器啟動入口與核心組件註冊

web.xml 是 Web 應用的部署描述符,負責啟動 Spring 容器、註冊 Struts2 過濾器。

<!-- 1. Struts2 核心過濾器 -->
<filter>
    <filter-name>struts2</filter-name>
    <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

<!-- 2. Spring 容器啟動監聽器 -->
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:applicationContext.xml</param-value>
</context-param>
<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

關鍵點:

  • StrutsPrepareAndExecuteFilter 取代舊版 FilterDispatcher,支援 Struts 2.3+。
  • contextConfigLocation 指定 Spring 配置文件路徑,ContextLoaderListener 讀取該路徑初始化 ApplicationContext。

二、applicationContext.xml:Spring 核心容器配置與 Hibernate 整合

此文件定義數據源、SessionFactory、事務管理等核心 Bean。

<!-- 1. 數據源 (DBCP 連接池) -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
    <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
    <property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl"/>
    <property name="username" value="accp"/>
    <property name="password" value="accp"/>
</bean>

<!-- 2. SessionFactory -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.dialect">org.hibernate.dialect.Oracle9Dialect</prop>
            <!-- 可加入 show_sql, hbm2ddl.auto 等 -->
        </props>
    </property>
    <property name="mappingResources">
        <list>
            <value>com/example/User.hbm.xml</value>
        </list>
    </property>
</bean>

<!-- 3. 事務管理器 & 事務增強 (建議補全) -->
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    <property name="sessionFactory" ref="sessionFactory"/>
</bean>
<tx:annotation-driven transaction-manager="transactionManager"/>

關鍵點:

  • LocalSessionFactoryBean 將 Hibernate SessionFactory 納入 Spring 管理。
  • mappingResources 列出所有 .hbm.xml 映射文件,或改用 packagesToScan 自動掃描實體類。
  • 生產環境建議替換為 HikariCP 或 Druid 連接池,並啟用註解驅動事務。

三、struts.xml:Action 交由 Spring 管理

Struts2 的 Action 實例化完全移交給 Spring 容器,struts.xml 中 class 屬性填寫 Spring Bean 的 ID。

<package name="default" namespace="/" extends="struts-default">
    <action name="userAction" class="userActionBean">  <!-- 此處為 Spring Bean ID -->
        <result name="success">/success.jsp</result>
    </action>
</package>

對應 applicationContext.xml 中:

<bean id="userActionBean" class="com.example.action.UserAction" scope="prototype">
    <property name="userService" ref="userService"/>
</bean>

關鍵點:

  • Action Bean 必須設為 scope="prototype",確保每次請求創建新實例,避免線程安全問題。
  • Struts2 慣例插件可進一步簡化配置,但顯式聲明更利於理解依賴關係。

整合驗證與常見坑

  1. 啟動順序:ContextLoaderListener → Spring 容器初始化 → Struts2 過濾器初始化 → 從 Spring 獲取 Action。
  2. jar 包衝突:注意 struts2-spring-plugin 版本與 Spring、Struts2 核心版本一致。
  3. Hibernate 版本:示例用 Hibernate 3,若升級至 5.x 需將 LocalSessionFactoryBean 包路徑改為 org.springframework.orm.hibernate5。

掌握以上三大配置文件的核心邏輯,即可搭建起一個清晰、可維護的 SSH 基礎架構,為後續業務開發打下堅實基礎。

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