java - 本地主机上的 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:当范围设置为编译时出现以下错误
当范围设置为提供时,我在以下代码的第一行出现错误
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]
...
完整的错误报告可以在这里找到
解决方案
推荐阅读
- lua - lua字符串连接得到一个奇怪的字符串
- java - 使用大集合或包含集合的等效地图是否很好?
- sql-server - 带有 SQL Server 后端和 pyodbc 的气流调度程序
- php - 如何在 Odoo Web 服务 API 上获取销售订单行描述?
- html - 如何让我的第三方脚本在我的网站上正常运行?
- unix - 有什么方法可以在 2 行中找到一个在另一个之下的相似词
- c++ - 如何正确接收多播UDP数据包?
- node.js - Mongoose:aggregate.lookup,部分结果未定义
- json - assemble.io 部分传递数据到嵌套的部分
- pentaho - 如何在 Pentaho 数据集成中动态更改“生成行步骤”的值字段,用于从 A REST API 获取数据