詳細SpringBoot教程之(zhī)Web開發(一)
發表時(shí)間:2020-2-24
發布人(rén):融晨科技
浏覽次數:56
寫在(zài)前面
鑒于(yú)有人(rén)留言說(shuō)想要(yào / yāo)學習SpringBoot相關的(de)知識,我這(zhè)裏打算寫一個(gè)SpringBoot系列的(de)相關博文,目标呢是(shì)想讓看了(le/liǎo)這(zhè)一系列博文的(de)同學呢,能夠對SpringBoot略窺門徑,這(zhè)一系列的(de)博文初步都定下來(lái)包括SpringBoot介紹、入門、配置、日志相關、web開發、數據訪問、結合docker、緩存、消息隊列、檢索、任務安全、分布式等等一系列的(de)博文,工作量很大(dà),是(shì)個(gè)漫長的(de)過程,每一步我都盡量詳細,配上(shàng)截圖說(shuō)明,也(yě)希望對看的(de)同學真的(de)有用。
單純就(jiù)是(shì)想分享技術博文,還想說(shuō)一句就(jiù)是(shì),如果覺得有用,請點個(gè)關注、給個(gè)贊吧,也(yě)算對我來(lái)說(shuō)是(shì)個(gè)寬慰,畢竟也(yě)得掉不(bù)少頭發,嘿嘿嘿
系列文章傳送條
詳細SpringBoot教程之(zhī)入門(一)
詳細SpringBoot教程之(zhī)入門(二)
詳細SpringBoot教程之(zhī)配置文件(一)
詳細SpringBoot教程之(zhī)配置文件(二)
詳細SpringBoot教程之(zhī)日志框架
詳細SpringBoot教程之(zhī)Web開發(一)
詳細SpringBoot教程之(zhī)Web開發(二)
詳細SpringBoot教程之(zhī)Web開發(三)
詳細SpringBoot教程之(zhī)數據訪問
詳細SpringBoot教程之(zhī)啓動配置原理
詳細SpringBoot教程之(zhī)緩存開發
開發前準備
我們接下來(lái)準備使用SpringBoot開發一個(gè)restful的(de)應用,首先我們通過Idea創建向導幫我們創建SpringBoot應用,勾選我們需要(yào / yāo)的(de)模塊,這(zhè)裏我們還是(shì)隻勾選一個(gè)web場景,後面需要(yào / yāo)啥再添加。
前面說(shuō)過,我們創建的(de)項目中,SpringBoot将會幫我們自動配置好web開發場景中需要(yào / yāo)的(de)相關配置,隻需要(yào / yāo)在(zài)配置文件中指定少量配置就(jiù)可以(yǐ)運行起來(lái)了(le/liǎo),我們隻需要(yào / yāo)注意在(zài)業務代碼中就(jiù)可以(yǐ)了(le/liǎo)。
當然,我們如果想要(yào / yāo)搞清楚某個(gè)場景中,SpringBoot幫我們配置了(le/liǎo)什麽依賴,這(zhè)個(gè)時(shí)候就(jiù)需要(yào / yāo)我們了(le/liǎo)解相關的(de)自動配置原理了(le/liǎo),前面的(de)博文有相關的(de)講解,我這(zhè)裏就(jiù)不(bù)深入講解了(le/liǎo)。
SpringBoot對靜态資源的(de)映射配置規則
創建好了(le/liǎo)項目之(zhī)後,我們先來(lái)講解一下SpringBoot對于(yú)靜态資源的(de)相關配置規則,因爲(wéi / wèi)我們現在(zài)暫時(shí)來(lái)開發一個(gè)前後端沒有分離的(de)很徹底的(de)應用(如果前後端分離的(de)很徹底,我們隻用SpringBoot來(lái)做後端接口),所以(yǐ)必須要(yào / yāo)知道(dào)怎麽使用SpringBoot的(de)靜态資源。
使用webjars
首先SpringBoot的(de)有個(gè)叫webjars的(de)東西,所有通過pom.xml引入的(de)靜态資源,都在(zài)/webjars/**下(這(zhè)個(gè)在(zài)靜态資源的(de)自動配置類中可以(yǐ)找到(dào)),也(yě)就(jiù)是(shì)說(shuō)SpringBoot會自動去classpath:/META-INF/resources/webjars/找資源,webjars以(yǐ)jar包的(de)方式引入靜态資源(也(yě)就(jiù)是(shì)說(shuō),我們都可以(yǐ)通過http://localhost:8080/webjars/xx訪問對應的(de)靜态資源)
怎麽通過pom.xml引入靜态資源呢?我們可以(yǐ)去webjars的(de)資源庫中找,需要(yào / yāo)什麽靜态資源的(de)jar基本都可以(yǐ)在(zài)這(zhè)裏找到(dào)(指的(de)是(shì)框架依賴),裏面長這(zhè)樣子(zǐ)。
各種靜态資源jar都可以(yǐ)通過pom.xml依賴的(de)方式引入 ,我們引入JQuery看看,引入的(de)JQuery的(de)依賴包下邊,可以(yǐ)看到(dào)webjars内容長這(zhè)樣
現在(zài)我們引入了(le/liǎo)jQuery的(de)靜态資源,我們啓動項目,來(lái)試一下能不(bù)能通過對應的(de)路徑訪問,我這(zhè)裏使用的(de)路徑是(shì)http://localhost:8080/webjars/jquery/3.4.1/jquery.js
所以(yǐ)發現了(le/liǎo)沒有,我通過SpringBoot來(lái)開發相關的(de)靜态資源,非常方便,我們隻要(yào / yāo)引入對應的(de)webjars就(jiù)可以(yǐ)了(le/liǎo),SpringBoot不(bù)需要(yào / yāo)我們進行過多的(de)配置,有自己默認配置的(de)規則。
使用resources
當然如果我們想要(yào / yāo)用自己的(de)靜态資源,不(bù)想使用webjars的(de)東西,怎麽做呢?這(zhè)個(gè)時(shí)候就(jiù)需要(yào / yāo)另外一個(gè)映射規則就(jiù)是(shì)/**(也(yě)就(jiù)是(shì)說(shuō),我們通過http://localhost:8080/xxx.js訪問靜态資源,如果我們沒有配置相關,就(jiù)會默認去下面這(zhè)幾個(gè)文件夾中找)用來(lái)配置映射,即可訪問當前項目下的(de)任何資源
- classpath:/META-INF/resources/
- classpath:/resources/
- classpath:/static/
- classpath:/public/
即通過“/**”訪問的(de)靜态資源,SpringBoot會去上(shàng)面這(zhè)幾個(gè)找資源,這(zhè)些也(yě)就(jiù)是(shì)SpringBoot默認的(de)靜态資源文件夾
這(zhè)裏我們可以(yǐ)随便将jquery.js放置在(zài)三個(gè)文件夾中的(de)一個(gè),然後通過http://localhost:8080/jquery.js可以(yǐ)訪問到(dào)。
配置歡迎頁映射
靜态資源文件夾下的(de)所有index.html頁面,會被/映射;
也(yě)就(jiù)是(shì)說(shuō)我們直接訪問http://localhost:8080/就(jiù)直接訪問靜态資源文件夾中的(de)index.html,相當于(yú)我們以(yǐ)前SpringMVC下面的(de)index.jsp,比如我們現在(zài)随機選public的(de)靜态資源文件夾下創建index.html
同樣的(de)所有的(de)/favicon.ico默認都是(shì)在(zài)靜态資源下找,當然,如果我們不(bù)想要(yào / yāo)使用SpringBoot默認的(de)靜态資源文件夾,我們還可以(yǐ)定義靜态資源的(de)映射,如下
要(yào / yāo)注意了(le/liǎo),如果自己定義了(le/liǎo)靜态資源映射之(zhī)後,默認的(de)文件夾就(jiù)都不(bù)生效了(le/liǎo),相當于(yú)原來(lái)的(de)那些訪問方式都不(bù)生效了(le/liǎo)。
模闆引擎
JSP、Velocity、Freemarker、Thymeleaf等等,模闆引擎的(de)本質思想是(shì)一樣的(de),隻是(shì)語法不(bù)大(dà)一緻而(ér)已。比如說(shuō)以(yǐ)freemarker爲(wéi / wèi)例,如下圖。
SpringBoot推薦的(de)Thymeleaf,不(bù)用JSP,因爲(wéi / wèi)Thymeleaf語法更加簡單,功能更加強大(dà),如何導入呢,其實對于(yú)SpringBoot不(bù)就(jiù)是(shì)一個(gè)引入依賴的(de)事情嘛,很簡單,依賴包如下
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
這(zhè)裏引入的(de)是(shì)SpringBoot默認的(de)Thymeleaf依賴版本,如果我們要(yào / yāo)切換版本怎麽切換,如下,加上(shàng)對應版本号就(jiù)可以(yǐ)了(le/liǎo)
<properties>
<thymeleaf.version></thymeleaf.version>
<thymeleaf-layout-dialect.version></thymeleaf-layout-dialect.version>
</properties>
使用Thymeleaf
在(zài)使用Thymeleaf語法之(zhī)前,我們先來(lái)實驗一下,我們隻要(yào / yāo)把HTML頁面放在(zài)templates目錄下就(jiù)可以(yǐ)了(le/liǎo),Thymeleaf就(jiù)會自動渲染
正式使用
我們先編寫一個(gè)控制器,用來(lái)跳轉渲染,控制器中,加入我們待會兒要(yào / yāo)在(zài)HTML通過Thymeleaf獲取的(de)一個(gè)變量值,如下
在(zài)HTML編寫代碼之(zhī)前,現在(zài)HTML的(de)頭标簽中導入thymeleaf的(de)名稱空間,這(zhè)樣我們在(zài)使用Thymeleaf語法的(de)時(shí)候,Idea就(jiù)會提示相關代碼。
編寫好之(zhī)後啓動項目,我們通過訪問http://localhost:8080/success來(lái)訪問success.html頁面,訪問之(zhī)後結果如下
SpringBoot自動配置MVC
SpringBoot集成了(le/liǎo)SpringMVC,所以(yǐ)裏面自然自動配置了(le/liǎo)SpringMVC運行的(de)相關基本依賴,那麽SpringBoot引入了(le/liǎo)SpringMVC那些依賴呢?這(zhè)裏我大(dà)緻進行一下介紹。Spring Boot爲(wéi / wèi)Spring MVC提供了(le/liǎo)自動配置,可與大(dà)多數應用程序完美配合。其中自動配置在(zài)Spring的(de)默認值之(zhī)上(shàng)添加了(le/liǎo)以(yǐ)下功能:
- 包含ContentNegotiatingViewResolver和(hé / huò)BeanNameViewResolver
- 支持服務靜态資源,包括對WebJars的(de)支持
- 自動注冊Converter,GenericConverter和(hé / huò)Formatter的(de)beans。
- 支持HttpMessageConverters。
- 自動注冊MessageCodesResolver
- 靜态index.html支持
- 定制Favicon支持
- 自動使用ConfigurableWebBindingInitializerbean
如果要(yào / yāo)保留這(zhè)些Spring Boot MVC定制并進行更多的(de)MVC定制(攔截器,格式化程序,視圖控制器和(hé / huò)其他(tā)功能),則可以(yǐ)添加自己@Configuration的(de)type類,WebMvcConfigurer但不(bù)添加 @EnableWebMvc(因爲(wéi / wèi)@EnableWebMvc會關閉Spring Boot MVC的(de)默認配置,而(ér)轉向需要(yào / yāo)讀取我們自己添加的(de)配置,稍後會講)。
如果你想提供的(de)定制情況RequestMappingHandlerMapping,RequestMappingHandlerAdapter或者ExceptionHandlerExceptionResolver,仍然保持彈簧引導MVC自定義,你可以(yǐ)聲明類型的(de)beans WebMvcRegistrations,并用它來(lái)提供這(zhè)些組件的(de)定制實例。
如果你想對Spring MVC中的(de)完全控制,你可以(yǐ)添加自己的(de)@Configuration注解爲(wéi / wèi)@EnableWebMvc,或者添加自己的(de)@Configuration-annotated DelegatingWebMvcConfiguration中的(de)Javadoc中所述@EnableWebMvc。
後面我們會讨論怎麽對SpringMVC進行完全控制。
拓展SpringMVC
看到(dào)如下配置是(shì)不(bù)是(shì)很熟悉,我們以(yǐ)前在(zài)SpringMVC中是(shì)這(zhè)樣編寫視圖控制器和(hé / huò)攔截器的(de),那麽我們怎麽在(zài)SpringBoot中使用呢?
在(zài)前面見過,爲(wéi / wèi)了(le/liǎo)方便編寫項目的(de)統一配置,和(hé / huò)前面見過配置的(de)的(de)地(dì / de)方一樣,我們統一把項目的(de)配置放在(zài)config包中管理,然後我們在(zài)config包下創建一個(gè)MyMvcConfig的(de)類,實現WebMvcConfigurer接口,就(jiù)可以(yǐ)對SpringBoot中關于(yú)SpringMVC相關配置進行擴展了(le/liǎo)。
WebMvcConfigurer可以(yǐ)用來(lái)擴展SpringMVC的(de)功能,需要(yào / yāo)什麽在(zài)裏面實現什麽方法就(jiù)可以(yǐ)了(le/liǎo),比如我們擴展一下視圖轉換器,如下
這(zhè)樣實現了(le/liǎo)既保留了(le/liǎo)使用原有的(de)配置,又能使用我們自己的(de)方式擴展配置
@EnableWebMvc
上(shàng)面我們可以(yǐ)自己編寫類擴展SpringMVC的(de)相關配置,如果我們再在(zài)配置類上(shàng)加上(shàng)@EnableWebMvc注解,是(shì)啥意思呢,也(yě)就(jiù)是(shì)說(shuō)我們将全面接管SpringMVC在(zài)SpringBoot中的(de)配置,在(zài)SpringBoot中有關SpringMVC所有的(de)默認配置都會失效,需要(yào / yāo)我們自行配置,比如上(shàng)面我們默認webjars進行訪問靜态資源等等,都會失效
也(yě)就(jiù)是(shì)說(shuō)原本我們不(bù)使用@EnableWebMvc,SpringBoot會自動配置SpringMVC的(de)默認依賴,如果我們使用@EnableWebMvc,則@EnableWebMvc就(jiù)會将WebMVCConfigurationSupport組件導入進來(lái),而(ér)導入的(de)WebMVCConfigurationSupport組件裏面隻有SpringMVC一些最基本的(de)功能。
如何修改SpringBoot的(de)默認配置
SpringBoot在(zài)自動配置很多組件的(de)時(shí)候,先看容器中有沒有哦用戶自己配置的(de)(@Bean、@Component)如果有就(jiù)用用戶配置的(de),如果沒有就(jiù)自動配置,如果有些組件可以(yǐ)有多個(gè)(如ViewResolver)将用戶配置和(hé / huò)自己默認的(de)組合起來(lái)
在(zài)SpringBoot中會有非常多的(de)xxxConfigurer幫助我們進行SpringMVC的(de)拓展配置。
寫一篇
這(zhè)篇博文我們在(zài)進行正式開發前的(de)一些準備,下一篇我們來(lái)引入靜态資源文件編寫相關代碼。