首页 > 解决方案 > 本地主机上的 Tomcat 服务器无法启动

问题描述

我正在尝试在 Eclipse IDE 的 Maven 项目中编写一个简单的登录页面 Web 应用程序。我已经包含了 mysql-connector 的 Maven 依赖项,如下所示:

<dependencies>
    <dependency>
       <groupId>mysql</groupId>
       <artifactId>mysql-connector-java</artifactId>
       <version>8.0.15</version>
       <scope>compile</scope>
    </dependency>
</dependencies>

但是每当我尝试运行服务器时,我都会收到 Tomcat 服务器无法启动的错误。但是,当我将依赖项的范围从编译更改为提供时,如下所示

<dependencies>
    <dependency>
       <groupId>mysql</groupId>
       <artifactId>mysql-connector-java</artifactId>
       <version>8.0.15</version>
       <scope>provided</scope>
    </dependency>
</dependencies>

tomcat 服务器运行得很好,但是当我尝试从数据库中调用 fetch 值时,出现以下错误

java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
     at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1365)
     at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1188)
     at java.base/java.lang.Class.forName0(Native Method)
     at java.base/java.lang.Class.forName(Class.java:333)
     at com.myfirstApp.checkDB.checklogin(checkDB.java:17)
     at com.myfirstApp.MyServlet.doGet(MyServlet.java:40)
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:634)
     ...

我无法理解 maven 如何使用依赖项的正确流程,为什么我得到类未找到错误以及为什么在编译范围时服务器无法启动。

我阅读了先前的答案并尝试运行具有“已提供”的依赖范围的代码,并将 jar 文件包含在 tomcat 服务器 lib 文件夹中,但仍然得到相同的类未找到错误。

编辑1:当范围设置为编译时出现以下错误

Tomcat错误

当范围设置为提供时,我在以下代码的第一行出现错误

Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection(url,user,pass);
PreparedStatement st = con.prepareStatement(query); 

编辑 2 我在启动服务器时遇到的错误,范围为 compile

SEVERE: A child container failed during start
java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to initialize component [org.apache.catalina.webresources.JarResourceSet@7a1a3478]
    at java.base/java.util.concurrent.FutureTask.report(FutureTask.java:122)
    at java.base/java.util.concurrent.FutureTask.get(FutureTask.java:191)
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:916)
    at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:841)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1384)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1374)
    at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
    at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
    at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:140)
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:909)
    at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:262)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
    at org.apache.catalina.core.StandardService.startInternal(StandardService.java:421)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
    at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:930)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
    at org.apache.catalina.startup.Catalina.start(Catalina.java:633)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:567)
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:343)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:474)
Caused by: org.apache.catalina.LifecycleException: Failed to initialize component [org.apache.catalina.webresources.JarResourceSet@7a1a3478]
   ... 

完整的错误报告可以在这里找到

标签: javamaventomcatservlets

解决方案


推荐阅读