Spring Boot 之一:從一個(gè)小程序開始

1、工具環(huán)境安裝

??推薦使用Spring Tool Suite4谷丸,官網(wǎng)下載:https://spring.io/tools

??配套工具安裝lombok辉饱,官網(wǎng)下載:https://projectlombok.org/download礁芦。


2、初始化SpringBoot工程

??File -> New -> Spring Starter Project

??初始化 SpringBoot工程信息

??選擇 Spring Boot 版本重抖,選擇要使用的功能對應(yīng)的 Starter,然后點(diǎn)擊 Finish祖灰,IDE 會自動完成剩下的工作钟沛。

??Starter 使開發(fā)人員避免陷入各種依賴的版本兼容問題的泥淖,只要 Spring Boot 庫中有對應(yīng)的 Starter 即可一鍵引入局扶,并且官方保證依賴的兼容性恨统。


3叁扫、默認(rèn)配置和規(guī)則

??一個(gè) Spring Boot 工程完成初始化之后默認(rèn)自動生成的文件目錄結(jié)構(gòu)如下:

  • mvnw和mvnw.cmd:這是Maven包裝器(wrapper)腳本。借助這些腳本畜埋,即便你的機(jī)器上沒有安裝Maven莫绣,也可以構(gòu)建項(xiàng)目。
  • TacoCloudApplication.java:這是Spring Boot主類悠鞍,它會啟動項(xiàng)目对室。
  • application.properties:默認(rèn)配置文件,若同時(shí)存在 application.properties 和 application.yml 則會優(yōu)先加載前者的配置咖祭,所以如果要使用 application.yml掩宜,必須刪除 application.properties。
  • static:在這個(gè)文件夾下么翰,你可以存放任意為瀏覽器提供服務(wù)的靜態(tài)內(nèi)容(圖片牺汤、樣式表、JavaScript等)浩嫌,該文件夾初始為空檐迟。
  • templates:這個(gè)文件夾中存放用來渲染內(nèi)容到瀏覽器的模板?件。這個(gè)文件夾初始是空的码耐,不過我們很快就會往里面添加Thymeleaf模板追迟。
  • TacoCloudApplicationTests.java:這是?個(gè)簡單的測試類,它能確保Spring應(yīng)用上下文可以成功加載骚腥。


4敦间、生成的 pom.xml 詳解

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.9</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>sia</groupId>
    <artifactId>taco-cloud</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>taco-cloud</name>
    <description>Taco Cloud Example</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <!-- Spring-Boot: thymeleaf(模板引擎) -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <!-- Spring-Boot: web -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!-- devtools:
            1. 應(yīng)用自動重啟
            2. 瀏覽器自動刷新(靜態(tài)資源如js、圖片桦沉、css等)和禁用模板緩存 
            3. 自動啟用H2數(shù)據(jù)庫
         -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <!-- Spring-Boot: test -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
                
        <!-- 通過以下依賴項(xiàng)來解決此問題每瞒,同時(shí)支持舊版 HTML 格式。因?yàn)榇a charset="UTF-8"> 這里沒有關(guān)閉元標(biāo)記纯露。 -->              
        <dependency>
            <groupId>net.sourceforge.nekohtml</groupId>
            <artifactId>nekohtml</artifactId>                                      
        </dependency>               
        
        <!-- lombok: 自動代碼生成 -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        
        <!-- Spring-Boot: validation -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-validation</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>
  • spring-boot-starter-web : web 工程必須引入的 starter剿骨。

  • spring-boot-starter-thymeleaf : 使用 thymeleaf 模板引擎渲染網(wǎng)頁。

  • spring-boot-devtools :為 Spring 開發(fā)人員提供的遍歷的開發(fā)期工具埠褪,功能包括:

    • 代碼變更后應(yīng)用會自動重啟浓利;
    • 當(dāng)面向?yàn)g覽器的資源(如模板、JavaScript钞速、css)等發(fā)生變化時(shí)贷掖,會自動刷新瀏覽器;
    • 自動禁用模板緩存渴语;
    • 如果使用 H2 數(shù)據(jù)庫苹威,內(nèi)置 H2 控制臺。

    DevTools 在運(yùn)行時(shí)驾凶,會在應(yīng)用程序側(cè)啟動一個(gè) LiveReload 服務(wù)器牙甫,瀏覽器也必須先安裝 LiveReload 插件掷酗,這樣就可以實(shí)現(xiàn)瀏覽器訪問網(wǎng)頁時(shí),一些靜態(tài)資源發(fā)生變化時(shí)窟哺,會自動刷新瀏覽器泻轰。

  • spring-boot-starter-test :為 Spring 程序提供編寫單元測試支持的 starter。

  • spring-boot-starter-validation :校驗(yàn)網(wǎng)頁提交的表單數(shù)據(jù)的合法性且轨。

  • lombok :通過注解 POJO浮声,使其不必寫構(gòu)造器、getter/setter旋奢。

  • nekohtml :使用 thymeleaf 模板時(shí)泳挥,若網(wǎng)頁模板中的 xml 標(biāo)簽沒有閉標(biāo)簽,可能會導(dǎo)致引擎解析異常黄绩,而加入本依賴可處理這種問題羡洁。

  • spring-boot-maven-plugin :maven 編譯插件玷过,功能包括:

    • 提供一個(gè) Maven goal爽丹,允許通過 Maven 來運(yùn)行應(yīng)用;
    • 確保依賴的所有庫都會包含在可執(zhí)行 Jar 文件中辛蚊,并且保證運(yùn)行時(shí)在類路徑下是可用的粤蝎;
    • 在 Jar 中生成一個(gè) manifest 文件,將引導(dǎo)類聲明為可執(zhí)行 Jar 的主類袋马。


5初澎、主類

