Spring boot 如何在Spring boot中添加静态Web内容

Spring boot 如何在Spring boot中添加静态Web内容,spring-boot,Spring Boot,我正在尝试使用info在spring引导服务器中添加静态web内容 我已尝试将所需的.js和.css文件添加到上一个链接所述的几个文件夹中,但不起作用: 注意:我没有创建/static/和/public/文件夹,因为我不知道项目中的绝对路径 我还添加了addResourceHandlers方法: HTML文件中的引用如下所示: 你知道我该怎么解决吗 已更新: 更新2:尝试@jfcorugedo 不起作用。看一看,你刚才是这么说的吗 更新3:尝试@jfcorugedo,第二条建议: 我认为您

我正在尝试使用info在spring引导服务器中添加静态web内容

我已尝试将所需的.js和.css文件添加到上一个链接所述的几个文件夹中,但不起作用:

注意:我没有创建
/static/
/public/
文件夹,因为我不知道项目中的绝对路径

我还添加了
addResourceHandlers
方法:

HTML文件中的引用如下所示:

你知道我该怎么解决吗

已更新

更新2:尝试@jfcorugedo

不起作用。看一看,你刚才是这么说的吗

更新3:尝试@jfcorugedo,第二条建议:


我认为您应该使用
mydomain///resource

例如:

http://mydomain/app/js/test.js
http://mydomain/app/img/test.jpg
您可以使用应用程序上下文或仅使用相对路径编写资源:

<script src="js/bootstrap-switch.js"></script>


但是如果您将引导程序与webjar一起使用,那么您应该编写

<script src="/<myapp>/webjars/bootstrap/<version>/js/bootstrap-switch.js"></script>

github上有一个项目可以说明这一点

更新

我创建了一个具有以下结构的测试项目:

我可以在上访问style.css

您可以使用来帮助创建新项目

另一个选择是使用Spring工具套件或IntelliJ IDEA。
它们可以帮助您创建具有正确配置的新项目(如前一个链接)。

您不需要添加addResourceHandlers方法,Spring boot在其自己的代码中执行此方法

不要将文件放在webapp文件夹中

您只需将文件放在以下目录之一:

/META-INF/resources/
/资源/
/静止的
/公共

例如,如果要加载文件
js/bootstrap switch.js
,则该文件必须位于以下文件夹之一:

/META-INF/resources/js/bootstrap-switch.js
/resources/js/bootstrap-switch.js
…

我在my/src/main/resources中创建了一个META-INF/resources/js文件夹,一切正常:

我在这个文件夹中放了一个test.js文件,当我键入URL时,应用程序会给我一个js文件


确实要创建相同的文件夹层次结构吗?

在根目录中的任何位置创建一个/static文件夹。这可以在你工作空间的任何地方。示例C:\mywebapp\static。将C:\mywebapp添加到运行时类路径,或者如果使用Intellij/Eclipse,则将文件夹C:\mywebapp添加为库

这不同于将静态html添加为源文件夹,这将导致在每次生成时将其复制到输出类文件夹。如果你有一个使用angular或sencha的大型web应用程序或单页应用程序,这是一种痛苦。 而是将文件夹C:\mywebapp添加为库文件夹或运行时类路径文件夹


这样做的好处是,它将允许javascript代码与spring boot rest、ajax等服务在同一主机/端口上运行,而无需处理jsonp或cors

查看
org.springframework.boot.autoconfigure.web.ResourceProperties
类,您可以看到以下代码行:

private static final String[] CLASSPATH_RESOURCE_LOCATIONS = new String[]{"classpath:/META-INF/resources/", "classpath:/resources/", "classpath:/static/", "classpath:/public/"};
这意味着
/META-INF/resources/
/resources/
静态/
公共/
目录可用于提供静态内容

因此,您可以在
resources/
目录下创建一个
static/
public/
目录,并将静态内容放在那里。可通过以下方式访问:
http://localhost:8080/your-file.ext
。(假设
server.port
为8080)

您可以使用
application.properties
中的
spring.resources.static locations
自定义这些目录

例如,通过提供此配置:

spring.resources.static-locations=classpath:/custom/

您可以使用
resources/
下的
custom/
文件夹为静态文件提供服务,并通过上面的URL访问它们。

尝试使用/application context/js/bootstrap-switch.jsf访问文件。对于第二次更新,您不应在src中插入META-INF。Danilo:够了,或者不行。请找到答案@ok,让我复制哪个文件夹的项目中的文件?我在
/project\u name/src/main/resources/META-INF/js
/project\u name/src/main/resources/META-INF/css
中复制了它们,但这不起作用。我用屏幕截图进行了更新。请确认这两个问题是否正确?我是否应该更改我的
addResourceHandlers
?它不起作用。尝试在引用中使用js/bootstrap-switch.js和css/bootstrap-switch.css尝试将文件放在src/main/resources/static中。我在这里创建了一个新项目,这似乎是最直观的方式,我更新了测试项目的屏幕截图和一些新的建议。服务器上的绝对路径是:/project/src/main/META-INF/?或者仅仅是/project/META-INF?您必须使用这个选项:src/main/resources/META-INF/不要将资源放在src/main中,因为默认情况下,maven只识别src/main/java和src/main/resources中的文件,我也尝试了,但没有成功。服务器一如既往地给了我一个404。。。我对Spring boot的了解非常贫乏,但是,也许这些信息对我们有帮助:我与Gradle一起构建了这个项目,我使用TomCat 7,并将其作为一个Java应用程序运行。请注意,“静态”对我不起作用……但“资源”确实起作用……我说的是第二个“资源”“.aka,嵌套更深的一个。如何在运行时将C:\mywebapp添加到类路径?
<script src="/<myapp>/webjars/bootstrap/<version>/js/bootstrap-switch.js"></script>
private static final String[] CLASSPATH_RESOURCE_LOCATIONS = new String[]{"classpath:/META-INF/resources/", "classpath:/resources/", "classpath:/static/", "classpath:/public/"};
spring.resources.static-locations=classpath:/custom/