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

时间:2015-03-12 19:43:47

标签: spring-boot

我正在尝试使用info here

在spring-boot服务器中添加静态Web内容

我尝试在上一个链接所说的几个文件夹中添加我需要的.js和.css文件,但它不起作用:

/META-INF/resources/
/resources/

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

我也添加了addResourceHandlers方法:

@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
if (!registry.hasMappingForPattern("/webjars/**")) {
    registry.addResourceHandler("/webjars/**").addResourceLocations(
            "classpath:/META-INF/resources/webjars/");
}
if (!registry.hasMappingForPattern("/**")) {
    registry.addResourceHandler("/**").addResourceLocations(
            RESOURCE_LOCATIONS);
}
}

HTML文件中的引用如下:

<script src="bootstrap-switch.js"></script> 知道如何解决这个问题吗?

已更新

enter image description here

更新2:尝试@jfcorugedo

不起作用。看看你说的是什么?

enter image description here

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

enter image description here

4 个答案:

答案 0 :(得分:19)

我认为您应该使用mydomain/<context>/<resource type>/resource

访问静态内容

例如:

http://mydomain/app/js/test.js
http://mydomain/app/img/test.jpg

您可以使用应用程序上下文或仅使用相对路径编写资源:

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

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

但如果您使用带有webjar的bootstrap,则应编写

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

github上有一个项目来说明这一点 https://github.com/spring-projects/spring-boot/tree/master/spring-boot-samples/spring-boot-sample-web-static

更新1

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

enter image description here

我可以访问http://localhost:8080/css/style.css

上的style.css

您可以使用http://start.spring.io/来帮助您创建新项目

另一种选择是使用Spring Tool Suite或IntelliJ IDEA。 他们可以帮助您使用正确的配置创建新项目(如上一个链接)。

答案 1 :(得分:14)

您不需要添加方法addResourceHandlers,Spring启动会在自己的代码中执行此方法。

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

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

/META-INF/resources/ /resources/ /static /public

例如,如果要加载文件js/bootstrap-switch.js,则此文件必须位于其中一个文件夹中:

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

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

folder hierarchy in my test project

我已将test.js文件放在此文件夹中,当我输入网址http://localhost:8080/js/test.js时,应用程序已向我提供了JS文件。

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

答案 2 :(得分:5)

查看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/static/public/目录可用于提供静态内容。

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

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

例如,通过提供此配置:

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

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

答案 3 :(得分:0)

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

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

这样做的好处是它可以让您的javascript代码在弹簧引导休息,ajax等服务的同一主机/端口上运行,而无需处理jsonp或cors。

相关问题