瀏覽器訪問 Servlet 返回 HTTP 404,控制台輸出:
HTTP Status 404 - Servlet xxx is not available
...
org.apache.catalina.core.StandardWrapperValve invoke
INFO: Servlet xxx is currently unavailable
StandardWrapperValve 是 Tomcat 內部負責調用 Servlet service() 的閥門。Servlet xxx is currently unavailable 表明:
ClassNotFoundException、NoClassDefFoundError、靜態初始化拋異常)。init() 方法拋出異常,導致初始化失敗,標記為不可用。<load-on-startup> 為正數但初始化失敗。Caused by 鏈)。WEB-INF/lib 是否缺少 Servlet 依賴的 JAR 包。work/Catalina/localhost/專案名,重新部署。Class.forName("com.mysql.jdbc.Driver") 拋 CNFE。getResourceAsStream("/config.properties") 返回 null 導致 NPE。ServerSocket 初始化失敗。@Override
public void init() throws ServletException {
try {
// 1. 載入配置
// 2. 初始化連接池/客戶端
} catch (Exception e) {
log.error("Servlet 初始化失敗", e);
throw new ServletException("初始化失敗", e); // 拋出 ServletException 讓容器標記 unavailable
}
}
核心原則:Servlet init() 絕不允許吞噬異常,必須拋出 ServletException 讓容器正確標記狀態,否則後續請求只會看到模糊的 404。