欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時間:2022年03月22日 14:37:55   作者:扎哇太棗糕  
SpringBoot是一種整合Spring技術(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)空格要相同。但是實際操作的時候還是使用tab鍵,不會出現(xiàn)問題
  • 注解使用#字符

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

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

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

??在使用yaml配置文件進(jìn)行配置的時候并不會進(jìn)行代碼補全的相關(guān)提示,這樣不僅會大大降低代碼書寫效率,還會增加出錯的概率。于是,現(xiàn)在就有一種方法:在項目中加入配置處理器,即可實現(xiàn)編寫yaml文件的時候進(jìn)行關(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)資源在編程的時候都放在類路徑下的一個文件夾里,文件夾默認(rèn)匹配以下四種命名的任意一種: static、public 、resources 、/META-INF/resources

資源訪問方式:

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

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

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

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

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

2.2 webjars

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

2.3 web小技巧

2.3.1 index頁面

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

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

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

2.4 web場景源碼淺析

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

配置綁定:

@EnableConfigurationProperties注解將配置文件的相關(guān)屬性和xxx配置類進(jìn)行了綁定,可以用于更改默認(rèn)的配置信息。而通過分析源碼可知在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方法解析,得知資源解析器中資源處理的默認(rèn)規(guī)則

public void addResourceHandlers(ResourceHandlerRegistry registry) {
	// 判斷resource.add-mappings的值true/false(默認(rèn)為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)資源的訪問方式,默認(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)資源的訪問方式會導(dǎo)致歡迎頁無法起到作用。SpringBoot的源碼中已經(jīng)將這部分條件寫死了。

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

相關(guān)文章

  • 深入淺析jni中的java接口使用

    深入淺析jni中的java接口使用

    這篇文章主要介紹了jni中的java接口使用,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-09-09
  • Java集合之HashMap/hashTable詳解

    Java集合之HashMap/hashTable詳解

    這篇文章主要介紹了Java集合之HashMap/hashTable詳解,Map是映射鍵值的對象,map不能包含重復(fù)鍵:每個鍵最多只能映射一個值,它模擬了數(shù)學(xué)函數(shù)的抽象,需要的朋友可以參考下
    2023-09-09
  • spring boot使用sonarqube來檢查技術(shù)債務(wù)

    spring boot使用sonarqube來檢查技術(shù)債務(wù)

    今天小編就為大家分享一篇關(guān)于spring boot使用sonarqube來檢查技術(shù)債務(wù),小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • Java項目如何防止SQL注入(多種方案匯總)

    Java項目如何防止SQL注入(多種方案匯總)

    SQL注入即是指web應(yīng)用程序?qū)τ脩糨斎霐?shù)據(jù)的合法性沒有判斷或過濾不嚴(yán),攻擊者可以在web應(yīng)用程序中事先定義好的查詢語句的結(jié)尾上添加額外的SQL語句,這篇文章主要介紹了?Java項目防止SQL注入的四種方案,需要的朋友可以參考下
    2023-12-12
  • MyBatis實現(xiàn)物理分頁的實例

    MyBatis實現(xiàn)物理分頁的實例

    這篇文章主要介紹了MyBatis實現(xiàn)物理分頁的實例,MyBatis使用RowBounds實現(xiàn)的分頁是邏輯分頁,有興趣的可以了解一下。
    2017-01-01
  • Java中實現(xiàn)多線程關(guān)鍵詞整理(總結(jié))

    Java中實現(xiàn)多線程關(guān)鍵詞整理(總結(jié))

    這篇文章主要介紹了Java中實現(xiàn)多線程關(guān)鍵詞整理,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-05-05
  • Spring實戰(zhàn)之使用c:命名空間簡化配置操作示例

    Spring實戰(zhàn)之使用c:命名空間簡化配置操作示例

    這篇文章主要介紹了Spring實戰(zhàn)之使用c:命名空間簡化配置操作,結(jié)合實例形式詳細(xì)分析了Spring使用c:命名空間簡化配置的相關(guān)接口與配置操作技巧,需要的朋友可以參考下
    2019-12-12
  • SpringBoot + WebSocket 實現(xiàn)答題對戰(zhàn)匹配機制案例詳解

    SpringBoot + WebSocket 實現(xiàn)答題對戰(zhàn)匹配機制案例詳解

    這篇文章主要介紹了SpringBoot + WebSocket 實現(xiàn)答題對戰(zhàn)匹配機制,分別為每個用戶擬定四種在線狀態(tài),通過流程圖給大家展示,需要的朋友可以參考下
    2021-05-05
  • 找出鏈表倒數(shù)第n個節(jié)點元素的二個方法

    找出鏈表倒數(shù)第n個節(jié)點元素的二個方法

    本文提供了找出鏈表倒數(shù)第n個節(jié)點元素的二個方法,其中一個方法是JAVA代碼實現(xiàn)
    2013-11-11
  • 如何基于http代理解決Java固定ip問題

    如何基于http代理解決Java固定ip問題

    這篇文章主要介紹了如何基于http代理解決Java固定ip問題,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-03-03

最新評論