- Java EE實(shí)用教程
- 鄭阿奇編著
- 2326字
- 2018-12-30 08:34:13
2.1 Struts 2框架的發(fā)展
2.1.1 MVC模式的應(yīng)用
MVC是一個(gè)設(shè)計(jì)模式,它強(qiáng)制性地使應(yīng)用程序的輸入、處理和輸出分開(kāi)。使用MVC模式,應(yīng)用程序被分成三個(gè)核心部件:模型(Model,即M)、視圖(View,即V)、控制器(Controller,即C)。它們各自處理自己的任務(wù)。
視圖:視圖是用戶(hù)與之交互的界面,在現(xiàn)階段的應(yīng)用中,特別是Java EE的應(yīng)用中,HTML及JSP的應(yīng)用是最廣泛的,當(dāng)然還有一些頁(yè)面技術(shù),如Macromedia Flash、XHTML、XML等。視圖最大的作用就是輸出數(shù)據(jù)并允許用戶(hù)操作,它不關(guān)心數(shù)據(jù)的處理及操作的處理等工作,這些處理操作都交由控制器來(lái)完成。
模型:在這三個(gè)部件中,模型擁有最多的處理任務(wù)。簡(jiǎn)單地說(shuō),模型部分就是對(duì)數(shù)據(jù)庫(kù)的操作。它處理的數(shù)據(jù)是中立的,模型一般被控制器調(diào)用。由于模型的代碼只寫(xiě)一次就可以被多個(gè)視圖重用,所以減少了代碼的重復(fù)性。
控制器:控制器主要接收用戶(hù)的輸入并調(diào)用模型和視圖來(lái)完成用戶(hù)的需求。它本身不輸出任何東西做任何處理。它只接收請(qǐng)求并決定調(diào)用哪個(gè)模型來(lái)處理請(qǐng)求,然后確定用哪個(gè)視圖來(lái)顯示模型處理返回的數(shù)據(jù)。
從這三個(gè)部件的各自作用中可以總結(jié)出MVC模式的處理過(guò)程:首先控制器接收用戶(hù)請(qǐng)求,并決定應(yīng)該調(diào)用哪個(gè)模型來(lái)進(jìn)行處理,然后模型用業(yè)務(wù)邏輯來(lái)處理用戶(hù)的請(qǐng)求并返回?cái)?shù)據(jù),最后控制器用相應(yīng)的視圖格式化模型返回的數(shù)據(jù),并通過(guò)表示層呈現(xiàn)給用戶(hù)。
MVC的優(yōu)點(diǎn)大致有以下幾點(diǎn)。
(1)低耦合性。視圖層和業(yè)務(wù)層分離,這樣就允許更改視圖層代碼而不用重新編譯模型和控制器代碼。同樣,一個(gè)應(yīng)用的業(yè)務(wù)流程或者業(yè)務(wù)規(guī)則的改變只需要改動(dòng)MVC的模型層即可。因?yàn)槟P团c控制器和視圖相分離,所以很容易改變應(yīng)用程序的數(shù)據(jù)層和業(yè)務(wù)規(guī)則。
(2)高重用性和可適用性。隨著技術(shù)的不斷進(jìn)步,現(xiàn)在需要用越來(lái)越多的方式來(lái)訪(fǎng)問(wèn)應(yīng)用程序。MVC模式允許你使用各種不同樣式的視圖來(lái)訪(fǎng)問(wèn)同一個(gè)服務(wù)器端的代碼。它包括任何WEB(HTTP)瀏覽器或者無(wú)線(xiàn)瀏覽器(WAP)。比如,用戶(hù)可以通過(guò)電腦也可通過(guò)手機(jī)來(lái)訂購(gòu)某種產(chǎn)品,雖然訂購(gòu)的方式不一樣,但處理訂購(gòu)產(chǎn)品的方式是一樣的。由于模型返回的數(shù)據(jù)沒(méi)有進(jìn)行格式化,所以同樣的構(gòu)件能被不同的界面使用。例如,很多數(shù)據(jù)可能用HTML來(lái)表示,但是也有可能用WAP來(lái)表示,而這些表示所需要的僅是改變視圖層的實(shí)現(xiàn)方式,控制層和模型層無(wú)須做任何改變。
(3)較低的生命周期成本。MVC使降低開(kāi)發(fā)和維護(hù)用戶(hù)接口的技術(shù)含量成為可能。
(4)快速的部署。使用MVC模式使開(kāi)發(fā)時(shí)間得到相當(dāng)大的縮減,它使程序員集中精力于業(yè)務(wù)邏輯,界面程序員(HTML和JSP開(kāi)發(fā)人員)集中精力于表現(xiàn)形式上。
(5)可維護(hù)性。分開(kāi)視圖層和業(yè)務(wù)邏輯層也使得Web應(yīng)用更易于維護(hù)和修改。
(6)有利于軟件工程化管理。由于不同的層各司其職,每一層不同的應(yīng)用具有某些相同的特征,有利于通過(guò)工程化、工具化管理程序代碼。
由此可見(jiàn),MVC模式是一個(gè)優(yōu)秀的創(chuàng)建軟件的途徑,尤其在Java Web應(yīng)用程序的架構(gòu)方面。采用MVC的Java Web應(yīng)用程序在健壯性、代碼重用性和結(jié)構(gòu)方面將更上一個(gè)新臺(tái)階。
2.1.2 Struts框架應(yīng)用
一般情況下所說(shuō)的Struts框架指的是Struts 1框架,而非Struts 2框架。Struts框架是最早出現(xiàn)的MVC框架,能夠很好地幫助Java開(kāi)發(fā)者利用Java EE開(kāi)發(fā)Web項(xiàng)目。Struts框架的工作流程圖如圖2.1所示。

