【发布时间】:2021-07-14 02:29:21
【问题描述】:
我正在使用 Kotlin + Gradle 并尝试构建一个 war 文件以部署在 Tomcat 上。我的应用程序来自https://start.spring.io 加上一个简单的控制器并使用./gradlew bootWar 构建war 文件
@SpringBootApplication
class ServletInitializer : SpringBootServletInitializer() {
override fun configure(application: SpringApplicationBuilder): SpringApplicationBuilder {
return application.sources(DemoApplication::class.java)
}
}
@RestController
class TomcatController {
@GetMapping("/hello")
fun sayHello(): Collection<String> {
return IntStream.range(0, 10)
.mapToObj { i: Int -> "Hello number $i" }
.collect(Collectors.toList())
}
}
当我尝试访问它时,我得到了
Type Status Report
Message The requested resource [/demo-0.0.1-SNAPSHOT/hello] is not available
Description The origin server did not find a current representation for the target resource or is not willing to disclose that one exists.
我超级卡住了。我究竟做错了什么?如果我将一个 html 文件添加到 src/main/webapp/index.html 它会由于某种原因显示只有其余的 api 无法访问。
【问题讨论】:
-
有点离题的问题,但是您决定不使用 Spring Boot 的嵌入式 servlet 有什么特别的原因吗?你可能需要配置Tomcat的
web.xml(servlet/servlet映射) -
嘿@TimTong 感谢您的回复我不确定您所说的不使用嵌入式 servlet 是什么意思,您能详细说明一下吗?谢谢
-
因此您有两种部署应用程序的方式或方式。选项 1:您可以运行一个接受 WAR 的外部 Tomcat(这是 Spring Boot 之前更传统的方法)。选项 2:您可以运行包含嵌入其中的 servlet (Tomcat) 的 JAR。这是 Spring boot 现在更典型的方法。
-
啊,是的,我需要在远程服务器上使用现有的 tomcat 设置,所以我想在本地模仿它
标签: spring spring-boot kotlin tomcat war