SpringBoot靜態資源與緩存配置全解析

springboot中靜態資源

classpath就是resource文件夾下

歡迎頁規則

項目啟動默認去找靜態資源下的index.html頁面 默認訪問該頁面

favicon原則

在靜態資源目錄下尋找favicon.ico

緩存實驗

在請求中使用Cache-Control 時,它可選的值有:

在響應中使用Cache-Control 時,它可選的值有:

配置瀏覽器緩存

spring:web:locale: zh_CN # 國際化的區域信息resources:add-mappings: true #開啟靜態資源映射cache:period: 3600 #緩存時間 以秒為單位cachecontrol:  # 緩存詳細控制 覆蓋上面的配置max-age: 7200

自定義靜態資源配置

spring:web:locale: zh_CN # 國際化的區域信息resources:# 修改resource文件夾下的靜態資源路徑static-locations: classpath:/a/, classpath:/a/mvc:webjars-path-pattern: /wj/**# 靜態資源訪問前綴static-path-pattern: /static/**

路徑匹配

ant風格路徑匹配

默認使用新版pathpattern路徑匹配

不能匹配**在中間的情況,剩下的與ant風格兼容

配置文件改變路徑匹配策略:

spring:mvc:pathmatch:matching-strategy: ant_path_matcher

內容協商

1.多端內容適配

第二種方法需要自行開啟

2.效果演示

請求同一個接口,返回json和xml不同格式數據

1.引入依賴

<!--        引入xml相關依賴-->
<dependency><groupId>com.fasterxml.jackson.dataformat</groupId><artifactId>jackson-dataformat-xml</artifactId>
</dependency>

2.加入注解

在數據類型中加入

@Data
@AllArgsConstructor
@NoArgsConstructor
@JacksonXmlRootElement
//可以講數據轉化為xml格式
public class Person {private long id;private String name;private String email;private Integer age;
}

3.配置協商規則

開啟基于參數傳遞格式
spring:mvc:contentnegotiation:favor-parameter: true   # 默認參數為formatparameter-name: type    # 修改參數名

效果演示:

根據type類型返回不同的內容格式

自定義內容返回

1.增加yaml返回支持

導入依賴:

<!--        導入支持yaml解析的模塊-->
<dependency><groupId>com.fasterxml.jackson.dataformat</groupId><artifactId>jackson-dataformat-yaml</artifactId>
</dependency>

編寫配置:

spring:mvc:contentnegotiation:media-types:yaml: text/yaml

增加HttpMessageConverter組件

例如:MyYamlHttpMessageConverters

public class MyYamlHttpMessageConverters extends AbstractHttpMessageConverter {private ObjectMapper objectMapper=null;public MyYamlHttpMessageConverters(){//告訴springboot支持什么媒體類型(對應配置文件中的)super(new MediaType("application", "yaml", Charset.forName("utf-8")));//禁用文檔開始前出現的橫線YAMLFactory Factory = new YAMLFactory().disable(YAMLGenerator.Feature.WRITE_DOC_START_MARKER);this.objectMapper = new ObjectMapper(Factory);}@Overrideprotected boolean supports(Class clazz) {//只要是對象類型都支持轉換return true;}@Override  //requestbodyprotected Object readInternal(Class clazz, HttpInputMessage inputMessage) throws IOException, HttpMessageNotReadableException {return null;}@Override   //responsebody 把對象寫出去protected void writeInternal(Object returnValue, HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException {OutputStream body = outputMessage.getBody();try {this.objectMapper.writeValue(body,returnValue); //把對象返回值寫出去}catch (Exception e){e.printStackTrace();}finally {body.close();}}
}

在配置文件中加入:

//配置一個能把對象轉為yaml的MessageConverters
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {converters.add(new MyYamlHttpMessageConverters());
}

內容協商原理

httpmessageconverter

系統默認:


錯誤處理

1. 錯誤處理流程:

能處理就處理處理不了就轉發給springboot處理,先精確匹配,找模板引擎下的,找不到就去靜態資源下找,后模糊匹配,先找模板引擎下的,找不到就去靜態資源下找,如果都沒有具體頁面,再去匹配error頁面,若也沒有,springboot會提供默認error頁面

2. 錯誤頁面解析:

如果沒有配置錯誤處理,就會使用默認的錯誤頁面error

規則:

