Java 類測試連接正常,但放入 JSP 頁面運行時報:
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
WEB-INF/lib 和 WEB-INF/classes 下的類/ jar**。若 JDBC 驅動 jar 僅在 Build Path / 項目 lib 目錄 / Maven 本地倉庫,**未打包進 WAR 的 WEB-INF/lib**,JSP 就會找不到驅動類。
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.33</version> <!-- 或 5.1.49 等 -->
<scope>compile</scope> <!-- 默認即 compile,會打包進 WEB-INF/lib -->
</dependency>
執行 mvn clean package,檢查生成的 WAR 中 WEB-INF/lib/mysql-connector-java-*.jar 存在。
WebContent/WEB-INF/lib(或 src/main/webapp/WEB-INF/lib)目錄下,刷新專案。將 jar 放入 $CATALINA_HOME/lib 可讓所有應用共享,但會導致版本鎖定、升級困難,**生產環境強烈建議每個應用自帶驅動包(放 WEB-INF/lib)**。
WEB-INF/lib 含驅動 jar。Class.forName("com.mysql.cj.jdbc.Driver")(MySQL 8.0+ 驅動類名變更)。com.mysql.cj.jdbc.Driver,舊版為 com.mysql.jdbc.Driver,請根據 jar 版本選擇。WEB-INF/lib 下同時有 5.x 和 8.x jar,類加載器可能載入舊版導致兼容性問題。<scope>provided</scope> 不會打包進 WAR,JSP 會找不到類。
JSP 運行在 Web 容器類加載器下,**JDBC 驅動包必須位於 WEB-INF/lib**。Maven 專案確保 compile scope;非 Maven 專案配置 Deployment Assembly 或手動複製 jar。這是 Web 應用類加載隔離機制決定的,而非代碼邏輯問題。