SpringBoot靜態(tài)資源CSS等修改后再運行無效的解決
SpringBoot靜態(tài)資源CSS等修改后再運行無效問題
問題背景
在美化網(wǎng)頁過程中,修改好CSS后在本地已經(jīng)可以顯示出我想要的效果了。于是就把修改好后的css加載到springboot中運行,結(jié)果問題出現(xiàn)了:我修改后的css樣式始終不能加載!打開F12看到css樣式成功的被請求,然后再進一步點進去看css文件,發(fā)現(xiàn)我修改的部分并沒有加載,現(xiàn)在用的css還是我修改以前的css。這里我注意到一個細節(jié),然后才明白是怎么回事
原來spring boot會把靜態(tài)文件緩存到瀏覽器本地。但這樣就造成了一個問題:如果服務(wù)器靜態(tài)文件修改,瀏覽器端在未過期之前是不會重新加載文件的。此時需要通過版本號來控制。spring boot版本號支持兩種,一種是文件md5,另一種是固定版本號。我采用的是md5方式,spring boot啟動時會計算每個靜態(tài)文件的md5值并緩存,瀏覽器訪問時每個靜態(tài)文件后綴前加上md5值作為版本號,如果服務(wù)器md5值改變則瀏覽器重新加載。(需要重啟應(yīng)用才會重新生成md5)
下面來設(shè)置md5方式
1、先設(shè)置文件配置application.properties
# 資源緩存時間,單位秒 spring.resources.cache.period=604800 # 開啟gzip壓縮 spring.resources.chain.compressed=true # 啟用緩存 spring.resources.chain.cache=true # 使用MD5版本號 spring.resources.chain.strategy.content.enabled=true spring.resources.chain.strategy.content.paths=/**
2、添加靜態(tài)資源控制類,使用ResourceUrlProvider
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.servlet.resource.ResourceUrlProvider; /** * 使用ResourceUrlProvider進行版本管理 * 并避免在版本發(fā)生改變時,由于瀏覽器緩存而產(chǎn)生資源版本未改變的錯誤 */ @ControllerAdvice public class ControllerConfig { @Autowired private ResourceUrlProvider resourceUrlProvider; @ModelAttribute("urls") public ResourceUrlProvider urls() { return this.resourceUrlProvider; } }
3、在網(wǎng)頁中引用靜態(tài)文件
注意:如果使用的thymeleaf模板引擎的話,那么需要這么進行編寫:
<link rel="stylesheet" th:href="${urls.getForLookupPath('/css/font.css')}" rel="external nofollow" > <link rel="stylesheet" th:href="${urls.getForLookupPath('/css/xadmin.css')}" rel="external nofollow" > <script th:src="${urls.getForLookupPath('/lib/layui/layui.js')}" charset="utf-8"></script> <script type="text/javascript" th:src="${urls.getForLookupPath('/js/xadmin.js')}"></script>
SpringBoot開發(fā)中的一些小坑—CSS失效
Springboot版本1.5.17
結(jié)合thymeleaf,在項目中引用CSS文件的問題
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.17.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency>
<!DOCTYPE html > <html lang="zh-CN" xmlns:th="http://www.thymeleaf.org" > <head> <meta charset="UTF-8" /> <title>0.0</title> <link rel="stylesheet" type="text/css" href="../static/css/index.css" rel="external nofollow" rel="external nofollow" > </head>
首先配置的CSS引用是這樣,href后面跟上從static文件后的完整路徑,打開靜態(tài)網(wǎng)頁就是有css效果了
沒有加載成功是這樣的
但是問題來了,還有種說法是這樣加:
<link rel="stylesheet" type="text/css" href="../static/css/index.css" rel="external nofollow" rel="external nofollow" th:href="@{/css/index.css}" rel="external nofollow" >
而在靜態(tài)網(wǎng)頁中,你看到的,始終是帶上了CSS樣式的結(jié)果,但Springboot項目運行起來后,你會發(fā)現(xiàn)CSS加載失效了,所以如果是Springboot項目,一定要加上后面的路徑th:href=""。
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python機器學(xué)習(xí)三大件之二pandas
這篇文章主要介紹了Python機器學(xué)習(xí)三大件之二pandas,文中有非常詳細的代碼示例,對正在學(xué)習(xí)Python的小伙伴們有很好地幫助,需要的朋友可以參考下2021-05-05Selenium Webdriver實現(xiàn)截圖功能的示例
今天小編就為大家分享一篇Selenium Webdriver實現(xiàn)截圖功能的示例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-05-05Spring boot基于ScheduledFuture實現(xiàn)定時任務(wù)
這篇文章主要介紹了Spring boot基于ScheduledFuture實現(xiàn)定時任務(wù),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-06-06Mybatis-plus批量去重插入ON DUPLICATE key update使用方式
這篇文章主要介紹了Mybatis-plus批量去重插入ON DUPLICATE key update使用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-12-12