一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Spring Boot 中的靜態資源放置位置

Spring Boot 中的靜態資源放置位置

2021-07-28 12:08江南一點雨 Java教程

這篇文章主要介紹了Spring Boot 中的靜態資源到底要存放哪里,很多童鞋對這個問題很糾結,接下來通過本文給大家介紹下,需要的朋友可以參考下

當我們使用 springmvc 框架時,靜態資源會被攔截,需要添加額外配置,之前老有小伙伴在微信上問松哥spring boot 中的靜態資源加載問題:“松哥,我的html頁面好像沒有樣式?”,今天我就通過一篇文章,來和大伙仔細聊一聊這個問題。

ssm 中的配置

要講 spring boot 中的問題,我們得先回到 ssm 環境搭建中,一般來說,我們可以通過 <mvc:resources /> 節點來配置不攔截靜態資源,如下:

?
1
2
3
<mvc:resources mapping="/js/**" location="/js/"/>
<mvc:resources mapping="/css/**" location="/css/"/>
<mvc:resources mapping="/html/**" location="/html/"/>

由于這是一種ant風格的路徑匹配符,/** 表示可以匹配任意層級的路徑,因此上面的代碼也可以像下面這樣簡寫:
<mvc:resources mapping="/**" location="/"/>

這種配置是在 xml 中的配置,大家知道,springmvc 的配置除了在xml中配置,也可以在 java 代碼中配置,如果在java代碼中配置的話,我們只需要自定義一個類,繼承自webmvcconfigurationsupport即可:

?
1
2
3
4
5
6
7
8
@configuration
@componentscan(basepackages = "org.sang.javassm")
public class springmvcconfig extends webmvcconfigurationsupport {
  @override
  protected void addresourcehandlers(resourcehandlerregistry registry) {
    registry.addresourcehandler("/**").addresourcelocations("/");
  }
}

重寫 webmvcconfigurationsupport 類中的addresourcehandlers方法,在該方法中配置靜態資源位置即可,這里的含義和上面 xml 配置的含義一致,因此無需多說。

 這是我們傳統的解決方案,在spring boot 中,其實配置方式和這個一脈相承,只是有一些自動化的配置了。

spring boot 中的配置

在 spring boot 中,如果我們是從https://start.spring.io 這個網站上創建的項目,或者使用 intellij idea 中的 spring boot 初始化工具創建的項目,默認都會存在 resources/static 目錄,很多小伙伴也知道靜態資源只要放到這個目錄下,就可以直接訪問,除了這里還有沒有其他可以放靜態資源的位置呢?為什么放在這里就能直接訪問了呢?這就是本文要討論的問題了。

整體規劃

首先,在 spring boot 中,默認情況下,一共有5個位置可以放靜態資源,五個路徑分別是如下5個:

1.classpath:/meta-inf/resources/
2.classpath:/resources/
3.classpath:/static/
4.classpath:/public/
5./

前四個目錄好理解,分別對應了resources目錄下不同的目錄,第5個 / 是啥意思呢?我們知道,在 spring boot 項目中,默認是沒有 webapp 這個目錄的,當然我們也可以自己添加(例如在需要使用jsp的時候),這里第5個 / 其實就是表示 webapp 目錄中的靜態資源也不被攔截。如果同一個文件分別出現在五個目錄下,那么優先級也是按照上面列出的順序。

不過,雖然有5個存儲目錄,除了第5個用的比較少之外,其他四個,系統默認創建了 classpath:/static/ , 正常情況下,我們只需要將我們的靜態資源放到這個目錄下即可,也不需要額外去創建其他靜態資源目錄,例如我在 classpath:/static/ 目錄下放了一張名為1.png 的圖片,那么我的訪問路徑是:

http://localhost:8080/1.png 

這里大家注意,請求地址中并不需要 static,如果加上了static反而多此一舉會報404錯誤。很多人會覺得奇怪,為什么不需要添加 static呢?資源明明放在 static 目錄下。其實這個效果很好實現,例如在ssm配置中,我們的靜態資源攔截配置如果是下面這樣:

<mvc:resources mapping="/**" location="/static/"/>

如果我們是這樣配置的話,請求地址如果是http://localhost:8080/1.png  實際上系統會去 /static/1.png 目錄下查找相關的文件。

所以我們理所當然的猜測,在 spring boot 中可能也是類似的配置。

源碼解讀

胡適之先生說:“大膽猜想,小心求證”,我們這里就通過源碼解讀來看看 spring boot 中的靜態資源到底是怎么配置的。

首先我們在 webmvcautoconfiguration 類中看到了 springmvc 自動化配置的相關的內容,找到了靜態資源攔截的配置,如下:

Spring Boot 中的靜態資源放置位置

可以看到這里靜態資源的定義和我們前面提到的java配置ssm中的配置非常相似,其中,this.mvcproperties.getstaticpathpattern() 方法對應的值是 “/**”,this.resourceproperties.getstaticlocations()方法返回了四個位置,分別是:"classpath:/meta-inf/resources/", "classpath:/resources/","classpath:/static/", "classpath:/public/",然后在getresourcelocations方法中,又添加了“/”,因此這里返回值一共有5個。其中,/表示webapp目錄,即webapp中的靜態文件也可以直接訪問。靜態資源的匹配路徑按照定義路徑優先級依次降低。因此這里的配置和我們前面提到的如出一轍。這樣大伙就知道了為什么spring boot 中支持5個靜態資源位置,同時也明白了為什么靜態資源請求路徑中不需要/static,因為在路徑映射中已經自動的添加上了/static了。

自定義配置

當然,這個是系統默認配置,如果我們并不想將資源放在系統默認的這五個位置上,也可以自定義靜態資源位置和映射,自定義的方式也有兩種,可以通過 application.properties 來定義,也可以在 java 代碼中來定義,下面分別來看。

application.properties

在配置文件中定義的方式比較簡單,如下:

?
1
2
spring.resources.static-locations=classpath:/
spring.mvc.static-path-pattern=/**

第一行配置表示定義資源位置,第二行配置表示定義請求 url 規則。以上文的配置為例,如果我們這樣定義了,表示可以將靜態資源放在 resources目錄下的任意地方,我們訪問的時候當然也需要寫完整的路徑,例如在resources/static目錄下有一張名為1.png 的圖片,那么訪問路徑就是http://localhost:8080/static/1.png ,注意此時的static不能省略。

java 代碼定義

當然,在spring boot中我們也可以通過 java代碼來自定義,方式和 java 配置的 ssm 比較類似,如下:

?
1
2
3
4
5
6
7
@configuration
public class webmvcconfig implements webmvcconfigurer {
  @override
  public void addresourcehandlers(resourcehandlerregistry registry) {
    registry.addresourcehandler("/**").addresourcelocations("classpath:/aaa/");
  }
}

這里代碼基本和前面一致,比較簡單,不再贅述。

總結

這里需要提醒大家的是,松哥見到有很多人用了 thymeleaf 之后,會將靜態資源也放在 resources/templates 目錄下,注意,templates 目錄并不是靜態資源目錄,它是一個放頁面模板的位置(你看到的 thymeleaf 模板雖然后綴為 .html,其實并不是靜態資源)。好了,通過上面的講解,相信大家對 spring boot 中靜態資源的位置有一個深刻了解了,應該不會再在項目中出錯了吧!

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 青草视频在线观看免费资源 | 海派甜心完整版在线观看 | 我在厨房摸岳的乳HD在线观看 | 娇小XXXXX第一次出血 | 五月婷婷伊人网 | 日韩精品福利视频一区二区三区 | 国产精品一区二区三区免费 | 手机看片福利盒子久久 | 大香线一本 | 日本一区视频在线 | 双性受合不垅腿攻np | 555www成人网 | 亚洲成色WWW久久网站夜月 | 北岛玲亚洲一区在线观看 | 国产传媒在线播放 | 国产这里有精品 | 肥胖女人一级毛片 | 日韩在线观看网址 | 爱情岛论坛亚洲永久入口口 | 成年人视频在线免费看 | 国产色视频一区二区三区 | 狠狠夜夜久久日日91av | 美女扒开胸罩露出胸大乳 | 精品视频国产 | 公共场合高h短篇 | 日韩精品一区二区三区中文版 | 亚洲色图欧美图片 | 亚1洲二区三区四区免费 | 亚洲免费视频播放 | 99久久精品免费精品国产 | 日韩美女强理论片 | 亚洲女性色尼古综合网 | yjzz视频| futa文| 特级淫片大乳女子高清视频 | japonensis中国东北老人 | 天海翼黄色三级 | 免费观看毛片视频 | 俄罗斯女同和女同xx | 午夜久 | 二区三区不卡不卡视频 |