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

Struts2 初學者 Action 配置報錯:ClassNotFound 異常排查

     編輯:程式設計疑難解答

錯誤現象

訪問 https://localhost:8080/qiaoliang_demo/getBarcode 返回 404 或 500,控制台提示 ClassNotFoundException 或 NoClassDefFoundError。

核心原因

Action 類未被正確編譯到 classpath,或包路徑配置與實際不符。Struts2 通過類全限定名實例化 Action,找不到類即拋出此異常。

排查清單

  1. 檢查 struts.xml 配置:
    <package name="default" namespace="/" extends="struts-default">
        <action name="getBarcode" class="com.example.action.BarcodeAction">  <!-- class 必須是全限定名 -->
            <result>/success.jsp</result>
        </action>
    </package>
    • class 屬性值必須與 Java 類的 package 聲明 + 類名完全一致。
    • 大小寫敏感。
  2. 確認類文件輸出位置:
    • IDE 編譯輸出目錄:target/classes/com/example/action/BarcodeAction.class (Maven) 或 WEB-INF/classes/com/example/action/BarcodeAction.class。
    • 若使用 Tomcat 部署,檢查 wtpwebapps/項目名/WEB-INF/classes/ 下是否存在對應 .class 文件。
  3. 檢查包名一致性:
    // BarcodeAction.java
    package com.example.action;  // 必須與 struts.xml 中 class 前綴一致
    
    public class BarcodeAction extends ActionSupport {
        public String execute() { return SUCCESS; }
    }
  4. 依賴包完整性:
    • WEB-INF/lib/ 下是否包含 struts2-core-x.x.x.jar、ognl-x.x.x.jar、commons-lang3-x.x.jar 等核心依賴。
    • Maven 專案執行 mvn clean compile package 重新構建 WAR。
  5. 命名空間匹配:
    • URL 中路徑:/qiaoliang_demo/getBarcode
    • Struts2 配置:namespace="/" 對應根路徑,name="getBarcode" 對應 Action 名。
    • 若配置 namespace="/barcode",則 URL 應為 /qiaoliang_demo/barcode/getBarcode。

常見錯誤對比

錯誤類型典型提示根因解決
ClassNotFoundExceptionjava.lang.ClassNotFoundException: com.xxx.Action類文件不在 classpath檢查編譯輸出、部署結構、包名拼寫
NoClassDefFoundErrorjava.lang.NoClassDefFoundError: com/xxx/Action類依賴缺失/靜態初始化失敗檢查依賴包、靜態塊異常
NoSuchMethodErrorjava.lang.NoSuchMethodError: execute()Action 方法簽名不符確保 public String execute() 無參
404 Not FoundHTTP 404namespace/action name 不匹配核對 struts.xml 與 URL 路徑

調試技巧

  1. 啟用 Struts2 開發模式:struts.devMode = true (struts.properties),獲取詳細錯誤堆棧。
  2. 查看 Tomcat 日志:logs/catalina.out 或 logs/localhost.yyyy-mm-dd.log。
  3. 瀏覽器訪問 https://localhost:8080/項目名/ 確認項目部署成功。
  4. 使用 jar tf 项目.war | grep BarcodeAction 驗證 WAR 包內類文件存在性。

Maven 專案標準結構參考

src/
├── main/
│   ├── java/
│   │   └── com/example/action/BarcodeAction.java
│   ├── resources/
│   │   └── struts.xml  (放在 classpath 根目錄)
│   └── webapp/
│       └── WEB-INF/web.xml
└── test/

總結

ClassNotFound 90% 由包名不匹配或類未編譯到部署目錄引起。核對 struts.xml 中 class 屬性與 Java 類 package 聲明,確保 Maven/IDE 正確編譯輸出至 WEB-INF/classes,重新部署即可解決。

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