1. 程式人生 > >淺談MVC, Spring MVC,

淺談MVC, Spring MVC,

效率 .com 動態生成 操作 int 權限 驅動 tor spa

一個典型的java web 從架構上看起來應該是這個樣子:

技術分享圖片

1. web瀏覽器發送http請求到服務端, 被controller(servlet)獲取並進行處理.

2. Controller (Servlet)調用核心業務邏輯 model部分.

3. Model進行數據庫存取操作, 並將操作結果返回給model.

4. Controller將業務邏輯處理結果交給view(JSP), 動態輸出HTML內容.

5. 動態生成的HTML內容返回到瀏覽器中顯示.

技術分享圖片

Spring MVC提供了一個DispacherServlet(可以Spring MVC是以Servlet技術為基礎的),這個Servlet把Web應用中Servlet中經常要實現的功能封裝起來並提供一層公共抽象,想象對應於一個Web請求後端要做的事情,比如:
  • URL映射(對應HTTP URL和方法,應該調用什麽代碼)
  • 權限驗證(當前的URL是否允許當前用戶訪問)
  • 參數解析(如何從Servlet中獲得參數)
  • 數據綁定(如何將Servlet中的參數,綁定到業務邏輯對象中)
  • 數據驗證(判斷數據是否符合業務規則,比如郵件格式是否正確)
  • 視圖解析(使用哪個視圖模板進行渲染)
  • 模型傳遞與視圖渲染(將數據傳遞給模板,並且在模板中引用)
  • ...
有了Spring MVC,你只需寫簡單的POJO代碼(如圖所示,用POJO實現Controller),或者實現Spring MVC給你提供的接口(比如實現Interceptor做權限判斷),就能完成這些繁瑣的功能。
POJO是Plain Old Java Object的縮寫,是軟件開發大師Martin Fowler提出的一個概念,指的是一個普通Java類。也就說,你隨便編寫一個Java類,就可以稱之為POJO。之所以要提出這樣一個專門的術語,是為了與基於重量級開發框架的代碼相區分,比如EJB,我們編寫的類一般都要求符合特定編碼規範,實現特定接口、繼承特定基類,而POJO則可以說是百無禁忌,靈活方便。

而ORM的作用就非常直觀了,無須贅述,如圖所示它提供了與數據庫操作的一層中間抽象,這樣Model的代碼自然會更加簡單。Spring MVC基本可以幫你屏蔽Servlet的API,ORM則可以幫你屏蔽JDBC的API了,也就是說你在更高的抽象層次上寫程序了,更高的抽象層次一般意味著以更符合我們思維的方式來思考,自然效率更高。這事實上是軟件技術發展的一個重要驅動力之一。你想想,從匯編語言發展出高級語言,從文件系統發展出數據庫,其實本質規律是類似的。

圖中的每一個小方塊其實都是大量的Java類來實現,Controller與Model之間,Model與數據訪問對象之間的這些箭頭,意味這些Java類之間存在大量復雜的依賴關系。Spring的核心功能依賴註入,正是用於管理Java對象之間的依賴關系,所以第一部分我們說Spring是一個一站式的粘合框架,它像神奇的膠水一樣,可以以松耦合的方式有機的粘合在一起。

淺談MVC, Spring MVC,