如果将静态内容部署为 jar,则 Spring Boot 404 错误

Posted

技术标签:

【中文标题】如果将静态内容部署为 jar,则 Spring Boot 404 错误【英文标题】:Spring boot 404 error if the static content is deployed as jar 【发布时间】:2017-11-19 07:46:04 【问题描述】:

我有 spring boot 应用程序和 angular js 项目作为两个不同的模块。

Angular js 内容('dist' 文件夹中的文件)被转换为 jar 文件并作为 Spring 引导应用程序的一部分包含在内。 jar 里面的文件夹结构是/static/**。

jar 出现在 spring boot 应用程序的 lib 文件夹中。

现在当我尝试访问应用程序 http://localhost:8080 时,我收到 404 错误。

如果我复制 /resources/static 中的“dist”文件夹内容并创建 spring boot jar 文件,它工作正常。

当静态内容作为 jar 文件包含时,我是否遗漏了任何内容。 ?

提前致谢

【问题讨论】:

spring boot中的静态内容应该只存在于/resources/static文件夹下,angular文件被认为是静态内容。将 dist 文件夹的内容移动到 /resources/static 文件夹中 有什么更新吗?我面临同样的问题......在 ng build 之后,使用 maven 我将所有文件放在 /BOOT-INF/classes/ 下,但仍然无法使用 URL 访问。 【参考方案1】:

@Moshe Arad @Raj 在我对https://spring.io/blog/2013/12/19/serving-static-web-content-with-spring-boot 的理解中, 静态内容可以位于上述位置之一。但是,我自己在提供静态内容方面面临着斗争。我正在开发基于 spring-boot 和 angular-cli(6.1.5) 的应用程序。出于部署目的,以便 UI 在 spring-boot 端口上工作;我跑了ng build。它在 src/main/resource/static 中生成文件(将 angular.json 中的 outputPath 更改为 resources/static 并在资源中创建一个空的 dir static)。但是spring-boot在8080处没有提供任何角度内容。虽然index.html<base href="/">,但我认为它更具体地从静态目录中选择/提供.js内容所以我跑了: ng build --base-href / --deploy-url /static/ 。这次生成的 index.html 中有 /static/runtime.js 等。但是在访问 localhost:8080/ 时(右键单击 -> 检查显示 200 响应代码)仍然没有显示任何 UI 内容。但是点击 localhost:8080/static/runtime.js 会显示 404 。

我相信除了将内容添加到资源/静态之外,还有更多工作要做,因为可能是 tomcat 试图提供它,但不知何故,内容没有被显示。因为我确实注意到浏览器选项卡上的 favicon 图标(角度图标),并且 jar 文件的内容显示路径中生成的静态文件(BOOT-INF/classes/static/index.html 等)

【讨论】:

【参考方案2】:

我的设置与您类似,但使用的是 Angular 4。我的 Spring Boot 版本是 1.5.3.RELEASE。

我的构建基于带有两个模块的 Maven。一个用于前端 (JAR),一个用于后端 (WAR),它使用 Maven 依赖机制引用第一个模块。

提供开箱即用的静态内容。由于我使用的是 Spring Security,因此我必须为此资源配置访问规则。但这个问题应该用 401 而不是 404 来回答。

您的 Angular JAR 结构似乎是正确的。你的前端构建完成了吗?

带有前端 JAR 的 lib 文件夹位于路径 /WEB-INF/ 上的 Spring Boot WAR 中。

您是否检查过您使用的 Spring Boot 版本是否存在错误?

【讨论】:

以上是关于如果将静态内容部署为 jar,则 Spring Boot 404 错误的主要内容,如果未能解决你的问题,请参考以下文章

spring boot项目进行war部署,对于静态资源无法访问的问题

Spring Boot 提供被安全阻止的静态内容

spring boot打jar包运行,加载jar包外部的页面以及静态资源文件

Spring Boot不提供静态内容

带有静态内容的 Spring Boot 项目在运行 jar 时生成 404

如何使用 jar 外部的 spring boot 提供静态内容?