iT邦幫忙

2023 iThome 鐵人賽

DAY 16
0

Day15 - Static Content

前言

昨日我們透過官網大概說明了整個Spring MVC預設幫我們自動裝配的組件,今日我們來看看靜態資源是如何設置的

專案建立

create module

https://ithelp.ithome.com.tw/upload/images/20231001/20128084PTwyJRwnHp.png
https://ithelp.ithome.com.tw/upload/images/20231001/20128084VYILn1a7B1.png

WebMvcAutoConfiguration

進入static content前,我們先來看看這個最重要

生效條件

https://ithelp.ithome.com.tw/upload/images/20231001/20128084PPtlMFwKca.png

WebMvcAutoConfigurationAdapter

在WebMvcAutoConfiguration class中有一個靜態內部類別WebMvcAutoConfigurationAdapter它實作了WebMvcConfigurer Interface,讓Spring MVC可以增加各種自訂功能
https://ithelp.ithome.com.tw/upload/images/20231001/20128084yYo76mKGLM.png
並綁定兩個xxxProperties
https://ithelp.ithome.com.tw/upload/images/20231001/20128084d4k7fs5ANA.png

static content

從WebMvcAutoConfigurationAdapter中可以看到處理靜態資源的source code,從中加入兩個ResourceHandler,定義了靜態資源路徑

public void addResourceHandlers(ResourceHandlerRegistry registry) {
    if (!this.resourceProperties.isAddMappings()) {
        logger.debug("Default resource handling disabled");
    } else {
        this.addResourceHandler(registry, this.mvcProperties.getWebjarsPathPattern(),      "classpath:/META-INF/resources/webjars/");
        this.addResourceHandler(registry, this.mvcProperties.getStaticPathPattern(), (registration) -> {
            registration.addResourceLocations(this.resourceProperties.getStaticLocations());
            if (this.servletContext != null) {
                ServletContextResource resource = new ServletContextResource(this.servletContext, "/");
                registration.addResourceLocations(new Resource[]{resource});
            }

        });
    }
}

靜態資源映射

  • staticPathPattern:/**,路徑在classpath:/META-INF/resources/webjars/
  • webjarsPathPattern:/webjars/**,路徑在
    • classpath:/META-INF/resources/
    • classpath:/resources/
    • classpath:/static/
    • classpath:/public/

靜態資源緩存

從addResourceHankler中可以看到預設會有3個cache相關設定,作用在於瀏覽器訪問過,就會將靜態資源緩存到瀏覽器中,此功能無默認設定值,可透過配置文件spring.web進行修改
https://ithelp.ithome.com.tw/upload/images/20231001/201280841CcqCY396B.png
a. period: 緩存間隔,default 0 sec;
b. cacheControl:緩存控制,default 無;
c. useLastModified:是否使用lastModified header,default false;

Welcome Page

在靜態資源下找index.html,沒有則在template目錄下找
https://ithelp.ithome.com.tw/upload/images/20231001/20128084fDEXjjAzjm.png
https://ithelp.ithome.com.tw/upload/images/20231001/20128084zEwnmIOe54.png

Custom Favicon

靜態資源路徑下尋找favicon.ico
https://ithelp.ithome.com.tw/upload/images/20231001/20128084lA8wWJcCep.png

Reference


上一篇
Day14 - Web開發:Spring MVC Auto-configuration
下一篇
Day16 - customize static content
系列文
我在 Spring Boot 3 裡面挖呀挖呀挖31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言