将 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.
- MS Doc 明确表示
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 次要版本“固定”到特定版本而不是自动更新被认为是最佳做法。
为了学习 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.
- MS Doc 明确表示
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 次要版本“固定”到特定版本而不是自动更新被认为是最佳做法。