欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

Struts由入門(mén)到精通(第二章)-應(yīng)用框架 mvc和m

系統(tǒng) 1973 0

模型 - 視圖 - 控制器( MVC )是 80 年代 Smalltalk-80 出現(xiàn)的一種軟件設(shè)計(jì)模式,現(xiàn)在已經(jīng)被廣泛的使用。

???? ? ? 1 、模型( Model
  模型是應(yīng)用程序的主體部分。模型表示業(yè)務(wù)數(shù)據(jù),或者業(yè)務(wù)邏輯 .
2 、視圖( View

  視圖是應(yīng)用程序中用戶(hù)界面相關(guān)的部分,是用戶(hù)看到并與之交互的界面。
3 、控制器( controller)
 控制器工作就是根據(jù)用戶(hù)的輸入,控制用戶(hù)界面數(shù)據(jù)顯示和更新 model 對(duì)象狀態(tài)。
MVC 式的出現(xiàn)不僅實(shí)現(xiàn)了功能模塊和顯示模塊的分離,同時(shí)它還提高了應(yīng)用系統(tǒng)的可維護(hù)性、可擴(kuò)展性、可移植性和組件的可復(fù)用性
  早期的程序中,如果不注意對(duì)數(shù)功能和顯示的解耦合,常常會(huì)導(dǎo)致程序的復(fù)雜及難以維護(hù)。很多 VB,Delphi RAD 程序都有這種問(wèn)題。甚至現(xiàn)在的 C#,Java 有時(shí)候也會(huì)出現(xiàn)把業(yè)務(wù)邏輯寫(xiě)在顯示模塊中的現(xiàn)象
  管 MVC 設(shè)計(jì)模式很早就提出,但在 Web 項(xiàng)目的開(kāi)發(fā)中引入 MVC 卻是步履維艱。主要原因:一是在早期的 Web 項(xiàng)目的開(kāi)發(fā)中,程序語(yǔ)言和 HTML 的分離一直難以實(shí)現(xiàn)。 CGI 程序以字符串輸出的形式動(dòng)態(tài)地生成 HTML 內(nèi)容。后來(lái)隨著腳本語(yǔ)言的出現(xiàn),前面的方式又被倒了過(guò)來(lái),改成將腳本語(yǔ)言書(shū)寫(xiě)的程序嵌入在 HTML 內(nèi)容中。這兩種方式有一個(gè)相同的不足之處即它們總是無(wú)法將程序語(yǔ)言和 HTML 分離。二是腳本語(yǔ)言的功能相對(duì)較弱,缺乏支持 MVC 設(shè)計(jì)模式的一些必要的技術(shù)基礎(chǔ)。

??????? mode1?1 是一個(gè)以 JSP 文件為中心的模式,在這種模式中 JSP 頁(yè)面不僅負(fù)責(zé)表現(xiàn)邏輯,也負(fù)責(zé)控制邏輯。專(zhuān)業(yè)書(shū)籍上稱(chēng)之為邏輯耦合在頁(yè)面中,這種處理方式,對(duì)一些規(guī)模很小的項(xiàng)目如:一個(gè)簡(jiǎn)單的留言簿,也沒(méi)什么太大的壞處,實(shí)際上,人們開(kāi)始接觸一些對(duì)自己來(lái)說(shuō)是新的東西的時(shí)候,比如,用 JSP 訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)時(shí),往往喜歡別人能提供一個(gè)包含這一切的單個(gè) JSP 頁(yè)面,因?yàn)檫@樣在一個(gè)頁(yè)面上他就可以把握全局,便于理解。但是,用 Model?1 模式開(kāi)發(fā)大型時(shí),程序流向由一些互相能夠感知的頁(yè)面決定,當(dāng)頁(yè)面很多時(shí)要清楚地把握其流向?qū)⑹呛軓?fù)雜的事情,當(dāng)您修改一頁(yè)時(shí)可能會(huì)影響相關(guān)的很多頁(yè)面,大有牽一發(fā)而動(dòng)全身的感覺(jué),使得程序的修改與維護(hù)變得異常困難;還有一個(gè)問(wèn)題就是程序邏輯開(kāi)發(fā)與頁(yè)面設(shè)計(jì)糾纏在一起,既不便于分工合作也不利于代碼的重用,這樣的程序其健壯性和可伸縮性都不好。 Grady?Booch 等人在 UML 用戶(hù)指南一書(shū)中,強(qiáng)調(diào)建模的重要性時(shí),打了一個(gè)制作狗窩、私人住宅、和大廈的形象比喻來(lái)說(shuō)明人們處理不同規(guī)模的事物時(shí)應(yīng)該采用的合理方法一樣,人們對(duì)不同規(guī)模的應(yīng)用程序也應(yīng)該采用不同的模式

