【发布时间】:2021-07-06 21:34:50
【问题描述】:
我使用Spring Initializr 生成了一个简单的Greeting Web 应用程序,并选择war 作为打包类型。从终端使用mvn spring-boot:run 启动它并将我的浏览器指向http://localhost:8080/greeting 会返回预期的响应。
我按照article 进行部署步骤并修改了pom.xml 以避免在生成的战争中包含版本号:
<build>
<finalName>${artifactId}</finalName>
<plugins>
...
</build>
我像往常一样使用mvn clean install 构建战争,并获得了预期的demo-spring-web.war,我将其复制/粘贴到apache-tomcat-10.0.4/webapp 文件夹中。
然后我从 Tomcat bin 文件夹启动运行 catalina.sh run 的 Tomcat bu。
Tomcat启动并显示demo-spring-web.war部署成功:
11-Apr-2021 18:24:36.414 INFO [main] org.apache.catalina.startup.HostConfig.deployWAR
Deployment of web application archive [/Users/serguei/soft/apache-tomcat-10.0.4/webapps/demo-spring-web.war] has finished in [1,286] ms
但是当我尝试在localhost:8080/demo-spring-web/greeting 访问已部署的应用程序时,它返回了 404 状态。
这有什么问题?
【问题讨论】:
-
即使完全没有意义,我已经尝试过了,但没有成功, - 每个部署的应用程序都在自己的上下文中运行,这就是为什么如果你应该始终在路由前加上应用程序名称没有调整一些 Tomcat 设置。
-
Spring 的
javax.servlet.ServletContainerInitializer被 Tomcat 10 静默忽略,它会寻找jakarta.servlet.ServletContainerInitializer。 -
非常感谢 @PiotrP.Karwasz,将 Tomcat 版本降级到
9.0.45版本解决了这个问题。该死的:)。 -
好吧,Oracle 拒绝让 Jakarta EE 保留
javax.*命名空间给那些不经常关注 Java EE 新闻的人带来了数千小时的挫败感。
标签: spring-boot tomcat