【问题标题】:Spring boot, tomcat, rest api 404春季启动,tomcat,休息api 404
【发布时间】: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


【解决方案1】:

Spring Boot 应用程序带有一个内置的 Servlet。在 IDE 中启动应用程序时,您可能已经在使用此功能。

这基本上意味着您可以在任何 Web 服务器上运行您的 .jar 文件,并且无需设置额外的 tomcat 实例即可运行。

但是,如果您想将 Spring Boot 应用程序构建为 war 文件并将其部署到外部 tomcat,则需要按照this article 中的说明执行一些额外的步骤。

【讨论】:

  • 我之前看过这篇文章并按照其中的步骤操作,但它仍然给我同样的问题:(
【解决方案2】:

假设从您到目前为止发布的内容:返回的路径在您的实际控制器路由“/demo-0.0.1-SNAPSHOT/hello”之前显示另一条路由是这个“/demo-0.0.1-SNAPSHOT”路径您的应用程序运行在哪个平台上?如果不是,它应该包含在您的控制器中(假设您没有在其他地方设置它,例如在您的 application.properties 中)。 例如http://localhost:8080/ 将是基本路径,并且 http://localhost:8080/demo-0.0.1-SNAPSHOT/hello 或 http://localhost:8080/hello 将指向您的控制器。此外,您的启动日志(针对 Tomcat 和 Spring)可能会泄露有关该问题的更多信息。

【讨论】:

    猜你喜欢
    • 2018-10-05
    • 2015-06-30
    • 1970-01-01
    • 2020-05-17
    • 1970-01-01
    • 2014-06-26
    • 1970-01-01
    • 2018-04-25
    相关资源
    最近更新 更多