天天看點

SpringMVC專題(一)-SpringMVC概述

1.關于三層架構和 MVC

1.1.三層架構

我們的開發架構一般都是基于兩種形式,一種是 C/S 架構,也就是用戶端/伺服器,另一種是 B/S 架構,也就是浏覽器伺服器。在 JavaEE 開發中,幾乎全都是基于 B/S 架構的開發。那麼在 B/S 架構中,系統标準的三層架構.包括:表現層、業務層、持久層。三層架構在我們的實際開發中使用的非常多,是以我們課程中的案例也都是基于三層架構設計的。三層架構中,每一層各司其職,接下來我們就說說每層都負責哪些方面:

  • 表現層:

    也就是我們常說的web層。它負責接收用戶端請求,向用戶端響應結果,通常用戶端使用http協定請求web 層,web 需要接收 http 請求,完成 http 響應。表現層包括展示層和控制層:控制層負責接收請求,展示層負責結果的展示。表現層依賴業務層,接收到用戶端請求一般會調用業務層進行業務處理,并将處理結果響應給用戶端。表現層的設計一般都使用 MVC 模型。(MVC 是表現層的設計模型,和其他層沒有關系)

  • 業務層:

    也就是我們常說的 service 層。它負責業務邏輯處理,和我們開發項目的需求息息相關。web 層依賴業務層,但是業務層不依賴 web 層。

    業務層在業務處理時可能會依賴持久層,如果要對資料持久化需要保證事務一緻性。(也就是我們說的,事務應該放到業務層來控制)

  • 持久層:

    也就是我們是常說的 dao 層。負責資料持久化,包括資料層即資料庫和資料通路層,資料庫是對資料進行持久化的載體,資料通路層是業務層和持久層互動的接口,業務層需要通過資料通路層将資料持久化到資料庫中。通俗的講,持久層就是和資料庫互動,對資料庫表進行曾删改查的。

SpringMVC專題(一)-SpringMVC概述
1.2. MVC 模型

MVC 全名是 Model View Controller,是模型(model)-視圖(view)-控制器(controller)的縮寫,

是一種用于設計建立 Web 應用程式表現層的模式。MVC 中每個部分各司其職:

  • Model(模型):

    通常指的就是我們的資料模型。作用一般情況下用于封裝資料。

  • View(視圖):

    通常指的就是我們的 jsp 或者 html。作用一般就是展示資料的。

    通常視圖是依據模型資料建立的。

  • Controller(控制器):

    是應用程式中處理使用者互動的部分。作用一般就是處理程式邏輯的。

    它相對于前兩個不是很好了解,這裡舉個例子:例如:我們要儲存一個使用者的資訊,該使用者資訊中包含了姓名,性别,年齡等等。這時候表單輸入要求年齡必須是 1~100 之間的整數。姓名和性别不能為空。并且把資料填充到模型之中。此時除了 js 的校驗之外,伺服器端也應該有資料準确性的校驗,那麼校驗就是控制器的該做的。當校驗失敗後,由控制器負責把錯誤頁面展示給使用者。如果校驗成功,也是控制器負責把資料填充到模型,并且調用業務層實作完整的業務需求。

SpringMVC專題(一)-SpringMVC概述

1.3.經典三層架構和MVC的關系

他們是兩個毫無相關的東西,經典三層架構是一種分層思想,将開發模式分為了這三層,每個人根據自己的專長,開發不同的子產品,比如,前端工程師,那麼就專研表示層即可,想辦法如何讓頁面變的更好看,如何吸引别人,而有些專門做資料庫工作的人,就可以隻關注操作資料庫的活,如何讓查詢更加快速有效,而不必關注資料該如何顯示這種問題。這就是分層帶來的巨大好處。

而MVC是一種設計模式,目的是讓HTML代碼和業務邏輯代碼分開,讓代碼看起來更加清晰,便于開發。

硬說他們有關系的話,隻能說他們有共同的點,分層,解耦。

