如何在 Spring Boot 2.2.6 中提供静态内容?

Posted

技术标签:

【中文标题】如何在 Spring Boot 2.2.6 中提供静态内容?【英文标题】:how to serve static content in springboot 2.2.6? 【发布时间】:2020-08-07 03:57:10 【问题描述】:

我是 Springboot 的新手,我正在尝试在其根 (localhost:8080) 路径上显示 html 页面。为此,我用谷歌搜索并浏览了 -

    Spring Boot not serving static content https://spring.io/blog/2013/12/19/serving-static-web-content-with-spring-boot Spring Boot app not serving static content Springboot does not serve static content

几乎尝试了所有方法,但没有一个对我有用。

确切的问题

没有任何资源/(静态/或公共/或元信息/资源)中的 index.html 文件可以正常工作并显示一些弹簧数据的列表。如果我创建一个 index.html 文件,那么它会给出一个错误 404 not found without @EnableWebMvc annotation,如果使用 @EnableWebMvc 那么它会显示 Spring data rest apis 的列表。

除了 index.html 文件,它在根路径中显示 Spring 数据 api 的列表,并且 index.html 以外的 url(localhost:8080/test.html) 也有同样的问题。

使用此配置实现public class StaticResourceConfiguration implements WebMvcConfigurer 不会影响此问题。

【问题讨论】:

看到这个答案-***.com/a/53698376/7849549 @Shubh 对我不起作用,谢谢你的链接.. 我错过了这一点 【参考方案1】:

它对我有用

registry.addResourceHandler("//**").addResourceLocations("classpath:/static/");

【讨论】:

【参考方案2】:

以simple spring boot initializer 开头

...我们可以将静态 (html) 文件放入以下之一:

(src/main/resources:) 静态 资源 公开 元信息 资源

这会产生默认(类路径)位置,通过 spring.resources.static-locations 属性配置。

这些将通过spring.mvc.static-path-pattern-property (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 的顺序(从 META-INF/resources 中首选 index.html)也是静态文件位置的“优先级”(从左到右,第一个匹配获胜)。


当我们添加@EnableWebMvc

...“evertyhing 被破坏”(上下文加载,但是):

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

使用“非默认配置”,您必须提供更多详细信息才能找到特定的解决方案。

但是对于“Springboot 中的新手”:从初始化程序开始,“默认值”听起来是最佳选择!从这里开始,您可以根据一个有效的配置重新优化您的配置。


如果您出于某种原因想要/需要@EnableWebMvc 注释,这将再次导致“先前”行为/恢复 (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);
    


(假设与现有配置/资源处理程序没有冲突)

【讨论】:

感谢您的提示,实际上 OpenApi jar 文件 github.com/springdoc/springdoc-openapi/issues/361 存在问题(我按照旧教程进行操作),实现新依赖项解决了该问题。您对此的陈述应该很有帮助,并开始消除依赖并一一检查错误。

以上是关于如何在 Spring Boot 2.2.6 中提供静态内容?的主要内容,如果未能解决你的问题,请参考以下文章

在配置中定义servlet路径时如何在spring boot中提供静态内容

Spring(Spring Boot)如何向前端提供 CSRF 令牌?

如何在 Spring Boot 中与 Spring MVC 一起提供遗留的 jsp 页面?

如何将 application.properties 文件提供给 Spring Boot Docker 映像作为输入

如何在weblogic上运行spring boot

如何从 Spring Boot 提供静态 html?