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

Struts2 與 Hibernate 整合完整配置指南與常見問題解析

     編輯:Java 綜合教學

前言

當掌握了 Struts2 與 Hibernate 兩大框架的基礎用法後,將它們整合到一個 Web 專案中是邁向企業級開發的關鍵一步。本文將詳細記錄整合過程中的完整配置步驟、jar 包管理最佳實踐,以及開發過程中遇到的典型坑點與解決方案,幫助開發者快速搭建穩健的 SS 架構基礎環境。

一、統一管理 Jar 包:建立自定義使用者程式庫

專案引入雙框架意味著大量的 jar 包。若全部直接拋入 WEB-INF/lib 目錄,不僅難以維護,還易發生版本衝突。Eclipse 提供的 User Libraries(使用者程式庫) 功能可完美解決此問題。

操作步驟:

  1. 開啟 Window → Preferences → Java → Build Path → User Libraries。
  2. 點擊 New,分別命名為 Struts2-Core 與 Hibernate-Core。
  3. 選中程式庫,點擊 Add External JARs...,將對應框架的核心 jar 包(如 struts2-core-2.3.x.jar、hibernate-core-4.3.x.jar 及其依賴)全部加入。
  4. 完成後,在專案屬性的 Java Build Path → Libraries → Add Library → User Library 中勾選這兩個自定義程式庫即可。

建立 User Library

加入 Jar 包

二、核心配置文件詳解

1. web.xml:註冊 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>

注意: Struts 2.3 版本後核心過濾器類為 StrutsPrepareAndExecuteFilter,舊版本為 FilterDispatcher,請勿混淆。

2. struts.xml:最小化配置

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "https://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
    <package name="default" namespace="/" extends="struts-default">
        <!-- Action 映射將在此處配置 -->
    </package>
</struts>

3. hibernate.cfg.xml:資料庫連線與 Session 策略

<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "https://www.hibernate.org/dtd/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:///hibernate</property>
        <property name="connection.username">root</property>
        <property name="connection.password">123</property>
        <!-- 方言與 SQL 輸出 -->
        <property name="dialect">org.hibernate.dialect.MySQL5Dialect</property>
        <property name="show_sql">true</property>
        <property name="format_sql">true</property>
        <!-- 自動更新表結構 -->
        <property name="hbm2ddl.auto">update</property>
        <!-- 關鍵:啟用 CurrentSessionContext,讓 Session 與執行緒綁定 -->
        <property name="hibernate.current_session_context_class">thread</property>
    </session-factory>
</hibernate-configuration>

重點說明: hibernate.current_session_context_class=thread 讓我們可以在 DAO 中直接呼叫 sessionFactory.getCurrentSession() 獲取與當前執行緒綁定的 Session,無需手動開啟/關閉,極大簡化了事務管理代碼。

三、常見整合坑點與避雷指南

  • Jar 包版本衝突: Struts2 依賴的 javassist、ognl 等版本需與 Hibernate 兼容,建議以 Struts2 官方發布包為準。
  • 缺少 MySQL 驅動: 確保 mysql-connector-java.jar 已加入類別路徑。
  • SessionFactory 建立失敗: 檢查 hibernate.cfg.xml 中的資料庫 URL、用戶名密碼,以及實體映射文件(*.hbm.xml 或註解類)是否已在 <mapping> 標籤中註冊。
  • 事務未提交: 整合環境下建議使用 Spring 管理事務(@Transactional),若手動管理,務必在 finally 區塊中提交或回滾並關閉 Session。

四、驗證整合是否成功

編寫一個簡單的 Action,注入 DAO,嘗試查詢資料庫並返回結果頁。若控制台輸出 Hibernate 生成的 SQL 語句且無異常拋出,恭喜你,SS 整合環境已就緒,可以開始愉快地開發業務邏輯了!

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