隨筆記錄-springmvc_ResourceHandlerRegistry+ResourceHttpRequestHandler

環境:springboot-2.7.5

配置文件配置靜態資源映射

springboot配置靜態資源映射方式是通過 WebMvcAutoConfiguration 實現的

spring:
#  resources:
# 	 # 自springboot 2.5.5之后,該屬性已經被廢棄,使用spring.web.resources.static-locations代替
#    static-locations: classpath:/static/,classpath:/META-INF/resources/,classpath:/META-INF/resources/webjars/,file:E:/images/# 靜態資源配置mvc:# 靜態資源訪問接口前綴static-path-pattern: /static/**web:resources:# 靜態資源本地路徑static-locations: classpath:/static/,classpath:/META-INF/resources/,classpath:/META-INF/resources/webjars/,file:E:/images/

該方式僅支持一種前綴匹配(spring.mvc.static-path-pattern)

自定義靜態資源映射

可以繼承 WebMvcConfigurationSupport 或者 WebMvcConfigurer 接口。

建議:
a、無須覆蓋原有的靜態資源,實現 WebMvcConfigurer 接口
b、需要覆蓋靜態資源,繼承 WebMvcConfigurationSupport 類,重寫所有資源映射
注意:
a、繼承 WebMvcConfigurationSupport 類時,WebMvcAutoConfiguration 配置 和 其他所有實現 WebMvcConfigurer 接口的的配置都失效
b、實現 WebMvcConfigurer 接口時,最好通過 ResourceHandlerRegistry#hasMappingForPattern 方法判斷一下,否則存在多個同名前綴,啟動會報錯

配置靜態資源映射

ResourceHandlerRegistryaddResourceHandler 方法添加前綴匹配路徑,addResourceLocations 添加本地映射路徑。配置之后就保存了一份列表,當獲取Mapping時,返回 SimpleUrlHandlerMapping

配置跨域

CorsRegistry 跨域支持配置

訪問靜態資源過程

獲取handler

DispatcherServlet#doDispatch
DispatcherServlet#getHandler
獲取handler
AbstractHandlerMapping#getHandler
AbstractUrlHandlerMapping#getHandlerInternal
AbstractUrlHandlerMapping#lookupHandler(java.lang.String, javax.servlet.http.HttpServletRequest)
獲取匹配的前綴路徑

→獲取匹配的前綴路徑↑

獲取合適的handler

→獲取目標handler↑

添加跨域配置

→目標handler添加跨域配置↑

準備執行handler

→準備執行handler↑

通過handler解析路徑

DispatcherServlet#doDispatch
HttpRequestHandlerAdapter#handle
ResourceHttpRequestHandler#handleRequest
PathResourceResolver#getResource(java.lang.String, javax.servlet.http.HttpServletRequest, java.util.List<? extends org.springframework.core.io.Resource>)
解析文件資源
FileUrlResource#createRelative
UrlResource#createRelativeURL
new java.net.URL#URL(java.net.URL, java.lang.String)
StreamHandler#parseURL
處理資源

org.springframework.http.converter.AbstractHttpMessageConverter#write
響應內容

備注:
java.net.URLStreamHandler#parseURL解析url時,file協議的路徑,會截取開頭到最后一個“/”位置
file路徑截取


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/164243.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/164243.shtml
英文地址,請注明出處:http://en.pswp.cn/news/164243.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

爬蟲逆向你應該懂得Javascript知識

背景 大家在學習爬蟲逆向的時候&#xff0c;一般都會涉及到對js源文件進行代碼扣去&#xff0c;但是有的時候&#xff0c;你最好有js基礎&#xff0c;能發現加密或者解密在那個位置&#xff0c;或者是能用python改寫js代碼&#xff0c;這就對個人的Javascript的能力有一定要求…

Switch的使用及其注意事項

注意第五點要看清&#xff0c;case執行完后匹配沒有成功&#xff0c;如過有Default&#xff0c;將會執行Default&#xff0c;如果有case在Default之后&#xff0c;而且Default沒有break語句&#xff0c;那么將會繼續執行case的語句&#xff0c;此時case中的常量表達式只起語句標…

【Skynet 入門實戰練習】游戲模塊劃分 | 基礎功能模塊 | timer 定時器模塊 | logger 日志服務模塊

文章目錄 游戲模塊基礎功能模塊定時器模塊日志模塊通用模塊 游戲模塊 游戲從邏輯方面可以分為下面幾個模塊&#xff1a; 注冊和登錄網絡協議數據庫玩法邏輯其他通用模塊 除了邏輯劃分&#xff0c;還有幾個重要的工具類模塊&#xff1a; Excel 配置導表工具GM 指令測試機器人…

系列一、Spring整合MyBatis不忽略mapper接口同目錄的xxxMapper.xml

一、概述 默認情況下maven要求我們將xml配置、properties配置等都放在resources目錄下&#xff0c;如果我們強行將其放在java目錄&#xff0c;即將xxxMapper.xml和xxxMapper接口放在同一個目錄下&#xff0c;那么默認情況下maven打包時會將這個xxxMapper.xml文件忽略掉&#xf…

【辦公常識_1】寫好的代碼如何上傳?使用svn commit

首先找到對應的目錄 找到文件之后點擊SVN Commit

【標注數據】labelme的安裝與使用

這里寫目錄標題 下載標數據 下載 標數據 打開自動保存 創建矩形

NSGA-II求解微電網多目標優化調度(MATLAB)

