1. 程式人生 > >Springboot系列(四)web靜態資源配置詳解

Springboot系列(四)web靜態資源配置詳解

Springboot系列(四)web靜態資源配置

往期精彩

  1. SpringBoot系列(一)idea新建Springboot專案
  2. SpringBoot系列(二)入門知識
  3. SpringBoot系列(三)配置檔案詳解完整版

引言:
SpringBoot web專案開發中往往會涉及到一些靜態資源的使用,比如說圖片,css樣式,js等等,今天我們來講講這些常見的靜態資源應該放在哪個位置,怎麼放在自己想放的位置。

目錄

  1. 專案建立
  2. 資原始檔配置與訪問
    1.Springboot中預設的靜態資源路徑
    2.自定義靜態資源路徑
    3.兩種訪問靜態資源的方式
  3. 其他靜態資源路徑配置方式
    1.繼承WebMvcConfigurerAdapter
    2.優化配置

1. 專案建立

我們先建立一個空的專案,專案的依賴配置為starter-web依賴,建立好的專案下面有一個resources資料夾,裡面有一些空的預設的資料夾,然後有一個配置檔案。

templates檔案下面一般是放置模板頁面的,比如html,jsp之類的,static檔案一般是是放置靜態資源,比如說,圖片,檔案等等。

我們放置了檔案或者是圖片就需要訪問這個檔案,看看怎麼才能有效的實現訪問這些靜態資原始檔,以及自己訪問自己定義好的資源訪問路徑。

2. 資原始檔訪問與配置

一般來說,我們是做前後端分離的,Springboot就作為後端,但是Springboot依然支援有html檔案等,實現前後端在一個專案裡面。也就是Springboot web專案。

首先,我們在templates資料夾下面建立一個名為index的html5頁面,然後隨便寫一點東西,然後在配置檔案中,配置一個專案啟動埠。

html5檔案

配置檔案埠配置不再講解,前一期裡面有配置檔案詳解,不會的可以回去看看。
啟動專案,瀏覽器輸入:localhost:8088/index.html
你會發現頁面是404,這時候我們是訪問不了這個頁面的。然後你可能會說localhost:8088/templates/index.html,你會發現都不行都不行!

因為Springboot的預設資源配置裡面沒有這個templates路徑,但是有static路徑。

1.Springboot中預設的靜態資源路徑:

  1. classpath:/static,
  2. classpath:/public,
  3. classpath:/resources,
  4. classpath:/META-INF/resources,

classpath 在專案中就相當於src/main/resources資料夾.

就是說如果你把html檔案直接放在static路徑下面是可以直接訪問的,有兩種訪問方式。

當你添加了start-web的依賴,resources下面是會預設生成一個static資料夾以及templates資料夾。

2.自定義靜態資源路徑。

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

我們配置了靜態資源路徑對映之後,我們只能訪問這個路徑下面的資源,也就是相當於自定義了靜態資源路徑,就是說預設的靜態資源路徑都會失效。

3.兩種訪問靜態資源的方式

一種是直接通過特定的URL訪問:我們配置好後,啟動專案,瀏覽器輸入:localhost:8088/index.html 就可以正常訪問我們的靜態資源了。
效果圖如下

然後還有一種訪問資源的方法。是使用程式碼是實現的。

我們在和啟動檔案同級目錄下面建立一個controller資料夾,然後建立一個Testcontroller,程式碼如下:

/**
 * @author 全棧學習筆記
 * @date 2020/4/12 12:20
 * @description
 */
@Controller
public class TestController {
    @RequestMapping("/getHtml")
    public String getHtml(){
        return "index.html";
    }
}

說明:這個@Controller ,意思標記這個類為控制類,或者說他是一個Springmvc controller物件,標記之後,預設這個類的所有方法返回的是一個頁面。然後這個@RequestMapping的註解是一個用來處理請求地址對映的註解,可用於類或方法上。用於方法之上時,你可以通過URL直接訪問這個方法。它還有一些其他的引數,這裡就不講解了。後面會出一期Springboot常用註解的說明。有興趣的可以 wx 搜尋 全棧學習筆記。

到這裡,我們就可以利用自定義URL訪問靜態資源了。在瀏覽器裡面輸入:localhost:8088/getHtml 也能正常訪問靜態資源。圖片也是一樣的。

3. 其他靜態資源路徑配置方式

1. 繼承WebMvcConfigurerAdapter

我們通過重寫這個類的addResourceHandlers方法,定義資源路徑

/**
 * @author 全棧學習筆記
 * @date 2020/4/12 15:46
 * @description
 */
@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/**").addResourceLocations("/","classpath:templates/");
        super.addResourceHandlers(registry);
    }
}

2. 優化配置

你會看到之前的那種利用程式碼的URL路徑訪問靜態資原始檔的寫法,我們需要在返回的地方寫上檔案的名稱以及檔案的字尾名,當我們要返回某一型別的檔案時,這樣寫就相對比較麻煩,所以我們可以通過以下配置來解決這個問題。

#加字首
spring.mvc.view.prefix=/
#加字尾
spring.mvc.view.suffix=.html

通過以上的配置,我們之前的controller裡面的方法返回就可以寫成這樣。

@RequestMapping("/getHtml")
    public String getHtml(){
        return "index";
    }

總結:

靜態資源配置路徑的兩種常用方式: 一種是預設配置,一種是自定義配置,自定義配置可以是程式碼配置,可以是配置檔案裡面配置。這兩種配置方式都會使原來預設的配置方式失效。

靜態資源的訪問方式有兩種:一種是自己用程式碼定義路徑,然後訪問,一種是直接利用特定的URL方式訪問靜態資源