為了克服 Model?1 的缺陷,人們引入了 Model?2

它引入了 \" 控制器 \" 這個(gè)概念,控制器一般由 servlet 來(lái)?yè)?dān)任,客戶(hù)端的請(qǐng)求不再直接送給一個(gè)處理業(yè)務(wù)邏輯的 JSP 頁(yè)面,而是送給這個(gè)控制器,再由控制器根據(jù)具體的請(qǐng)求調(diào)用不同的事務(wù)邏輯,并將處理結(jié)果返回到合適的頁(yè)面。因此,這個(gè) servlet 控制器為應(yīng)用程序提供了一個(gè)進(jìn)行前 - 后端處理的中樞。一方面為輸入數(shù)據(jù)的驗(yàn)證、身份認(rèn)證、日志及實(shí)現(xiàn)國(guó)際化編程提供了一個(gè)合適的切入點(diǎn);另一方面也提供了將業(yè)務(wù)邏輯從 JSP 文件剝離的可能。業(yè)務(wù)邏輯從 JSP 頁(yè)面分離后, JSP 文件蛻變成一個(gè)單純完成顯示任務(wù)的東西,這就是常說(shuō)的 View 。而獨(dú)立出來(lái)的事務(wù)邏輯變成人們常說(shuō)的 Model, 再加上控制器 Control 本身,就構(gòu)成了 MVC 模式。實(shí)踐證明, MVC 模式為大型程序的開(kāi)發(fā)及維護(hù)提供了巨大的便利。 ?

其實(shí), MVC 開(kāi)始并不是為 Web 應(yīng)用程序提出的模式,傳統(tǒng)的 MVC 要求 M 將其狀態(tài)變化通報(bào)給 V ,但由于 Web 瀏覽器工作在典型的拉模式而非推模式,很難做到這一點(diǎn)。因此有些人又將用于 Web 應(yīng)用的 MVC 稱(chēng)之為 MVC2 。正如上面所提到的 MVC 是一種模式,當(dāng)然可以有各種不同的具體實(shí)現(xiàn),包括您自己就可以實(shí)現(xiàn)一個(gè)體現(xiàn) MVC 思想的程序框架, Struts 就是一種具體實(shí)現(xiàn) MVC2 的程序框架。它的大致結(jié)構(gòu)如圖三所示

?


Struts由入門(mén)到精通(第二章)-應(yīng)用框架 mvc和model2

?


圖基本勾勒出了一個(gè)基于 Struts 的應(yīng)用程序的結(jié)構(gòu),從左到右,分別是其表示層( view )、控制層 (controller) 、和模型層 (Model) 。其表示層使用 Struts 標(biāo)簽庫(kù)構(gòu)建。來(lái)自客戶(hù)的所有需要通過(guò)框架的請(qǐng)求統(tǒng)一由叫 ActionServlet servlet 接收( ActionServlet?Struts 已經(jīng)為我們寫(xiě)好了,只要您應(yīng)用沒(méi)有什么特別的要求,它基本上都能滿(mǎn)足您的要求),根據(jù)接收的請(qǐng)求參數(shù)和 Struts 配置 (struts-config.xml) ActionMapping ,將請(qǐng)求送給合適的 Action 去處理,解決由誰(shuí)做的問(wèn)題,它們共同構(gòu)成 Struts 的控制器。 Action 則是 Struts 應(yīng)用中真正干活的組件,開(kāi)發(fā)人員一般都要在這里耗費(fèi)大量的時(shí)間,它解決的是做什么的問(wèn)題,它通過(guò)調(diào)用需要的業(yè)務(wù)組件(模型)來(lái)完成應(yīng)用的業(yè)務(wù),業(yè)務(wù)組件解決的是如何做的問(wèn)題,并將執(zhí)行的結(jié)果返回一個(gè)代表所需的描繪響應(yīng)的 JSP (或 Action )的 ActionForward 對(duì)象給 ActionServlet 以將響應(yīng)呈現(xiàn)給客戶(hù)。 ? 過(guò)程如圖所示: ?

