SpringBoot中配置Web靜態(tài)資源路徑的方法
介紹: 本文章主要針對(duì)web項(xiàng)目中的兩個(gè)問題進(jìn)行詳細(xì)解析介紹:1- 頁面跳轉(zhuǎn)404,即controller轉(zhuǎn)發(fā)無法跳轉(zhuǎn)頁面問題;2- 靜態(tài)資源文件路徑問題。
項(xiàng)目工具: Intelij Idea, JDK1.8, SpringBoot 2.1.3
正文:
準(zhǔn)備工作:通過Idea創(chuàng)建一個(gè)SpringBoot-web項(xiàng)目,此過程不做贅述,創(chuàng)建完成后項(xiàng)目結(jié)構(gòu)如下圖:
1- 創(chuàng)建一個(gè)controller代碼如下:
package com.example.webpractice.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @Controller public class DemoController { @RequestMapping("demo") public String demo() { System.out.println("進(jìn)入controller中的demo方法!"); /*注意:這里返回值有后綴名,如何省略后綴名后面有介紹*/ return "myPage.html"; } }
2- 在 web-practice\src\main\resources\templates\路徑下創(chuàng)建html頁面,取名“myPage”,代碼如下:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h1>Welcome to myPage!</h1> </body> </html>
此時(shí)運(yùn)行項(xiàng)目,會(huì)發(fā)現(xiàn)報(bào)404問題,同時(shí)查看Idea控制臺(tái),打印顯示進(jìn)入controller方法。
3- spring.resources.static-location登場
打開application.yml文件,進(jìn)行如下配置(默認(rèn)項(xiàng)目中配置文件為application.properties,修改后綴名即可,因我個(gè)人喜歡使用yml文件),重新運(yùn)行項(xiàng)目并訪問地址:localhost:8080/demo 會(huì)發(fā)現(xiàn)頁面跳轉(zhuǎn)成功。
spring: resources: static-locations: classpath:templates/
原因分析:spring.resources.static-location參數(shù)指定了Spring Boot-web項(xiàng)目中靜態(tài)文件存放地址,該參數(shù)默認(rèn)設(shè)置為:classpath:/static,classpath:/public,classpath:/resources,classpath:/META-INF/resources,servlet context:/,可以發(fā)現(xiàn)這些地址中并沒有/templates這個(gè)地址。當(dāng)配置文件中配置此項(xiàng)后,默認(rèn)配置失效,使用自定義設(shè)置。這里涉及到兩個(gè)概念:
(1)classpath: 通俗來講classpath對(duì)應(yīng)的項(xiàng)目中:web-practice\src\main\resources 文件目錄。如:“classpath: templates/” 即是將resources目錄下的templates文件夾設(shè)置為靜態(tài)文件目錄。更深一步講classpath路徑為:文件編譯后在target/classes目錄下的文件。
(2) 靜態(tài)文件目錄:通俗理解為存放包括 :.html;.jsp;CSS;js;圖片;文本文件等類型文件的目錄。這些文件都可以通過瀏覽器url進(jìn)行訪問。同時(shí)controller中轉(zhuǎn)發(fā)的文件目錄也必須被設(shè)置為靜態(tài)文件目錄,這就是增加了該參數(shù)以后就可以正常訪問的原因。
4- spring.mvc.view.prefix/suffix登場
現(xiàn)在頁面已經(jīng)可以正常轉(zhuǎn)發(fā),我們有了新的想法,我希望在templates文件夾中創(chuàng)建一個(gè)html文件夾用于專門存放頁面文件,另外在每次使用controller進(jìn)行轉(zhuǎn)發(fā)是都要標(biāo)明后綴名.html,這很麻煩,有沒有統(tǒng)一處理的方案,答案當(dāng)然是有!
修改后項(xiàng)目結(jié)構(gòu)如下:
controller方法修改如下:
package com.example.webpractice.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @Controller public class DemoController { @RequestMapping("demo") public String demo() { System.out.println("進(jìn)入controller中的demo方法!"); //如果不在appliation.yml文件中添加前后綴信息,此處返回語句為 //return "html/myPage.html" return "myPage"; } }
application.yml文件修改如下:
spring: resources: static-locations: classpath:templates/ mvc: view: prefix: html/ suffix: .html
再次運(yùn)行項(xiàng)目即可。通過測試得知prefix/suffix是在controller返回語句前后添加前后綴信息。
5- 配置多個(gè)靜態(tài)文件路徑:當(dāng)我們?cè)陧撁嬷刑砑訄D片,并且將圖片存放在resources/static/pic路徑下,如下圖所示:
修改myPage.html如下:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h1>Welcome to myPage!</h1> <img src="/pic/pig.jpg" height="1920" width="1080"/></body> </html>
之后重啟項(xiàng)目,會(huì)發(fā)現(xiàn)圖片并沒有成功加載!如下:
原因是之前我們配置的靜態(tài)文件目錄只包含classpath:templates/,static目錄還不是合法的存儲(chǔ)靜態(tài)文件目錄,我們只需要在后面追加上static目錄即可。修改application.yml文件如下:
spring: resources: static-locations: classpath:templates/,classpath:static/ mvc: view: prefix: html/ suffix: .html
修改后重啟項(xiàng)目刷新頁面,一切正常!
6- 關(guān)于spring.mvc.view.static-path-pattern
該參數(shù)用來規(guī)定訪問靜態(tài)文件的路徑格式,該參數(shù)默認(rèn)值為:“/**” 表示所有路徑,現(xiàn)將該參數(shù)修改為:“/static/**” 觀察現(xiàn)象
spring: resources: static-locations: classpath:templates/,classpath:static/ mvc: view: prefix: html/ suffix: .html static-path-pattern: /static/**
重啟項(xiàng)目,發(fā)現(xiàn)頁面不能加載404錯(cuò)誤!
要解決該問題需要修改兩個(gè)地方:
(1) 修改spring.mvc.view.prefix參數(shù)值為:static/html/ ;該修改為了controller轉(zhuǎn)發(fā)時(shí)可以找到文件路徑;
(2)修改myPage頁面的圖片地址如下:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h1>Welcome to myPage!</h1> <img src="/static/pic/pig.jpg" height="1920" width="1080"/></body> </html>
原因分析:static-path-pattern規(guī)定的時(shí)訪問靜態(tài)頁面的路徑類型,這里規(guī)定訪問靜態(tài)頁面必須為:localhost:8080/static/***的方式才能訪問到靜態(tài)資源。static-path-pattern并不是規(guī)定實(shí)際的靜態(tài)文件訪問路徑,而是規(guī)定了一種url標(biāo)記,只有遵循該標(biāo)記的規(guī)則才能訪問靜態(tài)文件。
擴(kuò)展:
1- spring.resources.static-locations參數(shù)除了規(guī)定classpath:路徑下的文件目錄為靜態(tài)文件目錄,還可以規(guī)定項(xiàng)目以外的位置,如設(shè)置:E:/test文件夾目錄為靜態(tài)文件存儲(chǔ)目錄,如下:
spring: resources: static-locations: classpath:templates/,classpath:static/,file:E:/test
2- 頁面訪問過程如下:
瀏覽器發(fā)送請(qǐng)求,先匹配SpringMVC中RequestMapping列表,匹配到后根據(jù)controller返回值定位靜態(tài)資源目錄,并返回給客戶;如果RequestMapping中未匹配到,則判斷是不是靜態(tài)文件目錄,如果是的話直接到靜態(tài)文件目錄對(duì)應(yīng)路徑下查詢文件,查詢到返回,未查詢到不返回。
3- static-location配置的目錄列表都被視為根目錄,如果兩個(gè)目錄中相同文件目錄下存儲(chǔ)了同名同類型文件,返回在static-locations配置靠前的根目錄下的內(nèi)容。
4- static-path-pattern參數(shù)規(guī)定了靜態(tài)文件存儲(chǔ)路徑,在controller的RequestMapping中應(yīng)該避免設(shè)置該路徑相同的訪問路徑。
到此這篇關(guān)于SpringBoot中配置Web靜態(tài)資源路徑的方法的文章就介紹到這了,更多相關(guān)SpringBoot配置Web靜態(tài)資源路徑內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot靜態(tài)視頻實(shí)時(shí)播放的實(shí)現(xiàn)代碼
這篇文章主要介紹了SpringBoot靜態(tài)視頻實(shí)時(shí)播放的實(shí)現(xiàn)代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-01-01基于創(chuàng)建Web項(xiàng)目運(yùn)行時(shí)出錯(cuò)的解決方法(必看篇)
下面小編就為大家?guī)硪黄趧?chuàng)建Web項(xiàng)目運(yùn)行時(shí)出錯(cuò)的解決方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-08-08Spring MVC的優(yōu)點(diǎn)與核心接口_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要介紹了Spring MVC的優(yōu)點(diǎn)與核心接口,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-08-08java中JSONArray互相轉(zhuǎn)換List的實(shí)現(xiàn)
本文主要介紹了java中JSONArray互相轉(zhuǎn)換List的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07圖解Spring Security 中用戶是如何實(shí)現(xiàn)登錄的
這篇文章主要介紹了圖解Spring Security 中用戶是如何實(shí)現(xiàn)登錄的,文中通過示例代碼和圖片介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07MyBatis一級(jí)緩存與二級(jí)緩存原理與作用分析
mybatis-plus是一個(gè)Mybatis的增強(qiáng)工具,在Mybatis的基礎(chǔ)上只做增強(qiáng)不做改變,為簡化開發(fā)、提高效率而生,這篇文章帶你了解Mybatis的一級(jí)和二級(jí)緩存2022-12-12詳談Java泛型中T和問號(hào)(通配符)的區(qū)別
下面小編就為大家?guī)硪黄斦凧ava泛型中T和問號(hào)(通配符)的區(qū)別。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-10-10關(guān)于Lists.partition集合分組使用以及注意事項(xiàng)
這篇文章主要介紹了關(guān)于Lists.partition集合分組使用以及注意事項(xiàng),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01