小白手把手教學怎麼用maven建立一個Springboot專案

ivanlee717發表於2024-10-30

spring_boot

⼀個使⽤了 Spring Boot 的項⽬⼯程,本質上來說和只使⽤ Spring Framework 的⼯程 是⼀樣的,如果使⽤ Maven 來管理,那它就是個標準的 Maven ⼯程,⼤概的結構就 像下⾯這樣。

|-pom.xml 
|-src 
  |-main 
    |-java 
    |-resources 
  |-test 
    |-java 
    |-resources
  • pom.xml 中管理了整個項⽬的依賴和構建相關的信
  • src/main 中是⽣產的 Java 程式碼和相關資源⽂件;
  • src/test 中是測試的 Java 程式碼和相關資源⽂件。

POM檔案分為以下幾個部分:

  1. ⼯程⾃⾝的 GroupId 、 ArtifactId 與 Version 等內容定義;
  2. ⼯程繼承的 org.springframework.boot:spring-boot-starter parent 定義;
  3. <dependencies/> 依賴項定義;
  4. 構建相關的配置定義。

org.springframework.boot:spring-boot-starter-parent ⼜繼承了 org.springframework.boot:spring-boot-dependencies ,它透過定義了⼤量的依賴項,有了 的加持,在我們⾃⼰的⼯程中,只需要在 中寫⼊依賴項的 .

用maven建立一個SpringBoot專案

基礎配置:

JDK1.8+IDEA2021版本+maven3.3.9

image-20241029190649516

1.什麼是Maven?

Maven是一個專案管理工具,它包含了一個物件模型。一組標準集合,一個依賴管理系統。和用來執行定義在生命週期階段中外掛目標和邏輯。

核心功能 :Maven的核心功能是合理敘述專案間的依賴關係,通俗點 就是透過pom.xml檔案的配置獲取jar包不用手動的去新增jar包,,這個pom.xml包我後面會敘述,不過已經學習過maven的 人應該對這個很熟悉。其本質就是透過配置pom.xml來獲取jar包,當然這是在該專案必須是maven專案的前提下。那麼什麼是maven專案

image-20241029192647986

透過圖解可以發現maven工程不直接將jar包匯入到工程中,而是透過再pom.xml中新增所需的jar包的座標,這樣就避免了jar直接引入進來,在需要用到jar包的時候,只要查詢pom.xml檔案,再透過pom.xml中的座標,到一個專門用於存放jar包的倉庫中根據座標從而找到這些jar包,再把這些jar包拿去執行

透過 pom.xml 檔案配置要引入的 jar 包的座標,再讀取座標併到倉庫中載入 jar 包,這 樣我們就可以直接使用 jar 包了,為了解決這個過程中速度慢的問題,maven 中也有索引的概念,透過建立索引,可以大大提高載入 jar 包的速度,使得我們認為 jar 包基本跟放在本地的工程檔案中再讀取出來的速度是一樣的。這個過程就好比我們查閱字典時,為了能夠加快查詢到內容,書前面的目錄就好比是索引,有了這個目錄我們就可以方便找到內容了,一樣的在 maven 倉庫中有了索引我們就可以認為可以快速找到 jar 包。

2. 專案

現在我們繼續建立新專案

image-20241029192840210

image-20241029192923321

配置maven

建立好之後我們可以看到只有這麼一些檔案內容和檔案目錄,現在我們要做的第一件事就是配置maven

image-20241029193049379

檔案->設定裡面找到maven配置,紅框裡面的就是需要我們手動配置的地方。

image-20241029190722019

這是我的配置目錄,這個maven倉庫就是存放專案需要的各種依賴的地方。並且我們要在系統變數裡新增才能使用

image-20241029193337376

因為我們使用的是本地倉庫,在這個settings檔案裡可能預設使用的是伺服器端的倉庫,所以還要在程式碼裡改一下

image-20241029193604474

這樣的話,專案所有需要的依賴就準備好了

image-20241029193656631

建立新啟動項

image-20241029194127858

現在我們在專案裡新建了一個模組module1,在pom檔案裡新增依賴項

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

image-20241029194710601之後我們新建軟體包來存放啟動類

image-20241029195102516

image-20241029195700221

在導包的時候遇到這種問題就清除一下快取然後重新啟動。

image-20241029195808023

package com.ivanlee.springboot;

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

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

}

建立application.yml配置檔案:設定埠號

image-20241029200605142

這樣的話直接執行我們的啟動類就可以訪問網頁了

image-20241029200903036

image-20241029201023672

訪問剛才yaml檔案裡的配置,能得到一張空白頁面,因為還沒有寫controller相關的東西,所以什麼都沒有

image-20241029201110258

controller

需要注意的是controller的類檔案必須要放在和啟動類同級以及更低一級的目錄裡面,不能比啟動類高,否則啟動時將無法掃描到controller裡面的路徑導致404.

image-20241030094250237

package com.ivanlee.springboot.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;


@RestController
@RequestMapping("/regina")
public class FirstController {
    @GetMapping("/127")
    public String test(){
        System.out.println("hello world");
        return "hello world";
    }
}

@RestController 和 @Controller 是 Spring Framework 中用於定義控制器的註解。

@RestController 是一個組合註解,它結合了 @Controller 和 @ResponseBody 註解的功能(就相當於把兩個註解組合在一起)。在使用 @RestController 註解標記的類中,每個方法的返回值都會以 JSON 或 XML 的形式直接寫入 HTTP 響應體中,相當於在每個方法上都新增了 @ResponseBody 註解。
@Controller 註解標記的類則是傳統的控制器類。它用於處理客戶端發起的請求,並負責返回適當的檢視(View)作為響應。在使用 @Controller 註解的類中,通常需要在方法上使用 @ResponseBody 註解來指示該方法的返回值要作為響應的主體內容,而不是解析為檢視。

 簡而言之,@RestController 適用於構建 RESTful 風格的 API,其中每個方法的返回值會直接序列化為 JSON 或 XML 資料併傳送給客戶端。而 @Controller 適用於傳統的 MVC 架構,它負責處理請求並返回相應的檢視。(@RestController下的方法預設返回的是資料格式,@Controller註解標註的類下面的方法預設返回的就是以檢視為格式)

image-20241030094924208

訪問該路徑便得到了一個前端的響應。如果一直髮生404,那麼可以點選maven裡面的clean按鈕,把之前的錯誤匯入清掉再繼續。image-20241030095034864

相關文章