嚴重: Exception starting filter struts2 java.lang.ClassNotFoundException: org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
Eclipse 發布專案時,未將 User Library 引用的 Jar 包自動複製到 WEB-INF/lib 目錄。 編譯期類別路徑正確,但運行期 Tomcat 類加載器只掃描 WEB-INF/lib,找不到 Struts2 核心類。
將所有 Jar 直接拖入 WebContent/WEB-INF/lib。雖能解決問題,但失去了 User Library 統一管理、跨專案複用的優勢,且專案體積膨脹。
路徑:Window → Preferences → MyEclipse → Servers → 選中 Tomcat → Launch 選 Run。實測此法無法解決類加載問題,屬於誤傳方案。
此為標準解法,讓 Eclipse 發布時自動將 User Library 的 Jar 複製到 WEB-INF/lib。
Struts2-Core、Hibernate-Core 等 User Library → Finish。



Deployment Assembly 定義了專案構建輸出到伺服器的映射規則。將 User Library 加入其中,等同於告訴 Eclipse:「發布 WAR 時,請把這些程式庫的 Jar 也打包進 WEB-INF/lib」。這符合 Java EE 標準 Web 應用打包規範,也是 Maven/Gradle 等構建工具的默認行為。
web.xml 中 filter-class 全限定名拼寫正確(Struts 2.3+ 為 StrutsPrepareAndExecuteFilter)。struts.xml 是否放在 src 根目錄(編譯到 WEB-INF/classes)。pom.xml 正確聲明依賴,打包類型為 war 即可自動處理。