日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

【SpringBoot 2】(六)配置文件 web开发相关

發(fā)布時間:2025/3/8 javascript 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【SpringBoot 2】(六)配置文件 web开发相关 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

寫在前面🛫更多知識總結(jié)見SpringBoot 2專欄
🚕本篇知識點總結(jié)自尚硅谷雷神的視頻
🚒博主對于該知識尚在學(xué)習(xí)階段
🚄如果發(fā)現(xiàn)存在問題請毫不吝嗇的指出
🚀🚀扎哇太棗糕的博客首頁🚀🚀

文章目錄

  • 1 配置文件
    • 1.1 yaml文件
      • 1.1.1 基本語法
      • 1.1.2 數(shù)據(jù)格式
    • 1.2 數(shù)據(jù)綁定時關(guān)鍵字提示
  • 2 web開發(fā)
    • 2.1 靜態(tài)資源的存放與訪問
    • 2.2 webjars
    • 2.3 web小技巧
      • 2.3.1 index頁面
      • 2.3.2 網(wǎng)頁小圖標(biāo)
    • 2.4 web場景源碼淺析

1 配置文件

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

1.1 yaml文件

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

1.1.1 基本語法

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

1.1.2 數(shù)據(jù)格式

??yaml文件的數(shù)據(jù)格式可以使用如下的的格式約束,用注解注掉的就是這種類型的行內(nèi)寫法,可以自行選擇習(xí)慣的形式進行使用。其中注意的是字符串類型的數(shù)據(jù)可以不用引號引起來,但是要是使用引號的話,單引號會將轉(zhuǎn)義字符作為字符串進行輸出,但是雙引號會將轉(zhuǎn)義字符轉(zhuǎn)義之后輸出,比如\n單引號就是\n雙引號就是換號符。

1.2 數(shù)據(jù)綁定時關(guān)鍵字提示

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

第一步: 導(dǎo)入相關(guān)依賴

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

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

2 web開發(fā)

2.1 靜態(tài)資源的存放與訪問

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

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

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

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

2.2 webjars

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

2.3 web小技巧

2.3.1 index頁面

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

2.3.2 網(wǎng)頁小圖標(biāo)

??不管是默認的還是自定義的靜態(tài)資源路徑,只要在下面添加一個命名為favicon.ico的圖片,即可將該圖片設(shè)置成網(wǎng)頁的小圖標(biāo)。同時需要注意的是,不能自定義靜態(tài)資源的訪問方式,否則就會導(dǎo)致上述效果失效。

2.4 web場景源碼淺析

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

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

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

源碼中資源處理器的解析:
??在SpringBoot的源碼中有一個規(guī)則:有參構(gòu)造器所有參數(shù)的值都會從容器中拿,于是在WebMvcAutoConfigurationAdapter靜態(tài)類里的有參構(gòu)造器中,所有的參數(shù)都將直接從容器中獲取。

//ResourceProperties resourceProperties --> 獲取和spring.resources綁定的所有的值的對象 //WebMvcProperties mvcProperties --> 獲取和spring.mvc綁定的所有的值的對象 //ListableBeanFactory beanFactory --> Spring的beanFactory //HttpMessageConverters --> 找到所有的HttpMessageConverters //ResourceHandlerRegistrationCustomizer --> 找到資源處理器的自定義(重點解析) //DispatcherServletPath --> 找到資源的路徑 //ServletRegistrationBean --> 給應(yīng)用注冊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靜態(tài)類里的addResourceHandlers方法解析,得知資源解析器中資源處理的默認規(guī)則

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

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

總結(jié)

以上是生活随笔為你收集整理的【SpringBoot 2】(六)配置文件 web开发相关的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。