知識改變命運(yùn),擼碼使我快樂浴麻,2020繼續(xù)游走在開源界
點(diǎn)贊再看得问,養(yǎng)成習(xí)慣
給我來個(gè)Star吧,點(diǎn)擊了解下基于SpringBoot的組件化接口服務(wù)落地解決方案
概述
我們在編寫前后分離項(xiàng)目時(shí)软免,前端的項(xiàng)目一般需要靜態(tài)資源(Image
宫纬、CSS
、JavaScript
...)來進(jìn)行渲染界面膏萧,而如果我們對外采用依賴的方式提供使用時(shí)漓骚,我們的靜態(tài)資源文件也應(yīng)該放入打包文件內(nèi)蝌衔,這樣才能更便捷的提供我們的功能,在我的開源分布式日志框架 minbox-logging 內(nèi)提供了管理界面的功能蝌蹂,就是采用的這種方式實(shí)現(xiàn)噩斟,將靜態(tài)資源以及編譯后的HTML
頁面存放到minbox-logging-admin-ui
依賴內(nèi),下面我們來看下具體的實(shí)現(xiàn)方式叉信。
推薦閱讀
了解Resources Static Locations
在我們打包靜態(tài)資源前亩冬,首先來了解下SpringBoot
提供的spring.resources.static-locations
配置默認(rèn)值,該配置用于配置ResourceHandler
,項(xiàng)目啟動后會將該參數(shù)的配置值列表
作為直接可訪問的靜態(tài)目錄進(jìn)行映射
,通過這種方式我們就可以直接訪問到我們需要的靜態(tài)資源內(nèi)容禀忆。
spring.resources.static-locations
配置位于org.springframework.boot.autoconfigure.web.ResourceProperties
配置類內(nèi)寥袭,其默認(rèn)值是使用本類內(nèi)的靜態(tài)常量CLASSPATH_RESOURCE_LOCATIONS
的值,如下所示:
private static final String[] CLASSPATH_RESOURCE_LOCATIONS = { "classpath:/META-INF/resources/",
"classpath:/resources/", "classpath:/static/", "classpath:/public/" };
/**
* Locations of static resources. Defaults to classpath:[/META-INF/resources/,
* /resources/, /static/, /public/].
*/
private String[] staticLocations = CLASSPATH_RESOURCE_LOCATIONS;
通過查看源碼我們得知撒顿,classpath:/META-INF/resources/
目錄下的資源是可以直接通過默認(rèn)的映射綁定關(guān)系訪問到的丑罪,通過這一點(diǎn),我們可以將靜態(tài)資源依賴內(nèi)的資源文件存放到META-INF/resources
目錄下凤壁。
資源打包
我們使用Maven
方式構(gòu)建一個(gè)普通的項(xiàng)目吩屹,在pom.xml
文件內(nèi)添加資源目錄
配置,在編譯
過程中將src/main/resources
目錄下的文件全部復(fù)制到META-INF/resources
下拧抖,如下所示:
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<targetPath>META-INF/resources</targetPath>
</resource>
</resources>
</build>
為了驗(yàn)證資源訪問煤搜,我們在
src/main/resources
目錄下存放一個(gè)名為head.jpg
的圖片。
我們?yōu)榱吮镜匮菔臼褂眠笙瑢?code>Maven項(xiàng)目通過mvn install
命令安裝到本地倉庫擦盾,以便于提供給其他項(xiàng)目使用。
使用WebJars依賴
我們來創(chuàng)建一個(gè)SpringBoot
項(xiàng)目淌哟,在項(xiàng)目的pom.xml
文件內(nèi)添加如下依賴:
<dependencies>
<!--靜態(tài)資源的訪問映射綁定需要web依賴-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.example</groupId>
<artifactId>webjars-sample</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
由于我們在之前通過mvn install
命令將靜態(tài)資源項(xiàng)目
安裝到了本地倉庫迹卢,所以我們可以使用依賴。
通過IDEA
工具我們可以查看webjars-sample
依賴內(nèi)的資源文件徒仓,如下圖所示:
由于SpringBoot
提供的spring.resources.static-locations
參數(shù)默認(rèn)值腐碱,會將classpath:/META-INF/resources
目錄作為靜態(tài)資源映射,所以我們可以直接進(jìn)行訪問head.jpg
文件掉弛。
運(yùn)行SpringBoot
項(xiàng)目症见,通過訪問 http://localhost:8080/head.jpg,效果如下圖:
靜態(tài)資源訪問前綴
我們在訪問靜態(tài)資源的時(shí)候并沒有直接加前綴狰晚,而是通過ip:port/head.jpg
直接訪問筒饰,這主要是SpringBoot
還提供了另外一個(gè)配置spring.mvc.static-path-pattern
,其作用是用來配置靜態(tài)資源的訪問前綴
壁晒,默認(rèn)值為/**
瓷们,如果需要修改直接在application.yml
文件內(nèi)進(jìn)行賦值即可,
application.yml配置文件,如下所示:
spring:
application:
name: example
mvc:
static-path-pattern: /static/**
我們修改了spring.mvc.static-path-pattern
配置的值為/static/**
谬晕,當(dāng)我們重啟項(xiàng)目后需要通過 http://localhost:8080/static/head.jpg 才可以訪問到資源碘裕。
總結(jié)
如果你有一些資源不希望被別人修改,讓使用者更加便利的集成時(shí)攒钳,可以采用這種方式來封裝自己的webjars
帮孔,只需要添加依賴引用就可以訪問到靜態(tài)資源,也可以將靜態(tài)HTML
網(wǎng)頁通過這種方式打包不撑。