介紹如何建立用 Spring boot 建立 web application,內容從定義 Controller 和 Request Mapping 開始,接著會有如何取得輸入的參數,最後把做完的結果傳到樣版進行呈現
前置作業
如果你還沒有建立過 Spring boot 的專案,請先參考這篇文章 開始在 Mac 上開發 Spring boot 先試著把環境設定好,確定程式能夠執行才能往下做。
進入 Spring Initializr 產生一個測試專案,請選取 Spring Web 及 Thymeleaf 或開啟一個有載入 Spring Web 及 Thymeleaf 的 Spring boot 專案。
靜態資源
專案對應的靜態資源會放在 src/main/resources/static 目錄下面,所以像是 js, css, images 或是要直接被下載的檔案都可以直接放在這邊。
試著在 src/main/resources/static 建立一個 index.html 的檔案內容如下:
1 |
|
然後就可以透過 http://127.0.0.1:8080/ 看到下面這個畫面了。
使用 Controller
Annotated Controllers
@Controller用來標示 Class 為一個 Controller,通常搭配@RequestMapping來使用@RestController等於同時標註@Controller及@ResponseBody
Request Mapping
@RequestMapping可標記在 Class 或 Method,通常用來標示輸入的 URL Path 及RequestMethod@GetMapping,@PostMapping,@PutMapping,@DeleteMapping,@PatchMapping預設帶有RequestMethod的@RequestMapping
Handler Methods
Handler Methods 是 Route 的進入點,這邊分成兩個部分來介紹,分別是用來處理輸入的 Method Arguments 和用來處理輸出的 Return Values
Method Arguments
HttpServletRequest取得一個完整的 Http Request 可以從這拿到 Request 裡的相關資訊@RequestHeader從 Request Header 取值@RequestParam從 Servlet request parameters 取值@PathVariable從 URI template variables 取值@RequestBody取得 Request body 透過HttpMessageConverter轉換後的結果
Return Values
@ResponseBody在有標示這個 Annotation 的範圍裡,會直接把回傳的內容透過HttpMessageConverter做轉換HttpEntity<T>,ResponseEntity<T>回傳一個標準的 Http Response,其中包含 Header 和 Body,詳細內容可以參考 ResponseEntityString在沒有指定@ResponseBody的情況,回傳的這個String會被當成樣版名稱,透過ViewResolver來解析,若需要使用樣版變數,可在 Method Arguments 上可以指定要注入Model,然後把樣版變數放入這個物件
Example
下面這是一個 Controller,底下的 Route 因為 Controller 有標示 @RequestMapping("first"),所以全部的 Path 都會是 /first/xxxx
1 | package com.example.demo.controller; |