Struts秘籍之起式:第1.5式:將JSP 應用轉到Struts
第1.5式. 將JSP 應用轉到Struts
問題
你需要將一個已有的基于JSP的web 應用轉換為Struts 的應用。
動作分解
在加入新的功能到應用中時,可應用Struts采取重構的方式來進行。隨著你對Struts 知識的增加,你可以將現有代碼重新架構成使用Struts。如果沒有計劃對應用進行新的開發,就一次性重構現有的JSP代碼。
變化
遷移一個現有JSP應用的困難程度取決于應用的復雜度和架構的穩固性。如果應用使用Model 1 架構,所有的邏輯多包涵在JSP中,這的確是一個不小的挑戰。你會發現你需要從頭重新設計應用,以便在你開始重構之前分離業務邏輯和表現。
如果你新接觸Struts,那么可以在一個新應用的開發中學習Struts而不是等到玩得很熟了才進行開發。Struts 不是在開發流程后端可以隨便輕易就可以“開瓶即喝”的可樂。但是,有些項目卻在開發過程中途變更項目的架構支撐。如果你處于這種情況,請掌握好你的項目計劃,以便Struts 能夠首先應用到新的開發中和適合的特征中,而不是在危急的道路之上。一旦你增長了你的Struts 功力,將使得轉換現有代碼更加容易。
為了使這更具體些,考慮一個有3個頁面組成的簡單例子。第一個頁面是一個主要的歡迎頁面,顯示到第2個頁面的鏈接。第二個頁面顯示兩個表單輸入字段。當用戶提交表單時,所添加的值的結果顯示在第3個頁面上。
首先,Example 1-3 顯示了提供輸入頁面鏈接的index.jsp頁面。
Example 1-3. 鏈接到一個輸入頁面












Example 1-4 展示了提交輸入值的get_input.jsp頁面。
Example 1-4. Submitting data


















Example 1-4中的頁面將表單提交給一個JSP 頁面來顯示結果。目標頁面 (示于Example 1-6) 使用了一個JavaBean 來持有在請求中從表單接收的值。在看目標JSP代碼之前,Example 1-5展示了存儲數據的JavaBean 的代碼。
Example 1-5. Simple JavaBean

































display_result.jsp頁面,示于Example 1-6, 使用JSP setProperty標簽來通過請求值來組裝bean。值的輸出使用請求時表達式,而和的計算則使用一個scriptlet。最后,該計算出的總和被顯示出來。
Example 1-6. Displaying results























這個應用演示了一些很不受人歡迎的使用JSP的方式。雖然使用JavaBean 是值得贊揚的,計算卻是在JSP中使用scriptlet來執行的。其結果是業務邏輯和表現混合在一起,scriptlets (內嵌的的Java 代碼) 可能導致JSP應用的維護問題。
明確的說明轉換這個應用到Struts 的策略是簡單的。雖然這個例子微不足道,但所采用的策略卻可適用于更加復雜的應用。應該盡可能的從JSP中去除內嵌的以scriptlet (<% %>)開始的Java 代碼;如果可能還要去請求時表達式(<%= %>)。為了完成這個任務,Example 1-6中,將通過添加一個計算和返回總和的方法將和的計算移到了JavaBean (from Example 1-5) 中:






現在,修改JSP來使用bean:write標簽:




















這對這個小應用的前一版本來說是一個明顯的改善。
|
在你進行進一步的修改之前,最好將應用重新構建并重新部署,看其是否仍然能工作。 |
下一步,將Struts 控制器整合進來,有更多一些的工作要做。首先,創建一個Struts Action,就象Example 1-7中所示的一樣,它負責接收來自于get_input.jsp頁面中的表單的值。提交的值將獲取為Action整理到一個JavaBean中的請求參數。bean 實例被設置為一個servlet 請求屬性。Action然后將請求轉發到display_result.jsp頁面。
Example 1-7. 添加一個Struts action






























在你的struts-config.xml中為Action 創建一個ActionMapping:






為了使用這個Action,需要修改get_input.jsp頁面中的表單的目標action屬性:








一旦你開發好了一個這樣的新特征,從一個已有的JSP頁面中連接到新的action 只需要簡單的使用特定的ActionServlet mapping (e.g., *.do)。你也可以使用JSP的URL從Struts頁面鏈接到現有的JSP頁面。
相關
第6.1式描述了如何為你的所有動作的公共行為創建一個基礎action。
第9.1式詳細描述了如何聲明Struts的例外處理。
第5.6式討論了集成現有的JavaBean 和Struts action forms的方式。
posted on 2005-04-29 10:14 鐵手 閱讀(2142) 評論(1) 編輯 收藏 所屬分類: Java 、Struts系列