SpringBoot靜態(tài)資源CSS等修改后再運(yùn)行無效的解決
SpringBoot靜態(tài)資源CSS等修改后再運(yùn)行無效問題
問題背景
在美化網(wǎng)頁過程中,修改好CSS后在本地已經(jīng)可以顯示出我想要的效果了。于是就把修改好后的css加載到springboot中運(yùn)行,結(jié)果問題出現(xiàn)了:我修改后的css樣式始終不能加載!打開F12看到css樣式成功的被請(qǐng)求,然后再進(jìn)一步點(diǎn)進(jìn)去看css文件,發(fā)現(xiàn)我修改的部分并沒有加載,現(xiàn)在用的css還是我修改以前的css。這里我注意到一個(gè)細(xì)節(jié),然后才明白是怎么回事

原來spring boot會(huì)把靜態(tài)文件緩存到瀏覽器本地。但這樣就造成了一個(gè)問題:如果服務(wù)器靜態(tài)文件修改,瀏覽器端在未過期之前是不會(huì)重新加載文件的。此時(shí)需要通過版本號(hào)來控制。spring boot版本號(hào)支持兩種,一種是文件md5,另一種是固定版本號(hào)。我采用的是md5方式,spring boot啟動(dòng)時(shí)會(huì)計(jì)算每個(gè)靜態(tài)文件的md5值并緩存,瀏覽器訪問時(shí)每個(gè)靜態(tài)文件后綴前加上md5值作為版本號(hào),如果服務(wù)器md5值改變則瀏覽器重新加載。(需要重啟應(yīng)用才會(huì)重新生成md5)
下面來設(shè)置md5方式
1、先設(shè)置文件配置application.properties
# 資源緩存時(shí)間,單位秒 spring.resources.cache.period=604800 # 開啟gzip壓縮 spring.resources.chain.compressed=true # 啟用緩存 spring.resources.chain.cache=true # 使用MD5版本號(hào) 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進(jìn)行版本管理
* 并避免在版本發(fā)生改變時(shí),由于瀏覽器緩存而產(chǎn)生資源版本未改變的錯(cuò)誤
*/
@ControllerAdvice
public class ControllerConfig {
@Autowired
private ResourceUrlProvider resourceUrlProvider;
@ModelAttribute("urls")
public ResourceUrlProvider urls() {
return this.resourceUrlProvider;
}
}
3、在網(wǎng)頁中引用靜態(tài)文件
注意:如果使用的thymeleaf模板引擎的話,那么需要這么進(jìn)行編寫:
<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,在項(xiàng)目中引用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項(xiàng)目運(yùn)行起來后,你會(huì)發(fā)現(xiàn)CSS加載失效了,所以如果是Springboot項(xiàng)目,一定要加上后面的路徑th:href=""。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java讀取一行空格隔開的數(shù)字字符串并求出這些數(shù)字的和方法
今天小編就為大家分享一篇Java讀取一行空格隔開的數(shù)字字符串并求出這些數(shù)字的和方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-07-07
netty服務(wù)端處理請(qǐng)求聯(lián)合pipeline分析
這篇文章主要為大家介紹了netty服務(wù)端處理請(qǐng)求聯(lián)合pipeline示例分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04
java異常繼承何類,運(yùn)行時(shí)異常與一般異常的區(qū)別(詳解)
下面小編就為大家?guī)硪黄猨ava異常繼承何類,運(yùn)行時(shí)異常與一般異常的區(qū)別(詳解)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-11-11
java使用EasyExcel導(dǎo)出上萬數(shù)據(jù)如何避免OOM
本文主要介紹了使用EasyExcel導(dǎo)出大量數(shù)據(jù)時(shí)避免OOM問題的方法,通過分頁查詢和分批次寫入Excel,可以有效避免內(nèi)存溢出,并提供了一個(gè)封裝好的工具類,簡(jiǎn)化了導(dǎo)出代碼的編寫2024-11-11
java 算法之希爾排序詳解及實(shí)現(xiàn)代碼
這篇文章主要介紹了java 算法之希爾排序詳解及實(shí)現(xiàn)代碼的相關(guān)資料,需要的朋友可以參考下2017-03-03
SpringBoot實(shí)現(xiàn)API接口多版本支持的示例代碼
這篇文章主要介紹了SpringBoot實(shí)現(xiàn)API接口多版本支持的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10

