HTTP Status 500 - Wrapper cannot find servlet class com.servlet.servlet.RegServlet
or a class it depends on
root cause
java.lang.ClassNotFoundException: com.servlet.servlet.RegServlet
Tomcat 類加載器在 WEB-INF/classes 或 WEB-INF/lib 中找不到對應的 .class 檔案,常見於:
Project → Clean,確保 target/classes 或 bin 目錄下生成最新 .class。$CATALINA_BASE/work/Catalina/localhost/<專案名> 整個目錄,或在 IDE 中對 Server 選擇 Clean Tomcat Work Directory。Server → Clean → Publish,或重新啟動 Server 並勾選「自動發布」。| 檢查項 | 說明 |
|---|---|
web.xml servlet-class 拼寫 | 全限定名需與 Java 類完全一致,區分大小寫 |
類是否在 WEB-INF/classes | 打開 WAR 或部署目錄確認 com/servlet/servlet/RegServlet.class 存在 |
Maven pom.xml 打包配置 | 確認 <packaging>war</packaging>、資源目錄正確 |
| 依賴傳遞缺失 | 若 Servlet 依賴第三方 JAR,確保 WEB-INF/lib 含有該 JAR |
| JDK 版本一致性 | 編譯目標版本與 Tomcat 運行 JDK 一致(如皆為 1.8) |
# Linux/Mac 一鍵清理並重新部署(以 Maven 專案為例)
mvn clean package -DskipTests
rm -rf $CATALINA_BASE/webapps/your-app*
cp target/your-app.war $CATALINA_BASE/webapps/
$CATALINA_BASE/bin/shutdown.sh && sleep 3 && $CATALINA_BASE/bin/startup.sh
90% 的 ClassNotFoundException 歸因於「編譯產出未正確進入部署目錄」或「舊緩存干擾」。養成 Clean → Clean Server Work Directory → Republish 的肌肉記憶,能秒殺此類問題。