基於 Java 實現的 Web MVC 設計模式、請求驅動 輕量級框架。核心目標:職責解耦 (Model/View/Controller)、簡化 Web 開發、約定優於配置。
| 組件 | 角色 | 關鍵實現 |
|---|---|---|
| 前端控制器 | 統一入口,分發請求 | DispatcherServlet |
| 處理器映射器 | 根據 URL 找 Controller | HandlerMapping (如 RequestMappingHandlerMapping) |
| 處理器適配器 | 統一調用 Controller 方法 | HandlerAdapter (支援 @RequestMapping、HttpRequestHandler 等) |
| 視圖解析器 | 邏輯視圖名 → 具體 View | ViewResolver (InternalResourceViewResolver 等) |
| 控制器 | 業務邏輯處理 | @Controller + @RequestMapping (POJO 即可) |
DispatcherServlet (web.xml 配置攔截路徑)。HandlerMapping 根據 URL、HTTP 方法匹配到具體 HandlerMethod。HandlerAdapter 調用 Controller 方法,處理參數綁定、類型轉換、驗證。ModelAndView / 視圖名 / @ResponseBody 數據。ViewResolver 解析視圖名 → View 實例 (JSP、Thymeleaf、JSON 等)。View.render() 渲染模型數據輸出響應。HandlerInterceptor) 可在 pre/post/afterCompletion 切面增強。Formatter/Converter)、校驗 (JSR-303 @Valid)。@ControllerAdvice + @ExceptionHandler 全局統一處理。@RestController、@PathVariable、HttpMessageConverter 自動 JSON/XML 轉換。LocaleResolver、ThemeResolver、MultipartResolver 開箱即用。@SpringBootApplication
public class Application { main... }
// Controller 示例
@RestController
@RequestMapping("/api/users")
public class UserController {
@GetMapping("/{id}")
public User get(@PathVariable Long id) { return userService.find(id); }
@PostMapping
public User create(@Valid @RequestBody UserDTO dto) { return userService.save(dto); }
}
零 XML、嵌入式 Tomcat、自動配置 DispatcherServlet、ViewResolver、Jackson 等。
Spring MVC 設計精髓:**開放給擴展,封閉給修改**。掌握
HandlerMapping/HandlerAdapter/ViewResolver三大擴展點,即可應對所有定制化需求。Spring Boot 進一步將「配置」降維為「約定」,讓開發者聚焦業務邏輯。