Spring MVC - 对Tomcat中应用程序的所有请求在war打包后导致错误404

Posted

技术标签:

【中文标题】Spring MVC - 对Tomcat中应用程序的所有请求在war打包后导致错误404【英文标题】:Spring MVC - All requests to application in Tomcat result in Error 404 after war packaging 【发布时间】:2020-02-13 06:40:27 【问题描述】:

编辑:通过使主 Startup 类扩展 SpringBootServletInitializer 修复了该问题。

我正在尝试使用 webapp-runner 和 .war 打包通过 Maven 部署 Spring MVC 项目。

在通过 IntelliJ 的运行配置运行时,它在本地 Tomcat 安装上运行良好,但是当我尝试运行 war 包时,它总是返回未找到。

我使用以下命令运行它:

java -jar target/dependency/webapp-runner.jar target/*.war

这是我的项目结构:

这里要注意的是,如果我添加随机 index.html webapp 目录中的文件,它被正确映射并找到 200 OK。

我对 Spring 技术还很陌生,所以如果你能帮助我解决这个应用程序的架构问题,以便在打包后请求映射正常工作,我将非常感激。

这是我的 HomeController:

@Controller
@RequestMapping("/")
public class HomeController 

    public String index() 
        return "index";
    

我应该改变什么?我的 Thymeleaf 模板应该在 webapp 文件夹中吗?为什么Tomcat打包后不能用现在的映射方式定位到它们?

【问题讨论】:

您正在使用 Spring BOot 为什么不简单地运行战争而不是您现在在命令行上执行的操作?此外,在使用战争时,您是否按照 Spring Boot 指南创建可部署战争? @M.Deinum “Webapp 运行器旨在允许您使用简单的 java -jar 命令将文件系统上的爆炸或压缩战争启动到 tomcat 容器中。”是的,战争是可部署的 我不怀疑它是可部署的,但您是否采取了指南中提到的步骤使其成为战争。 【参考方案1】:

在war 文件中,URL 上下文是war 文件的名称。所以在你的情况下是http://host:port/slupov-personal/

【讨论】:

结果还是一样。此 URL 再次命中 404。 你点击了什么网址? localhost:8080 和 localhost:8080/slupov-personal 都返回 404

以上是关于Spring MVC - 对Tomcat中应用程序的所有请求在war打包后导致错误404的主要内容,如果未能解决你的问题,请参考以下文章

spring MVC tomcat启动 执行

如何在传统的 tomcat webapps 文件夹中部署 Spring Boot MVC 应用程序?

使EL与嵌入的tomcat 7一起工作(使用spring MVC)

Spring MVC 使用 STS 和 tomcat devloader

Spring mvc 3.1 tomcat 7-404不解析jsp但控制器注释工作正常

Tomcat PermGen 上的 Spring MVC 空间不断增加