SpringBoot静态资源与首页配置实现原理深入分析

 更新时间:2022年10月10日 08:32:28   作者:Decade0712  
最近在做SpringBoot项目的时候遇到了“白页”问题,通过查资料对SpringBoot访问静态资源做了总结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧

一、静态资源导入

关键源码可以看WebMvcAutoConfiguration这个类下面的addResourceHandlers方法

在这个方法中,我们有几个重点需要了解一下

1、webjars

可以理解为以maven的形式引入web的相关jar包

请求路径为/webjars/**的,都会去classpath:/META-INF/resources/webjars/下寻找相关的静态资源

2、静态资源映射规则

如果在项目中要使用我们自己导入的静态资源,它的映射规则是怎么样的呢,我们分析源码可以得出

以下四个路径的中存放的静态资源可以被识别,优先

resource(注意,此处是resource下面的resource文件夹)>static (默认)>public

"classpath:/META-INF/resources/"
"classpath:/resources/"
"classpath:/static/" 
"classpath:/public/"

3、自定义静态资源路径

我们可以使用spring.web.resources.static-locations

在yaml文件中自定义静态资源文件的路径,例如我们限制静态文件都必须放在static目录下

也可以使用spring.mvc.static-path-pattern,当前项目 + static-path-pattern + 静态资源名 = 静态资源文件夹下找

spring:
  web:
    resources:
      static-locations: classpath:/static/
  mvc:
    static-path-pattern: /static/**

随后我们访问一下静态资源,发现只有放在static下面可以被访问到

二、首页配置和图标

1、首页配置

springboot它会去找静态资源文件夹下的index.html(注意不能配置spring.mvc.static-path-pattern)或者是controller处理/index转发的页面

下面是WebMvcAutoConfiguration这个类中关于首页的相关方法

@Bean
public WelcomePageHandlerMapping welcomePageHandlerMapping(ApplicationContext applicationContext, FormattingConversionService mvcConversionService, ResourceUrlProvider mvcResourceUrlProvider) {
    WelcomePageHandlerMapping welcomePageHandlerMapping = new WelcomePageHandlerMapping(new TemplateAvailabilityProviders(applicationContext), applicationContext, this.getWelcomePage(), this.mvcProperties.getStaticPathPattern());
    welcomePageHandlerMapping.setInterceptors(this.getInterceptors(mvcConversionService, mvcResourceUrlProvider));
    welcomePageHandlerMapping.setCorsConfigurations(this.getCorsConfigurations());
    return welcomePageHandlerMapping;
}
private Resource getWelcomePage() {
    String[] var1 = this.resourceProperties.getStaticLocations();
    int var2 = var1.length;
    for(int var3 = 0; var3 < var2; ++var3) {
        String location = var1[var3];
        Resource indexHtml = this.getIndexHtml(location);
        if (indexHtml != null) {
            return indexHtml;
        }
    }
    ServletContext servletContext = this.getServletContext();
    if (servletContext != null) {
        return this.getIndexHtml((Resource)(new ServletContextResource(servletContext, "/")));
    } else {
        return null;
    }
}
private Resource getIndexHtml(String location) {
    return this.getIndexHtml(this.resourceLoader.getResource(location));
}
private Resource getIndexHtml(Resource location) {
    try {
        Resource resource = location.createRelative("index.html");
        if (resource.exists() && resource.getURL() != null) {
            return resource;
        }
    } catch (Exception var3) {
    }
    return null;
}

2、图标

官网是说在静态资源路径下放置一个favicon.ico,spring boot就会自动识别

如图

图标加载成功 可能会因为缓存加载不出来 清除缓存多试几次就行了

到此这篇关于SpringBoot静态资源与首页配置实现原理深入分析的文章就介绍到这了,更多相关SpringBoot静态资源内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java中使用MongoDB数据库实例Demo

    Java中使用MongoDB数据库实例Demo

    MongoDB是由C++语言编写的,基于分布式文件存储的数据库,是一个介于关系数据库和非关系数据库之间的产品,是最接近于关系型数据库的NoSQL数据库,下面这篇文章主要给大家介绍了关于Java中使用MongoDB数据库的相关资料,需要的朋友可以参考下
    2023-12-12
  • 一文详解Java过滤器拦截器实例逐步掌握

    一文详解Java过滤器拦截器实例逐步掌握

    这篇文章主要为大家介绍了Java过滤器拦截器实例详解逐步掌握,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-04-04
  • SpringBoot集成Milvus和deeplearning4j实现图搜图功能

    SpringBoot集成Milvus和deeplearning4j实现图搜图功能

    Milvus 是一种高性能、高扩展性的向量数据库,可在从笔记本电脑到大型分布式系统等各种环境中高效运行,Deeplearning4j(DL4J)是一个开源的深度学习框架,专门为Java和Scala开发,本文给大家介绍了SpringBoot集成Milvus和deeplearning4j实现图搜图功能
    2024-10-10
  • javaweb中ajax请求后台servlet(实例)

    javaweb中ajax请求后台servlet(实例)

    下面小编就为大家带来一篇javaweb中ajax请求后台servlet(实例)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-06-06
  • SpringCloud环境搭建过程之Rest使用小结

    SpringCloud环境搭建过程之Rest使用小结

    这篇文章主要介绍了SpringCloud环境搭建之Rest使用,本文通过实例代码图文相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-08-08
  • MyBatis类型处理器TypeHandler的作用及说明

    MyBatis类型处理器TypeHandler的作用及说明

    这篇文章主要介绍了MyBatis类型处理器TypeHandler的作用及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-03-03
  • java使用xpath解析xml示例分享

    java使用xpath解析xml示例分享

    XPath基于XML的树状结构,提供在数据结构树中找寻节点的能力,下面是一小示例,需要的朋友可以参考下
    2014-03-03
  • Java数据类型之引用数据类型解读

    Java数据类型之引用数据类型解读

    这篇文章主要介绍了Java数据类型之引用数据类型,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • Spring Boot项目搭建的两种方式

    Spring Boot项目搭建的两种方式

    springboot简单快捷方便的优点深受用户喜爱,springboot开发环境搭建过程是每个开发者必须要做的工作,今天小编写的一篇教程关于Spring Boot项目搭建方法,通过两种方式给大家介绍的非常详细,需要的朋友参考下吧
    2021-06-06
  • java操作cookie示例(删除cookie)

    java操作cookie示例(删除cookie)

    这篇文章主要介绍了java操作cookie示例,包括设置Cookie、读取Cookie、删除Cookie,需要的朋友可以参考下
    2014-02-02

最新评论