本資料是《企業發展概論》系列的結語。往期文章:
讓我們以 Spring MVC 為例,看一下最簡單的 MVC 實現。為此,我們將使用 Spring Boot 編寫一個小型 Hello World 應用程序。我會給你一步一步的指導,所以你可以自己重複一切。首先,我們將編寫一個小應用程序,然後我們將對其進行分析。
步驟 1. 在 IntelliJ IDEA 中創建一個 Spring Boot 應用程序。 使用 File -> New -> Project… 創建一個新項目。在打開的窗口中,在左側菜單中,選擇 Spring Initializr,然後選擇 Project SDK。保留 Initializr Service URL 選項的默認值。
單擊“下一步”按鈕。在下一個窗口中,我們需要選擇項目設置。我們將有一個 Maven 項目。選擇 Maven 項目作為類型。填寫組和工件字段 單擊下一步。
在下一個窗口中,我們需要選擇要使用的 Spring Framework 組件。兩個對我們來說足夠了:
Spring Web 是一個讓我們創建 Web 應用程序的組件。該組件包括 Spring MVC。
Thymeleaf 是我們的模板引擎。它可以讓我們將數據從 Java 發送到 HTML 頁面
在下一個窗口中,選擇項目的名稱和在文件系統中的位置:
單擊“完成”按鈕。項目已創建。我們最終得到以下項目結構:
這裡我們對 2 個文件感興趣:pom.xml(部署描述符)。這個東西可以讓你快速輕鬆地將庫從不同的框架導入到我們的項目中。它也是我們配置應用程序構建方式的地方。我們的應用程序是使用 Maven 構建的,pom.xml 是此構建系統的配置文件。Java 類是 MvcDemoApplication。這是我們應用程序的主類。我們將從中啟動我們的 Spring Boot 項目。首先,只需運行此類的主要方法。這是此類的代碼以及 pom.xml 文件:MvcDemoApplication:
@SpringBootApplication
public class MvcDemoApplication {
public static void main(String[] args) {
SpringApplication.run(MvcDemoApplication.class, args);
}
}
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.2.2.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.codegym/groupId>
<artifactId>mvc_demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>mvc_demo</name>
<description>Spring MVC Demo</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
步驟 2. 創建網頁 我們的應用程序將非常簡單。我們將有一個主頁 (index.html),其中包含指向歡迎頁面 (greeting.html) 的鏈接。在問候語頁面上,我們顯示問候語。我們將使用 URL 參數將要在問候語中使用的名稱傳遞給 greeting.html 頁面。讓我們創建應用程序的主頁 — index.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Main page</title>
</head>
<body>
<p>Get your greeting <a href="/greeting">here</a></p>
</body>
</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>
我們的頁面有一個
<p th:text="'Hello, ' + ${name} + '!'" />
標籤,這對於 HTML 來說是不正常的。
th
標籤的屬性是
p
Thymeleaf 模板引擎使用的一種機制。標記
p
的值將是“Hello”+
name
我們將在 Java 代碼中設置的變量的值。
步驟 3. 創建控制器 在 mvc_demo 包中,我們將創建一個控制器包,我們將在其中創建我們的控制器 HelloWorldController:
@Controller
public class HelloWorldController {
@RequestMapping(value = "/greeting")
public String helloWorldController(@RequestParam(name = "name", required = false, defaultValue = "World") String name, Model model) {
model.addAttribute("name", name);
return "greeting";
}
}
一方面,代碼很少,但另一方面,卻發生了很多事情。下面開始我們的分析。@Controller 註解表明這個類是一個控制器。在 Spring 中,控制器處理針對特定 URL 的 HTTP 請求。我們的類有一個 helloWorldController 方法,它標有 @RequestMapping(value = "/greeting") 註釋。此註釋指示此方法處理指向 /greeting URL 的 HTTP GET 請求。換句話說,如果有人導航到 /greeting,將調用此方法。此方法返回一個字符串。根據 Spring MVC,控制器方法應該返回視圖的名稱。接下來,Spring 將查找具有相同名稱的 HTML 文件,它將作為對 HTTP 請求的響應返回。如你看到的, 我們的方法有兩個參數。我們來看一下: 參數一:@RequestParam(name = "name", required = false, defaultValue = "World") 字符串名稱。@RequestParam 註解表明字符串名稱參數是一個 URL 參數。如果註釋指示此 URL 參數是可選的(必需 = false),那麼如果它不存在,則字符串名稱參數的值將為“World”(defaultValue =“World”)。如果存在,則 URL 參數將為“名稱”(name = "name")。這裡可能有很多你不明白的地方。讓我們提供一些例子。下表顯示了字符串名稱參數的值,以及訪問 /greeting 的各種選項(有和沒有 URL 參數)
示例網址
字符串名稱的值
/問候語
世界
/問候語?name=Amigo
朋友
/問候語?名字=佐爾
佐爾
參數2:第二個參數是一個Model模型。這個參數是一些模型。該模型由各種內部屬性組成。每個屬性都有一個名稱和一個值。像鍵值對之類的東西。我們可以使用此參數將數據從 Java 代碼發送到 HTML 頁面。或者,使用 MVC 術語,將數據從模型發送到視圖。只剩下檢查最後一行了。這就是我們將數據從 Java 發送到 HTML,或從模型發送到視圖的方式。該方法包括以下行:
model.addAttribute("name", name);
這裡我們創建一個名為 name 的新屬性,並為其分配 name 參數的值。記得,我們最近討論過
<p th:text = "'Hello,' + ${name} + '!'" />
,我們說 p 標籤的值是“Hello” + name 變量的值,我們將在 Java 代碼中設置它。我們使用該行設置此值
model.addAttribute("name", name);
步驟 5. 運行 首先,我們需要運行 MvcDemoApplication 類的主要方法:
在日誌中,我們將看到我們的 Web 應用程序在端口 8080 上啟動: 這意味著在瀏覽器中,我們可以訪問
http:// 頁面
localhost:8080 :
這裡有 index.html 頁面。讓我們點擊歡迎頁面的鏈接:
我們的控制器在此轉換中被調用。我們沒有通過 URL 傳遞任何參數。因此,name 屬性採用註釋中指示的默認值(“World”)。讓我們嘗試通過 URL 傳遞參數:
一切正常。現在嘗試追踪 name 變量的路徑:
用戶在 URL 中傳遞了“name=Amigo” ->
控制器處理了我們的動作,接收了 name 變量,並將一個名為 name 的模型屬性設置為等於接收到的值 ->
該數據從模型中查看,最終出現在 greeting.html 頁面中,並顯示給用戶
就這樣吧!
今天我們熟悉了 MVC(模型 - 視圖 - 控制器)這個相當大且有趣的話題。本系列文章到此結束,旨在向您介紹在開始企業開發之前需要了解的內容。
在評論中,告訴我們您對哪些主題感興趣——我們會解決這些問題!
GO TO FULL VERSION