package com.example.servingwebcontent;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
@Controller
public class GreetingController {
@GetMapping("/greeting")
public String greeting(@RequestParam(name="name", required=false, defaultValue="World") String name, Model model) {
model.addAttribute("name", name);
return "greeting";
}
}
使用 Spring MVC 提供 Web 內容
本指南將引導您使用 Spring 建立「Hello, World!」網站的過程。
您將建置的內容
您將建置一個應用程式,其中包含一個靜態首頁,並且也將接受以下位置的 HTTP GET 請求:https://127.0.0.1:8080/greeting
。
它將回應一個顯示 HTML 的網頁。HTML 的主體將包含問候語:「Hello, World!」。
您可以使用查詢字串中的可選 name
參數來自訂問候語。URL 可能會變成 https://127.0.0.1:8080/greeting?name=User
。
name
參數值會覆寫預設值 `World`,並透過內容變更為「Hello, User!」反映在回應中。
您需要的東西
-
約 15 分鐘
-
您慣用的文字編輯器或 IDE
-
Java 17 或更高版本
-
您也可以將程式碼直接匯入您的 IDE
如何完成本指南
如同大多數 Spring 入門指南,您可以從頭開始並完成每個步驟,或者您可以跳過您已熟悉的基本設定步驟。無論哪種方式,您最終都會得到可運作的程式碼。
若要從頭開始,請繼續前往 從 Spring Initializr 開始。
若要跳過基本步驟,請執行以下操作
-
下載 並解壓縮本指南的原始碼儲存庫,或使用 Git 進行複製:
git clone https://github.com/spring-guides/gs-serving-web-content.git
-
cd 進入
gs-serving-web-content/initial
-
跳到 建立 Web 控制器。
完成後,您可以將您的結果與 gs-serving-web-content/complete
中的程式碼進行比較。
從 Spring Initializr 開始
您可以使用這個 預先初始化的專案,然後按一下「Generate」以下載 ZIP 檔案。此專案已設定為符合本教學課程中的範例。
若要手動初始化專案
-
導覽至 https://start.spring.io。此服務會提取應用程式所需的所有相依性,並為您完成大部分的設定。
-
選擇 Gradle 或 Maven 以及您想要使用的語言。本指南假設您選擇了 Java。
-
按一下Dependencies,然後選取 Spring Web、Thymeleaf 和 Spring Boot DevTools。
-
按一下Generate。
-
下載產生的 ZIP 檔案,這是根據您的選擇設定的 Web 應用程式的封存檔。
如果您的 IDE 具有 Spring Initializr 整合,您可以從您的 IDE 完成此程序。 |
您也可以從 Github 分叉專案,並在您的 IDE 或其他編輯器中開啟它。 |
建立 Web 控制器
在 Spring 建置網站的方法中,HTTP 請求由控制器處理。您可以透過 @Controller
註解輕鬆識別控制器。在以下範例中,GreetingController
透過傳回 View
的名稱(在此範例中為 greeting
)來處理對 /greeting
的 GET 請求。View
負責呈現 HTML 內容。以下清單(來自 src/main/java/com/example/servingwebcontent/GreetingController.java
)顯示控制器
此控制器簡潔明瞭,但其中包含許多內容。我們將逐步分解它。
@GetMapping
註解確保對 /greeting
的 HTTP GET 請求會對應到 greeting()
方法。
@RequestParam
將查詢字串參數 name
的值繫結到 greeting()
方法的 name
參數中。此查詢字串參數不是 required
。如果請求中沒有此參數,則會使用 World
的 defaultValue
。name
參數的值會新增到 Model
物件,最終使其可供檢視範本存取。
方法主體的實作依賴檢視技術(在此範例中為 Thymeleaf)來執行 HTML 的伺服器端轉譯。Thymeleaf 會剖析 greeting.html
範本,並評估 th:text
運算式,以轉譯在控制器中設定的 ${name}
參數值。以下清單(來自 src/main/resources/templates/greeting.html
)顯示 greeting.html
範本
<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>Getting Started: Serving Web Content</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<p th:text="|Hello, ${name}!|" />
</body>
</html>
請確保您的類別路徑上有 Thymeleaf(成品座標:org.springframework.boot:spring-boot-starter-thymeleaf )。它已在 Github 的「initial」和「complete」範例中。 |
Spring Boot Devtools
開發 Web 應用程式的常見功能是編寫程式碼變更、重新啟動您的應用程式,以及重新整理瀏覽器以檢視變更。整個過程可能會耗費大量時間。為了加快此重新整理週期,Spring Boot 提供了一個方便的模組,稱為 spring-boot-devtools。Spring Boot Devtools
-
啟用 熱交換。
-
切換範本引擎以停用快取。
-
啟用 LiveReload 以自動重新整理瀏覽器。
-
其他基於開發而非生產的合理預設值。
執行應用程式
Spring Initializr 會為您建立應用程式類別。在這種情況下,您無需進一步修改 Spring Initializr 提供的類別。以下清單(來自 src/main/java/com/example/servingwebcontent/ServingWebContentApplication.java
)顯示應用程式類別
package com.example.servingwebcontent;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class ServingWebContentApplication {
public static void main(String[] args) {
SpringApplication.run(ServingWebContentApplication.class, args);
}
}
@SpringBootApplication
是一個方便的註解,會新增以下所有項目
-
@Configuration
:將類別標記為應用程式內容的 bean 定義來源。 -
@EnableAutoConfiguration
:告訴 Spring Boot 根據類別路徑設定、其他 bean 和各種屬性設定開始新增 bean。例如,如果spring-webmvc
在類別路徑上,則此註解會將應用程式標記為 Web 應用程式,並啟用主要行為,例如設定DispatcherServlet
。 -
@ComponentScan
:告訴 Spring 在com/example
套件中尋找其他元件、組態和服務,使其找到控制器。
main()
方法使用 Spring Boot 的 SpringApplication.run()
方法來啟動應用程式。您是否注意到沒有任何一行的 XML?也沒有 web.xml
檔案。此 Web 應用程式是 100% 純 Java,而且您不必處理任何管線或基礎結構的組態。
建置可執行 JAR 檔
您可以使用 Gradle 或 Maven 從命令列執行應用程式。您也可以建置一個包含所有必要相依性、類別和資源的單一可執行 JAR 檔,並執行該檔案。建置可執行 jar 檔可讓您在整個開發生命週期、跨不同環境等輕鬆運送、版本化和部署服務作為應用程式。
如果您使用 Gradle,您可以使用 ./gradlew bootRun
執行應用程式。或者,您可以使用 ./gradlew build
建置 JAR 檔,然後執行 JAR 檔,如下所示
如果您使用 Maven,您可以使用 ./mvnw spring-boot:run
執行應用程式。或者,您可以使用 ./mvnw clean package
建置 JAR 檔,然後執行 JAR 檔,如下所示
此處描述的步驟會建立可執行的 JAR。您也可以 建置傳統 WAR 檔案。 |
會顯示記錄輸出。應用程式應在幾秒鐘內啟動並執行。
測試應用程式
既然網站正在執行,請造訪 https://127.0.0.1:8080/greeting
,您應該會看到「Hello, World!」。
透過造訪 https://127.0.0.1:8080/greeting?name=User
提供 name
查詢字串參數。請注意訊息如何從「Hello, World!」變更為「Hello, User!」。
此變更示範了 GreetingController
中的 @RequestParam
配置如預期般運作。name
參數已獲賦予預設值 World
,但可以透過查詢字串明確覆寫。
新增首頁
靜態資源,包括 HTML 和 JavaScript 以及 CSS,可以從您的 Spring Boot 應用程式提供服務,方法是將它們放入原始碼中的正確位置。依預設,Spring Boot 從類別路徑中 /static
(或 /public
)的資源提供靜態內容。index.html
資源很特別,因為如果它存在,則會用作「歡迎頁面」,這表示它會作為根資源提供服務(也就是在 https://127.0.0.1:8080/
)。因此,您需要建立以下檔案(您可以在 src/main/resources/static/index.html
中找到它)
<!DOCTYPE HTML>
<html>
<head>
<title>Getting Started: Serving Web Content</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<p>Get your greeting <a href="/greeting">here</a></p>
</body>
</html>
當您重新啟動應用程式時,您將在 https://127.0.0.1:8080/
看到 HTML。
摘要
恭喜!您剛剛使用 Spring 開發了一個網頁。