你需要將一個(gè)已有的基于JSP的web 應(yīng)用轉(zhuǎn)換為Struts 的應(yīng)用。
在加入新的功能到應(yīng)用中時(shí),可應(yīng)用Struts采取重構(gòu)的方式來進(jìn)行。隨著你對Struts 知識(shí)的增加,你可以將現(xiàn)有代碼重新架構(gòu)成使用Struts。如果沒有計(jì)劃對應(yīng)用進(jìn)行新的開發(fā),就一次性重構(gòu)現(xiàn)有的JSP代碼。
遷移一個(gè)現(xiàn)有JSP應(yīng)用的困難程度取決于應(yīng)用的復(fù)雜度和架構(gòu)的穩(wěn)固性。如果應(yīng)用使用Model 1 架構(gòu),所有的邏輯多包涵在JSP中,這的確是一個(gè)不小的挑戰(zhàn)。你會(huì)發(fā)現(xiàn)你需要從頭重新設(shè)計(jì)應(yīng)用,以便在你開始重構(gòu)之前分離業(yè)務(wù)邏輯和表現(xiàn)。
如果你新接觸Struts,那么可以在一個(gè)新應(yīng)用的開發(fā)中學(xué)習(xí)Struts而不是等到玩得很熟了才進(jìn)行開發(fā)。Struts 不是在開發(fā)流程后端可以隨便輕易就可以“開瓶即喝”的可樂。但是,有些項(xiàng)目卻在開發(fā)過程中途變更項(xiàng)目的架構(gòu)支撐。如果你處于這種情況,請掌握好你的項(xiàng)目計(jì)劃,以便Struts 能夠首先應(yīng)用到新的開發(fā)中和適合的特征中,而不是在危急的道路之上。一旦你增長了你的Struts 功力,將使得轉(zhuǎn)換現(xiàn)有代碼更加容易。
為了使這更具體些,考慮一個(gè)有3個(gè)頁面組成的簡單例子。第一個(gè)頁面是一個(gè)主要的歡迎頁面,顯示到第2個(gè)頁面的鏈接。第二個(gè)頁面顯示兩個(gè)表單輸入字段。當(dāng)用戶提交表單時(shí),所添加的值的結(jié)果顯示在第3個(gè)頁面上。
首先,Example 1-3 顯示了提供輸入頁面鏈接的index.jsp頁面。
Example 1-4 展示了提交輸入值的get_input.jsp頁面。
Example 1-4中的頁面將表單提交給一個(gè)JSP 頁面來顯示結(jié)果。目標(biāo)頁面 (示于Example 1-6) 使用了一個(gè)JavaBean 來持有在請求中從表單接收的值。在看目標(biāo)JSP代碼之前,Example 1-5展示了存儲(chǔ)數(shù)據(jù)的JavaBean 的代碼。
display_result.jsp頁面,示于Example 1-6, 使用JSP setProperty標(biāo)簽來通過請求值來組裝bean。值的輸出使用請求時(shí)表達(dá)式,而和的計(jì)算則使用一個(gè)scriptlet。最后,該計(jì)算出的總和被顯示出來。
這個(gè)應(yīng)用演示了一些很不受人歡迎的使用JSP的方式。雖然使用JavaBean 是值得贊揚(yáng)的,計(jì)算卻是在JSP中使用scriptlet來執(zhí)行的。其結(jié)果是業(yè)務(wù)邏輯和表現(xiàn)混合在一起,scriptlets (內(nèi)嵌的的Java 代碼) 可能導(dǎo)致JSP應(yīng)用的維護(hù)問題。
明確的說明轉(zhuǎn)換這個(gè)應(yīng)用到Struts 的策略是簡單的。雖然這個(gè)例子微不足道,但所采用的策略卻可適用于更加復(fù)雜的應(yīng)用。應(yīng)該盡可能的從JSP中去除內(nèi)嵌的以scriptlet (<% %>)開始的Java 代碼;如果可能還要去請求時(shí)表達(dá)式(<%= %>)。為了完成這個(gè)任務(wù),Example 1-6中,將通過添加一個(gè)計(jì)算和返回總和的方法將和的計(jì)算移到了JavaBean (from Example 1-5) 中:
現(xiàn)在,修改JSP來使用bean:write標(biāo)簽:
這對這個(gè)小應(yīng)用的前一版本來說是一個(gè)明顯的改善。
在你進(jìn)行進(jìn)一步的修改之前,最好將應(yīng)用重新構(gòu)建并重新部署,看其是否仍然能工作。
下一步,將Struts 控制器整合進(jìn)來,有更多一些的工作要做。首先,創(chuàng)建一個(gè)Struts Action,就象Example 1-7中所示的一樣,它負(fù)責(zé)接收來自于get_input.jsp頁面中的表單的值。提交的值將獲取為Action整理到一個(gè)JavaBean中的請求參數(shù)。bean 實(shí)例被設(shè)置為一個(gè)servlet 請求屬性。Action然后將請求轉(zhuǎn)發(fā)到display_result.jsp頁面。
在你的struts-config.xml中為Action 創(chuàng)建一個(gè)ActionMapping:
為了使用這個(gè)Action,需要修改get_input.jsp頁面中的表單的目標(biāo)action屬性:
一旦你開發(fā)好了一個(gè)這樣的新特征,從一個(gè)已有的JSP頁面中連接到新的action 只需要簡單的使用特定的ActionServlet mapping (e.g., *.do)。你也可以使用JSP的URL從Struts頁面鏈接到現(xiàn)有的JSP頁面。
第6.1式描述了如何為你的所有動(dòng)作的公共行為創(chuàng)建一個(gè)基礎(chǔ)action。
第9.1式詳細(xì)描述了如何聲明Struts的例外處理。
第5.6式討論了集成現(xiàn)有的JavaBean 和Struts action forms的方式。
posted on 2005-04-29 10:14 鐵手 閱讀(2140) 評論(1) 編輯 收藏 所屬分類: Java 、Struts系列