在复习SpringMVC时,因为要用到Tomcat服务器,这个时候有两个选择:
- 使用本地已有的tomcat
- 使用tomcat maven插件
因为我创建项目的时候选的就是Maven项目,加上我电脑没有装Tomcat,所以我选择使用Maven插件的方式
<plugins>
<plugin>
<!-- https://mvnrepository.com/artifact/org.apache.tomcat.maven/tomcat8-maven-plugin -->
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<!-- 通过maven tomcat7:run运行项目时,访问项目的端口号 -->
<port>8080</port>
<!-- 项目访问路径 本例:localhost:9090, 如果配置的aa, 则访问路径为localhost:9090/aa-->
<path>/</path>
</configuration>
</plugin>
</plugins>
这个时候我的迷之操作来了
我选择在lib文件夹下导入相关的jar包
然后,使用Tomcat插件启动的时候出现了这样的问题
十月 10, 2022 9:20:29 上午 org.apache.catalina.core.StandardContext listenerStart
严重: Error configuring application listener of class org.springframework.web.context.ContextLoaderListener
java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1702)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1547)
at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:532)
at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:514)
at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:142)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4854)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5434)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:750)
在网上搜错误的时候,一般都是说jar包没有导入完全
发生这种情况的原因是 idea并没有把这个项目依赖的类库与项目同时部署到服务器,我们把项目与Maven的依赖加上就可以了。解决如下:
但我这么操作则提示:
Artifact SpringMVC:war exploded: artifact 'SpringMVC:war exploded' is imported from Maven.
Any changes made in its configuration might be lost after reimporting.
好,那lib文件夹也是成功导入进去了的,虽然有这个提示但不影响,但是启动依旧是失败的。
我个人理解是:你所打包的war包是由Maven打包的,你导入的依赖Maven并不会帮你一起打进war包
所以,编译的时候会说你缺少某些jar包
解决办法:
- 如果lib文件夹自行打包,那么使用本地的Tomcat进行打包,就是安装Tomcat配置运行,那么Maven没有导入依赖也没事
- 在Maven中导入相关的依赖后运行
总结就是:使用Maven插件启动就不要自行建lib文件夹导入依赖,不然Maven打包不会将你导入的jar包一并打包,别整那些奇奇怪怪的操作