如何在 spring boot 2.2.6 中提供静态内容?
how to serve static content in springboot 2.2.6?
我是 Springboot 的新手,我正在尝试在其根 (localhost:8080
) 路径上显示 html 页面。为此,我用谷歌搜索并浏览了 -
- Spring Boot not serving static content
- https://spring.io/blog/2013/12/19/serving-static-web-content-with-spring-boot
- Springboot does not serve static content
几乎尝试了所有方法,但 none 对我有用。
确切问题
在任何资源/(静态/或public/或meta-inf/resources)中没有index.html文件的情况下工作正常并显示一些spring数据列表.如果我创建一个 index.html 文件然后它给出 404
not found with out @EnableWebMvc
annotation 的错误,如果使用 @EnableWebMvc
那么它会显示 Spring 的列表数据剩余 apis.
除 index.html 文件外,它在根路径中显示 Spring 数据列表 api,并且 url(localhost:8080/test.html
) 显示 url(localhost:8080/test.html
) 以外的 index.html有同样的问题。
通过使用此配置实现 public class StaticResourceConfiguration implements WebMvcConfigurer
,此问题没有任何影响。
以 simple spring boot initializer
开头
...我们可以将静态 (html) 文件放入以下文件之一:
- (src/main/resources:)
- 静态
- 资源
- public
- META-INF
- 资源
这导致默认(class 路径)位置,通过 spring.resources.static-locations
属性.
配置
这些会通过spring.mvc.static-path-pattern
-属性(ref)的值暴露出来,默认为:/**
.
因此,上述文件夹之一中的静态 index.html 文件具有默认配置,可在以下位置访问:
- http:localhost:8080/(由于“欢迎文件映射”->静态映射)
- 和http://localhost:8080/index.html(由于静态映射)
因此:http://localhost:8080/test.html ...
没问题
结帐at github.
这样,至少回答了“问题标题”“如何在 springboot 2.2.6 中提供静态内容?”。
出现 spring.resources.static-locations
的顺序(index.html 优先于 META-INF/resources)也是静态文件位置的“优先级”(left-to-right,先匹配者获胜) .
当我们加上@EnableWebMvc
...“evertyhing gets broken”(上下文加载,但是)仅:
WARN ... o.s.web.servlet.PageNotFound : No mapping for GET /
WARN ... o.s.web.servlet.PageNotFound : No mapping for GET /index.html
WARN ... o.s.web.servlet.PageNotFound : No mapping for GET /test.html
..请同时考虑:why spring-boot application doesn't require @EnableWebMvc
使用“non-default 配置”,您必须提供更多详细信息才能找到特定的解决方案。
但对于“Springboot 新手”:从初始化器和“默认值”开始听起来是最佳选择!从这里开始,您可以 re-fine 基于工作配置的配置。
并且如果出于某种原因 want/need @EnableWebMvc
注释,这将导致“先前”的行为 again/restore ( 2.2.6) 默认静态内容处理:
@EnableWebMvc
@SpringBootApplication
public class DemoApplication implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry
.addResourceHandler("/**")
.addResourceLocations("classpath:/META-INF/resources/", "classpath:/resources/", "classpath:/static/", "classpath:/public/");
}
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
(假设与现有 configuration/resource 处理程序没有冲突)
对我有用
registry.addResourceHandler("//**").addResourceLocations("classpath:/static/");
我是 Springboot 的新手,我正在尝试在其根 (localhost:8080
) 路径上显示 html 页面。为此,我用谷歌搜索并浏览了 -
- Spring Boot not serving static content
- https://spring.io/blog/2013/12/19/serving-static-web-content-with-spring-boot
- Springboot does not serve static content
几乎尝试了所有方法,但 none 对我有用。
确切问题
在任何资源/(静态/或public/或meta-inf/resources)中没有index.html文件的情况下工作正常并显示一些spring数据列表.如果我创建一个 index.html 文件然后它给出 404
not found with out @EnableWebMvc
annotation 的错误,如果使用 @EnableWebMvc
那么它会显示 Spring 的列表数据剩余 apis.
除 index.html 文件外,它在根路径中显示 Spring 数据列表 api,并且 url(localhost:8080/test.html
) 显示 url(localhost:8080/test.html
) 以外的 index.html有同样的问题。
通过使用此配置实现 public class StaticResourceConfiguration implements WebMvcConfigurer
,此问题没有任何影响。
以 simple spring boot initializer
开头...我们可以将静态 (html) 文件放入以下文件之一:
- (src/main/resources:)
- 静态
- 资源
- public
- META-INF
- 资源
这导致默认(class 路径)位置,通过 spring.resources.static-locations
属性.
这些会通过spring.mvc.static-path-pattern
-属性(ref)的值暴露出来,默认为:/**
.
因此,上述文件夹之一中的静态 index.html 文件具有默认配置,可在以下位置访问:
- http:localhost:8080/(由于“欢迎文件映射”->静态映射)
- 和http://localhost:8080/index.html(由于静态映射)
因此:http://localhost:8080/test.html ...
没问题结帐at github.
这样,至少回答了“问题标题”“如何在 springboot 2.2.6 中提供静态内容?”。
出现 spring.resources.static-locations
的顺序(index.html 优先于 META-INF/resources)也是静态文件位置的“优先级”(left-to-right,先匹配者获胜) .
当我们加上@EnableWebMvc
...“evertyhing gets broken”(上下文加载,但是)仅:
WARN ... o.s.web.servlet.PageNotFound : No mapping for GET /
WARN ... o.s.web.servlet.PageNotFound : No mapping for GET /index.html
WARN ... o.s.web.servlet.PageNotFound : No mapping for GET /test.html
..请同时考虑:why spring-boot application doesn't require @EnableWebMvc
使用“non-default 配置”,您必须提供更多详细信息才能找到特定的解决方案。
但对于“Springboot 新手”:从初始化器和“默认值”开始听起来是最佳选择!从这里开始,您可以 re-fine 基于工作配置的配置。
并且如果出于某种原因 want/need @EnableWebMvc
注释,这将导致“先前”的行为 again/restore ( 2.2.6) 默认静态内容处理:
@EnableWebMvc
@SpringBootApplication
public class DemoApplication implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry
.addResourceHandler("/**")
.addResourceLocations("classpath:/META-INF/resources/", "classpath:/resources/", "classpath:/static/", "classpath:/public/");
}
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
(假设与现有 configuration/resource 处理程序没有冲突)
对我有用
registry.addResourceHandler("//**").addResourceLocations("classpath:/static/");