  1. 解析一個錯誤頁
    1. 如果發生了500,404,403錯誤(精確匹配)
      1. 如果有模板引擎,默認在classpath:/templates/error/精確碼.html
      2. 如果沒有模板引擎,在靜態資源文件夾下找精確碼.html
    1. 如果精確找不到精確碼.html,就去找5xx.html,4xx.html(模糊匹配)
      1. 如果有模板引擎,默認在classpath:/templates/error/5xx.html
      2. 如果沒有模板引擎,在靜態資源文件夾下找 5xx.html
  1. 如果沒有模板引擎templates下有error.html頁面就直接渲染
  2. 如果都沒有,容器中有一個默認為error的view,提供了默認白頁功能。
@Bean(name="error")
@CondiontionalOnMissingBean(name="error")
public View defaultErrorView(){return this.defaultErrorView
}

3. 最佳實戰

嵌入式容器

Servlet容器:管理,運行Servlet組件(Servlet,Filter,Listener)的環境,一般指服務器

1.自動配置原理

Web新特性

1.Problemdetails

配置開啟:

spring:mvc:problemdetails:enabled: true   #啟動

開啟后效果:使用新的MediaType類型

content-type+json+額外擴展返回

2.函數式Web

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

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

相關文章

基于 Python Django 和 Spark 的電力能耗數據分析系統設計與實現7000字論文實現

摘要隨著能源問題日益突出&#xff0c;電力能耗數據分析對于提高能源利用效率、降低能源消耗具有重要意義。本文設計并實現了一個基于 Python Django 和 Spark 的電力能耗數據分析系統。系統采用前后端分離架構&#xff0c;前端使用 Django 框架實現用戶界面&#xff0c;后端使…

elementUI vue2 前端表格table數據導出(二)

為啥前端導出不在贅述了&#xff0c;不然讀者也難看到這篇文章。第一步&#xff1a;安裝依賴npm install vue-json-excel第二步&#xff1a;引用依賴配置// 導出Excel文件組件 import JsonExcel from vue-json-excel; Vue.component(downloadExcel, JsonExcel)第三步&#xff1…

RabbitMQ 4.1.1-Local random exchange體驗

Local Random Exchange 一種 RabbitMQ 4.0 引入的新型交換機&#xff0c;主要是為 request-reply&#xff08;RPC&#xff09;場景 設計的。 使用這種交換機時&#xff0c;消息只會被路由到本地節點上的隊列&#xff0c;可以確保極低的消息發布延遲。如果有多個本地隊列綁定到該…

中山排氣歧管批量自動化智能化3D尺寸測量及cav檢測分析

當前制造業快速發展&#xff0c;傳統測量方法正面臨嚴峻挑戰。生產規模的持續擴張使得現有測量手段逐漸暴露出效率不足的問題&#xff0c;這種技術滯后性正在直接影響企業的整體生產效率。具體表現為測量速度跟不上生產節拍&#xff0c;精度要求難以達標&#xff0c;最終導致生…

Debian 11 Bullseye 在線安裝docker

首先移除所有錯誤的 Docker 軟件源&#xff1a;sudo rm -f /etc/apt/sources.list.d/docker*安裝必要依賴sudo apt update sudo apt install -y ca-certificates curl gnupg添加 Docker 官方 GPG 密鑰&#xff08;使用國內鏡像&#xff09;&#xff1a;curl -fsSL https://mirr…

Spring Boot 項目中多數據源配置使用場景

在 Spring Boot 中配置多數據源是一個非常常見的需求&#xff0c;主要用于以下場景&#xff1a; 讀寫分離&#xff1a;一個主數據庫&#xff08;Master&#xff09;負責寫操作&#xff0c;一個或多個從數據庫&#xff08;Slave&#xff09;負責讀操作&#xff0c;以提高性能和可…

FAAC 在海思平臺使用得到aac實時音頻流

FAAC 在海思平臺使用得到aac實時音頻流 使用 FAAC將音頻 pcm轉為 aac 主要參見這篇博客 FAAC 在君正平臺使用得到aac實時音頻流_君正 x2600 音頻-CSDN博客

javascript函數參數類似python函數參數星號*解耦數組

序言通常情況下&#xff0c;我們很可能不清楚參數有多少&#xff0c;這個時候用的都是數組。但是使用數組和單個元素&#xff0c;從內心情感來說&#xff0c;它們是兩種維度&#xff0c;為了讓參數成為一個數組&#xff0c;把單個輸入的參數強加一個數組的外殼&#xff0c;并不…

C語言基礎(1)

1.編譯器的選擇 我們的c語言是一門&#xff0c;我們寫的c語言代碼是文本文件(存放在.c為后綴的文件中)&#xff0c;文本文件本身無法被執行&#xff0c;必須通過編譯器的編譯和鏈接器的鏈接&#xff0c;生成可執行的二進制文件&#xff0c;才能夠被執行注意&#xff1a; 每個源…

Rust賦能美團云原生DevOps實踐

Rust 云原生 DevOps 實踐 在云原生環境中,Rust 的高性能與安全性使其成為構建微服務和基礎設施工具的理想選擇。Docker 作為容器化標準工具,結合 Rust 的跨平臺特性,可高效實現持續集成與部署(CI/CD)。 構建優化的 Rust Docker 鏡像 多階段構建是 Rust 項目容器化的關鍵…

計算機網絡實驗——配置ACL

ACL基礎一、實驗目的1. 配置H3C路由器基本ACL。二、實驗要求1. 熟練掌握網絡配置能力。2. 熟練掌握ACL基本配置。三、實驗步驟&#xff08;1&#xff09;使用reset saved-configuration命令和reboot命令&#xff0c;重置路由器原有配置&#xff0c;如圖1所示。圖 1&#xff08;…

在本地部署mcp服務器實現自然語言操作mysql數據庫,輕松實現數據表的增~ 刪~ 改~ 查~

1.將寫好的mcp_server代碼放在本地任意盤&#xff01; import asyncio import logging import os import sys from mysql.connector import connect, Error from mcp.server import Server from mcp.types import Resource, Tool, TextContent from pydantic import AnyUrl# Co…

2025快手創作者中心發布視頻python實現

難度還行&#xff0c;只有一個__NS_sig3加密&#xff0c;流程麻煩點cookies_list cookie.split("; ")cookie_dict {}# 遍歷每個 Cookie&#xff0c;根據等號將鍵值對拆分并添加到字典中for cookie in cookies_list:key_value cookie.split("")if len(ke…

Android 組件內核

文章目錄什么是binder1. 什么是Binder&#xff1f;2. Binder架構組成3. 工作原理與通信流程1&#xff09;服務注冊2&#xff09;服務查詢3&#xff09;通信過程4&#xff09;核心數據結構4. 關鍵技術點5. 常見面試考點1&#xff09;Binder與傳統IPC&#xff08;Socket、管道、共…

java類加載機制:Tomcat的類加載機制

Tomcat類加載機制深度解析&#xff1a;打破雙親委派的Web容器實現 Tomcat作為Java Web容器&#xff0c;其類加載機制為滿足Web應用的隔離性、熱部署和兼容性需求&#xff0c;對標準Java類加載機制進行了定制化擴展&#xff0c;核心是打破雙親委派模型并引入多層級類加載器。以下…

【PTA數據結構 | C語言版】從順序表 list 中刪除第 i 個元素

本專欄持續輸出數據結構題目集&#xff0c;歡迎訂閱。 文章目錄題目代碼題目 請編寫程序&#xff0c;將 n 個整數存入順序表&#xff0c;對任一指定的第 i 個位置&#xff0c;將這個位置上的元素從順序表中刪除。注意&#xff1a;i 代表位序&#xff0c;從 1 開始&#xff0c;…

VS2022 C++ EasyX庫 掃雷游戲項目開發:打造經典游戲的詳細之旅

老樣子&#xff0c;先上效果 視頻演示 C經典掃雷-介紹一、引言 在這篇博客中&#xff0c;我將詳細介紹掃雷游戲項目的開發過程。掃雷作為一款經典的游戲&#xff0c;其規則簡單但富有挑戰性。通過開發這個項目&#xff0c;我不僅加深了對 C 編程的理解&#xff0c;還提升了自己…

Go語言網絡游戲服務器模塊化編程

本文以使用origin框架&#xff08;一款使用Go語言寫的開源游戲服務器框架&#xff09;為例進行說明&#xff0c;當然也可以使用其它的框架或者自己寫。 在框架中PBProcessor用來處理Protobuf消息&#xff0c;在使用之前&#xff0c;需要使用Register函數注冊網絡消息&#xff…

【機器人】Aether 多任務世界模型 | 4D動態重建 | 視頻預測 | 視覺規劃

Aether 是一個的世界模型&#xff0c;整合幾何重建與生成建模的統一框架&#xff0c;實現類人空間推理能力。 來自ICCV 2025&#xff0c;該框架具有三大核心功能&#xff1a; (1) 4D動態重建&#xff0c;(2) 動作條件視頻預測&#xff0c; (3) 目標條件視覺規劃。 代碼地址&…

MiniMind:3小時訓練26MB微型語言模型,開源項目助力AI初學者快速入門

開發&#xff5c;界面&#xff5c;引擎&#xff5c;交付&#xff5c;副駕——重寫全棧法則&#xff1a;AI原生的倍速造應用流來自全棧程序員 nine 的探索與實踐&#xff0c;持續迭代中。 歡迎關注評論私信交流~ 在大型語言模型(LLaMA、GPT等)日益流行的今天&#xff0c;一個名為…