【SpringBoot 2】(六)配置文件 web開發相關

寫在前面在這里插入圖片描述🛫更多知識總結見SpringBoot 2專欄
🚕本篇知識點總結自尚硅谷雷神的視頻
🚒博主對于該知識尚在學習階段
🚄如果發現存在問題請毫不吝嗇的指出
🚀🚀扎哇太棗糕的博客首頁🚀🚀

文章目錄

  • 1 配置文件
    • 1.1 yaml文件
      • 1.1.1 基本語法
      • 1.1.2 數據格式
    • 1.2 數據綁定時關鍵字提示
  • 2 web開發
    • 2.1 靜態資源的存放與訪問
    • 2.2 webjars
    • 2.3 web小技巧
      • 2.3.1 index頁面
      • 2.3.2 網頁小圖標
    • 2.4 web場景源碼淺析

1 配置文件

??之前說過,配置文件大致分兩種類型:properties、yaml。其中properties是最常規的配置文件類型:使用鍵值對等號的格式來對各種參數進行配置,后綴為.properties,在這里就不過多的進行贅述了。下面說一下yaml文件。

1.1 yaml文件

?? YAML全稱YAML Ain’t(isn’t) Markup Language,是一種直觀的能夠被電腦識別的數據序列化格式,YAML以數據為核心,比傳統的xml方式更加簡潔。體現在書寫的格式簡潔,表達的層級明顯,非常適合用來做以數據為中心的配置文件。yaml文件的后綴為.yml或者.yaml

1.1.1 基本語法

  • 使用K: V進行鍵值映射,V前要有空格作為分隔符
  • 區分大小寫
  • 使用縮進表示層級關系
  • 語法層面使用縮進不能用Tab鍵,要手敲空格。空格數不重要,只要是相同的空格數就代表相同的層級關系,所以相同層級的縮進空格要相同。但是實際操作的時候還是使用tab鍵,不會出現問題
  • 注解使用#字符

1.1.2 數據格式

??yaml文件的數據格式可以使用如下的的格式約束,用注解注掉的就是這種類型的行內寫法,可以自行選擇習慣的形式進行使用。其中注意的是字符串類型的數據可以不用引號引起來,但是要是使用引號的話,單引號會將轉義字符作為字符串進行輸出,但是雙引號會將轉義字符轉義之后輸出,比如\n單引號就是\n雙引號就是換號符。
在這里插入圖片描述

1.2 數據綁定時關鍵字提示

??在使用yaml配置文件進行配置的時候并不會進行代碼補全的相關提示,這樣不僅會大大降低代碼書寫效率,還會增加出錯的概率。于是,現在就有一種方法:在項目中加入配置處理器,即可實現編寫yaml文件的時候進行關鍵字提示。方法如下:

第一步: 導入相關依賴

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional>
</dependency>

第二步: 重啟項目
??點擊運行或者重啟按鈕,重啟一下該SpringBoot項目
第三步: 測試在這里插入圖片描述
第四步: 在pom.xml文件中添加代碼
??即在打jar包的時候不將配置處理器打入jar包,否則會降低項目的效率
在這里插入圖片描述

2 web開發

2.1 靜態資源的存放與訪問

??靜態資源可以理解為前端的固定頁面,這里面包含HTML、CSS、JS、圖片等等,不需要查數據庫也不需要程序處理,直接就能夠顯示的頁面。

存放路徑:
??所有的靜態資源在編程的時候都放在類路徑下的一個文件夾里,文件夾默認匹配以下四種命名的任意一種: staticpublicresources/META-INF/resources

