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

Java Web 500 錯誤:ClassNotFoundException 缺少 commons-logging 與路徑配置問題

     編輯:程式設計疑難解答

錯誤堆疊關鍵信息

java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory
    at org.apache.catalina.loader.WebappClassLoader.loadClass...
    at org.apache.commons.beanutils.ConvertUtilsBean.<init>(ConvertUtilsBean.java:157)
    at org.apache.commons.beanutils.BeanUtils.populate(BeanUtils.java:433)
    at web.ActionServlet.service(ActionServlet.java:48)

核心原因分析

  1. 缺少 commons-logging.jar:BeanUtils 內部依賴 LogFactory,項目未引入 commons-logging 依賴。
  2. 路徑配置疑慮:錯誤上下文路徑 /friend2 可能與部署名稱不一致,導致資源加載失敗。

解決方案

1. 添加缺失依賴 (Maven)

<dependency>
    <groupId>commons-logging</groupId>
    <artifactId>commons-logging</artifactId>
    <version>1.2</version> <!-- 或兼容版本 -->
</dependency>

2. 檢查 WEB-INF/lib 目錄

確保以下 jar 存在(非 Maven 項目手動放入):

  • commons-logging-1.2.jar
  • commons-beanutils-1.9.4.jar
  • commons-collections-3.2.2.jar

3. 驗證上下文路徑配置

  • Eclipse/IDEA 部署設置:確認 Web 模塊 Context Root 為 friend2。
  • server.xml:檢查 <Context path="/friend2" ...> 配置。
  • web.xml:確認 servlet-mapping 的 url-pattern 正確。

完整依賴鏈說明

ActionServlet 
  → BeanUtils.populate() 
    → BeanUtilsBean.getInstance() 
      → ConvertUtilsBean() 
        → LogFactory.getLog()  ← 缺少 commons-logging
          → ClassNotFoundException

最佳實踐建議

問題解決
手動管理 jar 包改用 Maven/Gradle 自動傳遞依賴
版本衝突統一使用 dependencyManagement 鎖定版本
部署路徑不一致IDE 部署名與項目 context-root 保持一致
缺少傳遞依賴mvn dependency:tree 排查缺失節點

排查步驟總結

  1. 根據異常 ClassNotFoundException: org.apache.commons.logging.LogFactory 確定缺少 jar。
  2. 添加 commons-logging 依賴並重新部署。
  3. 若仍報錯,檢查 /friend2 路徑映射是否正確。
  4. 清理 Tomcat work 目錄並重啟。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved