聊一聊Spring MVC 靜態資源處理

2022-09-11 15:15:18 字數 1907 閱讀 1930

靜態資源,可以理解為內容固定的頁面,包括 html、css、js、檔案等等。瀏覽器發起請求後伺服器根據 url 查詢檔案,並將檔案內容作為響應,而無需 j**a **處理業務邏輯,訪問效率較高。

前後端分離的今天,j**a web 應用中直接使用靜態資源的方式已經很少見了,但不可避免有時候還會用到,例如介面文件 swagger 就直接將前端**嵌入了 j**a web 應用中。

spring mvc 原生支援靜態資源,這篇我們主要學習 spring mvc 靜態資源處理的設計思路,以及如何在 spring mvc 中進行靜態資源配置。

普通的 j**a web 專案,**發布到容器之後,瀏覽器發起的請求如果沒有對應的 servlet 處理,容器會自動根據 url 查詢專案根目錄中的靜態資源檔案。

對於 spring mvc 專案而言,通常會配置乙個 dispatchservlet 接管所有的請求,這樣容器就沒有機會自動查詢靜態資源檔案,這意味著靜態資源檔案也需要 dispatchservlet 進行處理。再看下 dispatchservlet 處理請求的流程圖:

dispatchservlet 會將請求交由處理器 handler 進行處理,那麼很自然的,我們為每個表示靜態資源檔案的 url 建立乙個自定義的處理器就好了。例如:

}然後指定處理的路徑,我們自定義處理器就可以處理靜態資源。例如:

如果靜態資源檔案比較少使用這種方式還好,如果多的話那麼為每個靜態資源檔案配置乙個處理器也太繁瑣了,因此我們需要乙個能夠處理多種靜態資源檔案的處理器。

spring 為了簡化對靜態資源的處理內建了乙個處理器 resourcehttprequesthandler,因此我們直接將這個處理器配置到容器中即可。

當 dispatcherservlet 收到 /page/ 開頭的請求,會自動在類路徑 /static 中查詢資源檔案然後進行響應。不過這種配置方式並非官方推薦,下面看官網推薦的配置方式。

早期的 spring mvc 使用 xml 配置,使用 xml 配置靜態資源處理器的方式如下:

在配置類上新增 @enablewebmvc 註解之後,我們還可以實現 webmvcconfigurer 介面並重寫 addresourcehandlers 方法來配置靜態資源處理器,其底層與手動配置靜態資源處理器相同。示例**如下:

@enablewebmvc

@configuration

public class webmvcconfig implements webmvcconfigurer

}

spring boot 環境下的 spring mvc 已經預設進行了靜態資源處理的配置。預設配置如下:

配置一:

配置二:

有了預設配置,我們將靜態資源檔案放在類路徑下 /static 目錄即可。

那 webjars 又是怎麼回事呢?這是為了避免靜態資源檔案版本不一致的情況,將多種靜態資源檔案統一打包到 jar 中的一種方式,打包後的靜態資源檔案位於類路徑 /meta-inf/resources/webjars/ 目錄中。

spring.mvc.static-path-pattern=/page/**

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

吃水不忘挖井人:

聊一聊小甜餅

cookies程式設計 cookie是儲存在客戶端的小文字,儲存的位置分為兩種 cookie可能儲存在客戶端瀏覽器的所佔記憶體中,關閉瀏覽器後,cookies就不再存在。cookie也可能儲存在客戶pc機的硬碟上,設定有效時間,超過有效時間後失效。cookie的常見應用 簡化登入 很多 在登入時,可...

聊一聊動態規劃

一 問題 看乙個經常被引用的問題 例子1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 例子2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 問你例子1是多少時,你乙個個算後,結果是20 接著問你例子2時,你會馬上說出21,為什...

聊一聊元資料

這個話題來自我的msn space。這是原文 元資料 metadata 這個詞現在到處氾濫。其實我對元資料充其量只能說有自己的理解而已,並不能確信這個理解是正確的。我認為,資料結構分為三個層次 uml可是四層哦 例項層 直接描述特異化的資料場景 元資料層 描述例項的結構的一組資料 元資料的元資料層 ...