摘要
在
Web
系統(tǒng)設(shè)計(jì)中,隨著業(yè)務(wù)邏輯的越來越復(fù)雜,如何提高
Web
系統(tǒng)的執(zhí)行效率、可復(fù)用性、可擴(kuò)展性、可維護(hù)性,降低構(gòu)建和維護(hù)成本,一直是業(yè)界普遍關(guān)注的焦點(diǎn)。最近幾年來,基于可重用的
FrameWork
技術(shù)逐漸成為業(yè)界研究和應(yīng)用的新趨勢。其中,
Craig McClanahan
于
2000
年
5
月份提出的
Jakarta Struts FrameWork
,將目前最流行的兩種
Server
端技術(shù)
--JSP
和
Servlet
集合在一起,實(shí)現(xiàn)了
MVC
架構(gòu),提供了一種快速高效的構(gòu)建
Web
應(yīng)用程序的方法。
Struts
自從誕生之日起,就獲得了
Apache Jakarta
開源社區(qū)的普遍關(guān)注。本文作者所在的小組,在
LPMT
中,運(yùn)用
Struts
技術(shù),快速構(gòu)建了一個(gè)結(jié)構(gòu)清晰、可復(fù)用、可擴(kuò)展的
Web
系統(tǒng)。本文從
MVC
架構(gòu)設(shè)計(jì)、
WebForm
技術(shù)實(shí)現(xiàn)、代碼復(fù)用等方面,對(duì)
Struts
在
LPMT
中的應(yīng)用作一個(gè)總結(jié)。
?????? 本論文分四部分,共七章。
第一部分為第一章,介紹什么是系統(tǒng)開發(fā)框架以及應(yīng)用系統(tǒng)開發(fā)框架對(duì)軟件開發(fā)的意義。第二部分為第二章,介紹 Struts 和 MVC 架構(gòu)的相關(guān)技術(shù)要點(diǎn)。第三部分為第三章,介紹 LPMT 的構(gòu)建背景和系統(tǒng)概況。第四部分為第四、五、六、七章,介紹 Struts 在 LPMT 中的應(yīng)用,包括 MVC 架構(gòu)設(shè)計(jì)、 WebForm 技術(shù)實(shí)現(xiàn)、代碼復(fù)用等。
關(guān)鍵詞 MVC? 架構(gòu) ? Struts? 軟件復(fù)用 ? WebForm
Abstract
During web system design,as more and more complex the business becomes,people is always focusing on how to enhance the system’s efficiency,reusable ability,extensible ability and reduce the cost of system.In the past few years,one of the research and develop trends of the field is reuse-based framework technology.One of them is the Jakarta Struts,which was conceived by Craig McClanahan in May of 2000, combining two of the most popular server?side Java technologies—JSPs and servlets—into a server?side implementation of the Model?View?Controller design pattern.It has been under the watchful eye of the Apache Jakarta open source community since that time.in LPMT,our group have rapidly created a reusable extensible system with clear architecture using Struts technology.This thesis focus on MVC design pattern,WebForm,resueable code,to sum up the implements of Jakarta Struts in LPMT.
This thesis divides into four parts altogether.
First part includes chapter one.In this part,starting with what framework is and its significance to software development.
Second part is chapter two.In this part,the writer introduce the theory of the MVC design pattern and Struts framework.
Third part is chapter three.This part is about the background of the LPMT and the system’s introduction.
Fourth part includes chapter four,chapter five,chapter six and seven.It is about the implements of Struts technology in LPMT,including MVC architecture design,webform creating and reusable coding.
KeyWords
MVC? Architecture? Struts? Reuse-Based Software? WebForm
目錄
MVC
設(shè)計(jì)模式的
Struts
技術(shù)實(shí)現(xiàn)
...
2
第一章
應(yīng)用系統(tǒng)開發(fā)框架對(duì)軟件開發(fā)的意義
...
7
1.2 框架、構(gòu)件與設(shè)計(jì)模式... 7
1.3 應(yīng)用系統(tǒng)開發(fā)框架對(duì)軟件開發(fā)的意義... 8
第二章
MVC
設(shè)計(jì)模式及
Struts
技術(shù)
...
9
2.2 Struts結(jié)構(gòu)和處理流程... 10
2.3 利用Struts框架進(jìn)行MVC開發(fā)的流程... 11
第三章
一個(gè)輕量級(jí)的
Project Management Tool(LPMT)
.
13
3.2 LPMT的需求實(shí)現(xiàn)... 13
第四章
LPMT
中的
MVC
多層架構(gòu)實(shí)現(xiàn)
...
15
4.2 MVC模式的實(shí)現(xiàn)邏輯... 16
4.3 分頁顯示Issue的MVC模式實(shí)現(xiàn)... 16
第五章
LPMT
中的控制結(jié)構(gòu)
...
18
5.1 Action中的控制結(jié)構(gòu)實(shí)現(xiàn)... 18
5.2 ActionForm中的控制邏輯實(shí)現(xiàn)... 18
5.3 View中的控制邏輯實(shí)現(xiàn)... 18
第六章
LPMT
中的
WebForm
技術(shù)實(shí)現(xiàn)
...
20
6.1 Jakarta Struts 標(biāo)簽庫... 20
6.2 WebForm的Jakarta Struts標(biāo)簽技術(shù)實(shí)現(xiàn)... 20
第七章
LPMT
中的代碼復(fù)用技術(shù)
...
25
引言
在目前國內(nèi)的面向中小企業(yè)的
Web
應(yīng)用程序設(shè)計(jì)中,以單純的
ASP/JSP/Servlet
代碼構(gòu)建的基于服務(wù)器端運(yùn)行的系統(tǒng)占大多數(shù)。但上述系統(tǒng)有一個(gè)共同的缺陷,就是當(dāng)業(yè)務(wù)邏輯越來越復(fù)雜的時(shí)候,系統(tǒng)構(gòu)建所帶來的復(fù)雜度和所耗費(fèi)的成本將進(jìn)一步提升,由于結(jié)構(gòu)的不清晰所帶來的系統(tǒng)可讀性也進(jìn)一步降低,后期的維護(hù)和擴(kuò)展難度進(jìn)一步增加。鑒于此,在
J2EE
領(lǐng)域,業(yè)界通常采用在
Server
集成一些可復(fù)用的組件比如
EJB
等以及
FrameWork
技術(shù)來使得系統(tǒng)結(jié)構(gòu)清晰化,以及實(shí)現(xiàn)軟件的可復(fù)用、可擴(kuò)展和高效率。在這里,我們采用
Jakarta Struts
技術(shù),通過和
Logical
層、
DataPersistence
的配合,快速構(gòu)建一個(gè)可復(fù)用、可擴(kuò)展的、結(jié)構(gòu)清晰的
Web
應(yīng)用程序
--LPMT
。
事實(shí)證明,作為一個(gè)日漸成熟的優(yōu)秀的
FrameWork
技術(shù),
Struts
在構(gòu)建的基于
MVC
設(shè)計(jì)模式的
Web
系統(tǒng)方面有得天獨(dú)厚的優(yōu)勢。本文謹(jǐn)從
MVC
架構(gòu)設(shè)計(jì)、控制邏輯實(shí)現(xiàn)、
WebForm
技術(shù)實(shí)現(xiàn)、代碼復(fù)用等方面對(duì)
Struts
在
LPMT
中的應(yīng)用作一個(gè)技術(shù)總結(jié)。
第一章
應(yīng)用系統(tǒng)開發(fā)框架對(duì)軟件開發(fā)的意義
軟件構(gòu)件化是 21 世紀(jì)軟件工業(yè)發(fā)展的大勢趨。工業(yè)化的軟件復(fù)用已經(jīng)從通用類庫進(jìn)化到了面向領(lǐng)域的應(yīng)用框架。 Gartner Group 認(rèn)為: “ 到 2003 年,至少 70% 的新應(yīng)用將主要建立在如軟件構(gòu)件和應(yīng)用框架這類 ‘ 構(gòu)造塊 ’ 之上;應(yīng)用開發(fā)的未來就在于提供一開放體系結(jié)構(gòu),以方便構(gòu)件的選擇、組裝和集成 ” 。框架的重用已成為軟件生產(chǎn)中最有效的重用方式之一。
1.1 什么是系統(tǒng)開發(fā)框架
框架是整個(gè)或部分系統(tǒng)的可重用設(shè)計(jì)部分,表現(xiàn)為一組抽象構(gòu)件及構(gòu)件實(shí)例間交互的方法;另一種定義認(rèn)為,框架是可被應(yīng)用開發(fā)者定制的應(yīng)用骨架。前者是從應(yīng)用方面而后者是從目的方面給出的定義。框架規(guī)定了應(yīng)用的體系結(jié)構(gòu),闡明了整個(gè)設(shè)計(jì)、協(xié)作構(gòu)件之間的依賴關(guān)系、責(zé)任分配和控制流程,表現(xiàn)為一組抽象類以及其實(shí)例之間協(xié)作的方法,它為構(gòu)件復(fù)用提供了上下文 (Context) 關(guān)系。框架是構(gòu)件技術(shù)、軟件體系結(jié)構(gòu)研究和應(yīng)用軟件開發(fā)三者發(fā)展結(jié)合的產(chǎn)物。在很多情況下,框架通常以構(gòu)件庫的形式出現(xiàn),但構(gòu)件庫只是框架的一個(gè)重要部分。框架的關(guān)鍵還在于框架內(nèi)對(duì)象間的交互模式和控制流模式。
框架是實(shí)現(xiàn)了某應(yīng)用領(lǐng)域通用完備功能(除去特殊應(yīng)用的部分)的底層服務(wù)。使用這種框架的編程人員可以在一個(gè)通用功能已經(jīng)實(shí)現(xiàn)的基礎(chǔ)上開始具體的系統(tǒng)開發(fā)。框架提供了所有應(yīng)用期望的默認(rèn)行為的類集合。具體的應(yīng)用通過重寫子類 ( 該子類屬于框架的默認(rèn)行為 ) 或組裝對(duì)象來支持應(yīng)用專用的行為。 ?
應(yīng)用框架強(qiáng)調(diào)的是軟件的設(shè)計(jì)重用性和系統(tǒng)的可擴(kuò)充性 , 以縮短大型應(yīng)用軟件系統(tǒng)的開發(fā)周期,提高開發(fā)質(zhì)量。與傳統(tǒng)的基于類庫的面向?qū)ο笾赜眉夹g(shù)比較,應(yīng)用框架更注重于面向?qū)I(yè)領(lǐng)域的軟件重用。應(yīng)用框架具有領(lǐng)域相關(guān)性,構(gòu)件根據(jù)框架進(jìn)行復(fù)合而生成可運(yùn)行的系統(tǒng)。框架的粒度越大,其中包含的領(lǐng)域知識(shí)就更加完整。
1.2 框架、構(gòu)件與設(shè)計(jì)模式
框架 (Framework) 、構(gòu)件 (Component) 和設(shè)計(jì)模式 (Design pattern) 是一個(gè)成熟的系統(tǒng)平臺(tái)中三個(gè)重要的部分,同時(shí)又是三個(gè)很容易混淆的概念。框架往往是為實(shí)現(xiàn)一個(gè)或多個(gè)設(shè)計(jì)模式而設(shè)計(jì)的可重用可擴(kuò)展的設(shè)計(jì),是軟件系統(tǒng)開發(fā)的半成品,而構(gòu)件是框架當(dāng)中的可重用的工具包、類庫或者 API 。
構(gòu)件通常是代碼重用,而設(shè)計(jì)模式是設(shè)計(jì)重用,框架則介于兩者之間,部分代碼重用,部分設(shè)計(jì)重用,有時(shí)分析也可重用。在軟件生產(chǎn)中有三種級(jí)別的重用:內(nèi)部重用,即在同一應(yīng)用中能公共使用的抽象塊 ; 代碼重用,即將通用模塊組合成庫或工具集,以便在多個(gè)應(yīng)用和領(lǐng)域都能使用;應(yīng)用框架的重用,即為專用領(lǐng)域提供通用的或現(xiàn)成的基礎(chǔ)結(jié)構(gòu),以獲得最高級(jí)別的重用性。
框架與設(shè)計(jì)模式雖然相似,但卻有著根本的不同。設(shè)計(jì)模式是對(duì)在某種環(huán)境中反復(fù)出現(xiàn)的問題以及解決該問題的方案的描述,它比框架更抽象;框架可以用代碼表示,也能直接執(zhí)行或復(fù)用,而對(duì)模式而言只有實(shí)例才能用代碼表示 ; 設(shè)計(jì)模式是比框架更小的元素,一個(gè)框架中往往含有一個(gè)或多個(gè)設(shè)計(jì)模式,框架總是針對(duì)某一特定應(yīng)用領(lǐng)域,但同一模式卻可適用于各種應(yīng)用。可以說,框架是軟件,而設(shè)計(jì)模式是軟件的知識(shí)。
1.3 應(yīng)用系統(tǒng)開發(fā)框架對(duì)軟件開發(fā)的意義
框架的最大好處就是重用。面向?qū)ο笙到y(tǒng)獲得的最大的復(fù)用方式就是框架,一個(gè)大的應(yīng)用系統(tǒng)往往可能由多層互相協(xié)作的框架組成。 ?
由于框架能重用代碼,因此從一已有構(gòu)件庫中建立應(yīng)用變得非常容易,因?yàn)闃?gòu)件都采用框架統(tǒng)一定義的接口,從而使構(gòu)件間的通信簡單。 ?
框架能重用設(shè)計(jì)。它提供可重用的抽象算法及高層設(shè)計(jì),并能將大系統(tǒng)分解成更小的構(gòu)件,而且能描述構(gòu)件間的內(nèi)部接口。這些標(biāo)準(zhǔn)接口使在已有的構(gòu)件基礎(chǔ)上通過組裝建立各種各樣的系統(tǒng)成為可能。只要符合接口定義,新的構(gòu)件就能插入框架中,構(gòu)件設(shè)計(jì)者就能重用構(gòu)架的設(shè)計(jì)。 ?
框架還能重用分析。所有的人員若按照框架的思想來分析事務(wù),那么就能將它劃分為同樣的構(gòu)件,采用相似的解決方法,從而使采用同一框架的分析人員之間能進(jìn)行溝通。 ?
目前的主流的系統(tǒng)開發(fā)框架大都提供了對(duì)數(shù)據(jù)持久性、事務(wù)、安全性、負(fù)載均衡、應(yīng)用集成等問題的現(xiàn)成的解決方案,因此采用框架技術(shù)進(jìn)行軟件開發(fā)的主要優(yōu)點(diǎn)包括: ?
(1)???? 領(lǐng)域內(nèi)的軟件結(jié)構(gòu)一致性好;
(2)???? 建立更加開放的系統(tǒng);
(3)???? 重用代碼大大增加,軟件生產(chǎn)效率和質(zhì)量也得到了提高;
(4)???? 軟件設(shè)計(jì)人員要專注于對(duì)領(lǐng)域的了解,使需求分析更充分;
(5)???? 存儲(chǔ)了經(jīng)驗(yàn),可以讓那些經(jīng)驗(yàn)豐富的人員去設(shè)計(jì)框架和領(lǐng)域構(gòu)件,而不必限于低層編程;
(6)???? 允許采用快速原型技術(shù);
(7)???? 有利于在一個(gè)項(xiàng)目內(nèi)多人協(xié)同工作;
(8)???? 大粒度的重用使得平均開發(fā)費(fèi)用降低,開發(fā)速度加快,開發(fā)人員減少,維護(hù)費(fèi)用降低,而參數(shù)化框架使得適應(yīng)性、靈活性增強(qiáng)。
第二章 MVC設(shè)計(jì)模式及Struts技術(shù)
MVC(Model-View-Controller ,模型 - 視圖 - 控制器 ) 設(shè)計(jì)模式是一種 基于請(qǐng)求-響應(yīng) (Request - Response) 模式的應(yīng)用框架。 Struts 是 Apache Software Foundation 針對(duì) MVC 設(shè)計(jì)模式開發(fā)的運(yùn)行于 Server 端開源項(xiàng)目。 Struts 基于 Java Servlet/JavaServer Pages 技術(shù),試圖提供一種能夠分離表現(xiàn)層,并且允許表現(xiàn)層獨(dú)立于傳輸層和數(shù)據(jù)持久層的開源框架。自 Struts 發(fā)布之日起,它就受到開源社區(qū)的歡迎和廣泛支持,也日益成為開源社區(qū)的一個(gè)備受矚目的項(xiàng)目。
2.1 MVC設(shè)計(jì)模式
MVC 結(jié)構(gòu)的框架的組成部分包括以下的內(nèi)容:
l??????? 模型 (Model)
??? 模型包含了應(yīng)用程序的核心,它封裝了應(yīng)用程序的數(shù)據(jù)結(jié)構(gòu)和事務(wù)邏輯,集中體現(xiàn)了應(yīng)用程序的狀態(tài)。有時(shí)候僅包含狀態(tài)信息,因?yàn)樗⒉涣私庖晥D或控制器的信息。 JavaBean 很適合扮演這個(gè)角色,因?yàn)槠淠軌蛱幚斫^大部分事務(wù)邏輯和數(shù)據(jù)結(jié)構(gòu),還能與數(shù)據(jù)庫或文件系統(tǒng)進(jìn)行交互,承擔(dān)維護(hù)應(yīng)用程序數(shù)據(jù)的責(zé)任。
l??????? 視圖 (View)
??? 視圖實(shí)現(xiàn)模塊的外觀,它是應(yīng)用程序的外在表現(xiàn)。它可以訪問模型的數(shù)據(jù),卻不了解模型的情況,同時(shí)它也不了解控制器的情況。當(dāng)模型發(fā)生改變時(shí),視圖會(huì)得到通知,它可以訪問模型的數(shù)據(jù),但不能改變這些數(shù)據(jù)。 Web 界面的開發(fā)人員不需要了解或關(guān)心數(shù)據(jù)庫發(fā)生什么事情,或者事務(wù)邏輯進(jìn)行了什么操作,他只需要掌握 HTML 的知識(shí),而不需要深入了解 Java 。 JSP 頁面適合完成這個(gè)功能,因?yàn)樗话苌俚姆?/span> HTML 代碼。
l??????? 控制器 (Controller)
控制器控制整個(gè)框架中各個(gè)組件的協(xié)調(diào)工作,對(duì)用戶的輸入做出反應(yīng),并且將模型和視圖聯(lián)系在一起,它創(chuàng)建并設(shè)置模塊。 Servlet 能夠接受客戶端的 HTTP 請(qǐng)求,并且根據(jù)需要?jiǎng)?chuàng)建所需的 JavaBeans ,然后將模塊產(chǎn)生的變化通知給視圖。
Model 、 View 、 Controller 這三類組件各自的責(zé)任以及它們之間的關(guān)系如圖 1 所示。
實(shí)現(xiàn) MVC 設(shè)計(jì)模式的系統(tǒng)通常會(huì)包括業(yè)務(wù)邏輯層、數(shù)據(jù)邏輯層。
業(yè)務(wù)邏輯層 (Business Logic) :這是 FrameWork 所要解決問題的關(guān)鍵;對(duì)框架本身來說,這里僅僅只是概念和幾個(gè)提供服務(wù)的基礎(chǔ)組件,真正的實(shí)現(xiàn)與客戶的業(yè)務(wù)邏輯接軌,還需要開發(fā)人員在框架上再次擴(kuò)展;
數(shù)據(jù)邏輯層 (Data Logic) :絕大部分應(yīng)用系統(tǒng)都需要涉及到數(shù)據(jù)交互,這一層主要包括了數(shù)據(jù)邏輯和數(shù)據(jù)訪問接口。在 MVC 結(jié)構(gòu)的框架中, Model 組件用于描述應(yīng)用程序中的數(shù)據(jù)以及操作該數(shù)據(jù)的方法,與用戶界面無關(guān); View 組件負(fù)責(zé)將數(shù)據(jù)展現(xiàn)給用戶; Controller 組件將用戶操作翻譯為對(duì) Model 組件的操作;接到 Controller 傳來的操作之后, Model 再更新 View ,以及反映出數(shù)據(jù)的變化。
在 MVC 框架下的 Web 應(yīng)用系統(tǒng)中,由于 HTTP 本身缺乏狀態(tài)信息,客戶端必須對(duì)服務(wù)器進(jìn)行再查詢才能發(fā)現(xiàn)由輸入所造成的改變,在這種情況下,控制器不能將應(yīng)用程序的改變通知視圖。一般情況下,客戶端不得不再次查詢視圖才能看到更新后的情況,基于這樣的改進(jìn)后的框架稱為 MVC 的模型 2 體系。
2.2 Struts結(jié)構(gòu)和處理流程
Struts 利用 Jsp 頁面、自定義的標(biāo)簽庫、 Java Servlet 和 Action 等類來實(shí)現(xiàn)服務(wù)器端建模,并為 MVC 模式設(shè)計(jì)提供相應(yīng)的組件。
控制器的作用是從客戶端接受請(qǐng)求,并且選擇執(zhí)行相應(yīng)的業(yè)務(wù)邏輯,然后把響應(yīng)結(jié)果送回到客戶端。在
Struts
中
Controller
功能由圖中
ActionServlet
和
ActionMapping
對(duì)象構(gòu)成:核心是一個(gè)
Servlet
類型的對(duì)象
ActionServlet
,它用來接受客戶端的請(qǐng)求。
ActionServlet
包括一組基于配置的
ActionMapping
對(duì)象,每個(gè)
ActionMapping
對(duì)象實(shí)現(xiàn)了一個(gè)請(qǐng)求到一個(gè)具體的
Model
部分中
Action
處理器對(duì)象之間的映射。
MVC
系統(tǒng)中的
Model
部分從概念上可以分為兩類
――
系統(tǒng)的內(nèi)部狀態(tài)和改變系統(tǒng)狀態(tài)的動(dòng)作。
Struts
為
Model
部分提供了
Action
和
ActionForm
對(duì)象:所有的
Action
處理器對(duì)象都是開發(fā)者從
Struts
的
Action
類派生的子類。
Action
處理器對(duì)象封裝了具體的處理邏輯,調(diào)用業(yè)務(wù)邏輯模塊,并且把響應(yīng)提交到合適的
View
組件以產(chǎn)生響應(yīng)。
Struts
提供的
ActionForm
組件對(duì)象,它可以通過定義屬性描述客戶端表單數(shù)據(jù)。開發(fā)者可以從它派生子類對(duì)象,利用它和
Struts
提供的自定義標(biāo)記庫結(jié)合可以實(shí)現(xiàn)對(duì)客戶端的表單數(shù)據(jù)的良好封裝和支持,
Action
處理器對(duì)象可以直接對(duì)它進(jìn)行讀寫,而不再需要和
request
、
response
對(duì)象進(jìn)行數(shù)據(jù)交互。通過
ActionForm
組件對(duì)象實(shí)現(xiàn)了對(duì)
View
和
Model
之間交互的支持。
Struts 框架的處理流程清楚的體現(xiàn)了 MVC 系統(tǒng)的特點(diǎn),簡單的 Struts 組件結(jié)構(gòu)如左圖 3 所示。 Struts Controller ActionServlet 處理客戶請(qǐng)求,利用配置的 ActionMapping 對(duì)象把請(qǐng)求映射到 Action 處理器對(duì)象進(jìn)行處理。 Action 處理對(duì)象訪問 ActionForm 中的數(shù)據(jù),處理和響應(yīng)客戶請(qǐng)求,它還調(diào)用后臺(tái)的 Bean 組件,這些組件封裝了具體的業(yè)務(wù)邏輯。 Action 處理器對(duì)象根據(jù)處理結(jié)果通知 Controller , Controller 進(jìn)行下一步的處理。
2.3 利用Struts框架進(jìn)行MVC開發(fā)的流程
在利用 Struts 框架進(jìn)行 MVC 開發(fā)的時(shí)候,我們采用如下開發(fā)流程:
(1)????
收集和定義應(yīng)用需求。
(2)????
基于數(shù)據(jù)采集和顯示的原則定義和開發(fā)
"
屏幕顯示
"
需求。
(3)????
為每一個(gè)
"
屏幕顯示
"
定義訪問路徑。
(4)????
定義
ActionMappings
建立到應(yīng)用業(yè)務(wù)邏輯之間的聯(lián)系。
(5)????
開發(fā)滿足
"
屏幕顯示
"
需求的所有支持對(duì)象。
(6)????
基于每一個(gè)
"
屏幕顯示
"
需求提供的數(shù)據(jù)屬性來創(chuàng)建對(duì)應(yīng)的
ActionForm
對(duì)象。
(7)????
開發(fā)被
ActionMapping
調(diào)用的
Action
對(duì)象。
(8)????
開發(fā)應(yīng)用業(yè)務(wù)邏輯對(duì)象
(Bean
,
EJB
,等等
)
。
(9)????
對(duì)應(yīng)
ActionMapping
設(shè)計(jì)的流程創(chuàng)建
JSP
頁面。
(10)
建立合適的配置文件
struts-config.xml
,
web.xml
。
(11)
開發(fā)
/
測試
/
部署。