作者:李東龍
MVC英文及Model-View-Controller,分別是模型(Model),視圖(View)和控制(Controller)。MVC模式的目的是實現web系統的職能分工。
View:即用戶交互界面,對於web應用程序來說,可以概括爲HTML界面。但由於應用的複雜性和規模性,界面的處理就會變得極具挑戰。一款軟件可能有多個不同的視圖,MVC設計模式對於視圖的處理僅限於視圖上數據的採集和處理,以及用戶的請求,而不包含在視圖上的業務流程的處理。通常用JSP來實現,把業務流程都給了模型層。
Model:主要負責業務流程的處理。是業務實際流程控制的地方,類似於在三層架構中的B層。實現系統中的業務邏輯,對其他層來說是黑箱操作,接受視圖請求中的數據,返回最終的處理結果。通常可以用JavaBean或EJB來實現。
Controller層是Model與View之間溝通的橋樑,它可以分派用戶的請求並選擇恰當的視圖來顯示,同時它也可以解釋用戶的輸入並將他們映射爲模型層的可執行的操作。其實就是一個分發器。
Struts就是一個MVC框架,下面Struts1 是如何實現MVC 的。如下圖所示:
這是Struts1的一個分層情況。
M主要是ActionForm和JavaBean。負責程序的數據收集和業務處理,ActionForm屬於Struts的框架的,這裏的JavaBean是應用本身的業務邏輯。——這是我在網上找到的一種說法。
我不是特別贊同這樣的劃分,我認爲Struts1是涉及不到M的。只不過是爲了實現調用M做了一些基礎性的操作,具體實現還是JavaBean。ActionForm其實可以不作爲MVC中的任何一層。
V層主要是Jsp。主要用於動態頁面的顯示,Struts本身是沒有V層的,作爲一個框架只是一個大體結構。這個V層是由開發人員補全的。
C層是Struts的主要部分,包含了Struts框架本身的很多大部分內容,有:
struts-config.Xml Struts框架自身的配置文件,包含了很多配置信息。
ActionServlet Struts框架核心控制類(替代ervlet實現的抽象物)。
RequestProcessor 配合ActionServlet完成截取URL功能。
ActionForward
ActionMapping
…… ……
Struts通過內部對象及配置文件的協同工作,完成了對頁面和Action靈活控制。從而實現Model和View的分離,降低他們之間的耦合程度。
Struts的執行流程如下圖所示:
通過上述時序圖對Struts1的工作流程描述,大家應該對Struts1 是如何實現MVC的應該有了一個大概的瞭解。