问题描述
- 我采用了Servlet3.X,新增加了SPI加载机制,会自动扫描
classpath:META-INF/services/javax.servlet.ServletContainerInitializer
中的所有这个文件,并加载其中的所有javax.servlet.ServletContainerInitializer
的实现类,实现替换web.xml的功能,让你的项目war可以不需要web.xml也能正常在tomcat运行。 - 然后呢,日志我采用了logback,这个jar中
ch.qos.logback.classic.servlet.LogbackServletContainerInitializer
就实现了javax.servlet.ServletContainerInitializer
,因此tomcat在启动时就会自动加载这个类初始化一些配置。 LogbackServletContainerInitializer
是在logback-classic包中的,javax.servlet.ServletContainerInitializer
是在javax.servlet-api包中的。
解决方式
保证你的项目依赖中mvn dependency:tree
查到的所有servlet-api依赖都是provided,就能启动成功了。
<dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <scope>provided</scope> </dependency>