什麼是 SpringMVC

來源:BV1Ry4y1574R?p=3BV1Ry4y1574R?p=4

SpringMVC 是 Spring 的 MVC 模塊,也就是來實現 Web 功能的模塊。Spring 裏面包含有很多的模塊,比如說 Spring Framework 是它的基礎模塊,Spring JDBC 是封裝了 JDBC 來實現持久化的模塊,還有比如說 Spring Security 是它的安全模塊,當然還有 Spring Boot 和 Spring Cloud,SpringMVC 是 Spring 的模塊之一。

那麼 SpringMVC 它到底是什麼?這個框架到底有什麼作用?首先我們需要知道什麼是 MVC。

MVC 是一種軟件架構思想,將軟件按照模型(Model)、視圖(View)、控制器(Controller)來進行劃分。也就是說當我們在實現一個 Web 工程的時候,我們需要來按照模型、視圖、控制器來實現我們當前一個完整的 Web 功能。

首先那就是 M 層,M 層指的是 Model 層,即模型層,其實就是工程中的 JavaBean。JavaBean 指的是當前工程裏面所有處理數據的類,而不僅是我們的實體類。

處理數據的類有哪些?第一是實體類,實體類的作用就是存儲數據,在實現持久化操作的時候,我們去查詢一個表中的數據,讓它來對應我們當前的一個實體類對象。還有一種是業務處理的 Bean,比如說 Service 是來處理業務邏輯的,Dao 是用來查詢數據庫、實現持久化操作的,它們兩個也是來對我們當前的數據進行處理的,因爲處理數據的類就叫做 JavaBean,所以說它們也是 JavaBean,是進行處理業務的 Bean。

所以我們的 JavaBean 就分爲兩類,一種是用來存儲業務數據的實體類,然後還有一種就是來處理業務邏輯和數據訪問的業務處理的類。

好,再往下就是我們的第二個叫做 View,叫做視圖層,這個視圖層是用來幹嘛的?視圖是來展示數據的,主要指的是我們工程中的 .html 或者是 .jsp 這些頁面。我們就可以通過 .html 和 .jsp 來與用戶進行交互,用戶可以通過頁面,向服務器中發送請求。同樣我們處理完請求之後,也會響應用戶一個完整的頁面來展示最終的結果。這個就是我們的視圖層,主要就是來展示數據、與用戶進行交互的。

最後一個 C 代表的是 Controller,也就是控制器或控制層,其實主要就是 Servlet。控制層,主要來接收請求和響應,比如說現在有一個請求從瀏覽器發送到服務器之後,我們的服務器該如何去接收、處理這個請求,該如何響應瀏覽器呢?那就是由我們的 Servlet 來完成的。

好,我們現在知道了 MVC 的每一個部分到底指的是什麼,接下來可以來看一下 MVC 的一個整個的工作流程到底是怎樣的。首先我們的用戶通過我們的視圖層,來發送請求到我們的服務器,服務器中我們能夠接收請求處理請求響應瀏覽器的,那就是我們的控制層了。控制層接收完請求之後,他就會去調用我們相對應的 Service 來處理業務邏輯,然後 Service 調用我們當前的 Dao 來進行數據庫的操作,然後將訪問數據庫所得到的結果返回給 Service,再返回到我們的控制層,這個時候控制層就可以根據我們最終的結果,然後來響應瀏覽器了。

比如說對於一個書城項目。如果說我們在實現登錄功能的時候,我們通過用戶名跟密碼查詢數據庫查詢出來了一條數據,也就是說我們登錄成功了,我們最終應該是重定向到我們的登錄成功頁面,而如果說我們當前沒有登錄成功,我們應該是轉發到我們的登錄頁面,讓用戶重新來進行登錄。


SpringMVC 就是 Spring 的一個 MVC 模塊的內容,再往下,我們來看 SpringMVC 它到底是用來幹什麼的。

SpringMVC 是 Spring 爲表述層開發提供的一整套完整的解決方案。

什麼是表述層?我們學過三層架構,那三層架構分別就是表述層(或表示層)、業務邏輯層,還有我們的持久層,也就是數據訪問層 Dao。

表述層指的是前臺頁面和我們的後臺 Servlet。前臺頁面來發送請求到我們的服務器中,我們的服務器使用 Servlet 來接收請求、處理請求,最終來響應我們的瀏覽器。SpringMVC 處理的也就是這樣的一個過程。

我們可以想想在這個過程裏面我們都需要做什麼,我們從瀏覽器中,以不同的方式來發送一個請求(超鏈接、form 表單提交),後端接收到一個請求之後,根據請求地址,來找到相對應的 Servlet,Servlet 生命週期中有三個方法:init 初始化、service 服務,還有一個就是 destroy 銷燬。其中 service 方法就是我們處理請求和響應的方法。

當我們通過請求地址匹配到了 Servlet 之後,我們就需要在 service 中來處理請求了。比如說首先設置編碼,設置編碼的這些代碼,我們可以統一把它給放在過濾器中。然後再往下的話,我們需要來獲取請求參數,獲取完請求參數之後來調用我們的 service 來處理業務邏輯。

service 處理完業務邏輯之後,會給我們返回來一個結果,這個時候我們就可以——比如說我們是查詢操作,我們就把我們當前的數據給放在指定的域對象中,比如說我們當前查詢所有數據展示在頁面裏面的功能,我們就需要將我們的這些信息然後放在我們的請求域中。或者說我們的登錄功能,如果我們登錄成功,我們要來記錄用戶的登錄狀態,這個時候我們就需要將我們的用戶信息給放在我們當前的 session 裏面。

然後再往下的話,我們就可以根據 service 處理業務邏輯之後的結果,來選擇不同的方式響應瀏覽器。比如說登錄有成功的情況,也有失敗的情況,成功時應該通過重定向跳轉到成功頁面,而如果失敗的話,我們就需要通過轉發再次跳轉到登錄頁面,爲用戶展示一個錯誤信息,讓用戶重新進行登錄。

其實 SpringMVC 幫助我們來實現的也就是這些功能。

既然 SpringMVC 幫能幫助我們實現這些功能,我們在實現這些功能處理的時候,我們還需要像上一個階段一樣在 Servlet 裏面把這些過程給寫出來嗎?不需要,因爲 SpringMVC 它就是基於 Servlet 的,SpringMVC 把我們當前處理請求的這些過程都進行了封裝,我們只需要使用 SpringMVC 爲我們所提供的實現各個功能的這些代碼,就可以來完成一個請求的處理了。

目前業界我們普遍來選擇的就是 SpringMVC 來作爲 Java 項目表述層開發的首選方案。其他表述層框架:Struts1、WebWork、Struts2。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章