版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> 題目名稱(chēng):Struts And Tiles Aid Component-based</p><p> Development </p><p> 譯文題目:Struts 和 Tiles 輔助基于組件的開(kāi)發(fā)</p><p> 原文題目:Struts and Tiles aid component-based devel
2、opment</p><p> 原文出處:Thinking in Java, 3rd ed. Revision 4.0 </p><p> Struts 和 Tiles 輔助基于組件的開(kāi)發(fā)</p><p> 1994 年,當(dāng)時(shí)主流的采用 Web 應(yīng)用程序的開(kāi)發(fā)才剛開(kāi)始。由于 Web 的不成熟,只有較少的工具能幫助開(kāi)發(fā)人員構(gòu)建 Web 軟件。結(jié)果,在特定解決方案
3、中的應(yīng)用程序混合了 HTML 代碼與應(yīng)用程序邏輯。很顯然,UI 設(shè)計(jì)的更改和業(yè)務(wù)邏輯的更新在大型應(yīng)用程序中既困難又昂貴,因?yàn)榫o耦合的表示和邏輯將這兩種元素?cái)嚭驮谝黄穑M(jìn)而導(dǎo)致錯(cuò)誤和緩慢的進(jìn)展。而且,混合的代碼要求部分開(kāi)發(fā)人員具備 UI 設(shè)計(jì)知識(shí),或者要求開(kāi)發(fā)人員與圖形設(shè)計(jì)人員之間有緊密的工作關(guān)系,這常常會(huì)造成時(shí)間上的浪費(fèi)。</p><p> JSP 技術(shù)和標(biāo)記的引入稍微改善了這種更改問(wèn)題,因?yàn)槟軌驅(qū)⑦壿嫼惋@示分
4、離。UI 設(shè)計(jì)人員能夠?qū)︼@示進(jìn)行卓有成效的工作,同時(shí)開(kāi)發(fā)人員能夠?qū)W⒂谶壿?。然而,這種方法仍存在一些缺陷。尤其是某些操作(還有公共操作)的開(kāi)發(fā)仍很困難。驗(yàn)證表單就是典型的例子。正如很多人所知,表單驗(yàn)證的過(guò)程類(lèi)似于這樣:</p><p> 顯示表單;等待用戶(hù)填寫(xiě)然后提交數(shù)據(jù)。</p><p> 檢查各個(gè)域值是否有效;如果有錯(cuò)誤,則重新顯示表單。</p><p>
5、 處理用戶(hù)輸入的數(shù)據(jù),可能將其存儲(chǔ)在一個(gè)數(shù)據(jù)庫(kù)中。</p><p> 在新頁(yè)面上向用戶(hù)顯示處理的結(jié)果或下一步(可能是另一個(gè)表單)。</p><p> 如果在這一過(guò)程中只使用 JSP 頁(yè)面,那么在需要再次更改代碼時(shí),您會(huì)發(fā)現(xiàn),按照可管理性這條思路,將控制從一個(gè)頁(yè)面“路由”至另一個(gè)頁(yè)面很難。您想把第 4 步和第 3 步置于同一個(gè)頁(yè)面嗎?如果使用多個(gè)單獨(dú)的 JSP 頁(yè)面,那么如何跟蹤哪個(gè)頁(yè)面
6、鏈接至其它頁(yè)面,以及在要更改一個(gè)頁(yè)面的文件名或位置時(shí)該怎么做呢?而且,在第 2 步檢測(cè)到某個(gè)域中的錯(cuò)誤時(shí),如何重新顯示帶有一條錯(cuò)誤消息的原始表單,但還要保留用戶(hù)已填入的值呢?Struts,一種開(kāi)放源碼“模型-視圖-控制器”框架,通過(guò)幫助解決所有這些問(wèn)題,從而使開(kāi)發(fā)人員的工作更為輕松。</p><p> 本文并不深入討論 MVC 平臺(tái)。有關(guān)這方面的信息,請(qǐng)參閱 Malcolm Davis 所寫(xiě)的標(biāo)題為”Strut
7、s,an open-source MVC implementation”的 developerWorks文章。您正在閱讀的這篇文章討論自 Malcolm 的文章發(fā)表以來(lái)對(duì) Struts 所做的更改,包括 Tiles 庫(kù)。至于代碼的安裝過(guò)程,本文僅涉及 Jakarta Tomcat 4.0(Catalina)最小安裝所需的步驟。如果您沒(méi)有使用 Tomcat,請(qǐng)查閱手冊(cè)以了解您的應(yīng)用程序服務(wù)器。 </p><p>
8、 Struts 和 Tiles 的背景知識(shí)</p><p> Craig McClanahan 是 Apache Tomcat項(xiàng)目的技術(shù)主管,他創(chuàng)立 Struts 項(xiàng)目以滿(mǎn)足對(duì)這方面的渴望。它作為“模型-視圖-控制器”框架首選的并經(jīng)過(guò)正式認(rèn)可的開(kāi)放源碼實(shí)現(xiàn),已經(jīng)越來(lái)越流行了。它以與交付產(chǎn)品一起分發(fā)的形式受到來(lái)自 Sun 和 IBM 的支持。因?yàn)?Craig 積極參與 Tomcat 和 Struts 的開(kāi)發(fā)工作,
9、所以 Struts 將繼續(xù)與 JSP 和Servlet規(guī)范的參考實(shí)現(xiàn)高度兼容,進(jìn)而與所有 J2EE 應(yīng)用程序服務(wù)器高度兼容。</p><p> Malcolm Davis 的有關(guān)Struts的developerWorks文章涵蓋了整個(gè) Struts 0.9 的功能;為了簡(jiǎn)短起見(jiàn),我將只討論對(duì) Struts 0.9 的更改以及他未涉及的 Struts 主題。目前的 Struts 發(fā)行版本是 1.0.2,但自 20
10、02 年 3 月 19 日起有一個(gè)標(biāo)記為 1.1-b1 的 beta 測(cè)試版可供使用。因?yàn)?beta 測(cè)試版表示編碼工作已經(jīng)完成,在這種情況下只進(jìn)行錯(cuò)誤修正,所以極有可能 1.1 的最終版本不久就將面市,而在 Struts 郵件列表上已經(jīng)有這種呼聲。因此,任何利用 Struts 的新項(xiàng)目很可能都將 1.1 代碼作為基礎(chǔ),而這就是我將討論的內(nèi)容。 </p><p> 自版本0.9以來(lái)對(duì)Struts框架的有用添加包
11、括經(jīng)改進(jìn)的表單驗(yàn)證功能、可以通過(guò) XML 聲明來(lái)指定表單元素和可以動(dòng)態(tài)地定義 bean 特性。然而,最重要的添加可能是將 Tiles 模板庫(kù)合并到 Struts 分發(fā)版中。</p><p> 您是否曾希望用一種更簡(jiǎn)便的方法創(chuàng)建一組頁(yè)面(或可能是整個(gè)應(yīng)用程序),并且每個(gè)頁(yè)面上的用戶(hù)界面保持一致,有相同的導(dǎo)航欄、頁(yè)眉和頁(yè)腳等等?在含有較多內(nèi)容的頁(yè)面內(nèi)顯示多個(gè)類(lèi) portlet 的矩形內(nèi)容的方法又如何?在 Tiles
12、 框架的幫助下,您可以完成這兩項(xiàng)任務(wù)和其它更多任務(wù)。通過(guò)定義屏幕和一組可嵌入在 JSP 頁(yè)面中的標(biāo)記的核心 XML 文件來(lái)插入靜態(tài)和動(dòng)態(tài)內(nèi)容,Tiles框架允許您構(gòu)建組件化的視圖,并按您的希望來(lái)組裝它們,從而有助于提高靈活性、可重用性、一致性和可維護(hù)性。</p><p> Struts 和 Tiles 之間交互良好,因?yàn)檫@兩個(gè)項(xiàng)目的開(kāi)發(fā)人員已經(jīng)認(rèn)識(shí)到這兩者具有互補(bǔ)性,所以決定讓這兩者共同協(xié)作。開(kāi)發(fā)人員可以指定
13、Tiles 頁(yè)面定義作為Struts操作的目標(biāo)視圖(按照Struts的說(shuō)法是一個(gè)forward)。因?yàn)?Struts 和 Tiles 都遵循 JSP 標(biāo)記庫(kù)規(guī)范,所以可以在 JSP 頁(yè)面中將 Struts 標(biāo)記和 Tiles 標(biāo)記相互混合在一起。 </p><p> 您可能渴望嘗試 Tiles 框架,并確切地了解它可以做些什么。如果您希望在自己安裝本文的示例前先了解這些示例的運(yùn)行情況,可以看看它們?cè)趲в星度胧?
14、Tomcat 的 JBoss 服務(wù)器上是怎樣運(yùn)行的。</p><p> Struts 和 Tiles 是用于 Web 開(kāi)發(fā)的輔助工具,所以您需要設(shè)置一個(gè) Web 容器對(duì)它們進(jìn)行實(shí)驗(yàn);將 Tomcat 設(shè)置為您的容器,然后設(shè)置 Struts 和 Tiles 包,我會(huì)在下一節(jié)中循序漸進(jìn)地講述這一過(guò)程。這些指導(dǎo)信息還向您展示了如何安裝本文的樣本代碼。一旦完成了這一切,您就準(zhǔn)備好繼續(xù)本文。示例 1 應(yīng)用程序沒(méi)有利用 S
15、truts 和 Tiles;它演示了以頁(yè)面為中心的方法。通過(guò)將它與示例 2 比較,您會(huì)看到 Struts 和 Tiles 將如何極大地提高您的 Web 開(kāi)發(fā)的結(jié)構(gòu)化程度和可管理性。最后,示例 3 演示了將功能添加到一個(gè)使用 Struts 和 Tiles 的、并且已經(jīng)啟動(dòng)且正在運(yùn)行的 Web 應(yīng)用程序中是多么地簡(jiǎn)單。</p><p> 安裝 Struts 和 Tiles</p><p>
16、 在帶有 J2SE 1.4 SDK、Ant 1.4.1、Tomcat 4.0.3 和 Struts 1.1-b1 的 Linux 機(jī)器上,下列指導(dǎo)信息已經(jīng)經(jīng)過(guò)了測(cè)試。如果因這些軟件包的版本不同而遇到困難,您可能需要使用上面所指定的版本,以便開(kāi)始了解 Struts 和 Tiles 的設(shè)置和開(kāi)發(fā)。</p><p> 轉(zhuǎn)至 TOMCAT_HOME/bin 目錄。</p><p> 通過(guò)輸入
17、./startup.sh (如果在運(yùn)行 UNIX)或 ./startup.bat (如果在運(yùn)行 Windows)來(lái)啟動(dòng) Tomcat 服務(wù)器。</p><p> 將 Web 瀏覽器指向 http://localhost:8080/examples 來(lái)驗(yàn)證 Tomcat 是否已啟動(dòng)并正確運(yùn)行。缺省情況下,Tomcat 附帶了 Examples 應(yīng)用程序。如果 Examples 不工作,則 Tomcat 發(fā)生故障;
18、請(qǐng)參閱 Tomcat 文檔來(lái)解決問(wèn)題。</p><p> Hello, World:首次嘗試</p><p> 要研究我們第一個(gè)示例,請(qǐng)遵循下列步驟:</p><p> 轉(zhuǎn)至 EX1_INSTALL 目錄。</p><p> 編輯 build.xml 文件,為 tomcat.install.dir 填寫(xiě)適當(dāng)值。盡管該值可以是絕對(duì)路徑,
19、也可以是相對(duì)路徑;但如果您不了解 Ant 是如何工作的,或許最好使用絕對(duì)路徑。</p><p> 輸入 ant deploy 。這將把第一個(gè)示例應(yīng)用程序構(gòu)建到 WAR 文件中,以備部署,然后將它部署至 Tomcat。如果得到一個(gè)指出無(wú)法找到 Ant 的錯(cuò)誤,請(qǐng)參閱 “安裝 Struts 和 Tiles”一節(jié)中的第 3 步,并確保您的路徑環(huán)境變量包含 Ant。</p><p> 將 We
20、b 瀏覽器指向 http://localhost:8080/ex1。您應(yīng)該會(huì)看到“Hello, World”頁(yè)面。</p><p> 示例 1 Web 應(yīng)用程序非常簡(jiǎn)單,它演示了常見(jiàn)的 Web 應(yīng)用程序功能。幾乎所有應(yīng)用程序(也包括這個(gè)最簡(jiǎn)單的應(yīng)用程序)都要求所有頁(yè)面具有一致的用戶(hù)界面。通常,這意味著所有頁(yè)面都有公共的徽標(biāo)、頂部欄、上部或左側(cè)導(dǎo)航欄、主體和頁(yè)腳。在示例 1 中,我有意對(duì)每一頁(yè)面中的公共項(xiàng)進(jìn)行硬編
21、碼,以便說(shuō)明這一點(diǎn)。Web 應(yīng)用程序開(kāi)發(fā)的新手一般會(huì)通過(guò)將現(xiàn)有代碼復(fù)制粘貼到新文檔中來(lái)添加新的功能頁(yè)面。很容易預(yù)見(jiàn)這種方法難以應(yīng)付將來(lái)的變化。隨著每一次增加新內(nèi)容,更改諸如菜單、徽標(biāo)等公共頁(yè)面元素的過(guò)程花的時(shí)間會(huì)更長(zhǎng),更容易出錯(cuò)。很明顯,復(fù)制粘貼方法對(duì)于任何具有大量頁(yè)面的應(yīng)用程序是一個(gè)糟糕的模型。</p><p> 敏銳的讀者會(huì)認(rèn)識(shí)到 JSP 技術(shù)提供了包括來(lái)自其它 servlet 和頁(yè)面中的內(nèi)容的功能。我們?yōu)?/p>
22、什么不可以?xún)H僅使用 <jsp:include/> 標(biāo)記來(lái)合并公共元素呢?這肯定會(huì)使那些元素更易于更改。如果您需要更改菜單,只要更改包含菜單的文件。所有其它頁(yè)面只需使用 <jsp:include/> 標(biāo)記就可以得到菜單中的內(nèi)容,這樣這些頁(yè)面可以自動(dòng)獲得對(duì)菜單的更改。但是,當(dāng)需要更改實(shí)際布局或需要重新組織文件和目錄時(shí),這種方法有不足之處。當(dāng)決定更改以頁(yè)面為中心模型下的布局時(shí),必須對(duì)每個(gè)單個(gè)頁(yè)面進(jìn)行更改,因?yàn)榧词箤?duì)公共
23、元素的訪(fǎng)問(wèn)已做了集中化處理,但仍然是由每個(gè)頁(yè)面中的 HTML 代碼來(lái)描述布局本身(有哪些是元素及它們的位置)。同樣地,當(dāng)決定更改包含了某個(gè)公共元素內(nèi)容的文件的文件名或位置時(shí),必須逐個(gè)更改使用該元素的文件。什么原因呢?因?yàn)槊總€(gè)文件根據(jù)固定的物理文件名,而不是邏輯對(duì)象名來(lái)查找每個(gè)公共元素。因此,必須更新每個(gè)對(duì)物理文件名的引用。Tiles 視圖組件可以解決這些問(wèn)題。</p><p> 如果更進(jìn)一步地研究 index.
24、jsp 和 form1.jsp(這兩個(gè) JSP 文件構(gòu)成該應(yīng)用程序),會(huì)發(fā)現(xiàn)另一個(gè)缺點(diǎn):錯(cuò)誤處理相當(dāng)笨拙。錯(cuò)誤處理代碼是在 form1.jsp 中,其中我必須重復(fù)顯示代碼,并添加代碼以插入用戶(hù)在前一表單屏幕(index.jsp)中輸入的值。如果用戶(hù)概要信息域曾更改過(guò),或者如果輸入表單的顯示曾更改過(guò),就必須更新這兩個(gè)地方中的代碼。我可以將 form1.jsp 的錯(cuò)誤處理部分與 index.jsp 中的初始表單顯示結(jié)合在一起,但在初始表單裝
25、入時(shí),我仍將需要做額外的工作以把域值設(shè)置成空字符串,并且我仍將需要有一個(gè)物理文件名來(lái)表示用戶(hù)概要信息的最終靜態(tài)顯示,這意味著發(fā)生更改時(shí),該應(yīng)用程序結(jié)構(gòu)仍是很脆弱的。Struts 表單自動(dòng)化可以解決這種笨拙的表單處理缺陷。</p><p> Hello, World:經(jīng)改進(jìn)的新的應(yīng)用程序</p><p> 現(xiàn)在,讓我們研究剛才看到的 Web 應(yīng)用程序示例中的 Struts 和 Tiles
26、 版本。請(qǐng)執(zhí)行下列步驟:</p><p> 轉(zhuǎn)至 EX2_INSTALL 目錄。 </p><p> 編輯 build.xml 文件,為 struts.install.dir 和 tomcat.install.dir 填寫(xiě)適當(dāng)?shù)闹怠?</p><p> 輸入 ant deploy 。這將把第二個(gè)示例應(yīng)用程序構(gòu)建到 WAR 文件中以備部署,然后將它部署至 Tom
27、cat。如果看到關(guān)于無(wú)法復(fù)制文件的錯(cuò)誤,請(qǐng)檢查第 2 步以確保正確設(shè)置了 struts.install.dir 和 tomcat.install.dir 。 </p><p> 將 Web 瀏覽器指向 http://localhost:8080/ex2。您應(yīng)該會(huì)看到“Hello, World”頁(yè)面。 </p><p> 如果您已看過(guò) EX2_INSTALL 目錄,您很可能會(huì)說(shuō):“這里要
28、做些什么呢?有好多文件。”與大多數(shù)強(qiáng)調(diào)更有序和結(jié)構(gòu)化程度更高的技術(shù)一樣,對(duì)于 Struts 和 Tiles,在一開(kāi)始需要在管理文件上花些工夫。對(duì)于只有少許頁(yè)面的小項(xiàng)目,這一額外開(kāi)銷(xiāo)可能微不足道。然而,隨著項(xiàng)目變大,Struts 和 Tiles 方法逐漸會(huì)顯示其優(yōu)越性。讓我們一點(diǎn)點(diǎn)地體會(huì)吧!這里我不想討論 EX2_INSTALL/src/WEB-INF/web.xml;盡管這個(gè)文件實(shí)質(zhì)上與其示例 1 中相對(duì)應(yīng)的文件不同,而且大多數(shù)行都是樣
29、板,但理解這些設(shè)置對(duì)于著手開(kāi)發(fā)并不太重要。</p><p> 在 EX2_INSTALL/src/WEB-INF/struts-config.xml 中,自先前有關(guān) Struts 的文章以來(lái)重要的更改有在 <form-beans/> 節(jié)中 DynaActionForm 的使用及在 <action-mappings/> 節(jié)中 tile 作為目標(biāo)的使用。在 Struts 的以前版本中,您必須
30、為每個(gè)所使用的表單 bean 定義一個(gè) Java 類(lèi)。僅當(dāng)不同的 HTML 表單共享域時(shí),才可以在這些表單之間共享表單 bean??傊?,每個(gè)表單 bean 需要有一個(gè) Java 類(lèi)是一個(gè)非常麻煩的要求?,F(xiàn)在,您可以在 struts-config.xml 文件中指定表單 bean 的特性,而且是迅速地!不必有保存 Java 類(lèi)的單獨(dú)文件,就能自動(dòng)創(chuàng)建這種 bean。象處理 Hashtable 對(duì)象一樣,用值的強(qiáng)類(lèi)型對(duì)象來(lái)處理動(dòng)態(tài)表單 be
31、an。至于操作映射,一旦確定將 Tiles 庫(kù)合并到 Struts 分發(fā)版之后,那么指定一個(gè) tile 作為目標(biāo),就完全是增加一項(xiàng)邏輯而已。您會(huì)在概要信息表單的操作映射中看到 tile 目標(biāo)(tile.profileInput 和 </p><p> 在 <definition/> 標(biāo)記中指定 tile。您可以將定義命名為任何希望的名稱(chēng),而且 name 屬性不必是與 path 屬性匹配的子字符串。我
32、為第一個(gè)定義選擇了名稱(chēng) rootLayout ,以表明它是應(yīng)用程序中的頁(yè)面要遵循的基本布局。注:路徑是 /tiles-layout/rootLayout.jsp。如果查看 EX2_INSTALL/src/web 下的 /tiles-layout/rootLayout.jsp,您會(huì)看到這種布局是多么的簡(jiǎn)單整齊。用戶(hù)界面的設(shè)計(jì)人員會(huì)“愛(ài)上它”。還請(qǐng)注意:它不包含任何代碼,所以用戶(hù)界面設(shè)計(jì)人員在進(jìn)行更改時(shí)不必?fù)?dān)心破壞什么。 </p>
33、;<p> rootLayout.jsp 中的 <tiles:insert/> 標(biāo)記對(duì)應(yīng)于 tiles-defs.xml 中 rootLayout 定義內(nèi)的 <put/> 標(biāo)記。注:每個(gè) <tiles:insert attribute="x"/> 標(biāo)記都有一個(gè)表示邏輯名稱(chēng)的屬性。每個(gè)邏輯名稱(chēng)映射至通過(guò)在 tiles-defs.xml 內(nèi)的 <definitio
34、n/> 中使用 <put name="x" value="y"/> 標(biāo)記指定的名稱(chēng)和值。通過(guò)在 rootLayout.jsp 頁(yè)面中使用邏輯名稱(chēng),而非物理名稱(chēng),并通過(guò)在 tiles-defs.xml 中統(tǒng)一物理名稱(chēng),我們就可以更改文件名,并使項(xiàng)目文件系統(tǒng)的組織易于管理。 </p><p> 真正節(jié)省時(shí)間和適應(yīng)性方面最顯著的增強(qiáng)方面體現(xiàn)在布局的繼承,這是
35、Struts 的另一個(gè)特性。在 tiles-defs.xml 中,“Page definitions”欄下面的節(jié)有兩個(gè)頁(yè)面:tile.profileInput 和 tile.profileOutput。這些名稱(chēng)是任意的,如果您不喜歡 tile. 前綴,可以不使用它(但是您使用的名稱(chēng)必須與 struts-config.xml 文件中指定的目標(biāo)相匹配)。這些名稱(chēng)應(yīng)該與 struts-config.xml 中 <forward name
36、="x" path="y"/> 標(biāo)記中的 path 屬性匹配。這些名稱(chēng)還應(yīng)該與 struts-config.xml 中 <action ... input="" .../> 標(biāo)記中的 input 屬性匹配。在開(kāi)發(fā)用戶(hù)界面時(shí),<definition name="x" extends="y"/> 標(biāo)記中的 ext
37、ends 屬性是體現(xiàn)開(kāi)發(fā)靈活性的地方。通過(guò)指定主布局并擴(kuò)展它,您不僅能靈活更改象 topBanner 、 topMenu 、 panel1 、 panel2 這樣的公共元素及其它組件, 還能隨</p><p> Struts 和 Tiles 更復(fù)雜的使用</p><p> 篇幅所限,不允許我再深入討論 Struts 和 Tiles 包其它一些實(shí)用的方面,但我真的想簡(jiǎn)要地談一下,這樣您可
38、以對(duì) Struts 和 Tiles 可以做些什么有所了解。如果有足夠的需求,可能這些內(nèi)容會(huì)是將來(lái)文章的主題。</p><p> 您會(huì)在本文的兩個(gè)示例中注意到,我編碼了名、姓、喜歡的顏色和出生日期等基本驗(yàn)證。我所采用的這類(lèi)簡(jiǎn)單驗(yàn)證實(shí)際上可由 Struts 通過(guò)使用它的格式驗(yàn)證來(lái)執(zhí)行,這樣節(jié)省了花在編碼 Java 語(yǔ)句的時(shí)間。例如,檢查是否是空字符串、檢查字符串是否與日期相匹配或檢查是否與其它某些正則表達(dá)式匹配等,
39、這都是可行的。您會(huì)發(fā)現(xiàn)將格式驗(yàn)證用作第一級(jí)檢查會(huì)是十分方便的,在檢查是否符合更復(fù)雜的業(yè)務(wù)邏輯規(guī)則之前,程序可用第一級(jí)檢查來(lái)消除一些明顯錯(cuò)誤。Struts 提供了一個(gè)驗(yàn)證器包,可以通過(guò) WEB-INF 目錄中的 validator.xml 描述符來(lái)配置該包。在這兩個(gè)示例中我沒(méi)有包含該驗(yàn)證器包;如果您想試一下,它包含在 Struts 1.1-b1 包中。</p><p> Struts 和 Tiles 包的另一個(gè)有
40、用特性是與容器管理的安全性相集成。很多人都在使用諸如 IBM WebSphere 或 JBoss 之類(lèi)的應(yīng)用程序服務(wù)器。這些服務(wù)器通過(guò)處理安全性中所涉及的許多日常任務(wù)使認(rèn)證和授權(quán)更便捷,讓您擺脫必須對(duì)它們進(jìn)行的編碼。Struts 允許您根據(jù)用戶(hù)角色有條件地向不同用戶(hù)顯示 bean 數(shù)據(jù)的不同位,這可以通過(guò)自動(dòng)查詢(xún)?nèi)萜鱽?lái)決定。同樣地,Tiles 框架允許您根據(jù)用戶(hù)角色有條件地向不同用戶(hù)顯示不同的視圖組件,這也是通過(guò)自動(dòng)查詢(xún)?nèi)萜鱽?lái)決定的。我
41、在自己的應(yīng)用程序中使用這些特性向管理員、常規(guī)用戶(hù)或 guest 用戶(hù)顯示不同的菜單。</p><p> 最后要說(shuō)明,我在示例中沒(méi)有談到國(guó)際化,但對(duì)于那些構(gòu)建將來(lái)最終要以多種語(yǔ)言發(fā)布的大型應(yīng)用程序的人來(lái)說(shuō),這實(shí)際是一個(gè)重要方面。Struts 讓您創(chuàng)建消息資源特性文件,這些文件指定標(biāo)簽、標(biāo)題和其它輸出的文本。如果您用幾種不同語(yǔ)言的輸出填入消息資源特性文件的話(huà),只要簡(jiǎn)單更改語(yǔ)言設(shè)置就能將所有窗口構(gòu)件和硬編碼的文本更改
42、成適當(dāng)語(yǔ)言,甚至在應(yīng)用程序運(yùn)行中也可以更改。</p><p><b> 未來(lái)的方向</b></p><p> Struts 和 Tiles 將走向何方呢?剛出現(xiàn)的兩個(gè)更改必定會(huì)使 Struts 和 Tiles 更加有用。第一個(gè)更改是工作流管理系統(tǒng)。您很可能處理過(guò)許多多步驟的業(yè)務(wù)過(guò)程;目前,在 Web 應(yīng)用程序中對(duì)它們進(jìn)行編碼可以是一個(gè)主要的麻煩,因?yàn)槟仨殔f(xié)調(diào)不同
43、的步驟,而每一步驟都是 Java 類(lèi)中的一個(gè)單獨(dú)方法或是一個(gè)單獨(dú)的 servlet 或 JSP 頁(yè)面。商業(yè)市場(chǎng)中的工具通過(guò)使開(kāi)發(fā)人員能對(duì)多步驟的業(yè)務(wù)過(guò)程進(jìn)行建模,然后自動(dòng)生成 Java 代碼作為進(jìn)一步開(kāi)發(fā)的基礎(chǔ),來(lái)幫助管理這些過(guò)程。Struts 工作流管理系統(tǒng)將提供類(lèi)似的功能,使開(kāi)發(fā)人員能夠編寫(xiě)業(yè)務(wù)過(guò)程的腳本,這些過(guò)程在 Web 應(yīng)用程序中跨多個(gè)頁(yè)面,并指定這些頁(yè)面如何通過(guò)核心的基于規(guī)則的系統(tǒng)進(jìn)行交互。</p><p
44、> 另一個(gè)同樣有望即將出現(xiàn)的更改是將 Struts 標(biāo)記合并到 JSP 標(biāo)準(zhǔn)標(biāo)記庫(kù)(JSP Standard Tag Library)中,這個(gè)庫(kù)是 Jakarta 項(xiàng)目,它試圖產(chǎn)生一個(gè)有用的定制標(biāo)記集合,從而簡(jiǎn)化并加快用 JSP 頁(yè)面編寫(xiě) Web 應(yīng)用程序的開(kāi)發(fā)。其中的意義在于:Web 應(yīng)用程序的開(kāi)發(fā)將比過(guò)去任何時(shí)候都更容易,因?yàn)槟梢酝ㄟ^(guò)使用定制標(biāo)記的標(biāo)準(zhǔn)機(jī)制得到一個(gè)在此基礎(chǔ)上做進(jìn)一步開(kāi)發(fā)的預(yù)先編寫(xiě)好的代碼庫(kù)。而且,JSP S
45、TL 標(biāo)準(zhǔn)中這個(gè)項(xiàng)目的合并甚至確保了 Struts 和 Tiles 功能更為廣泛的分發(fā)和可用,這意味具有這種技能的開(kāi)發(fā)人員在眾多項(xiàng)目中大有作為,而且公司更加容易獲得開(kāi)發(fā) Web 應(yīng)用程序的熟練人才。</p><p> Struts and Tiles aid component-based development</p><p> In 1994, when mainstream ad
46、option of Web application development had only just begun. Because of the immaturity of the Web, developers had few tools to help them build Web software. As a result, applications mixed HTML code with application logic
47、in ad hoc solutions. Understandably, UI design changes and business logic updates were both difficult and expensive in large applications because the tightly coupled presentation and logic obfuscated both elements, leadi
48、ng to errors and slow progress. A</p><p> The introduction of JSP technology and tags ameliorated the change problem somewhat because logic and display could be separated. UI designers could productively wo
49、rk on display while developers could focus on logic. However, this approach still suffered shortcomings. Notably, certain operations -- common ones, too -- were still hard to develop. The validating form is the classic e
50、xample. As many of you know, the process of form validation goes something like this:</p><p> Display form; wait for user to fill it out and submit data. </p><p> Check for valid field values;
51、 redisplay form if there are errors. </p><p> Process data entered by user, perhaps storing it in a database. </p><p> Display new page with results of processing or next step (probably anothe
52、r form) for user. </p><p> If you're only using JSP pages for this process, you'll find it difficult to route control from one page to another in a way that preserves manageability down the road whe
53、n the code needs to be changed again. Do you place step 4 in the same page as step 3? If you use separate JSP pages, how do you keep track of which pages link to others, and what do you do when you want to change a page&
54、#39;s filename or location? Furthermore, when step 2 detects an error in a field, how do you redisplay the origin</p><p> Background on Struts and Tiles</p><p> Craig McClanahan, the technical
55、 lead on the Apache Tomcat project, started the Struts project as a way to scratch an itch. It has grown quite popular as the preferred and officially sanctioned open-source implementation of a Model-View-Controller fram
56、ework. It enjoys support from both Sun and IBM in the form of distribution with shipping products. Because Craig is active in development of both Tomcat and Struts, Struts will continue to be highly compatible with the r
57、eference implementation for t</p><p> Malcolm Davis's developerWorks article on Struts covers functionality through Struts 0.9; for brevity's sake, I will discuss only changes and Struts topics that
58、 he didn't cover. The current release version of Struts is 1.0.2, but there is a beta version, labeled 1.1-b1, that has been available since March 19, 2002. Because the beta version represents a code freeze in which
59、only bug fixes are being worked on, there is an extremely good chance that the final version of 1.1 will be out shortly, a s</p><p> Useful additions to the Struts framework since version 0.9 include improv
60、ed form validation functionality, the ability to specify form elements via XML declarations, and the ability to dynamically define bean properties. Probably the most prominent addition, however, has been the incorporatio
61、n of the Tiles templating library into the Struts distribution.</p><p> Have you ever wanted an easier way to create a set of pages (or perhaps a whole application) with a consistent user interface -- the s
62、ame navigation bar, header, footer, and so on -- on every page? What about a way to display portlet-like rectangles of content within a larger page of content? The Tiles framework lets you accomplish both tasks and more.
63、 Through a central XML file defining screens and a set of tags that can be embedded in JSP pages to insert static and dynamic content, the Tiles f</p><p> Struts and Tiles interact well because the develope
64、rs of the two projects have recognized their complementary nature and decided to cooperate. A developer can specify a Tiles page definition as the target view (a forward in Struts parlance) of a Struts action. Because bo
65、th Struts and Tiles conform to the JSP tag library specifications, Struts tags and Tiles tags can be intermixed in JSP pages.</p><p> You are likely itching to try out the Tiles framework and see exactly wh
66、at it can do.</p><p> Struts and Tiles are aids for Web development, so you'll need to set up a Web container to experiment with them; the process for setting up Tomcat as your container and then the St
67、ruts and Tiles packages is described in the next section, in step-by-step fashion. These instructions also show you how to install this article's sample code. Once you've finished with that, you're ready to c
68、ontinue with the article. The Example 1 application doesn't take advantage of Struts and Tiles; it demonstrates </p><p> Installing Struts and Tiles</p><p> The following instructions have
69、 been tested on Linux with the J2SE 1.4 SDK, Ant 1.4.1, Tomcat 4.0.3, and Struts 1.1-b1. If you encounter difficulties with different versions of these packages, you may want to change to the versions specified here to g
70、et acquainted with Struts and Tiles setup and development.</p><p> Start up the Tomcat server by typing ./startup.sh (if you are running UNIX) or ./startup.bat (if you are running Windows).</p><p
71、> Verify that Tomcat is up and running properly by pointing your Web browser to http://localhost:8080/examples. The Examples application is shipped with Tomcat by default. If it doesn't work, then something went
72、wrong with Tomcat; see the Tomcat documentation to resolve the issue. </p><p> Hello, World: A first attempt</p><p> To take a look at our first example, follow these steps:</p><p&g
73、t; Change to the EX1_INSTALL directory.</p><p> Edit the build.xml file and fill in an appropriate value for tomcat.install.dir. The value can either be an absolute or a relative path, although if you are
74、inexperienced with how Ant works, it is probably best to use an absolute path.</p><p> Type ant deploy. This will build the first example application into a WAR file ready for deployment, then deploy it to
75、Tomcat. If you get an error indicating that Ant could not be found, see step 3 in the “Installing Struts and Tiles” section and make certain that Ant is in your path.</p><p> Point your Web browser to http:
76、//localhost:8080/ex1. You should see a "Hello, World" page. </p><p> The Example 1 Web application is a very simple illustration of common Web application functionality. All but the simplest of ap
77、plications require a consistent user interface from page to page. Usually this means that all pages have a common logo, top banner, top or left navigation bar, body, and footer. In Example 1, I have purposely hard-coded
78、the common items in each page to demonstrate a point. Beginners at Web application development typically add new pages of functionality by copying and pa</p><p> Astute readers will realize that JSP technol
79、ogy provides functionality to include content from other servlets and pages. Why don't we just use the <jsp:include/> tag to incorporate common elements? That would certainly make those elements easier to chang
80、e. If you need to change the menu, just change the file containing the menu. All other pages use the <jsp:include/> tag to pull in the content from the menu, so they automatically pick up the changes. But this appr
81、oach falls short when the actual</p><p> If you look closely at index.jsp and form1.jsp, the two JSP files comprising the application, another drawback will be apparent: the error handling is quite awkward.
82、 The error handling code is in form1.jsp, where I must repeat the display code and add code to insert the values the user entered in the previous form screen (index.jsp). If the user profile fields ever change, or if the
83、 display of the input form ever changes, I must update code in two places. I could combine the error handling porti</p><p> Hello, World: New and improved</p><p> Now, let's look at the St
84、ruts and Tiles version of the example Web application we just saw. Perform the following steps:</p><p> Change to the EX2_INSTALL directory.Edit the build.xml file and fill in appropriate values for struts.
85、install.dir and tomcat.install.dir.</p><p> Type ant deploy. This will build the second example application into a WAR file ready for deployment, then deploy it to Tomcat. If you see an error about not bein
86、g able to copy files, check to make sure that the struts.install.dir and tomcat.install.dir properties were set appropriately in step 2.</p><p> Point your Web browser to http://localhost:8080/ex2. You shou
87、ld see a "Hello, World" page. </p><p> You're probably saying,"What's going on here? There are a lot more files." As with mosttechnologies that impose more order and structure, w
88、ith Struts and Tiles there is a startup cost in the form of administrative files. For a small project of a few pages, this additional overhead may not make sense. As the project grows, however, the Struts and Tiles appro
89、ach really begins to shine. Let's take it piece by piece. I won't cover EX2_INSTALL/src/WEB-INF/web.xml; although this file is substantially </p><p> in the struts-config.xml file, and presto! The b
90、ean is automatically created without need for a separate file housing a Java class. The dynamic form beans are treated like Hashtable objects with strongly </p><p> typed objects for values. As for action m
91、appings, the ability to specify a tile as a target was a completely logical addition once the decision was made to incorporate the Tiles library into the Struts distribution. You can see the tile targets (tile.profileInp
92、ut and tile.profileOutput) in the action mapping for the profile form. The tiles are specified in the input attribute and the path attribute. Note that the ability to specify a tile target remedies the problem of changin
93、g filenames and loc</p><p> Tiles are specified in <definition/> tags. You can name the definitions anything you want, and the name attribute does not have to be a substring match of the path attribut
94、e. I have chosen the name rootLayout for the first definition to indicate that it is the base layout that pages in the application will follow. Note the path: /tiles-layout/rootLayout.jsp. If you look at /tiles-layout/ro
95、otLayout.jsp under EX2_INSTALL/src/web, you will see how simple and clean the layout is. A user interface de</p><p> The <tiles:insert/> tags in rootLayout.jsp correspond to the <put/> tags with
96、in the rootLayout definition in tiles-defs.xml. Note that the <tiles:insert attribute="x"/> tags each have an attribute representing a logical name. Each logical name maps to a name and value specified us
97、ing a <put name="x" value="y"/> tag in the <definition/> tag within tiles-defs.xml. By using logical rather than physical names in the rootLayout.jsp page and by consolidating physical nam
98、es in tiles-defs.xml, we make c</p><p> The real savings in time and the most significant increase in adaptability comes with inheritance of layouts, another Struts feature. In tiles-defs.xml, the section b
99、elow the "Page definitions" banner has two pages: tile.profileInput and tile.profileOutput. The names are arbitrary and you don't need the tile. prefix if you don't like it (though the name you use must
100、 match targets specified in the struts-config.xml file). The names should match the path attribute in the <forward name="x" path="y"</p><p> More complex uses of Struts and Tiles</
101、p><p> Space does not permit me to discuss other useful aspects of the Struts and Tiles package in depth, but I do want to touch on them briefly so you can get a sense of what Struts and Tiles can do. Perhaps
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 外文翻譯----struts開(kāi)發(fā)的最佳實(shí)踐
- struts外文翻譯
- 基于struts2的購(gòu)物網(wǎng)站的設(shè)計(jì)與實(shí)現(xiàn)外文資料翻譯
- 外文翻譯---一種基于hibernate、struts和spring的j2ee應(yīng)用開(kāi)發(fā)框架
- struts-mvc外文翻譯
- 基于struts架構(gòu)的網(wǎng)上票務(wù)系統(tǒng)設(shè)計(jì)和開(kāi)發(fā)
- 外文翻譯--基于labview的虛擬示波器研究和開(kāi)發(fā)
- 外文翻譯--基于labview的虛擬示波器研究和開(kāi)發(fā)
- 基于Struts架構(gòu)的網(wǎng)上票務(wù)系統(tǒng)設(shè)計(jì)和開(kāi)發(fā).pdf
- 外文翻譯基于asp的開(kāi)發(fā)
- 基于組件的GIS輔助中學(xué)地理教學(xué)軟件的研究與開(kāi)發(fā).pdf
- 基于組件的輸電線(xiàn)路輔助設(shè)計(jì)軟件開(kāi)發(fā).pdf
- 基于Struts的WEB系統(tǒng)開(kāi)發(fā).pdf
- 基于Struts、Spring和Hibernate整合開(kāi)發(fā)技術(shù)的研究與實(shí)現(xiàn).pdf
- 基于COM技術(shù)的GIS組件的研究和開(kāi)發(fā).pdf
- 基于Struts框架的WebGIS研究與開(kāi)發(fā).pdf
- 外文翻譯---汽車(chē)覆蓋件沖壓模輔助設(shè)計(jì)系統(tǒng)的開(kāi)發(fā)
- 外文翻譯---汽車(chē)覆蓋件沖壓模輔助設(shè)計(jì)系統(tǒng)的開(kāi)發(fā)
- 外文翻譯---汽車(chē)覆蓋件沖壓模輔助設(shè)計(jì)系統(tǒng)的開(kāi)發(fā)
- [雙語(yǔ)翻譯]---計(jì)算機(jī)專(zhuān)業(yè)外文翻譯--集成struts、spring和hibernate的電子商務(wù)系統(tǒng)
評(píng)論
0/150
提交評(píng)論