中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

SpringBoot中實現配置Web靜態資源路徑的方法

發布時間:2020-11-03 15:56:48 來源:億速云 閱讀:259 作者:Leah 欄目:開發技術

SpringBoot中實現配置Web靜態資源路徑的方法?相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。

正文:

準備工作:通過Idea創建一個SpringBoot-web項目,此過程不做贅述,創建完成后項目結構如下圖:

SpringBoot中實現配置Web靜態資源路徑的方法

1- 創建一個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("進入controller中的demo方法!");
    /*注意:這里返回值有后綴名,如何省略后綴名后面有介紹*/
    return "myPage.html";
  }
}

2- 在 web-practice\src\main\resources\templates\路徑下創建html頁面,取名“myPage”,代碼如下:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>
  <h2>Welcome to myPage!</h2>
</body>
</html>

此時運行項目,會發現報404問題,同時查看Idea控制臺,打印顯示進入controller方法。

SpringBoot中實現配置Web靜態資源路徑的方法

3- spring.resources.static-location登場

打開application.yml文件,進行如下配置(默認項目中配置文件為application.properties,修改后綴名即可,因我個人喜歡使用yml文件),重新運行項目并訪問地址:localhost:8080/demo 會發現頁面跳轉成功。

spring:
 resources:
  static-locations: classpath:templates/

原因分析:spring.resources.static-location參數指定了Spring Boot-web項目中靜態文件存放地址,該參數默認設置為:classpath:/static,classpath:/public,classpath:/resources,classpath:/META-INF/resources,servlet context:/,可以發現這些地址中并沒有/templates這個地址。當配置文件中配置此項后,默認配置失效,使用自定義設置。這里涉及到兩個概念:

(1)classpath:  通俗來講classpath對應的項目中:web-practice\src\main\resources 文件目錄。如:“classpath: templates/” 即是將resources目錄下的templates文件夾設置為靜態文件目錄。更深一步講classpath路徑為:文件編譯后在target/classes目錄下的文件。

(2) 靜態文件目錄:通俗理解為存放包括 :.html;.jsp;CSS;js;圖片;文本文件等類型文件的目錄。這些文件都可以通過瀏覽器url進行訪問。同時controller中轉發的文件目錄也必須被設置為靜態文件目錄,這就是增加了該參數以后就可以正常訪問的原因。

4-  spring.mvc.view.prefix/suffix登場 

現在頁面已經可以正常轉發,我們有了新的想法,我希望在templates文件夾中創建一個html文件夾用于專門存放頁面文件,另外在每次使用controller進行轉發是都要標明后綴名.html,這很麻煩,有沒有統一處理的方案,答案當然是有!

修改后項目結構如下:

SpringBoot中實現配置Web靜態資源路徑的方法

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("進入controller中的demo方法!");
    //如果不在appliation.yml文件中添加前后綴信息,此處返回語句為
    //return "html/myPage.html"
    return "myPage";
  }
}

application.yml文件修改如下:

spring:
 resources:
  static-locations: classpath:templates/
 mvc:
  view:
   prefix: html/
   suffix: .html

 再次運行項目即可。通過測試得知prefix/suffix是在controller返回語句前后添加前后綴信息。

5- 配置多個靜態文件路徑:當我們在頁面中添加圖片,并且將圖片存放在resources/static/pic路徑下,如下圖所示:

SpringBoot中實現配置Web靜態資源路徑的方法

修改myPage.html如下:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>
  <h2>Welcome to myPage!</h2>
  <img src="/pic/pig.jpg" height="1920" width="1080"/></body>
</html>

 之后重啟項目,會發現圖片并沒有成功加載!如下:

SpringBoot中實現配置Web靜態資源路徑的方法

原因是之前我們配置的靜態文件目錄只包含classpath:templates/,static目錄還不是合法的存儲靜態文件目錄,我們只需要在后面追加上static目錄即可。修改application.yml文件如下:

spring:
 resources:
  static-locations: classpath:templates/,classpath:static/
 mvc:
  view:
   prefix: html/
   suffix: .html

修改后重啟項目刷新頁面,一切正常!

6- 關于spring.mvc.view.static-path-pattern

該參數用來規定訪問靜態文件的路徑格式,該參數默認值為:“/**” 表示所有路徑,現將該參數修改為:“/static/**” 觀察現象

spring:
 resources:
  static-locations: classpath:templates/,classpath:static/
 mvc:
  view:
   prefix: html/
   suffix: .html
  static-path-pattern: /static/**

重啟項目,發現頁面不能加載404錯誤!

要解決該問題需要修改兩個地方:

(1) 修改spring.mvc.view.prefix參數值為:static/html/  ;該修改為了controller轉發時可以找到文件路徑;

(2)修改myPage頁面的圖片地址如下:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>
  <h2>Welcome to myPage!</h2>
  <img src="/static/pic/pig.jpg" height="1920" width="1080"/></body>
</html>

原因分析:static-path-pattern規定的時訪問靜態頁面的路徑類型,這里規定訪問靜態頁面必須為:localhost:8080/static/***的方式才能訪問到靜態資源。static-path-pattern并不是規定實際的靜態文件訪問路徑,而是規定了一種url標記,只有遵循該標記的規則才能訪問靜態文件。

擴展:

1- spring.resources.static-locations參數除了規定classpath:路徑下的文件目錄為靜態文件目錄,還可以規定項目以外的位置,如設置:E:/test文件夾目錄為靜態文件存儲目錄,如下:

spring:
 resources:
  static-locations: classpath:templates/,classpath:static/,file:E:/test

2- 頁面訪問過程如下:

瀏覽器發送請求,先匹配SpringMVC中RequestMapping列表,匹配到后根據controller返回值定位靜態資源目錄,并返回給客戶;如果RequestMapping中未匹配到,則判斷是不是靜態文件目錄,如果是的話直接到靜態文件目錄對應路徑下查詢文件,查詢到返回,未查詢到不返回。

3- static-location配置的目錄列表都被視為根目錄,如果兩個目錄中相同文件目錄下存儲了同名同類型文件,返回在static-locations配置靠前的根目錄下的內容。

4- static-path-pattern參數規定了靜態文件存儲路徑,在controller的RequestMapping中應該避免設置該路徑相同的訪問路徑。

看完上述內容,你們掌握SpringBoot中實現配置Web靜態資源路徑的方法的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

宁陕县| 开化县| 灌云县| 开平市| 五大连池市| 屏东县| 河北区| 云林县| 和静县| 广汉市| 平乐县| 大连市| 双柏县| 裕民县| 铜山县| 息烽县| 绿春县| 花莲市| 台东县| 沧源| 科技| 图木舒克市| 宿松县| 嘉兴市| 昌乐县| 丰台区| 板桥市| 雷山县| 吉木萨尔县| 黔西县| 思南县| 宁陕县| 诸城市| 新疆| 赫章县| 大悟县| 南城县| 昔阳县| 海兴县| 谷城县| 盈江县|