Spring MVC

このセクションは作成中です。内容が不完全な場合があります。

Overview (概覽)

核心配置 (傳統 XML 方式)

  • web.xml
<servlet>
    <servlet-name>dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

Web 容器 (Web Container)

  • WebApplicationContext: 專為 Web 應用程式設計的 Spring 容器。
  • 在 Web 環境中,不需要手動建立或關閉容器,它會隨伺服器啟動/停止自動生命週期管理。

WebApplicationInitializer

透過實作此介面,可以在不使用 web.xml 的情況下,以 Java 程式碼的方式宣告並啟動 DispatcherServlet 與 Spring Context。

Dispatcher Servlet

  • 每個 Dispatcher 擁有獨立的 Web Application Context。

控制器職責 (Controller Responsibilities)

  1. 監聽 HTTP 請求: 響應特定的 URL、方法與 Content-Type。
  2. 反序列化輸入: 解析請求參數、路徑變數或 Body 並轉為 Java 物件。
  3. 驗證輸入: 作為第一道防線,檢查資料合法性。
  4. 調用業務邏輯: 將輸入模型轉為 Service 層預期的格式。
  5. 序列化輸出: 將業務執行結果轉為 HTTP 回應 (如 JSON)。
  6. 異常轉換: 將系統異常轉為有意義的錯誤訊息與 HTTP 狀態碼。

View Resolver (檢視解析器)

  flowchart TB
	C[Client]
	D[Dispatcher_Servlet]
	VR[View_Resolver]
	endpoint[Controller]
	prefix_suffix[`/WEB-INF/view/result.jsp`]

	C -->|/request| D --> endpoint -->|Return View Name| D
	D -->|Resolve| VR --> prefix_suffix -->|Rendered Page| D -->|Response| C

資料繫結 (Data Binding)

  • 使用 DTO (Data Transfer Object) 進行資料封裝。
  • Getter: 用於讀取資料 (Reading Data)。
  • Setter: 用於寫入資料 (Writing Data)。

WebClient 與 RestTemplate

  • RestTemplate: 傳統同步阻塞式客戶端 (維護模式)。
  • WebClient: 現代非阻塞反應式客戶端 (推薦使用)。