最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot2零基礎(chǔ)到精通之配置文件與web開發(fā)

 更新時(shí)間:2022年03月22日 14:37:55   作者:扎哇太棗糕  
SpringBoot是一種整合Spring技術(shù)棧的方式(或者說是框架),同時(shí)也是簡化Spring的一種快速開發(fā)的腳手架,本篇讓我們一起學(xué)習(xí)配置文件以及web相關(guān)的開發(fā)

1 配置文件

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

1.1 yaml文件

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

1.1.1 基本語法

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

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

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

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

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

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

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

第二步: 重啟項(xiàng)目

點(diǎn)擊運(yùn)行或者重啟按鈕,重啟一下該SpringBoot項(xiàng)目

第三步: 測試

第四步: 在pom.xml文件中添加代碼

即在打jar包的時(shí)候不將配置處理器打入jar包,否則會(huì)降低項(xiàng)目的效率

2 web開發(fā)

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

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

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

資源訪問方式:

將項(xiàng)目啟動(dòng)開之后,使用當(dāng)前項(xiàng)目根路徑/ + 靜態(tài)資源名 對靜態(tài)資源進(jìn)行訪問。所有的靜態(tài)資源映射地址是/**

當(dāng)靜態(tài)資源和controller請求重名的時(shí)候,資源解析器會(huì)首先去找該名稱的Controller看能不能處理。不能處理的所有請求又都交給靜態(tài)資源處理器查找靜態(tài)資源,靜態(tài)資源也找不到則響應(yīng)404頁面

自定義存放路徑、訪問方式:

對配置文件的 spring. web.resources.static-locations配置項(xiàng)進(jìn)行修改,可以改變默認(rèn)的靜態(tài)資源存儲(chǔ)路徑。

對配置文件的 spring.mvc.static-path-pattern配置項(xiàng)進(jìn)行修改,可以使得在訪問時(shí)擁有指定前綴的請求才會(huì)訪問靜態(tài)資源。如下圖,只有使用 /res前綴 + 靜態(tài)資源名訪問的時(shí)候才會(huì)訪問到相應(yīng)的靜態(tài)資源

2.2 webjars

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

2.3 web小技巧

2.3.1 index頁面

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

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

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

2.4 web場景源碼淺析

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

配置綁定:

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

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

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

//ResourceProperties resourceProperties --> 獲取和spring.resources綁定的所有的值的對象
//WebMvcProperties mvcProperties --> 獲取和spring.mvc綁定的所有的值的對象
//ListableBeanFactory beanFactory --> Spring的beanFactory
//HttpMessageConverters --> 找到所有的HttpMessageConverters
//ResourceHandlerRegistrationCustomizer --> 找到資源處理器的自定義(重點(diǎn)解析)
//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方法解析,得知資源解析器中資源處理的默認(rèn)規(guī)則

public void addResourceHandlers(ResourceHandlerRegistry registry) {
	// 判斷resource.add-mappings的值true/false(默認(rèn)為true,可以在配置文件修改配置項(xiàng))
	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的資源存儲(chǔ)規(guī)則和緩存時(shí)間
    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)資源的訪問方式,默認(rèn)是\/**
	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)資源的訪問方式會(huì)導(dǎo)致歡迎頁無法起到作用。SpringBoot的源碼中已經(jīng)將這部分條件寫死了。

到此這篇關(guān)于SpringBoot2零基礎(chǔ)到精通之配置文件與web開發(fā)的文章就介紹到這了,更多相關(guān)SpringBoot2 配置文件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spring Boot開啟的2種方式詳解

    Spring Boot開啟的2種方式詳解

    這篇文章主要介紹了Spring Boot開啟的2種方式詳解,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-05-05
  • Spring Boot Starters簡介及其優(yōu)劣勢

    Spring Boot Starters簡介及其優(yōu)劣勢

    在這篇文章中,我們將向你介紹Spring Boot Starters,并將討論Spring Boot Starters的優(yōu)點(diǎn)和優(yōu)勢,感興趣的朋友跟隨腳本之家小編一起學(xué)習(xí)吧
    2018-05-05
  • Java實(shí)現(xiàn)的爬蟲抓取圖片并保存操作示例

    Java實(shí)現(xiàn)的爬蟲抓取圖片并保存操作示例

    這篇文章主要介紹了Java實(shí)現(xiàn)的爬蟲抓取圖片并保存操作,涉及Java針對頁面URL訪問、獲取、字符串匹配、文件下載等相關(guān)操作技巧,需要的朋友可以參考下
    2018-08-08
  • mybatis映射文件操作存儲(chǔ)過程的實(shí)現(xiàn)

    mybatis映射文件操作存儲(chǔ)過程的實(shí)現(xiàn)

    本文主要介紹了mybatis映射文件操作存儲(chǔ)過程的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • 關(guān)于@Transactional事務(wù)表被鎖的問題及解決

    關(guān)于@Transactional事務(wù)表被鎖的問題及解決

    這篇文章主要介紹了關(guān)于@Transactional事務(wù)表被鎖的問題及解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • Spring Data JPA 簡單查詢--方法定義規(guī)則(詳解)

    Spring Data JPA 簡單查詢--方法定義規(guī)則(詳解)

    下面小編就為大家?guī)硪黄猄pring Data JPA 簡單查詢--方法定義規(guī)則(詳解)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-04-04
  • Spring Boot Admin(監(jiān)控工具)的使用

    Spring Boot Admin(監(jiān)控工具)的使用

    今天我們將會(huì)講解一個(gè)優(yōu)秀的監(jiān)控工具Spring Boot Admin。 它采用圖形化的界面,讓我們的Spring Boot管理更加簡單,需要的朋友可以參考下
    2020-02-02
  • SpringBoot 單元測試JUnit的使用詳解

    SpringBoot 單元測試JUnit的使用詳解

    這篇文章主要介紹了SpringBoot 單元測試JUnit的使用詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • java實(shí)現(xiàn)象棋小游戲

    java實(shí)現(xiàn)象棋小游戲

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)象棋小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-01-01
  • 教你在JNA中將本地方法映射到JAVA代碼中的示例

    教你在JNA中將本地方法映射到JAVA代碼中的示例

    對于JNI來說,我們可以使用native關(guān)鍵字來定義本地方法。那么在JNA中有那些在JAVA代碼中定義本地方法的方式呢?對JNA本地方法映射JAVA代碼的相關(guān)知識感興趣的朋友一起看看吧
    2022-04-04

最新評論

罗田县| 天柱县| 鹤庆县| 九龙县| 吐鲁番市| 孟州市| 霍邱县| 北京市| 九龙县| 黑河市| 达州市| 怀来县| 信宜市| 隆化县| 朔州市| 延长县| 永清县| 乌拉特前旗| 灌云县| 鄢陵县| 宝丰县| 高要市| 百色市| 丹巴县| 富平县| 革吉县| 营山县| 彭阳县| 巴中市| 辰溪县| 洪泽县| 阿坝| 红河县| 广灵县| 武义县| 鄂温| 淮南市| 通化市| 民县| 嵊州市| 独山县|