Spring MVC 簡介
1. 前言
從本節(jié)課開始和大家一起學(xué)習(xí) Spring MVC。
WEB MVC 框架有很多,但是,Spring MVC 卻有著其它 WEB MVC 框架無可比擬的優(yōu)勢,本節(jié)課將從 以下幾個(gè)方面簡要介紹 Spring MVC ,讓大家對(duì)它有一個(gè)初步印象。
- Spring MVC 與 Spring 的關(guān)系;
- Spring MVC 的功能;
- Spring MVC 的特性;
- Spring MVC 和其它 MVC 開發(fā)框架的比較。
2. Spring MVC 和 Spring 的關(guān)系
要真正理解、掌握 Spring MVC 的使用 ,前提是要有 Spring 的知識(shí)儲(chǔ)備。
為什么?
因?yàn)樗鼈兪且患胰恕?/p>
大家都學(xué)過 Spring ,知道 Spring 剛出世時(shí),提供了 IOC & DI 和 AOP 兩大核心功能模塊,這兩大核心模塊不亞于是編程界的倚天、屠龍,對(duì)企業(yè)項(xiàng)目開發(fā)過程產(chǎn)生了巨大的影響。
對(duì)初學(xué)者而言,所謂學(xué)習(xí) Spring ,其課程的主要內(nèi)容就是講解 IOC 和 AOP 的概念及其使用。
后來,Spring 在這 2 大核心功能的的基礎(chǔ)之上,延伸出更多的功能模塊,由這些功能模塊為企業(yè)項(xiàng)目開發(fā)提供了較完整的、全方位的解決方案。
總結(jié)一下,其實(shí) Spring 這個(gè)概念有 2 層含義:
- 狹義角度: Spring 指的是 Spring Core 核心功能模塊。是一個(gè)個(gè)體概念;
- 廣義角度: Spring 是一個(gè)提供了眾多功能模塊的生態(tài)圈。是一個(gè)整體概念。
Spring MVC 和 Spring 的關(guān)系,也可以從 2 個(gè)方面理解:
- 水平角度: Spring MVC 是 Spring 生態(tài)圈中的一個(gè)功能模塊。兩者是包含與被包含的關(guān)系;
- 垂直角度: Spring MVC 是建立在 Spring 核心基礎(chǔ)功能之上的一個(gè)實(shí)用性的 WEB MVC 框架,是 Spring 的延伸和擴(kuò)展。
Spring MVC 的版本是跟著 Spring 走的,Spring 3.X 是一個(gè)分水嶺,此版本提供更多實(shí)用性的功能,現(xiàn)在最新版本是 5.X 。本課程使用的是 5.1.13.RELEASE 。
Tips: 學(xué)習(xí)時(shí),你可以根據(jù)需要更改版本號(hào),從使用角度來講,版本微調(diào)沒有多大區(qū)別。
3. Spring MVC 是什么?
Spring MVC 是什么?答案很簡單,它是一個(gè) WEB MVC 框架。
3.1 Spring MVC 的功能
MVC 是分離思想,對(duì)程序分層僅僅只是提供了指導(dǎo)性的想法,并沒有具體的可實(shí)施的方案。不同的項(xiàng)目中,具體的分層細(xì)節(jié)可由架構(gòu)師把控。經(jīng)過時(shí)間檢驗(yàn)后,行業(yè)中會(huì)存留一些事實(shí)上的標(biāo)準(zhǔn)。
Spring MVC 就是一款為 WEB 項(xiàng)目提供的 MVC 分層框架,在基于 Spring 的基礎(chǔ)功能或借助于 Spring 生態(tài)圈中的其它功能模塊,為 WEB 項(xiàng)目提供了具體的 MVC 分層方案。
隨著課程內(nèi)容的展開,大家會(huì)逐步體會(huì)到 Spring MVC 是如何使用 MVC 理念 撐起整個(gè) WEB 項(xiàng)目,以及如何簡化開發(fā)者的工作。
但是,要真正了解 Spring MVC 的功能,則要先從理解 MVC 開始。
3.2 MVC 是什么
一個(gè)應(yīng)用程序,當(dāng)功能越來越龐大、邏輯越來越復(fù)雜、代碼越來越多時(shí),必然會(huì)采用分而治之的方案。分,容易,如何分才能分得清晰、便于維護(hù),這是一個(gè)與管理有關(guān)的學(xué)問。
MVC 提出了一種分離的策略,這種想法或思想一問世,便讓世人茅塞頓開。
MVC 的分離思想:
- 把整個(gè)應(yīng)用程序中和用戶進(jìn)行交互的功能代碼歸納在一起,這部分代碼整體稱為 V (View 或叫視圖層);
- 把專門用來進(jìn)行數(shù)據(jù)傳遞或數(shù)據(jù)邏輯處理的功能代碼歸納在一起,稱其為 M(Model 或叫l(wèi)模型層)。
C 指的是哪一部分功能代碼呢?
因?yàn)?strong>V 和 M 是要經(jīng)常交流、溝通的,V 需要展示 M 處理過的數(shù)據(jù),同時(shí),M 也可能需要 V 提供的用戶交互時(shí)輸入的數(shù)據(jù)。雖然分了,但兩者之間存在依賴關(guān)系。我們不讓 V 和 M 直接交流,而是在兩者之間引入了一個(gè)叫做 C(控制器)的對(duì)象,所以說 C 就是 V 和 M 之間的橋梁!
這個(gè) C(控制器)對(duì)象感覺在硬生生的拆散別人,不過這種拆分是善意且友好的。
為什么這么說?
- 滿足 OOP 中的低耦合性原則,解耦 V 和 M 之間的關(guān)系;
- M 需要用戶交互時(shí)輸入的數(shù)據(jù)時(shí),可以不用管 V 是誰,只要有控制器傳數(shù)據(jù)就可以;
- 同時(shí),V 也不用關(guān)心 M 在哪里,只要有數(shù)據(jù)提供給自己就可以。
如果現(xiàn)在要編寫一個(gè) WEB 視圖和 Swing 視圖的雙客戶端應(yīng)用程序時(shí),只需要換一個(gè) C 就可以,M 可以重用。
4. Spring MVC 的特性
要了解 Spring MVC 的功能特性,就需要從 WEB 應(yīng)用開發(fā)的源頭說起。
WEB 應(yīng)用程序的主流開發(fā)技術(shù)有 3 種:
- servlet;
- php;
- .net。
Servlet 是基于 Java 語言的動(dòng)態(tài) web開發(fā)技術(shù),Servlet 指的是 J2EE 中所提出來的企業(yè)級(jí)服務(wù)器開發(fā)規(guī)范。
原生 Servlet 構(gòu)建的 MVC 開發(fā)模式有幾個(gè)缺點(diǎn):
- Servlet 本身采用單例設(shè)計(jì)模式,生命周期由服務(wù)器維護(hù),存在線程安全隱患的問題;
- 理論上講,每一次不同的 http 請(qǐng)求需要一個(gè) Servlet 組件來響應(yīng),當(dāng)請(qǐng)求類型比較多時(shí),Servlet 就會(huì)相應(yīng)增加,也意味著每一個(gè) Servlet 都可以成為進(jìn)入服務(wù)器的入口。想想你家里對(duì)外開了好多扇門,小偷終能找到破綻;
- 隨著 Servlet 數(shù)量的增加,對(duì)服務(wù)器的存儲(chǔ)空間也會(huì)產(chǎn)生壓力;
- 使用 Servlet 響應(yīng)用戶請(qǐng)求時(shí),每一個(gè)響應(yīng)邏輯都需要開發(fā)者不厭其煩地做些重復(fù)的事情,如,解析請(qǐng)求包中的數(shù)據(jù)、構(gòu)建響應(yīng)包、設(shè)置頁面跳轉(zhuǎn)等等。
這些問題,在 Spring MVC 中都得到了很好的解決。
- 使用 Spring MVC 時(shí),就只有一個(gè)門可以進(jìn)入應(yīng)用程序,這個(gè)門叫前端(中央)控制器,所有請(qǐng)求統(tǒng)一經(jīng)過這個(gè)前端控制器分流到具體的內(nèi)部響應(yīng)組件;
- Spring MVC 是 Spring 家族中的一員,有句話叫做“近水樓臺(tái)先得月”。使用 Spring MVC 時(shí)所需要的 WEB 組件也好、其它的邏輯組件也好,都經(jīng)由 Spring IOC 創(chuàng)建,Spring IOC 容器對(duì)組件的生命周期可進(jìn)行伸縮性設(shè)置管理,可根據(jù)組件特性保證其線程安全性;
- Spring MVC 和 Spring 有直屬血緣的關(guān)系,兩者完美結(jié)合,使得程序的安全性和穩(wěn)定性有一定的保證;
- Spring MVC 利用 Spring 的自動(dòng)注入功能,能輕松地裝配好各組件之間的依賴,開發(fā)者只需要關(guān)注編寫自己的業(yè)務(wù)邏輯便可,和所有框架理念一樣,解放雙手,釋放大腦。
Spring MVC 設(shè)計(jì)的初衷,就是要做成一款輕量級(jí)框架,其內(nèi)在的原力讓我們一起在后續(xù)課程中慢慢釋放。
6. Spring MVC 與 Struts MVC
WEB MVC 框架領(lǐng)域中有一款叫做 Struts MVC 的前輩,曾經(jīng)也風(fēng)光無限。當(dāng)然,現(xiàn)在還是有很多企業(yè)在使用。
Struts MVC 和 Spring MVC 是功能類型相同的框架,本體功能是一樣的。Struts MVC 相比較 Spring MVC, 沒有自己的生態(tài)圈。
MVC 框架與其它框架有一個(gè)顯著的不同點(diǎn),MVC 是一個(gè)項(xiàng)目級(jí)別的架構(gòu)思想,MVC 框架用于程序的整體架構(gòu)設(shè)計(jì),Struts MVC 很多功能需要借助于 Spring 實(shí)現(xiàn),很顯然沒 Spring MVC 與 Spring 的吻合度好。
Spring MVC 后面是 Spring 這個(gè)靠山。愛屋及烏、就近原則會(huì)讓開發(fā)者更趨向于選擇 Spring MVC。
7. 學(xué)習(xí)基礎(chǔ)
學(xué)習(xí)本課程,學(xué)習(xí)者需要一定的基礎(chǔ)知識(shí):
- JAVA 基礎(chǔ)知識(shí);
- 熟悉了解基于 Servlet 的 WEB 開發(fā);
- 熟悉了解 Spring 相關(guān)知識(shí)。
8. 小結(jié)
本節(jié)課和大家一起講解 Spring MVC 與 Spring 的關(guān)系,Spring 是基礎(chǔ),Spring MVC 是 Spring 向 WEB 應(yīng)用開發(fā)方向的延伸。背靠 Spring 強(qiáng)大的基礎(chǔ)核心功能,讓 Spring MVC 快速崛起,成為現(xiàn)代企業(yè)開發(fā)的標(biāo)配。
Spring MVC 的具體功能是什么?
本文從 MVC 聊起,意在讓大家明白 Spring MVC 為 WEB 項(xiàng)目提供了一種優(yōu)秀的 MVC 分層實(shí)現(xiàn)方案。