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

解決 Struts2 java.lang.NoSuchMethodError: FilterDispatcher.getDevModeOverride 錯誤

     編輯:程式設計綜合問答

訪問 Struts2 Action 時拋出 java.lang.NoSuchMethodError: org.apache.struts2.dispatcher.FilterDispatcher.getDevModeOverride()Ljava/lang/Boolean,堆棧顯示發生在 DebuggingInterceptor。這是典型的 Jar 包版本衝突 或 類加載順序問題。

根本原因

  • 項目中同時存在多個版本的 struts2-core 或 struts2-dispatcher Jar(如 2.3.x 與 2.5.x 混用)。
  • Tomcat 共享類加載器(common/lib、shared/lib)加載了舊版本 Struts 類,優先於 WebApp 自帶的新版本。
  • Maven 依賴傳遞引入了不兼容的傳遞依賴。

排查步驟

  1. 檢查 WEB-INF/lib:確保只有一個版本的 struts2-core-*.jar、struts2-dispatcher-*.jar。
  2. Maven 依賴樹:執行 mvn dependency:tree | grep struts,排除衝突傳遞依賴:
    <exclusions>
      <exclusion>
        <groupId>org.apache.struts</groupId>
        <artifactId>struts2-dispatcher</artifactId>
      </exclusion>
    </exclusions>
    
  3. 清理 Tomcat:刪除 work/Catalina/localhost/<app>、temp 目錄,重新部署。

快速驗證修復

執行「重新部署 Tomcat」後問題解決,說明是編譯緩存或熱部署導致舊類殘留。生產環境建議:

  • 使用 mvn clean package 完整構建 WAR。
  • 關閉 Tomcat,刪除 webapps/<app> 及 work、temp,再啟動部署。
  • 生產環境嚴禁熱部署,避免類加載器洩漏。

版本兼容性提醒

  • Struts 2.3.x 使用 FilterDispatcher。
  • Struts 2.5.x 棄用 FilterDispatcher,改用 StrutsPrepareAndExecuteFilter,web.xml 必須同步更新。
  • 不要混用 2.3 和 2.5 的 Jar 包。

遇到 NoSuchMethodError/NoClassDefFoundError 90% 是 Jar 衝突或類加載器問題,清理緩存、統一版本、檢查依賴樹是標準解決流程。

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