模型-視圖-控制器(MVC)是80年代Smalltalk-80出現(xiàn)的一種軟件設(shè)計模式,現(xiàn)在已經(jīng)被廣泛的使用。
1、模型(Model)
模型是應(yīng)用程序的主體部分。模型表示業(yè)務(wù)數(shù)據(jù),或者業(yè)務(wù)邏輯.
2、視圖(View)
視圖是應(yīng)用程序中用戶界面相關(guān)的部分,是用戶看到并與之交互的界面。
3、控制器(controller)
控制器工作就是根據(jù)用戶的輸入,控制用戶界面數(shù)據(jù)顯示和更新model對象狀態(tài)。
MVC 式的出現(xiàn)不僅實現(xiàn)了功能模塊和顯示模塊的分離,同時它還提高了應(yīng)用系統(tǒng)的可維護性、可擴展性、可移植性和組件的可復(fù)用性
早期的程序中,如果不注意對數(shù)功能和顯示的解耦合,常常會導(dǎo)致程序的復(fù)雜及難以維護。很多VB,Delphi等RAD程序都有這種問題。甚至現(xiàn)在的C#,Java有時候也會出現(xiàn)把業(yè)務(wù)邏輯寫在顯示模塊中的現(xiàn)象
管MVC設(shè)計模式很早就提出,但在Web項目的開發(fā)中引入MVC卻是步履維艱。主要原因:一是在早期的Web項目的開發(fā)中,程序語言和HTML的分離一直難以實現(xiàn)。CGI程序以字符串輸出的形式動態(tài)地生成HTML內(nèi)容。后來隨著腳本語言的出現(xiàn),前面的方式又被倒了過來,改成將腳本語言書寫的程序嵌入在HTML內(nèi)容中。這兩種方式有一個相同的不足之處即它們總是無法將程序語言和HTML分離。二是腳本語言的功能相對較弱,缺乏支持MVC設(shè)計模式的一些必要的技術(shù)基礎(chǔ)。直到基于J2EE的JSP Model 2問世時才得以改觀。它用JSP技術(shù)實現(xiàn)視圖的功能,用Servlet技術(shù)實現(xiàn)控制器的功能,用JavaBean技術(shù)實現(xiàn)模型的功能
JSP Model 1 與 JSP Model 2
SUN在JSP出現(xiàn)早期制定了兩種規(guī)范,稱為Model1和Model2。雖然Model2在一定程度上實現(xiàn)了MVC,但是它的應(yīng)用用并不盡如人意
JSP Model 1
JSP Model 2
model2 容易使系統(tǒng)出現(xiàn)多個Controller,并且對頁面導(dǎo)航的處理比較復(fù)雜
有些人覺得model2仍不夠好,于是Craig R. McClanahan 2000年5月 提交了一個WEB framework給Java Community.這就是后來的Struts.
2001年7月,Struts1.0,正式發(fā)布。該項目也成為了Apache Jakarta的子項目之一
Struts 質(zhì)上就是在Model2的基礎(chǔ)上實現(xiàn)的一個MVC架構(gòu)。它只有一個中心控制器,他采用XML定制轉(zhuǎn)向的URL。采用Action來處理邏輯