您好,登錄后才能下訂單哦!
SpringBoot如何啟動類靜態資源的路徑,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
SpringBoot核心JAR包--》spring-boot-autoconfigure-2.2.6.RELEASE.jar
其下面有--》org.springframework.boot.autoconfigure.web
其中有類--》ResourceProperties
類中這樣定義默認靜態資源訪問:
private static final String[] CLASSPATH_RESOURCE_LOCATIONS = { "classpath:/META-INF/resources/", "classpath:/resources/", "classpath:/static/", "classpath:/public/" };
/META-INF/resources/
/resources/
/static/
/public/
靜態資源都是再classpath中,那么問題來了,IDEA中的classpath在哪里呢 ?我們來看
點擊進入項目的結構設計中--》首先在打開的項目窗口打開File->Project Structure...,得到如下圖所示的項目結構:
Source Folders表示的都是代碼源文件目錄,生成的class文件會輸出到target->classess文件夾中,但是里面的源文件不會復制到target->classes文件夾中,Test Source Folders表示的都是測試代碼源文件目錄,生成的class文件同樣會輸出到target->classess文件夾中,并且里面的源文件不會復制到target->classes文件夾中。
而Recource Folders表示的都是資源文件目錄,這些目錄里面的文件會在代碼編譯運行被直接復制到target->classess文件夾中。target->classes即為classpath,任何我們需要在classpath前綴中獲取的資源都必須在target->classes文件夾中找到,否則將出現java.io.FileNotFoundException的錯誤信息。
如果想添加一些自己的目錄到Source Folders、Resource Folders這樣的目錄分類里來實現編譯過后正確地文件輸出,則可以點擊需要設置的文件夾,再在文件結構窗口上方的Make as:后面選擇正確的目錄類型即可。
所以我們的項目靜態資源的文件夾訪問就是以這里的Resource Folder為基準,舉個例子:
classpath:/static/指的就是:src/main/resources/static
所以SpringBoot的默認index.xml可以放在路徑為src/main/resources/static的文件夾下,這樣項目一啟動index.html就自動加載了。
我們將src設置成了Resource Folders,接下來我們在src下創建/META-INF/resources/路徑:
我們啟動項目(這個時候是沒有建立任何類,啟動類啟動加載默認的index)
成功展示index.html的內容,沒有問題。其他幾個路徑都是沒有問題的,
這里有一個問題就是這幾個路徑的人順序問題。我們封閉建立這樣四個路徑,分別設置不同的內容:
啟動后輸出的還是HelloWorld,現在我們刪掉/META-INF/resources/的index.html再看看:
成功輸出。其他的就不再試了,明確的是它的默認加載順序是按照源碼里的順序來的。
分別是:
/META-INF/resources/
/resources/
/static/
/public/
private String[] appendSlashIfNecessary(String[] staticLocations) { String[] normalized = new String[staticLocations.length]; for (int i = 0; i < staticLocations.length; i++) { String location = staticLocations[i]; normalized[i] = location.endsWith("/") ? location : location + "/"; } return normalized; } //循環遍歷存放這幾個路徑,按照順序加載。
SpringBoot把類路徑下的/static,/public,/resources和META-INF/resources文件下的靜態文件映射為/,可以通過http://localhost:8080/訪問
SpringBoot默認了靜態文件的位置src/main/resources下的static目錄,如下:
static目錄需要自己創建。HTML也可以放在里面
src/main/resources |_static |_js |_img |_demo.png |_css
在html代碼中使用一下代碼即可訪問圖片
<img src="img/demo.png">
添加一個目錄位置
src/main/resources |_myImg |_demo.png |_static |_js |_img |_css
添加一個@Configuration注解的配置類
import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; /** * 自定義的圖片路徑 * @author pzr * */ @Configuration public class MyImageAddr extends WebMvcConfigurerAdapter { @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { //addResourceHandler中的是訪問路徑,可以修改為其他的字符串 //addResourceLocations中的是實際路徑 registry.addResourceHandler("/myImg/**").addResourceLocations("classpath:/myImg/"); super.addResourceHandlers(registry); } }
在html代碼中使用一下代碼即可訪問圖片
<img src="/myImg/demo.png">
關于SpringBoot如何啟動類靜態資源的路徑問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。