Spring MVC
このセクションは作成中です。内容が不完全な場合があります。
- 架構概覽
- MVC 流程
- 控制器職責 (Controller Responsibilities)
- WebApplicationInitializer
- 檢視解析器 (View Resolver)
- 資料繫結 (Data Binding)
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)
- 監聽 HTTP 請求: 響應特定的 URL、方法與 Content-Type。
- 反序列化輸入: 解析請求參數、路徑變數或 Body 並轉為 Java 物件。
- 驗證輸入: 作為第一道防線,檢查資料合法性。
- 調用業務邏輯: 將輸入模型轉為 Service 層預期的格式。
- 序列化輸出: 將業務執行結果轉為 HTTP 回應 (如 JSON)。
- 異常轉換: 將系統異常轉為有意義的錯誤訊息與 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: 現代非阻塞反應式客戶端 (推薦使用)。