圖2.1 Struts框架的工作流程圖
從上圖可以知道Struts的工作流程如下所述。
(1)客戶(hù)端發(fā)出請(qǐng)求,ActionForm封裝數(shù)據(jù),然后提交給ActionServlet。
(2)ActionServlet根據(jù)請(qǐng)求信息找到指定的Action,并將請(qǐng)求轉(zhuǎn)發(fā)給Action。
(3)Action調(diào)用JavaBean(即視圖)提供的業(yè)務(wù)邏輯方法處理請(qǐng)求,并返回ActionForward。
(4)ActionServlet根據(jù)ActionForward信息將請(qǐng)求轉(zhuǎn)發(fā)給JSP頁(yè)面。
(5)將最終頁(yè)面返回給客戶(hù)端。
可以看出,應(yīng)用Struts框架符合MVC編程思想,條理也很清晰。盡管如此,Struts框架的設(shè)計(jì)還存在很多問(wèn)題。了解Struts的讀者可以知道,Struts的Action與Servlet API緊密地結(jié)合在一起,這使程序的耦合度大大增加,從而給軟件的測(cè)試帶來(lái)很大的難度,同時(shí)也大大降低了代碼的可擴(kuò)展性。另一個(gè)框架WebWork的出現(xiàn),很好地解決了Struts框架中的問(wèn)題。
2.1.3 WebWork框架應(yīng)用
WebWork也是一個(gè)優(yōu)秀的基于MVC模式的框架。其優(yōu)于Struts框架的最突出的特點(diǎn)是:在WebWork的開(kāi)發(fā)過(guò)程中,代碼已經(jīng)不再依賴(lài)Servlet API了。WebWork框架的工作流程圖如圖2.2所示。

