當掌握了 Struts2 與 Hibernate 兩大框架的基礎用法後,將它們整合到一個 Web 專案中是邁向企業級開發的關鍵一步。本文將詳細記錄整合過程中的完整配置步驟、jar 包管理最佳實踐,以及開發過程中遇到的典型坑點與解決方案,幫助開發者快速搭建穩健的 SS 架構基礎環境。
專案引入雙框架意味著大量的 jar 包。若全部直接拋入 WEB-INF/lib 目錄,不僅難以維護,還易發生版本衝突。Eclipse 提供的 User Libraries(使用者程式庫) 功能可完美解決此問題。
Window → Preferences → Java → Build Path → User Libraries。Struts2-Core 與 Hibernate-Core。struts2-core-2.3.x.jar、hibernate-core-4.3.x.jar 及其依賴)全部加入。Java Build Path → Libraries → Add Library → User Library 中勾選這兩個自定義程式庫即可。

<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,請勿混淆。
<?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>
<!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,無需手動開啟/關閉,極大簡化了事務管理代碼。
javassist、ognl 等版本需與 Hibernate 兼容,建議以 Struts2 官方發布包為準。mysql-connector-java.jar 已加入類別路徑。hibernate.cfg.xml 中的資料庫 URL、用戶名密碼,以及實體映射文件(*.hbm.xml 或註解類)是否已在 <mapping> 標籤中註冊。編寫一個簡單的 Action,注入 DAO,嘗試查詢資料庫並返回結果頁。若控制台輸出 Hibernate 生成的 SQL 語句且無異常拋出,恭喜你,SS 整合環境已就緒,可以開始愉快地開發業務邏輯了!