詳細SpringBoot教程之(zhī)Web開發(一) - 新聞資訊 - 雲南小程序開發|雲南軟件開發|雲南網站建設-昆明融晨信息技術有限公司

159-8711-8523

雲南網建設/小程序開發/軟件開發

知識

不(bù)管是(shì)網站,軟件還是(shì)小程序,都要(yào / yāo)直接或間接能爲(wéi / wèi)您産生價值,我們在(zài)追求其視覺表現的(de)同時(shí),更側重于(yú)功能的(de)便捷,營銷的(de)便利,運營的(de)高效,讓網站成爲(wéi / wèi)營銷工具,讓軟件能切實提升企業内部管理水平和(hé / huò)效率。優秀的(de)程序爲(wéi / wèi)後期升級提供便捷的(de)支持!

您當前位置>首頁 » 新聞資訊 » 網站建設 >

詳細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)啥再添加。
在(zài)這(zhè)裏插入圖片描述

前面說(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ǐ)。
在(zài)這(zhè)裏插入圖片描述各種靜态資源jar都可以(yǐ)通過pom.xml依賴的(de)方式引入 ,我們引入JQuery看看,引入的(de)JQuery的(de)依賴包下邊,可以(yǐ)看到(dào)webjars内容長這(zhè)樣
在(zài)這(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
在(zài)這(zhè)裏插入圖片描述
所以(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)靜态資源文件夾
    在(zài)這(zhè)裏插入圖片描述
    這(zhè)裏我們可以(yǐ)随便将jquery.js放置在(zài)三個(gè)文件夾中的(de)一個(gè),然後通過http://localhost:8080/jquery.js可以(yǐ)訪問到(dào)。
    在(zài)這(zhè)裏插入圖片描述
    在(zài)這(zhè)裏插入圖片描述

配置歡迎頁映射

靜态資源文件夾下的(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
在(zài)這(zhè)裏插入圖片描述
同樣的(de)所有的(de)
/favicon.ico默認都是(shì)在(zài)靜态資源下找,當然,如果我們不(bù)想要(yào / yāo)使用SpringBoot默認的(de)靜态資源文件夾,我們還可以(yǐ)定義靜态資源的(de)映射,如下
在(zài)這(zhè)裏插入圖片描述
要(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)例,如下圖。
在(zài)這(zhè)裏插入圖片描述
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ù)會自動渲染
在(zài)這(zhè)裏插入圖片描述
在(zài)這(zhè)裏插入圖片描述

正式使用

我們先編寫一個(gè)控制器,用來(lái)跳轉渲染,控制器中,加入我們待會兒要(yào / yāo)在(zài)HTML通過Thymeleaf獲取的(de)一個(gè)變量值,如下
在(zài)這(zhè)裏插入圖片描述
在(zài)HTML編寫代碼之(zhī)前,現在(zài)HTML的(de)頭标簽中導入thymeleaf的(de)名稱空間,這(zhè)樣我們在(zài)使用Thymeleaf語法的(de)時(shí)候,Idea就(jiù)會提示相關代碼。
在(zài)這(zhè)裏插入圖片描述
編寫好之(zhī)後啓動項目,我們通過訪問http://localhost:8080/success來(lái)訪問success.html頁面,訪問之(zhī)後結果如下
在(zài)這(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)這(zhè)裏插入圖片描述
在(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),比如我們擴展一下視圖轉換器,如下
在(zài)這(zhè)裏插入圖片描述
這(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進行訪問靜态資源等等,都會失效
在(zài)這(zhè)裏插入圖片描述
也(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)引入靜态資源文件編寫相關代碼。

相關案例查看更多