启动tomcat10.0.2时遇到如下错误
Connected to server
[2021-04-05 05:24:00,038] Artifact springWeb:war exploded: Artifact is being deployed, please wait…
05-Apr-2021 17:24:02.208 信息 [RMI TCP Connection(3)-127.0.0.1] org.apache.jasper.servlet.TldScanner.scanJars 至少有一个JAR被扫描用于TLD但尚未包含TLD。 为此记录器启用调试日志记录,以获取已扫描但未在其中找到TLD的完整JAR列表。 在扫描期间跳过不需要的JAR可以缩短启动时间和JSP编译时间。
05-Apr-2021 17:24:02.240 严重 [RMI TCP Connection(3)-127.0.0.1] org.apache.catalina.core.StandardContext.startInternal 一个或多个listeners启动失败,更多详细信息查看对应的容器日志文件
05-Apr-2021 17:24:02.240 严重 [RMI TCP Connection(3)-127.0.0.1] org.apache.catalina.core.StandardContext.startInternal 由于之前的错误,Context[]启动失败
打开tomcat日志文件C:\Users\shenyunxiang\AppData\Local\JetBrains\IntelliJIdea2020.2\tomcat\Tomcat_10_0_2_springWeb\localhost.2021-04-05.log(tomcat日志文件不同的人不同项目路径不同,但格式如上,根据自己情况调整)可以看到如下报错:找不到监听器的类。
05-Apr-2021 16:08:18.387 严重 [RMI TCP Connection(3)-127.0.0.1] org.apache.catalina.core.StandardContext.listenerStart 配置应用程序监听器[org.springframework.web.context.ContextLoaderListener]错误
java.lang.NoClassDefFoundError: javax/servlet/ServletContextListener
然后我们打开编译生成的target\springWeb\WEB-INF\lib目录下确实没有servlet的jar包存在,但是回看pom.xml中我们是配置了servlet的,经过查找资料发现是pom.xml中scope标签导致的
我们只需要把servlet的scope标签配置为compile或者直接把scope标签删掉不进行配置,然后同步一下maven工程,重新启动tomcat即可成功,而此时可以看到lib目录下成功加载了servlet的jar包
如果使用的是tomcat其他版本,这里测试了tomcat7,则servlet必须要把scope标签设置为provided即<scope>provided</scope>
否则会报如下错误
Failed to execute goal org.apache.tomcat.maven:tomcat7-maven-plugin:2.2:run (default-cli) on project springWeb: Could not start Tomcat