SpringMVC學習(一)--基礎入門

MVC模型

  是一種架構型的模式,只是幫助將開發的結構組織的更加合理,使展示與模型分離、流程控制邏輯、業務邏輯調用與展示邏輯分離 。
如圖所示:
這裏寫圖片描述
  MVC模式是以控制器爲核心的開發,將應用強制性劃分爲3部分:Model模型,採用JavaBeans,用於封裝業務邏輯和業務數據。 View視圖,採用jsp+jstl實現的,用於實現業務數據的顯示和收集客戶動作,Controller控制器,採用Servlet實現的[servlet filter xxxListener],用於流程控制。
MVC框架需要實現的功能
  以Controller爲核心完成對系統流程的控制管理、從請求中收集數據{request.getParamter—struts2提供了屬性驅動、模型驅動和對象驅動}、對傳入參數進行驗證{Struts2提供兩種方法: validate編程實現,validate校驗框架(UserAction-login-validation.xml)}、根據請求調用相應業務邏輯完成數據處理【MVC模型並沒有提供對應的實現】、將處理結果返回給視圖【struts2的Action返回String——邏輯視圖名,根據配置跳轉具體的物理地址】、國際化支持【I18N國際化、L10N本地化】、針對不同視圖技術提供不同的解析方案、針對jsp視圖技術提供標籤庫、通過攔截器鏈實現面向方面編程完成系統級控制【AOP】、對文件的上傳、下載等常用功能的封裝。
  
MVC的優點

  • 可以爲一個模型在運行時同時建立和使用多個視圖
  • 視圖與控制器的可接插性,允許更換視圖和控制器對象,而且可以根據需求動態的打開或關閉、甚至在運行期間進行對象替換
  • 模型的可移植性。因爲模型是獨立於視圖的,所以可以把一個模型獨立地移植到新的平臺工作。需要做的只是在新平臺上對視圖和控制器進行新的修改

MVC的不足之處

  • 增加了系統結構和實現的複雜性。對於簡單的界面,嚴格遵循MVC,使模型、視圖與控制器分離,會增加結構的複雜性,並可能產生過多的更新操作,降低運行效率
  • 視圖與控制器間的過於緊密的連接。視圖與控制器是相互分離,但確實聯繫緊密的部件,視圖沒有控制器的存在,其應用是很有限的,反之亦然,這樣就妨礙了他們的獨立重用
  • 視圖對模型數據的低效率訪問。依據模型操作接口的不同,視圖可能需要多次調用才能獲得足夠的顯示數據。對未變化數據的不必要的頻繁訪問,也將損害操作性能
  • 目前,一般高級的界面工具或構造器不支持模式。改造這些工具以適應MVC需要和建立分離的部件的代價是很高的,從而造成MVC使用的困難

SpringMVC

  spring Web MVC是一種基於Java的實現了Web MVC設計模式的請求驅動類型的輕量級Web框架,即使用了MVC架構模式的思想,將web層進行職責解耦,基於請求驅動指的就是使用請求-響應模型,框架的目的就是幫助我們簡化開發,Spring Web MVC也是要簡化我們日常Web開發的。
  
Struts2是非常優秀的MVC構架

  • 優點:非常多比如良好的結構,攔截器的思想,豐富的功能
  • 缺點:Struts2由於採用了值棧、OGNL表達式、struts2標籤庫等,會導致應用的性能下降,應避免使用這些功能
  • 而Struts2的多層攔截器、多實例action性能都很好

Spring3 MVC的優點

  • Spring3 MVC使用簡單,學習成本低。學習難度小於Struts2,Struts2用不上的多餘功能太多
  • Spring3 MVC很容易就可以寫出性能優秀的程序,Struts2要處處小心纔可以寫出性能優秀的程序
  • Spring3 MVC的靈活是無法想像的,Spring框架的擴展性有口皆碑,Spring3 MVC當然也不會落後,不會因使用了MVC框架而感到有任何的限制

