iT邦幫忙

2023 iThome 鐵人賽

DAY 16
0
Software Development

掌握Java神器,駕馭SpringBoot猛獸系列 第 16

第16日 控制器做第一個請求頁面

  • 分享至 

  • xImage
  •  

昨日介紹了Spring並利用VSCode初始化Spring Boot專案,今日來沿用昨天安裝好的Spring環境,修正首頁的404錯誤,順便介紹Controller的使用方式,為了讓邏輯思考能更完善,在開始前會先對MVC模式進行概念講解,接著利用 Spring MVC的Controller做範例示範

MVC開發模式

有接觸過網頁開發技術的工程師,多少經歷過在伺服器端渲染畫面時,會將資料處理邏輯與顯示的畫面內容混在一起,導致程式碼段落過於複雜不好,大幅提升維護成本,為了改善這個開發問題,誕生了MVC的分層設計,目的是將資料處理,與頁面顯示的邏輯分開,將相關邏輯進行解耦

MVC模式的組成成員包含了模型(Model)、視圖(View)以及控制器(Controller),本篇的主角控制器就是負責接收客戶端請求,並依據請求資源決定實際處理方式,即控制器核心業務包含了接收請求的執行方式,和決定響應的資源內容,昨日會出現404畫面,就是客戶端請求,未找到適用的控制器處理邏輯,才會回傳404錯誤

Controller

現在開始先建立控制器類別,先在專案跟目錄下建立 controller資料夾,在建立一個PageControler類別,接著控制器類別套用Annotation定義Route

@Controller
public class PageController {
    @GetMapping("/")
    public String home() {
        System.out.println("is Home Page");
        return "Home";
    }
}

重新啟動專案打開瀏覽器進入首頁,發現還是404,接著回頭看小黑框有打印「is Home Page」字樣,表示有匹配到控制器並執行相應方法,後來查閱資料得知,需要添加 ResponseBody Annotation,才會直接回傳方法的回傳直,在次修改內容

    @GetMapping("/")
    @ResponseBody
    public String home() {
        System.out.println("is Home Page");
        return "Home";
    }

瀏覽器成功回傳 200 狀態碼,並在畫面上成功顯示字串Home,後來仔細查閱文件發現,單純使利用Controller響應的資源,會經過 ViewResolver,根據處理結果尋找相應的渲染樣板(View),並將程式資料套用到樣板中

請求流程示意圖

https://ithelp.ithome.com.tw/upload/images/20230929/20161920J79nQmy485.jpg

樣板引擎

網頁顯示的畫面大部分人都會聯想到HTML的內容,使用不同語言撰寫HTML時,要生成相應內容必須以字串方式,帶入符合HTML規範的文字內容,單純用文字拼裝的方式作法上不太直覺,因此誕生了「樣板引擎」,基於制式的文字格式,透過解析將伺服器端的資料,套用到樣板中並轉化成符合HTML規範的內容

配置 thymeleaf 樣板

這裡用先前裝好的VSCode套件安裝thymeleaf套件,CTRL + P 選擇 Add Starters查詢 thymeleaf並勾選,接著點選Selected Dependencys,會在pom.xml添加要使用的依賴套件

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

接著在 resources/templates 建立靜態檔案 home.html,文件內容如下

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>thymeleaf</title>
</head>
<body>
    <h1>這是home.html的內容</h1>
</body>
</html>

重新運行應用程序,注意依賴項目必須設定「樣板套件」,此範例為thymeleaf實現樣板,且 home方法的ResponseBody註釋要拿掉,檢查沒問題打開瀏覽器,重新對首頁進行請求,成功顯示靜態HTML內容

https://ithelp.ithome.com.tw/upload/images/20230929/20161920SdeaF11MHJ.png

最後來個重點整理

  1. 控制器的會因為套用不同的Annotation(Controller、ResponseBody),有不同的執行流程
  2. 要用Controller渲染頁面,可以使用樣板引擎,讓資料轉換成HTML內容,顯示於客戶端,或使用靜態Html檔案渲染內容

參考資料

  1. Spring Boot Controler 404解決方案
  2. 菜豬-使用Thymeleaf

上一篇
第15日 用VSCode建置Spring Boot專案
下一篇
第17日 傳送Form表單
系列文
掌握Java神器,駕馭SpringBoot猛獸30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言