一、NSGA-II簡介 NSGA-Ⅱ算法是Kalyanmoy Deb等人于 2002年在 NSGA 的基礎上提出的&#xff0c;它比 NSGA算法更加優越&#xff1a;它采用了快速非支配排序算法&#xff0c;計算復雜度比 NSGA 大大的降低&#xff1b;采用了擁擠度和擁擠度比較算子&#xff0c;代替了需要指定的…

Design Guidelines for 100 Gbps

文章目錄 Stratix V GT Transceiver ChannelsCFP2 Host Connector Assembly and PinoutStratix V GT to CFP2 Interface Layout DesignBoard Stack Up DimensionsExample Design Channel PerformanceSimulation Results for Stratix V GT to CFP2 Connector Layout Design Desi…

特征工程完整指南 - 第二部分

蘇米特班迪帕迪亞 照片由Dan Cristian P?dure?在Unsplash上拍攝 一、說明 DATA&#xff0c;通常被稱為原油&#xff0c;需要經過加工和清潔才能有效地用于各種用途。正如我們不直接使用來自其來源的石油一樣&#xff0c;數據也經過類似的處理以提取其真正價值。 二、特征選…

LabVIEW中如何達到NI SMU最大采樣率

LabVIEW中如何達到NI SMU最大采樣率 NISMU的數字化儀功能對于捕獲SMU詳細的瞬態響應特性或表征待測設備&#xff08;DUT&#xff09;響應&#xff08;例如線性調整率和負載調整率&#xff09;至關重要。沒有此功能&#xff0c;將需要一個外部示波器。 例如&#xff0c;假設在…

Docker start/stop/restart 命令

docker start&#xff1a;啟動一個或多個已經被停止的容器。 docker stop&#xff1a;停止一個運行中的容器。 docker restart&#xff1a;重啟容器。 語法 docker start [OPTIONS] CONTAINER [CONTAINER...]docker stop [OPTIONS] CONTAINER [CONTAINER...]docker restart…

設計循環隊列(詳解)

呀哈嘍&#xff0c;我是結衣 今天給大家帶來的內容如標題所述&#xff0c;我們來設計環形隊列&#xff0c;雖然隊列沒有講&#xff0c;但是我就是想講啊。那么環形隊列現在開始。 隊列的屬性 在設計環形隊列前&#xff0c;我們先要了解隊列的特點&#xff08;先進先出&#x…

鴻蒙(HarmonyOS)應用開發——ArkTs學習準備

介紹 前面我們已經介紹了&#xff0c;如何安裝HarmonyOS的IDE ,那么現在我們來介紹一下。HarmonyOS 開發的語言——ArkTs. ArkTS 是HarmonyOS的開發語言&#xff0c;他是typescript 的擴展&#xff0c;而typesrcipt是javascript的超集&#xff0c;如果你不太熟悉typescript語法…

qml Loader使用介紹

QML Loader 是 Qt Quick 框架中的一個元素,它允許你動態地加載和卸載 QML 組件。Loader 的作用主要體現在以下幾個方面: 延遲加載:Loader 允許你在需要時才加載組件,而不是在應用程序啟動時一次性加載所有組件。這樣可以加快應用程序的啟動時間,因為它只需要初始化用戶當前…

MIT_線性代數筆記:列空間和零空間

目錄 前言子空間綜述列空間 Column space零空間&#xff08;或化零空間&#xff09;Nullspaceb 值的影響 Other values of b 前言 本節繼續研究子空間&#xff0c;特別是矩陣的列空間&#xff08;column space&#xff09;和零空間&#xff08;nullspace&#xff09;。 子空間…

FreeRTOS的并行與并發思考

FreeRTOS的任務觸發是由滴答時鐘觸發SysTick中斷來觸發調度器執行或阻塞或掛起和切換任務的。 首先是任務的并發能力&#xff0c;FreeRTOS的任務執行是基于全搶占調度機制&#xff0c;任務優先級按在就緒列表中由高到低排布&#xff0c;系統首先執行最高優先級任務&#xff0c;…

Django web開發(一) - 前端

文章目錄 前端開發1.快速開發網站2.標簽2.1 編碼2.2 title2.3 標題2.4 div和span2.5 超鏈接2.6 圖片小結標簽的嵌套2.7 列表2.8 表格2.9 input系列2.10 下拉框2.11 多行文本用戶注冊案例: 用戶注冊GET 方式POST 方式表單數據提交優化 3.CSS樣式3.1 快速上手3.2 CSS應用方式1. 在…

Docker run 命令

docker run &#xff1a;創建一個新的容器并運行一個命令 語法 docker run [OPTIONS] IMAGE [COMMAND] [ARG...]OPTIONS說明&#xff1a; -a stdin&#xff1a;指定標準輸入輸出內容類型&#xff0c;可選STDIN/STDOUT/STDERR三項&#xff1b; -d&#xff1a;后臺運行容器&am…

SAP-部分字段變更

在SAP中部分字段是可以自行調整的&#xff0c;例如下圖 這個字段是客戶組1&#xff0c;已經被改成一級經理&#xff0c;現在來操作改回客戶組1 首先選擇字段點擊F1-技術信息-數據元素&#xff08;雙擊&#xff09; . . 保存&#xff0c;返回&#xff0c;激活&#xff0c;返…

redis運維(十八)pipeline

一 pipeline 流水線 說明&#xff1a; 這里講解的不是jenkins的pipeline流水線這里pipeline: 管道 redis為什么要提供pipeline功能 事務和pipeline ① pipeline的理念 強調&#xff1a;單純的pipeline跟事務沒有關系redis-cli --pipe --> 使用了pipeline機制說明&a…