Struts由入門(mén)到精通(第二章)-應(yīng)用框架 mvc和model2

?

這里要特別說(shuō)明一下的是:就是 Action 這個(gè)類(lèi),上面已經(jīng)說(shuō)到了它是 Struts 中真正干活的地方,也是值得我們高度關(guān)注的地方。 將業(yè)務(wù)對(duì)象從 Action 分離出來(lái)后有利于它的重用,同時(shí)也增強(qiáng)了應(yīng)用程序的健壯性和設(shè)計(jì)的靈活性。因此,它實(shí)際上可以看作是 Controller Model 的適配器,如果硬要把它歸于那一部分,筆者更傾向于后一種看法,即它是 Controller 的一部分,換句話(huà)說(shuō),它不應(yīng)該包含過(guò)多的業(yè)務(wù)邏輯,而應(yīng)該只是簡(jiǎn)單地收集業(yè)務(wù)方法所需要的數(shù)據(jù)并傳遞給業(yè)務(wù)對(duì)象。

上面這樣簡(jiǎn)單的描述,初學(xué)者可能會(huì)感到有些難以接受,下面舉個(gè)比較具體的例子來(lái)進(jìn)一步幫助我們理解。如:假設(shè),我們做的是個(gè)電子商務(wù)程序,現(xiàn)在程序要完成的操作任務(wù)是提交定單并返回定單號(hào)給客戶(hù),這就是關(guān)于做什么的問(wèn)題,應(yīng)該由 Action 類(lèi)完成,但具體怎么獲得數(shù)據(jù)庫(kù)連接,插入定單數(shù)據(jù)到數(shù)據(jù)庫(kù)表中,又怎么從數(shù)據(jù)庫(kù)表中取得這個(gè)定單號(hào)(一般是自增數(shù)據(jù)列的數(shù)據(jù)),這一系列復(fù)雜的問(wèn)題,這都是解決怎么做的問(wèn)題,則應(yīng)該由一個(gè)(假設(shè)名為 orderBo )業(yè)務(wù)對(duì)象即 Model 來(lái)完成。 orderBo 可能用一個(gè)返回整型值的名為 submitOrder 的方法來(lái)做這件事, Action 則是先校驗(yàn)定單數(shù)據(jù)是否正確,以免常說(shuō)的垃圾進(jìn)垃圾出;如果正確則簡(jiǎn)單地調(diào)用 orderBo submitOrder 方法來(lái)得到定單號(hào);它還要處理在調(diào)用過(guò)程中可能出現(xiàn)任何錯(cuò)誤;最后根據(jù)不同的情況返回不同的結(jié)果給客戶(hù)。



?

Struts由入門(mén)到精通(第二章)-應(yīng)用框架 mvc和model2


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦?。?!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 日本不卡不码高清免费 | 96自拍视频 | 免费看成年视频网页 | 精品久久久久久久久久久 | 午夜视频在线免费观看 | 在线看免电影网站 | 久久久久在线 | 久久精品小视频 | 亚洲精品亚洲人成人网 | 麻豆精品视频在线 | 久久99精品久久 | av电影直播| 91精品一区二区三区久久久久久 | 久草在钱 | 午夜影院毛片 | 想要xx在线观看 | 日韩18视频在线观看 | 色婷婷国产精品欧美毛片 | 欧美四虎影院 | 九九久久99综合一区二区 | 色开心婷婷 | 日韩一区二区三区在线观看 | 欧美老妇交乱视频 | 久久99精品久久久久久臀蜜桃 | 三级毛片黄色 | av免费在线免费观看 | 精品尤物| 99精品在线免费观看 | 国产福利不卡 | 国产免费www | A片欧美乱妇高特黄AA片片 | 欧洲色阁中文字幕 | 亚洲91精品 | av一区二区三区 | 精品日本三级在线观看视频 | 九九在线精品视频播放 | 国产精品福利片免费看 | 久久免费精品视频在线观看 | 成人精品网站在线观看 | 一级毛片免费不卡在线 | 亚洲成色 |