圖2.2 WebWork框架的工作流程圖
從上圖可以得出WebWork的工作流程如下所述。
(1)ServletDispatcher接收客戶(hù)端請(qǐng)求。
(2)ServletDispatcher根據(jù)請(qǐng)求找到指定Action,并調(diào)用該Action處理請(qǐng)求信息。
(3)Action處理完成后返回一個(gè)結(jié)果映射,該映射指定具體視圖信息。
(4)由視圖信息找到對(duì)應(yīng)的JSP頁(yè)面,并顯示給客戶(hù)端。
雖然WebWork框架很優(yōu)秀,但是由于種種原因,WebWork并沒(méi)有像Struts那樣被廣泛應(yīng)用。
2.1.4 Struts 2框架的誕生
由于Struts 1設(shè)計(jì)上的缺陷,使得它漸漸無(wú)法滿(mǎn)足程序員要求高效、靈活的開(kāi)發(fā)需求,于是很多程序員開(kāi)始選擇其他優(yōu)秀的開(kāi)發(fā)框架,Struts 1的開(kāi)發(fā)團(tuán)隊(duì)也意識(shí)到了這一點(diǎn),開(kāi)始考慮Struts 1的后續(xù)發(fā)展,尋找另一個(gè)合作伙伴——WebWork。
WebWork 1.0是在2002年3月發(fā)布的,它是Rickard Oberg在研究了其他的Java Web開(kāi)發(fā)框架之后創(chuàng)建出來(lái)的,引入了很多新的思想、概念和功能。熟悉Struts 1的讀者應(yīng)該知道,在Struts1中,ActionForm是個(gè)讓程序員頭痛的問(wèn)題,而WebWork解決了ActionForm的問(wèn)題,同時(shí)在WebWork中,可以使用普通的JavaBean對(duì)象,甚至Action本身來(lái)接收表單提交的數(shù)據(jù)。不僅如此,WebWork中的Action沒(méi)有和Servlet API耦合在一起,大大提高了程序的松耦合性。
雖然WebWork設(shè)計(jì)思想先進(jìn),功能強(qiáng)大,但由于種種原因,市場(chǎng)占有率并不高,Struts 1的高市場(chǎng)占有率加上WebWork的精湛技術(shù),使得兩項(xiàng)技術(shù)的領(lǐng)頭人走向合作,推出一個(gè)嶄新的框架——Struts 2。
2006年,WebWork與Struts這兩個(gè)優(yōu)秀的Java Web框架(Web Framework)的開(kāi)發(fā)團(tuán)隊(duì),整合了WebWork與Struts的優(yōu)點(diǎn),推出了一個(gè)非常優(yōu)秀的嶄新的框架,就是Struts 2,而以前的Struts就稱(chēng)為Struts 1。
Struts 2是在WebWork 2的基礎(chǔ)上進(jìn)行開(kāi)發(fā)的,Struts 2.0其實(shí)就是WebWork 2.3,它和Struts 1并沒(méi)有很大的關(guān)系,如果讀者使用過(guò)WebWork框架,那么學(xué)習(xí)Struts 2就能很快上手;相反,了解Struts 1的讀者學(xué)習(xí)Struts 2,面對(duì)的將是一個(gè)全新的框架。本書(shū)會(huì)由淺入深地詳細(xì)介紹該框架,目的就是讓即使不懂前面兩個(gè)框架的讀者也可以很好地掌握該框架,并能夠熟練地實(shí)際應(yīng)用。
- 基于粒計(jì)算模型的圖像處理
- Mastering Selenium WebDriver
- DevOps Automation Cookbook
- 移動(dòng)互聯(lián)網(wǎng)軟件開(kāi)發(fā)實(shí)驗(yàn)指導(dǎo)
- BeagleBone Robotic Projects(Second Edition)
- Android Development Tools for Eclipse
- 計(jì)算機(jī)應(yīng)用基礎(chǔ)(第二版)
- Microsoft Exchange Server 2016 PowerShell Cookbook(Fourth Edition)
- Web開(kāi)發(fā)新體驗(yàn)
- Getting Started with Windows Server Security
- Implementing Splunk(Second Edition)
- Mastering Unity Scripting
- HTML5+jQuery Mobile移動(dòng)應(yīng)用開(kāi)發(fā)
- Visual Basic.NET程序設(shè)計(jì)
- Neo4j Graph Data Modeling