介紹如何建立用 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; |