SprngMVC(一)
- 回顧MVC
- 什么是MVC
- Model1時代
- Model2時代
- SpringMVC
- 中心控制器
- SpringMVC原理
回顧MVC
前言:框架方面容易上手,但是快上手的同時遇到麻煩就會死機,打我自己舉例吧,5月里14天搞定SSM,覺得自己可以上手參加一些專案了,但是進階SpringBoot的時候瞬間死機,回頭反復ssm;底層的知識不穩,蓋的專案就難以有進展,所以這里先做一些筆記搞定以前的知識分分類,排排序,吸收吸收,與JavaWeb階段的學習中的MVC架構類似,但是不同的是容器的參與,SpringIoc容器的參與和注解的使用大大解放了程式開發的效率和整體代碼的架構,使得維護更加方便,并且也便于他人觀看,更重要的是思想的融合,動手能力其實增加了許多,許多學習者包括我在內也是覺得代碼量降低了作業量降低了,但是底層的知識尤為重要,掌握底層就怕技術更新!這里是我學習JavaEE框架中SpringMVC的小筆記,老師是狂神,由于老師的筆記太過于完美,我這里需要完善的就很少,但是并不是照搬照抄,變成自己的知識才是真的學會了,這里先感謝一下狂神老師~~~
什么是MVC
- MVC是
模型(Model)、視圖(View)、控制器(Controller)的簡寫,是一種軟體設計規范, - 是將業務邏輯、資料、顯示分離的方法來組織代碼,
- MVC不是一種設計模式,MVC是一種
架構模式,當然不同的MVC存在差異,
Model(模型):資料模型,提供要展示的資料,因此包含資料和行為,可以認為是領域模型或JavaBean組件(包含資料和行為),不過現在一般都分離開來:Value Object(資料Dao) 和 服務層(行為Service),也就是模型提供了模型資料查詢和模型資料的狀態更新等功能,包括資料和業務,
View(視圖):負責進行模型的展示,一般就是我們見到的用戶界面,客戶想看到的東西,
Controller(控制器):接收用戶請求,委托給模型進行處理(狀態改變),處理完畢后把回傳的模型資料回傳給視圖,由視圖負責展示,也就是說控制器做了個調度員的作業,
最典型的MVC就是我們在JavaWeb學習的JSP + servlet + javabean的模式,

Model1時代
- 在web早期的開發中,通常采用的都是Model1,
- Model1中,主要分為兩層,視圖層和模型層,
優點:結構簡單,易于開發
缺點:此處jsp的作業量過大,職責不統一,頁面壓力大,并且耦合度過高不易于維護
Model2時代
Model2把一個專案分成三部分,包括視圖、控制、模型,

- 用戶發請求
- Servlet接收請求資料,并呼叫對應的業務邏輯方法
- 業務處理完畢,回傳更新后的資料給servlet
- servlet轉向到JSP,由JSP來渲染頁面
- 回應給前端更新后的頁面
職責分析:
Controller:控制器
取得表單資料
呼叫業務邏輯
轉向指定的頁面
Model:模型
業務邏輯
保存資料的狀態
View:視圖
顯示頁面
總結
Model2這樣不僅提高的代碼的復用率與專案的擴展性,且大大降低了專案的維護成本,Model 1模式的實作比較簡單,適用于快速開發小規模專案,Model1中JSP頁面身兼View和Controller兩種角色,將控制邏輯和表現邏輯混雜在一起,從而導致代碼的重用性非常低,增加了應用的擴展性和維護的難度,Model2消除了Model1的缺點,SpringMVC
-
概述
Spring MVC是Spring Framework(框架)的一部分,是基于Java實作MVC的輕量級Web框架,
查看官方檔案:https://docs.spring.io/spring/docs/5.2.0.RELEASE/spring-framework-reference/web.html#spring-web -
Spring MVC的特點:
- 輕量級,簡單易學
- 高效 , 基于請求回應的MVC框架
- 與Spring兼容性好,無縫結合
- 約定優于配置
- 功能強大:RESTful、資料驗證、格式化、本地化、主題等
- 簡潔靈活
-
Spring的web框架圍繞DispatcherServlet [ 調度Servlet ] 設計,
DispatcherServlet的作用是將請求分發到不同的處理器,從Spring 2.5開始,使用Java
5或者以上版本的用戶可以采用基于注解形式進行開發,十分簡潔;
中心控制器
Spring MVC框架像許多其他MVC框架一樣, 以請求為驅動 , 圍繞一個中心Servlet分派請求及提供其他功能,DispatcherServlet是一個實際的Servlet (它繼承自HttpServlet 基類),

SpringMVC原理
當發起請求時被前置的控制器攔截到請求,根據請求引數生成代理請求,找到請求對應的實際控制器,控制器處理請求,創建資料模型,訪問資料庫,將模型回應給中心控制器,控制器使用模型與視圖渲染視圖結果,將結果回傳給中心控制器,再將結果回傳給請求者,
圖為SpringMVC的一個較完整的流程圖,實線表示SpringMVC框架提供的技術,不需要開發者實作,虛線表示需要開發者實作,
-
簡要分析執行流程
- DispatcherServlet表示前置控制器,是整個SpringMVC的控制中心,用戶發出請求,DispatcherServlet接收請求并攔截請求,
- 我們假設請求的url為 : http://localhost:8080/SpringMVC/hello
- 如上url拆分成三部分:
- http://localhost:8080服務器域名
- SpringMVC部署在服務器上的web站點
- hello表示控制器
- 通過分析,如上url表示為:請求位于服務器localhost:8080上的SpringMVC站點的hello控制器,
- HandlerMapping為處理器映射,DispatcherServlet呼叫HandlerMapping,HandlerMapping根據請求url查找Handler,
- HandlerExecution表示具體的Handler,其主要作用是根據url查找控制器,如上url被查找控制器為:hello,
- HandlerExecution將決議后的資訊傳遞給DispatcherServlet,如決議控制器映射等,
- HandlerAdapter表示處理器配接器,其按照特定的規則去執行Handler,
- Handler讓具體的Controller執行,
- Controller將具體的執行資訊回傳給HandlerAdapter,如ModelAndView,
- HandlerAdapter將視圖邏輯名或模型傳遞給DispatcherServlet,
- DispatcherServlet呼叫視圖決議器(ViewResolver)來決議HandlerAdapter傳遞的邏輯視圖名,
- 視圖決議器將決議的邏輯視圖名傳給DispatcherServlet,
- DispatcherServlet根據視圖決議器決議的視圖結果,呼叫具體的視圖,
- 最終視圖呈現給用戶,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/152656.html
標籤:其他