實際項目中的包命名結構,其也是按照三層架構思想來進行編寫代碼的,腦袋裡要保持着這種思想進行開發.

SpringMVC專題(一)-SpringMVC概述

xxx:代表公司名稱

yyy:代表項目名稱

com.xxx.yyy.dao      dao層接口

com.xxx.yyy.dao.impl    dao層實作

com.xxx.yyy.service     service層接口

com.xxx.yyy.service.impl   service層實作      

​​​com.xxx.yyy.web​​​      web層

com.xxx.yyy.util       工具包

com.xxx.yyy.domain     javabean

2.SpringMVC 概述

2.1.SpringMVC 是什麼

SpringMVC專題(一)-SpringMVC概述

SpringMVC 是一種基于 Java 的實作 MVC 設計模型的請求驅動類型的輕量級 Web 架構,屬于 Spring FrameWork 的後續産品,已經融合在 Spring Web Flow 裡面。Spring 架構提供了建構 Web 應用程式的全功能 MVC 子產品。使用 Spring 可插入的 MVC 架構,進而在使用 Spring 進行 WEB 開發時,可以選擇使用 Spring的 Spring MVC 架構或內建其他 MVC 開發架構,如 Struts1(現在一般不用),Struts2 等。

2.2.SpringMVC 在三層架構的位置

2.3.SpringMVC的優勢

  • 清晰的角色劃分:

    前端控制器(DispatcherServlet)

    請求到處理器映射(HandlerMapping)

    處理器擴充卡(HandlerAdapter)

    視圖解析器(ViewResolver)

    處理器或頁面控制器(Controller)

    驗證器( Validator)

    指令對象(Command 請求參數綁定到的對象就叫指令對象)

    表單對象(Form Object 提供給表單展示和送出到的對象就叫表單對象)。

  • 分工明确,而且擴充點相當靈活,可以很容易擴充,雖然幾乎不需要。
  • 由于指令對象就是一個 POJO,無需繼承架構特定 API,可以使用指令對象直接作為業務對象。
  • 和 Spring 其他架構無縫內建,是其它 Web 架構所不具備的。
  • 5、可适配,通過 HandlerAdapter 可以支援任意的類作為處理器。
  • 6、可定制性,HandlerMapping、ViewResolver 等能夠非常簡單的定制。
  • 7、功能強大的資料驗證、格式化、綁定機制。
  • 8、利用 Spring 提供的 Mock 對象能夠非常簡單的進行 Web 層單元測試。
  • 9、本地化、主題的解析的支援,使我們更容易進行國際化和主題的切換。
  • 10、強大的 JSP 标簽庫,使 JSP 編寫更容易。

    ………………還有比如RESTful風格的支援、簡單的檔案上傳、約定大于配置的契約式程式設計支援、基于注解的零配

    置支援等等。

2.4.SpringMVC 和 Struts2 的優略分析

  • 共同點:

    它們都是表現層架構,都是基于 MVC 模型編寫的。

    它們的底層都離不開原始 ServletAPI。

    它們處理請求的機制都是一個核心控制器。

  • 差別:

    Spring MVC 的入口是 Servlet, 而 Struts2 是 Filter

    Spring MVC 是基于方法設計的,而 Struts2 是基于類,Struts2 每次執行都會建立一個動作類。是以 Spring MVC 會稍微比 Struts2 快些。Spring MVC 使用更加簡潔,同時還支援 JSR303, 處理 ajax 的請求更友善(JSR303 是一套 JavaBean 參數校驗的标準,它定義了很多常用的校驗注解,我們可以直接将這些注解加在我們 JavaBean 的屬性上面,就可以在需要校驗的時候進行校驗了)

    Struts2 的 OGNL 表達式使頁面的開發效率相比 Spring MVC 更高些,但執行效率并沒有比 JSTL 提升,尤其是 struts2 的表單标簽,遠沒有 html 執行效率高。

繼續閱讀