package tacos;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class TacoCloudApplication {

 public static void main(String[] args) {
 SpringApplication.run(TacoCloudApplication.class, args);
 }

}

??使用 @SpringBootApplication 表示是程序主類,負(fù)責(zé)引導(dǎo)應(yīng)用執(zhí)行虑凛。主類的包名是 tacos碑宴,默認(rèn) tacos.* 的包里的類都會被掃描到,如果使用了 @Service桑谍、@Component延柠、@Respository、@Controller 等注解锣披,則會被自動注冊為 bean贞间,若包名不符合該規(guī)則,或者想顯式指定包掃描雹仿,則指定注解的 scanBasePackages 屬性即可增热。

??比如要增加對包 com.foo 進(jìn)行掃描,則注解調(diào)整為:

@SpringBootApplication(scanBasePackages = {"tacos", "com.foo"})</pre>



6胧辽、處理 Web 請求

??Spring 自帶了一個(gè) Web 開發(fā)框架 Spring MVC峻仇。Spring MVC 的核心是控制器的理念,控制器是處理請求并以某種方式進(jìn)行信息相應(yīng)的類邑商。

??這里定義一個(gè)控制器摄咆,處理瀏覽器的 "/" 請求帆调。

package tacos;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class HomeController {

    @GetMapping("/")
    public String home() {
        return "home";
    }
    
}

?? @Controller 表示這是一個(gè)控制器,可以響應(yīng)處理瀏覽器請求豆同;@GetMapping("/") 表示只響應(yīng)對 "/" 發(fā)起的 GET 請求番刊;方法返回值是一個(gè)字符串 "home",不代表直接返回這個(gè)字符串響應(yīng)影锈,而是表示要使用哪個(gè)視圖芹务,這個(gè)值會被解析為視圖的邏輯名,Spring 會從資源目錄(src/main/resources/templates)下找到對應(yīng)的視圖文件 home.html鸭廷,內(nèi)容如下:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org">
    <head>
        <meta charset="UTF-8">
        <title>Taco Cloud</title>
    </head>
    <body>
        <h1>Welcome to...</h1>
        <img th:src="@{/images/TacoCloud.png}"></img>
        <br>
        <a href="/design">Start to design you taco!</a><br>
        <a href="/valid-design">Start to design you taco! (With validation)</a>
    </body>
</html>

??除了靜態(tài)的 HTML枣抱,這里還使用了 thymeleaf 模板引擎,可以用它來引用資源渲染數(shù)據(jù)辆床,作用類似于 JSP佳晶。

??啟動容器,Boot Dashboard 可以看到 Spring Boot 項(xiàng)目列表讼载,啟動的應(yīng)用會變綠轿秧,顯示使用了 devtools,應(yīng)用監(jiān)聽 8080 端口咨堤,上面的工具欄可以停止菇篡、重啟、運(yùn)行一喘、調(diào)試應(yīng)用驱还,可以為應(yīng)用打開一個(gè) web 瀏覽器和控制臺等。

??先點(diǎn)擊啟動凸克,再點(diǎn)擊瀏覽器议蟆,訪問效果如下

【演示項(xiàng)目github地址】

https://github.com/huyihao/Spring-Tutorial/tree/main/2%E3%80%81SpringBoot/taco-cloud

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市萎战,隨后出現(xiàn)的幾起案子咐容,更是在濱河造成了極大的恐慌,老刑警劉巖撞鹉,帶你破解...
    沈念sama閱讀 219,490評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件疟丙,死亡現(xiàn)場離奇詭異,居然都是意外死亡鸟雏,警方通過查閱死者的電腦和手機(jī)享郊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來孝鹊,“玉大人炊琉,你說我怎么就攤上這事。” “怎么了苔咪?”我有些...
    開封第一講書人閱讀 165,830評論 0 356
  • 文/不壞的土叔 我叫張陵锰悼,是天一觀的道長。 經(jīng)常有香客問我团赏,道長箕般,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,957評論 1 295
  • 正文 為了忘掉前任舔清,我火速辦了婚禮丝里,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘体谒。我一直安慰自己杯聚,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,974評論 6 393
  • 文/花漫 我一把揭開白布抒痒。 她就那樣靜靜地躺著幌绍,像睡著了一般。 火紅的嫁衣襯著肌膚如雪故响。 梳的紋絲不亂的頭發(fā)上傀广,一...
    開封第一講書人閱讀 51,754評論 1 307
  • 那天,我揣著相機(jī)與錄音被去,去河邊找鬼主儡。 笑死奖唯,一個(gè)胖子當(dāng)著我的面吹牛惨缆,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播丰捷,決...
    沈念sama閱讀 40,464評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼坯墨,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了病往?” 一聲冷哼從身側(cè)響起捣染,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎停巷,沒想到半個(gè)月后耍攘,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,847評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡畔勤,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,995評論 3 338
  • 正文 我和宋清朗相戀三年蕾各,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片庆揪。...
    茶點(diǎn)故事閱讀 40,137評論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡式曲,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情吝羞,我是刑警寧澤兰伤,帶...
    沈念sama閱讀 35,819評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站钧排,受9級特大地震影響敦腔,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜恨溜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,482評論 3 331
  • 文/蒙蒙 一会烙、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧筒捺,春花似錦柏腻、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至肯尺,卻和暖如春沃缘,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背则吟。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評論 1 272
  • 我被黑心中介騙來泰國打工槐臀, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人氓仲。 一個(gè)月前我還...
    沈念sama閱讀 48,409評論 3 373
  • 正文 我出身青樓水慨,卻偏偏與公主長得像,于是被迫代替她去往敵國和親敬扛。 傳聞我的和親對象是個(gè)殘疾皇子晰洒,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,086評論 2 355

推薦閱讀更多精彩內(nèi)容