You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

Tomcat部署Maven WebApp时出现ojdbc驱动找不到问题求助

问题描述

我有一个基于Maven构建的Java Web应用,部署在Tomcat 11服务器上,使用HttpServlet和JSP技术。功能是从Oracle 19c数据库获取数据,生成年度统计信息的对象列表,再通过Servlet传递给JSP页面以表格形式展示。

使用NetBeans开发时,带main方法的测试类能正常连接数据库,且pom.xml已添加ojdbc11依赖,但打包WAR部署到Tomcat后出现错误:

No suitable driver found for jdbc:oracle:thin:@localhost:1521/SKI_SCHOOL

附上pom.xml代码:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.cc_internship</groupId>
    <artifactId>SkiSchoolReportWebApp</artifactId>
    <version>1.0</version>
    <packaging>war</packaging>

    <name>SkiSchoolReportWebApp Maven Webapp</name>
    <!-- FIXME change it to the project's website -->
    <url>http://www.example.com</url>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.1</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>jakarta.servlet</groupId>
            <artifactId>jakarta.servlet-api</artifactId>
            <version>6.1.0</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>com.oracle.database.jdbc</groupId>
            <artifactId>ojdbc11</artifactId>
            <version>23.5.0.24.07</version>
        </dependency>
    </dependencies>

    <build>
        <finalName>SkiSchoolReportWebApp</finalName>
        <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
            <plugins>
                <plugin>
                    <artifactId>maven-clean-plugin</artifactId>
                    <version>3.4.0</version>
                </plugin>
                <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
                <plugin>
                    <artifactId>maven-resources-plugin</artifactId>
                    <version>3.3.1</version>
                </plugin>
                <plugin>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.13.0</version>
                </plugin>
                <plugin>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <version>3.3.0</version>
                </plugin>
                <plugin>
                    <artifactId>maven-war-plugin</artifactId>
                    <version>3.4.0</version>
                </plugin>
                <plugin>
                    <artifactId>maven-install-plugin</artifactId>
                    <version>3.1.2</version>
                </plugin>
                <plugin>
                    <artifactId>maven-deploy-plugin</artifactId>
                    <version>3.1.2</version>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>
</project>
解决方案

1. 验证WAR包是否包含驱动

解压生成的SkiSchoolReportWebApp.war,检查WEB-INF/lib目录下是否存在ojdbc11-23.5.0.24.07.jar

  • 若不存在,执行Maven清理构建命令重新打包:
    mvn clean package
    
    或在NetBeans中右键项目选择Clean and Build,清理缓存后重新生成WAR。

2. 显式注册JDBC驱动

Web容器的类加载隔离可能导致驱动无法自动注册,在数据库连接代码中添加显式注册逻辑:

try {
    Class.forName("oracle.jdbc.OracleDriver");
} catch (ClassNotFoundException e) {
    e.printStackTrace();
}
// 后续获取数据库连接
Connection conn = DriverManager.getConnection(jdbcUrl, username, password);

3. 修正Java版本兼容性

Tomcat 11要求运行环境为Java 17及以上,但你的pom.xml编译版本为Java 8,可能引发类加载问题:
修改pom.xml的编译版本配置:

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>17</maven.compiler.source>
    <maven.compiler.target>17</maven.compiler.target>
</properties>

确保开发环境和Tomcat运行环境均使用Java 17。

4. 全局部署驱动(备选)

若以上方法无效,可将ojdbc11-23.5.0.24.07.jar复制到Tomcat安装目录的lib文件夹,重启Tomcat。此方式让驱动被Tomcat全局类加载器加载,但会导致版本耦合,仅作为临时验证方案。

内容的提问来源于stack exchange,提问作者Thinchance

火山引擎 最新活动