SpringMVC應用一般開發步驟:

  • 配置web.xml,指定業務層對應的Spring配置文件,定義DispatcherServlet
  • 編寫處理請求的控制器。處理器
  • 編寫視圖對象
  • 配置Spring mvc的配置文件,使控制器,視圖解析器等生效

    具體配置詳見
      http://blog.csdn.net/uponz/article/details/79255989

SpringMVC框架的原理圖:

這裏寫圖片描述

  1. 整個過程始於客戶端發出一個HTTP請求,Web應用服務器接收到這個請求,如果匹配DispatcherServlet的請求映射路徑(web.xml下指定),Web容器將該請求轉交給DispatcherServlet處理。
  2. DispatcherServlet接收到請求後,將根據請求信息(包括URL,HTTP方法等)及HandlerMapping的配置找到處理請求的處理器(Handler)。可將HandlerMapping看成是路由器,將Handler看成是目標主機。值得注意的是:Spring mvc中並沒有定義一個Handler接口,實際上任何一個Object都可以成爲請求的處理器。
  3. 當DispatcherServlet根據HandlerMapping得到對應當前請求的Handler後,通過HandlerAdapter的Handler進行封裝,再以統一的適配器接口調用Handler。HandlerAdapter是Spring mvc的框架級接口,顧名思義HandlerAdapter是一個適配器,它用統一的接口對各種Handler方法進行調用。
  4. 處理器完成業務邏輯的處理後將返回一個ModelAndView給DsipatcherServlet,ModelAndView包含了試圖邏輯名和模型數據信息。
  5. ModelAndView中包含的是“邏輯試圖名”而非真正的視圖對象,DispatcherServlet藉由ViewResolver完成邏輯試圖名到真是試圖對象的解析工作。
  6. 當得到真實的視圖對象view後DispatcherServlet就使用這個View對象對ModelAndView中的模型數據進行試圖渲染。
  7. 最終客戶端得到的相應消息,可能是一個普通的HTML頁面,也可能是一個XML或JSON串,甚至是一張圖片或一個PDF文檔等不同的媒體形式

MVC 框架 :

  Spring web MVC 框架提供了模型-視圖-控制的體系結構和可以用來開發靈活、鬆散耦合的 web 應用程序的組件。MVC 模式導致了應用程序的不同方面(輸入邏輯、業務邏輯和 UI 邏輯)的分離,同時提供了在這些元素之間的鬆散耦合。 

  • 模型封裝了應用程序數據,並且通常它們由 POJO 組成。
  • 視圖主要用於呈現模型數據,並且通常它生成客戶端的瀏覽器可以解釋的 HTML 輸出。
  • 控制器主要用於處理用戶請求,並且構建合適的模型並將其傳遞到視圖呈現。

DispatcherServlet
  Spring Web 模型-視圖-控制MVC框架是圍繞 DispatcherServlet 設計的,DispatcherServlet 用來處理所有的 HTTP 請求和響應。Spring Web MVC DispatcherServlet 的請求處理的工作流程如下圖所示:
這裏寫圖片描述

下面是對應於 DispatcherServlet 傳入 HTTP 請求的事件序列: 

  • 收到一個 HTTP 請求後,DispatcherServlet 根據 HandlerMapping 來選擇並且調用適當的控制器。
  • 控制器接受請求,並基於使用的 GET 或 POST 方法來調用適當的 service 方法。Service 方法將設置基於定義的業務邏輯的模型數據,並返回視圖名稱到 DispatcherServlet 中。
  • DispatcherServlet 會從 ViewResolver 獲取幫助,爲請求檢取定義視圖。
  • 一旦確定視圖,DispatcherServlet 將把模型數據傳遞給視圖,最後呈現在瀏覽器中。

上面所提到的所有組件,即 HandlerMapping、Controller 和 ViewResolver 是 WebApplicationContext 的一部分,而 WebApplicationContext 是帶有一些對 web 應用程序必要的額外特性的 ApplicationContext 的擴展。

具體案例見:
  http://blog.csdn.net/uponz/article/details/79255989

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