SpringBoot下靜態(tài)資源處理

默認情況下,SpringBoot從clsspath下的/META-INF/resources/,/resources/,/static/, /public/或ServletContext根路徑下查找靜態(tài)資源,默認配置變量為ResourceProperties.CLASSPATH_RESOURCE_LOCATIONS。這是通過Spring MVC的ResourceHttpRequestHandler實現(xiàn)的,也可以自定義WebMvcConfigurerAdapter子類覆寫addResourceHandlers方法來改變資源映射行為。

靜態(tài)資源基本配置

spring:
  resources:
    static-locations: classpath:/resources/,classpath:/html/ 
  mvc:
    static-path-pattern: /res/**    #靜態(tài)資源映射路徑

經(jīng)過上面配置后,頁面請求的每個靜態(tài)文件必須包含/res/,這樣靜態(tài)文件才能映射到static-locations路徑,沒有配置就使用默認的。規(guī)范所有靜態(tài)資源統(tǒng)一前綴,在使用shiro等攔截工具時,可以匹配/res/** 不進行權(quán)限檢查。

資源緩存配置

spring:
  resources:
    cache:
      period:        #間隔周期,默認秒
      cachecontrol:        #緩存控制
        max-age:              #緩存最長時間,默認秒
        no-cache: true      #通過服務器驗證后才能重用響應的緩存
        no-store: true        #關(guān)閉緩存

資源緩存一般用于緩存應用靜態(tài)資源和webjars下面的資源,默認情況下,springboot會配置/webjars/**對應classpath:/META-INF/resources/webjars/的資源映射并進行緩存配置,static-path-pattern也會對應static-locations進行緩存配置。

靜態(tài)資源訪問策略,基于VersionResourceResolver實現(xiàn)

resources:
    chain:
      gzipped: true    #響應是否進行Gzip壓縮處理
      strategy:
        content:        #文件內(nèi)容MD5 hash
          enabled: true  #是否啟用
          paths:        
        fixed:          #固定版本
          enabled: true    #是否啟用
          version:
          paths:
  1. 文件內(nèi)容MD5
    如index.css 文件內(nèi)容當前MD5值是e36d2e05253c6c7085a91522ce43a0b4,后來修改了該文件,產(chǎn)生了新的MD5值g47d2e05253c6c7085a91522ce43a0b4,頁面css地址之前是index-e36d2e05253c6c7085a91522ce43a0b4.css,現(xiàn)在必須改成index-g47d2e05253c6c7085a91522ce43a0b4.css才能正確訪問該文件,一般這種全局路徑前綴,必須在一個地方定義,其他乙方引入,如在freemarker中用全局變量代替,便于全局更改。
//默認使用FileNameVersionPathStrategy,如path/foo-{version}.css
public String getResourceVersion(Resource resource) {
        try {
            byte[] content = FileCopyUtils.copyToByteArray(resource.getInputStream());
            return DigestUtils.md5DigestAsHex(content);
        }
        catch (IOException ex) {
            throw new IllegalStateException("Failed to calculate hash for " + resource, ex);
        }
    }
  1. 固定版本號
    如:{version}/js/main.js,這個version可以自定義,原理同上。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

  • SpringBoot靜態(tài)資源的訪問 在我們開發(fā)Web應用的時候,會用到大量的js、css、image、html等靜...
    lavor閱讀 47,847評論 0 11
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,609評論 19 139
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 47,275評論 6 342
  • 如一縷夕陽灑進窗臺,陽光溫和爾雅,味道也帶有些許的安馨感,如此動人的靜然想必是別具有一番風味。有的文字就如此一撤,...
    大房子613閱讀 341評論 2 9
  • 我們?yōu)榱藵M足饑餓的欲望而活,胃的饑餓,肢體的饑餓,靈魂的饑餓。而城市的夜,車水馬龍,在不下雨的日子里,享受寂寞的茶...
    丞井閱讀 340評論 0 0

友情鏈接更多精彩內(nèi)容