什么是 Spring MVC?
Spring MVC 是 Spring 框架提供的一個基于 MVC 模式的輕量級 Web 框架,是 Spring 為表示層開發提供的一整套完整的解決方案,Spring MVC 使用了 MVC 架構模式,將 Web 層職責解耦,基于請求驅動模型,簡化了 Web 應用程序的開發過程。
什么是 MVC?
MVC 是模型(Model)、視圖(View)、控制器(Controller)的簡寫,是一種軟件設計規范,是一種架構設計模式,MVC 模式降低了視圖和與業務邏輯的耦合。
- 模型(Model):數據模型,提供要展示的數據,包含數據的查詢和組裝。
- 視圖(View):負責進行模型的展示,就是我們通過界面可以看到的界面。
- 控制器(Controller):接受用戶請求,委托給模型處理,模型處理完數據返回給視圖,由視圖進行展示,控制器可以理解為一個控制中心、調度員的角色。
Spring MVC 的特點?
- 輕量級、簡單易學習,使開發人員能夠快速開發出高質量的Web應用程序。
- 可維護性,Spring MVC 框架采用了 MVC 設計模式,將模型、視圖、控制器進行了分離,使得代碼更加清晰、易于維護。
- 靈活,Spring MVC 框架對于多種數據源和視圖技術提供了支持,如JSP、Velocity、Freemarker等,可以讓使用者靈活的選擇技術方案。
- 可擴展,Spring MVC 框架提供了很多擴展點,開發人員可以利用這些擴展點去擴展自己需要的功能,如可以自定義視圖解析器、攔截器等。
- 易于集成,Spring MVC 可以與 Spring 無縫集成,可以提升開發效率。
- 靈活的URL映射,支持多種處理器映射方式,如基于注解的映射和基于URL映射的映射。
- 單元測試,Spring MVC提供了強大的約定大于配置的契約式編程支持,以及簡單的web層單元測試。
- 支持國際化,可以根據用戶區域顯示多國語言。
- 高效,Spring MVC 框架具有高效的處理請求和響應的能力。
Spring MVC 的核心組件?
- DispatcherServlet(前端控制器):DispatcherServlet 是 Spring MVC 的核心,即是整個請求處理流程的入口,也貫穿這個流程,負責協調各個組件的工作,是一個中心控制器的作用。
- HandlerMapping(處理器映射器):HandlerMapping 主要是將客戶端的請求映射到具體的處理程序上,也就是幫助找到具體 Controller,一般會根據請求的 url 及類型,來找到具體的處理器。
- HandlerAdapter(處理器適配器):HandlerAdapter 負責適配不同類型的處理程序,匹配到具體的 Handler。
- Controller(控制器):Controller 負責處理客戶端的請求并響應,它通常包含一些處理方法,這些處理方法被稱為 Handler。
- ModelAndView(模型和視圖):ModelAndView 是一個持有模型數據和視圖信息的容器對象,它將處理的模型數據和視圖名稱封裝在一起傳遞給 DispatcherServlet。
- ViewResolver(視圖解析器):ViewResolver 負責將邏輯視圖解析為具體的視圖對象,并返回給 DispatcherServlet。
- View(視圖):它負責將模型數據渲染為最終結果,View 通常是一個 JSP 頁面、FreeMarker 模板、Thymeleaf 模板或其他類型的模板文件,View 負責將模型數據填充到模板中,并生成最終的 HTML、XML、JSON 等格式的響應。
Spring MVC 的工作流程?
- 客戶端發送請求到前端控制器 DispatcherServlet。
- 前端控制器 DispatcherServlet 收到請求后,尋找處理器映射器 HandlerMapping 處理。
- 處理器映射器 HandlerMapping 根據請求 url 找到具體的處理器 Handler,生成處理器映射器對象及處理器攔截器一并返回給前端控制器 DispatcherServlet。
- 前端控制器 DispatcherServlet 調用處理器適配器 HandlerAdapter,處理器適配器 HandlerAdapter 經過適配調用具體的處理器 Handler(Controller)。
- Controller 調用 Service 完成業務邏輯處理,返回 ModelAndView。
- DispatcherServlet 將 ModelAndView 傳遞給 ViewReslover。
- ViewReslover 解析出具體的 View。
- DispatcherServlet 根據具體的 View 渲染視圖并返回給客戶端。
Spring MVC 工作流程簡圖
簡單的畫了一個 Spring MVC 的工作流程,希望可以加深記憶。
歡迎提出建議及對錯誤的地方指出糾正。