zoukankan      html  css  js  c++  java
  • spring boot的静态资源加载

    1.spring boot默认资源处理

    Spring Boot 默认为我们提供了静态资源处理,使用 WebMvcAutoConfiguration 中的配置各种属性。

    spring boot默认加载文件的路径是:

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

    这些目录下面, 当然我们也可以从spring boot源码也可以看到Java代码:

    private static final String[] CLASSPATH_RESOURCE_LOCATIONS = { "classpath:/META-INF/resources/", "classpath:/resources/",   "classpath:/static/", "classpath:/public/" };  

    上面这几个都是静态资源的映射路径,优先级顺序为:META-INF/resources > resources > static > public

    所有本地的静态资源都配置在了classpath下面了, 而非在webapp下了。

    如果Spring Boot提供的Sping MVC不符合要求,则可以通过一个配置类(注解有@Configuration的类)加上@EnableWebMvc注解来实现完全自己控制的MVC配置。
    当然,通常情况下,Spring Boot的自动配置是符合我们大多数需求的。在你既需要保留Spring Boot提供的便利,有需要增加自己的额外的配置的时候,可以定义一个配置类并继承WebMvcConfigurerAdapter,无需使用@EnableWebMvc注解。

    如果@EnableWebMvc了,那么就会自动覆盖了官方给出的/static, /public, META-INF/resources, /resources等存放静态资源的目录。

    2.自定义资源映射

    这里我们提到这个WebMvcConfigurerAdapter这个类,重写这个类中的方法可以让我们增加额外的配置,这里我们就介绍几个常用的。
    自定义资源映射addResourceHandlers

    比如,我们想自定义静态资源映射目录的话,只需重写addResourceHandlers方法即可。

    @Configuration
    public class SimpleWebAppConfigurer extends WebMvcConfigurerAdapter {
    
        @Override
        public void addResourceHandlers(ResourceHandlerRegistry registry) {
            registry.addResourceHandler("/myresource/**").addResourceLocations("classpath:/myresource/");
    
            super.addResourceHandlers(registry);
        }
    
    }
    通过addResourceHandler添加映射路径,然后通过addResourceLocations来指定路径。
    如果我们将/myresource/* 修改为 /* 与默认的相同时,则会覆盖系统的配置,可以多次使用 addResourceLocations 添加目录,优先级先添加的高于后添加的。
    3.使用外部资源
    如果我们要指定一个绝对路径的文件夹(如 H:/images/ ),则只需要使用addResourceLocations 指定即可。
    // 可以直接使用addResourceLocations 指定磁盘绝对路径,同样可以配置多个位置,注意路径写法需要加上file:
    registry.addResourceHandler("/myimgs/**").addResourceLocations("file:H:/myimgs/");
    通过配置文件配置,上面是使用代码来定义静态资源的映射,其实Spring Boot也为我们提供了可以直接在 application.properties(或.yml)中配置的方法。
    配置方法如下:
    # 默认值为 /**
    spring.mvc.static-path-pattern=classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/
    spring.resources.static-locations=这里设置要指向的路径,多个使用英文逗号隔开
    使用 spring.resources.static-locations 可以重新定义 pattern 所指向的路径,支持 classpath: 和 file: (上面已经做过说明)
    注意 spring.mvc.static-path-pattern 只可以定义一个,目前不支持多个逗号分割的方式。
  • 相关阅读:
    iOS的流畅性
    iOS系统的特点-iOS为什么运行更流畅
    安卓怎么不如ios运行流畅
    关于后台动态模板添加内容的总结 Builder使用
    PHP中用下划线开头的变量含义
    php 变量名前加一个下划线含义
    ThinkPHP 模版中的内置标签
    PC端页面如何调用QQ进行在线聊天?
    手机web页面调用手机QQ实现在线聊天的效果
    THINKPHP框架的优秀开源系统推荐
  • 原文地址:https://www.cnblogs.com/web424/p/6755975.html
Copyright © 2011-2022 走看看