資源訪問方式:
??將項目啟動開之后,使用當前項目根路徑/ + 靜態資源名 對靜態資源進行訪問。所有的靜態資源映射地址是/**
??當靜態資源和controller請求重名的時候,資源解析器會首先去找該名稱的Controller看能不能處理。不能處理的所有請求又都交給靜態資源處理器查找靜態資源,靜態資源也找不到則響應404頁面

自定義存放路徑、訪問方式:
??對配置文件的 spring. web.resources.static-locations配置項進行修改,可以改變默認的靜態資源存儲路徑。在這里插入圖片描述
對配置文件的 spring.mvc.static-path-pattern配置項進行修改,可以使得在訪問時擁有指定前綴的請求才會訪問靜態資源。如下圖,只有使用 /res前綴 + 靜態資源名訪問的時候才會訪問到相應的靜態資源在這里插入圖片描述

2.2 webjars

??webjars就是將前端所需要的技術jar(比如jquery)使用依賴進行導入,webjars的官方文檔就是展示jar對應的依賴,使用的時候直接復制到pom.xml文件即可。webjars的官方文檔:https://www.webjars.org/

2.3 web小技巧

2.3.1 index頁面

??不管是默認的還是自定義的靜態資源路徑,只要在下面創建一個index.html文件,這個頁面就將會被當做項目的歡迎頁面,也就是說訪問localhost: 端口號的時候就會訪問到index.html頁面。但是需要注意的是,不能自定義靜態資源的訪問方式,否則就會導致上述效果失效。

2.3.2 網頁小圖標

??不管是默認的還是自定義的靜態資源路徑,只要在下面添加一個命名為favicon.ico的圖片,即可將該圖片設置成網頁的小圖標。同時需要注意的是,不能自定義靜態資源的訪問方式,否則就會導致上述效果失效。在這里插入圖片描述

2.4 web場景源碼淺析

生效自動配置類:
??SpringBoot啟動的時候默認加載xxxAutoConfiguration類(自動配置類)是相關場景生效,SpringMVC功能的自動配置類是 WebMvcAutoConfiguration

配置綁定:
??@EnableConfigurationProperties注解將配置文件的相關屬性和xxx配置類進行了綁定,可以用于更改默認的配置信息。而通過分析源碼可知在WebMvcAutoConfiguration自動配置類里的WebMvcAutoConfigurationAdapter靜態類上有如下注解,注解參數中有兩個配置類,其中配置類與配置文件中的屬性綁定關系如下:WebMvcProperties.class --> spring.mvc WebProperties.class --> spring.web

@EnableConfigurationProperties({WebMvcProperties.class, WebProperties.class})

源碼中資源處理器的解析:
??在SpringBoot的源碼中有一個規則:有參構造器所有參數的值都會從容器中拿,于是在WebMvcAutoConfigurationAdapter靜態類里的有參構造器中,所有的參數都將直接從容器中獲取。

//ResourceProperties resourceProperties --> 獲取和spring.resources綁定的所有的值的對象
//WebMvcProperties mvcProperties --> 獲取和spring.mvc綁定的所有的值的對象
//ListableBeanFactory beanFactory --> Spring的beanFactory
//HttpMessageConverters --> 找到所有的HttpMessageConverters
//ResourceHandlerRegistrationCustomizer --> 找到資源處理器的自定義(重點解析)
//DispatcherServletPath -->  找到資源的路徑
//ServletRegistrationBean --> 給應用注冊Servlet、Filter....
public WebMvcAutoConfigurationAdapter(ResourceProperties resourceProperties, WebMvcProperties mvcProperties,ListableBeanFactory beanFactory, ObjectProvider<HttpMessageConverters> messageConvertersProvider,ObjectProvider<ResourceHandlerRegistrationCustomizer> resourceHandlerRegistrationCustomizerProvider,ObjectProvider<DispatcherServletPath> dispatcherServletPath,ObjectProvider<ServletRegistrationBean<?>> servletRegistrations) {this.resourceProperties = resourceProperties;this.mvcProperties = mvcProperties;this.beanFactory = beanFactory;this.messageConvertersProvider = messageConvertersProvider;this.resourceHandlerRegistrationCustomizer = resourceHandlerRegistrationCustomizerProvider.getIfAvailable();this.dispatcherServletPath = dispatcherServletPath;this.servletRegistrations = servletRegistrations;
}

??通過對WebMvcAutoConfigurationAdapter靜態類里的addResourceHandlers方法解析,得知資源解析器中資源處理的默認規則

public void addResourceHandlers(ResourceHandlerRegistry registry) {// 判斷resource.add-mappings的值true/false(默認為true,可以在配置文件修改配置項)if (!this.resourceProperties.isAddMappings()) {// resource.add-mappings的值為false,則禁用所有的靜態資源的訪問規則,debug日志輸出下面這句話logger.debug("Default resource handling disabled");return;}// resource.add-mappings的值true的話,定義規則// 定義緩存的相關配置Duration cachePeriod = this.resourceProperties.getCache().getPeriod();CacheControl cacheControl = this.resourceProperties.getCache().getCachecontrol().toHttpCacheControl();// 定義webjars的資源存儲規則和緩存時間if (!registry.hasMappingForPattern("/webjars/**")) {customizeResourceHandlerRegistration(registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/").setCachePeriod(getSeconds(cachePeriod)).setCacheControl(cacheControl));}// 定義靜態資源的訪問規則// this.mvcProperties.getStaticPathPattern() --> 獲取靜態資源的訪問方式,默認是\/**String staticPathPattern = this.mvcProperties.getStaticPathPattern();if (!registry.hasMappingForPattern(staticPathPattern)) {customizeResourceHandlerRegistration(registry.addResourceHandler(staticPathPattern)// getStaticLocations()方法中.addResourceLocations(getResourceLocations(this.resourceProperties.getStaticLocations())).setCachePeriod(getSeconds(cachePeriod)).setCacheControl(cacheControl));}
}

源碼中歡迎頁的解析:

@Bean
public WelcomePageHandlerMapping welcomePageHandlerMapping(ApplicationContext applicationContext, FormattingConversionService mvcConversionService, ResourceUrlProvider mvcResourceUrlProvider) {// 下面 welcomePageHandlerMapping 的有參函數在下面圖片WelcomePageHandlerMapping welcomePageHandlerMapping = new WelcomePageHandlerMapping(new TemplateAvailabilityProviders(applicationContext), applicationContext, this.getWelcomePage(), this.mvcProperties.getStaticPathPattern());welcomePageHandlerMapping.setInterceptors(this.getInterceptors(mvcConversionService, mvcResourceUrlProvider));welcomePageHandlerMapping.setCorsConfigurations(this.getCorsConfigurations());return welcomePageHandlerMapping;
}

??下圖解釋了為什么:自定義靜態資源的訪問方式會導致歡迎頁無法起到作用。SpringBoot的源碼中已經將這部分條件寫死了。

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

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

相關文章

deepl windows_推薦一個為程序員深度開發的翻譯插件DeepL

DeepL深度翻譯器DeepL一個程序員的翻譯神器&#xff0c;可能有人要問&#xff0c;市面上這么多的翻譯插件這么多&#xff0c;我為毛要用你的。首先這個翻譯神器可以實現多個翻譯引擎的翻譯&#xff0c;目前支持有道和google&#xff0c;下一步我會把最近特別流行的翻譯軟件Deep…

再次攜號轉網_陜西通信管理局:對移動公司拒絕對用戶提供攜號轉網服務的違法行為處罰!...

據陜西省通信管理局網站11月25日消息&#xff0c;陜西省通信管理局25日發出《關于中國移動西安分公司無正當理由拒絕對用戶提供攜號轉網服務調查處理情況的通報》稱&#xff0c;近期&#xff0c;省通信管理局對中國移動西安分公司(以下簡稱西安移動)無正當理由拒絕對用戶提供攜…

【SpringBoot 2】(七)請求處理——映射 常用注解 方法參數的小技巧

寫在前面&#x1f6eb;更多知識總結見SpringBoot 2專欄 &#x1f695;本篇知識點總結自尚硅谷雷神的視頻 &#x1f692;博主對于該知識尚在學習階段 &#x1f684;如果發現存在問題請毫不吝嗇的指出 &#x1f680;&#x1f680;扎哇太棗糕的博客首頁&#x1f680;&#x1f680;…

北方人思想為什么落后_廣西人為什么很少到北方打工?

廣西雖然山青水秀&#xff0c;環境優美&#xff0c;但目前還是個經濟欠發達的地區&#xff0c;很多人在本地很難找到合適的工作&#xff0c;所以紛紛選擇外出打工了&#xff0c;包括我自己。在廣西外出打工的人群當中&#xff0c;絕大部分人都去了廣東&#xff0c;當然&#xf…

刷網絡課_網絡營銷實踐心得—劉薈萌

一、實踐時間2020.9.1~2020.12.25二、實踐內容1、實踐資源準備&#xff1a;實踐平臺賬號注冊、了解相關網站的使用方法。2、認識網絡營銷系統&#xff1a;企業網絡營銷信息源類別及傳遞渠道調查。3、信息源構建&#xff1a;微信公眾號運營、新媒體平臺運營(微博、博客)4、網絡推…

【SpringBoot 2】(八)數據響應 頁面響應

寫在前面&#x1f6eb;更多知識總結見SpringBoot 2專欄 &#x1f695;本篇知識點總結自尚硅谷雷神的視頻 &#x1f692;博主對于該知識尚在學習階段 &#x1f684;如果發現存在問題請毫不吝嗇的指出 &#x1f680;&#x1f680;扎哇太棗糕的博客首頁&#x1f680;&#x1f680;…

2020年最快的dns_2020年哪里換旅行證最快取證?需要幾天?

關注我的都知道了很多的實用攻略你還在等什么~美媽不論去哪個地方更換旅行證&#xff0c;都喜歡問“這個地方是否可以加急&#xff1f;”“最快幾天可以拿到新的旅行證&#xff1f;”今天就來整理一下2020年各地換證需要幾天&#xff0c;是否可以加急。"目前更換旅行證有兩…

語句拼接_Linux 進階語句

日常工作需要用到&#xff0c;shell語句用于分析定位生產問題&#xff0c;本次做個記錄# 將日志先拷貝到當前目錄cp /tmp/nginx.log .本次目標是&#xff1a; 找出log中的404 500的報錯#使用管道取出相關日志less nginx.log 通過/ 查詢得知 狀態碼處于第9個字段#使用 awk 篩選出…

【SpringBoot 2】(九)異常處理 web原生組件的注入

寫在前面&#x1f6eb;更多知識總結見SpringBoot 2專欄 &#x1f695;本篇知識點總結自尚硅谷雷神的視頻 &#x1f692;博主對于該知識尚在學習階段 &#x1f684;如果發現存在問題請毫不吝嗇的指出 &#x1f680;&#x1f680;扎哇太棗糕的博客首頁&#x1f680;&#x1f680;…

項目管理最佳實踐方法_項目管理最佳實踐,企業如何進行有效的項目管理

前言&#xff1a;企業在劃分項目時&#xff0c;可按照項目的復雜程度、管理范圍等將項目分為三個級別&#xff0c;分別是企業級、部門級和小組級&#xff08;與目標劃分原則相同&#xff09;&#xff0c;然后將每一級的目標與項目對應起來。我們知道&#xff0c;企業制定的目標…

python 歷遍子彈_python之子彈移動

"""新增功能&#xff1a;完成我方坦克發射子彈的移動"""import pygameimport timeimport randomwin_width 700win_height 500bg_color pygame.Color(0, 0, 0)text_color pygame.Color(255, 0, 0)class MainGame():window Nonemy_tank None…

【SpringBoot 2】(十)數據庫相關

寫在前面&#x1f6eb;更多知識總結見SpringBoot 2專欄 &#x1f695;本篇知識點總結自尚硅谷雷神的視頻 &#x1f692;博主對于該知識尚在學習階段 &#x1f684;如果發現存在問題請毫不吝嗇的指出 &#x1f680;&#x1f680;扎哇太棗糕的博客首頁&#x1f680;&#x1f680;…

線性分組碼的最小漢明距為6_第二章 線性代數

2.1 標量、向量、矩陣和張量標量(scalar)一個標量就是一個單獨的數&#xff0c;用斜體表示標量。向量(vector)一個向量是一列有序排列的數&#xff0c;用粗寫的小寫字母表示。矩陣(matrix)矩陣式一個二維數組&#xff0c;其中的么一個元素由兩個索引(而非一個)所確定&#xff0…

【SpringBoot 2】(十一)單元測試JUnit 5 指標監控

寫在前面&#x1f6eb;更多知識總結見SpringBoot 2專欄 &#x1f695;本篇知識點總結自尚硅谷雷神的視頻 &#x1f692;博主對于該知識尚在學習階段 &#x1f684;如果發現存在問題請毫不吝嗇的指出 &#x1f680;&#x1f680;扎哇太棗糕的博客首頁&#x1f680;&#x1f680;…

sklearn中lstm_分別用sklearn和tensorflow做房價預測

原標題&#xff1a;分別用sklearn和tensorflow做房價預測本篇是后面用tensorflow做回歸時的一個參照&#xff0c;忍不住要說的是sklearn真是簡單好用&#xff0c;要不是他沒有卷積cnn等時髦模型&#xff0c;真是不想用其他家的了。經典的sklearn集成模型結果&#xff1a;真是又…

多個containers 共用一個pvc_2020阜新PVC-UH市政管廠家-煙臺塑膠

2020阜新PVC-UH市政管廠家煙臺金沃泉塑膠有限公司主要產品PVC-U、PVC-M、PVC-UH聚氯乙烯給給水管材、HDPE高密度聚乙烯給水管材、CPVC氯化聚氯乙烯、MPP高壓電力電纜護套管、PERT-Ⅱ型熱力管道、高分子托輥管、水處理膜殼管。公司為電網、南方電網、電建集團、建筑集團、五礦集…

【SpringBoot 2】(十二) profile功能 自定義starter

寫在前面&#x1f6eb;更多知識總結見SpringBoot 2專欄 &#x1f695;本篇知識點總結自尚硅谷雷神的視頻 &#x1f692;博主對于該知識尚在學習階段 &#x1f684;如果發現存在問題請毫不吝嗇的指出 &#x1f680;&#x1f680;扎哇太棗糕的博客首頁&#x1f680;&#x1f680;…

jpa transaction 回滾_我遇到的JPA中事務回滾的問題

在最近的項目中&#xff0c;做的是解析XML文件&#xff0c;解析過程中會有異常&#xff0c;比如&#xff1a;XML文件中節點的數據和與之對應的數據庫的字段中數據的類型不匹配&#xff1b;XML中數據長度超過數據庫定義的長度&#xff1b;有數據了的重復插入問題&#xff1b;讀取…

pb 怎么判斷是 小數_考試90分以上的孩子是怎么學數學的?聽聽老師怎么說?

一二年級&#xff0c;考試上九十分很輕松。但是&#xff0c;不少小朋友一上三年級&#xff0c;成績就落下來了。那么&#xff0c;我們來看看三年級起&#xff0c;考試還能夠保持在90分以上的孩子是怎么學習數學的吧&#xff01;第一&#xff0c;計算能力過關通過這兩張圖片的對…

快速上手Mybatis-Plus 入門案例

寫在前面&#x1f6eb;更多知識總結見Mybatis-Plus專欄 &#x1f695;內容總結自尚硅谷楊博超老師的視頻 &#x1f692;博主對于該知識尚在學習階段 &#x1f684;如果發現存在問題請毫不吝嗇的指出 &#x1f680;&#x1f680;扎哇太棗糕的博客首頁&#x1f680;&#x1f680;…