将 war 文件上传到 Azure Web 应用程序,404 错误

uploading the war file to Azure web app, 404 error

为了学习 war 文件并将其发布到 Azure Web 应用程序,我正在使用 Azure Cli 并发布 war 文件。我关注了微软文档中的以下文章。

https://docs.microsoft.com/en-us/azure/app-service/deploy-zip?tabs=cli#with-curl

我使用了这段代码:

当我查看 kudu 中的文件时。我确实看到文件已更新,但名称已更改为 app.war 而不是 cli 命令中提供的名称。

当我访问该网站时,它给了我 404。在上传 war 文件之前,当我访问该网站时它是一个空白页面,没有其他任何内容,但现在我收到错误消息。

我的应用程序服务在 Linux 上使用 Java 17,Tomcat 是服务器。

以下是我上传 war 文件后的可用文件

更新: 虽然我访问了 kudu,但它并不像往常一样,因为我没有看到调试控制台。

when I checked the files in kudu. I do see the file is updated but the name has changed to app.war rather than what was provided in the cli command.

type=war:部署一个WAR包。默认情况下,WAR 包部署到 /home/site/wwwroot/app.war。目标路径可以用path.

指定

默认情况下 war 的名称将被修改。

HTTP Status 404 – Not Found

  • 检查你的URL
  • 验证您是否在 Deployment Descriptor (web.xml) 文件中配置了您的 servlet。
  • web.xml中,检查是否在url之前添加了/
 <url-pattern>/*</url-pattern>

更多信息请参考HTTP Status 404

更新

如果有人试图将 Spring 引导部署为 WAR 文件,以下适用于 将 Spring 引导应用程序部署为 [=41] =]。然而,CLI 命令仍然是通用的。另请注意,由于不再使用嵌入式 Tomcat 服务器,因此必须部署到 Java Tomcat,而不是 Java SE。

首先,在我的 pom 文件中,我验证了以下内容:

<packaging>war</packaging>

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-tomcat</artifactId>
   <scope>provided</scope><!-- THIS LINE MUST BE PRESENT -->
</dependency>

在我的代码中,我扩展了 SpringBootInitializer:

public class DwBootJarApplication extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
    return application.sources(DwBootJarApplication.class);
}
public static void main(String[] args) {
    SpringApplication.run(DwBootJarApplication.class, args);
}

最后,从项目根目录中的命令行,为 Azure 配置 pom:

mvn com.microsoft.azure:azure-webapp-maven-plugin:2.2.3:config

并部署:

mvn package azure-webapp:deploy

这不是唯一的部署方式,但这是我觉得最方便的方式,也是“官方”推荐用于活动开发阶段的方式。

最后一点,将 Java / Tomcat 次要版本“固定”到特定版本而不是自动更新被认为是最佳做法。