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”網站的過程。
您將構建什麼
您將構建一個應用程式,它有一個靜態主頁,並且還將接受對 https://:8080/greeting
的 HTTP GET 請求。
它將返回一個顯示 HTML 的網頁。HTML 的主體將包含一個問候語:“Hello, World!”
您可以使用查詢字串中的可選 name
引數來自定義問候語。此時的 URL 可能是 https://: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 fork 該專案,並在您的 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://:8080/greeting
,您應該會看到“Hello, World!”
透過訪問 https://: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://: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://:8080/
看到 HTML。
總結
恭喜!您剛剛使用 Spring 開發了一個網頁。
另請參閱
以下指南也可能有所幫助
想撰寫新指南或貢獻現有指南嗎?請檢視我們的貢獻指南。
所有指南的程式碼均採用 ASLv2 許可證釋出,文字內容採用 署名-禁止演繹 (Attribution, NoDerivatives) Creative Commons 許可證。 |