如何在 Spring-boot 中添加静态网页内容
How add Static Web Content in Spring-boot
我正在尝试使用信息 here
在 spring-boot 服务器中添加静态 Web 内容
我已经尝试在前面 link 所说的几个文件夹中添加我需要的 .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>
知道我该如何解决这个问题吗?
已更新:
更新 2:尝试@jfcorugedo
不起作用。看看,是你说的吗?
已更新3:trying@jfcorugedo,第二个建议:
我认为您应该使用 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>
但是如果你使用 bootstrap 和 webjar 你应该写
<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
我创建了一个具有以下结构的测试项目:
我可以在 http://localhost:8080/css/style.css
上访问 style.css
您可以使用http://start.spring.io/帮助您创建新项目
另一种选择是使用 Spring 工具套件或 IntelliJ IDEA。
他们可以帮助您创建具有正确配置的新项目(如之前的link)。
您不需要添加方法addResourceHandlers,Spring boot 在它自己的代码中执行这个方法。
不要将文件放在 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,一切正常:
我在这个文件夹中放了一个 test.js 文件,当我输入 URL http://localhost:8080/js/test.js 时,应用程序给了我 JS 文件。
您确定要创建相同的文件夹层次结构吗?
在根目录下的 /static 文件夹的任意位置创建一个文件夹。这可以在您工作的任何地方 space。示例 C:\mywebapp\static。将 C:\mywebapp 添加到 运行time class 路径,或者如果使用 Intellij/Eclipse,将文件夹 C:\mywebapp 添加为库。
这与将静态 html 添加为源文件夹不同,这将导致它在每次构建时被复制到输出 class 文件夹。如果你有一个大型网络应用程序或使用 angular 或 sencha 的单页应用程序,这会很痛苦。
而是将文件夹 C:\mywebapp 添加为库文件夹或 运行 时间 class 路径文件夹。
这样做的好处是,它将允许您的 javascript 代码 运行 与 spring 启动休息相同 host/port,ajax,等服务,而不必处理 jsonp 或 cors。
查看org.springframework.boot.autoconfigure.web.ResourceProperties
class,可以看到这行代码:
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/
目录可用于提供静态内容。
因此您可以在 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 访问它们。
我正在尝试使用信息 here
在 spring-boot 服务器中添加静态 Web 内容我已经尝试在前面 link 所说的几个文件夹中添加我需要的 .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>
知道我该如何解决这个问题吗?
已更新:
更新 2:尝试@jfcorugedo
不起作用。看看,是你说的吗?
已更新3:trying@jfcorugedo,第二个建议:
我认为您应该使用 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>
但是如果你使用 bootstrap 和 webjar 你应该写
<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
我创建了一个具有以下结构的测试项目:
我可以在 http://localhost:8080/css/style.css
上访问 style.css您可以使用http://start.spring.io/帮助您创建新项目
另一种选择是使用 Spring 工具套件或 IntelliJ IDEA。 他们可以帮助您创建具有正确配置的新项目(如之前的link)。
您不需要添加方法addResourceHandlers,Spring boot 在它自己的代码中执行这个方法。
不要将文件放在 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,一切正常:
我在这个文件夹中放了一个 test.js 文件,当我输入 URL http://localhost:8080/js/test.js 时,应用程序给了我 JS 文件。
您确定要创建相同的文件夹层次结构吗?
在根目录下的 /static 文件夹的任意位置创建一个文件夹。这可以在您工作的任何地方 space。示例 C:\mywebapp\static。将 C:\mywebapp 添加到 运行time class 路径,或者如果使用 Intellij/Eclipse,将文件夹 C:\mywebapp 添加为库。
这与将静态 html 添加为源文件夹不同,这将导致它在每次构建时被复制到输出 class 文件夹。如果你有一个大型网络应用程序或使用 angular 或 sencha 的单页应用程序,这会很痛苦。 而是将文件夹 C:\mywebapp 添加为库文件夹或 运行 时间 class 路径文件夹。
这样做的好处是,它将允许您的 javascript 代码 运行 与 spring 启动休息相同 host/port,ajax,等服务,而不必处理 jsonp 或 cors。
查看org.springframework.boot.autoconfigure.web.ResourceProperties
class,可以看到这行代码:
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/
目录可用于提供静态内容。
因此您可以在 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 访问它们。