日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

Spring Boot静态资源访问和配置全解析

發布時間:2025/3/15 javascript 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring Boot静态资源访问和配置全解析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在web開發中,靜態資源的訪問時必不可少的,比如image、css、js等。SpringBoot對靜態資源訪問提供了很好的支持,使用其提供的基本默認配置基本可以滿足開發需求,同時,又支持開發人員進行自定義配置。

一、默認靜態資源映射規則

Spring Boot 默認將 / 所有訪問映射到以下目錄:**

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

接下來,在main/resources下新建static、public和resources三個文件夾,分別放入a.png、b.png和c.png三張圖片,如下:
這里寫圖片描述
啟動項目,分別訪問:

http://localhost:8083/a.png http://localhost:8083/b.png http://localhost:8083/c.png

發現都能正常訪問相應的圖片資源。那么說明,Spring Boot 默認會挨個從 public、resources和static 里面找是否存在相應的資源,如果有則直接返回。

二、自定義靜態資源映射規則

  • 自定義靜態資源映射類
  • 追溯源碼發現,在WebMvcAutoConfiguration類中,有如下代碼:

    public void addResourceHandlers(ResourceHandlerRegistry registry) {if(!this.resourceProperties.isAddMappings()) {logger.debug("Default resource handling disabled");} else {Duration cachePeriod = this.resourceProperties.getCache().getPeriod();CacheControl cacheControl = this.resourceProperties.getCache().getCachecontrol().toHttpCacheControl();if(!registry.hasMappingForPattern("/webjars/**")) {this.customizeResourceHandlerRegistration(registry.addResourceHandler(new String[]{"/webjars/**"}).addResourceLocations(new String[]{"classpath:/META-INF/resources/webjars/"}).setCachePeriod(this.getSeconds(cachePeriod)).setCacheControl(cacheControl));} // 此處做的就是靜態資源文件夾映射String staticPathPattern = this.mvcProperties.getStaticPathPattern();if(!registry.hasMappingForPattern(staticPathPattern)) {this.customizeResourceHandlerRegistration(registry.addResourceHandler(new String[]{staticPathPattern}).addResourceLocations(getResourceLocations(this.resourceProperties.getStaticLocations())).setCachePeriod(this.getSeconds(cachePeriod)).setCacheControl(cacheControl));}}}

    通過追溯staticPathPattern,在ResourceProperties類中,發現如下常量信息被設置:

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

    到此,就可以發現,這就是Spring Boot為我們提供的默認靜態資源映射,那么自定義映射規則的話,繼承WebMvcConfigurer即可。如下:

    @Configuration public class MyWebMvcConfig implements WebMvcConfigurer {@Overridepublic void addResourceHandlers(ResourceHandlerRegistry registry) {// 將/static/**訪問映射到classpath:/mystatic/registry.addResourceHandler("/static/**").addResourceLocations("classpath:/mystatic/");} }

    在main/resources下新建mystatic文件夾,并放入d.png圖片。
    啟動項目,訪問如下鏈接:
    http://localhost:8083/static/d.png
    發現,可以正常請求d.png圖片。

  • 在application.properties中進行配置
  • 2.2.1 配置靜態資源訪問路徑
    在application.properties中配置如下:

    spring.mvc.static-path-pattern=/mystatic/**

    重啟項目,再訪問靜態資源,需要以mystatic開頭,如下:
    http://localhost:8083/mystatic/a.png
    這樣,仍可以訪問之前的a b c三張圖片。如果按照之前http://localhost:8083/a.png就不能再訪問到了。

    2.2.2 配置靜態資源目錄
    在application.properties中,增加如下配置:

    # 配置靜態資源訪問前綴 spring.mvc.static-path-pattern=/mystatic/** # 配置靜態資源路徑,默認配置失效 spring.resources.static-locations[0]=classpath:/mystatic spring.resources.static-locations[1]=classpath:/public

    重啟項目,訪問:
    http://localhost:8083/mystatic/a.png
    發現可以正常訪問,同理,mystatic和static中靜態資源都可以正常訪問。
    但當訪問resources和static里靜態資源時,就會404報錯,訪問不到了,這個是因為配置文件中如果進行了靜態資源路徑的配置,那么默認的配置就失效了。

    總結

    以上是生活随笔為你收集整理的Spring Boot静态资源访问和配置全解析的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。