j2ee
摘 要 簡要介紹了J2EE技術及其應用程式架構的發展,論述了Struts架構的基本設計思想,分析了Struts架構開發系統的優點,並結合具體項目實現了Struts架構技術的應用。
關鍵詞 J2EE;MVC;Struts;架構
J2EE簡介
J2EE是一個開放的、基於標準的平台,可以開發、部署和管理N層結構的、面向Web的、以伺服器為中心的企業級應用,它是利用Java 2 平台來簡化與多級企業解決方案的開發、部署和管理相關的諸多複雜問題的應用體繫結構。
J2EE平台採用一個多層次分布式的應用模式。這意味著應用邏輯根據功能被劃分成組件,組成J2EE應用的不同應用組件安裝在不同的伺服器上,這種劃分是根據應用組件屬於多層次J2EE環境中的哪一個層次來決定的。如圖1所示,J2EE應用可以由三或四個層次組成,J2EE多層次應用一般被認為是三層應用,因為它們是被分布在三個不同的地點:用戶端機器、J2EE伺服器和資料庫或後端的傳統系統伺服器。三層架構應用是對標準的用戶端/伺服器應用架構的一種擴充, 即在用戶端應用和後台儲存之間增加一個多線程應用伺服器。
J2EE體系包括JSP、Servlet、EJB、WEB SERVICE等多項技術。這些技術的出現給電子商務時代的WEB應用開發提供了一個非常有競爭力的選擇。怎樣把這些技術組合起來,形成一個適應項目需要的穩定架構是項目開發過程中一個非常重要的步驟。
一個成功的軟體需要有一個成功的架構,但軟體架構的建立是一個複雜而又持續改進的過程,軟體開發人員們不可能對每個不同的項目做不同的架構,而總是盡量重用以前的架構,或開發出盡量通用的架構方案,Struts就是流行的基於J2EE的架構方案之一,其他常用的基於J2EE的架構方案還有Turbine、RealMothods等。本文主要探討Struts架構技術的應用。
J2EE應用程式架構的發展
在J2EE應用程式架構的發展路程中,主要經曆了兩個大的階段:
1、Model 1
在JSP頁面中結合商務邏輯、伺服器端處理常式和HTML,在JSP頁面中同時實現顯示、商務邏輯和流程式控制制,從而快速的完成Web應用開發。這種模型的不足之處:1)不利於應用擴充和更新。2)商務邏輯和表示邏輯混合在JSP頁面中沒有進行抽象和分離,不利於應用系統業務的重用和改動。
2、Model 2
表示的是基於MVC模式的架構。根據Model 2,servlet 處理資料存取和導航流, JSP處理表現。Model 2 使Java 工程師和HTML設計者分別工作於它們所擅長和負責的部分。Model 2應用的一部分發生改變並不強求其他部分也跟著發生改變。HTML 開發人員可以改變程式的外觀和感覺,並不需要改變後端servlet的工作方式。把應用邏輯、處理過程和顯示邏輯分成不同的組件實現。彌補了Model1的不足。
Struts架構技術
Struts 架構就是基於Model 2 的架構,也就是基於MVC模式的架構技術。它是一個免費的開源的WEB層的應用程式框架,具有很高的可配置性,和有一個不斷增長的特性列表。一個前端控制組件,一系列動作類,動作映射,處理XML的工具 + 生產力類,伺服器端java bean 的自動填滿,支援驗證的WEB 表單,國際化支援,產生HTML,實現表現邏輯和模板組成了struts的靈魂。圖2顯示了Struts組件是如何一起工作的。
Struts 的ActionServlet 控制導航流。其他Struts 類,比如Action, 用來訪問商務邏輯類。當 ActionServlet 從容器接收到一個請求,它使用URI (或者路徑“path”) 來決定哪個Action 將用來處理請求。一個 Action可以校正輸入,並且訪問業務層以從資料庫或其他資料服務中檢索資訊。
為校正輸入或者使用輸入來更新資料庫, Action 需要知道什麼被提交上來。並不是強制每個Action 從請求中抓取這些值,而是由 ActionServlet 將輸入綁定到JavaBean中。輸入 bean是Struts ActionForm c類的子類。ActionServlet 通過尋找請求的路徑可以決定使用哪個ActionForm,Action 也是通過同樣的方法選取的。每個Action都必須以HTTP 響應進行應答。 通常, Struts Action 並不自行加工響應資訊,而是將請求轉寄到其他資源,比如JSP 頁面。Struts 提供一個ActionForward 類,用來將一個頁面的路徑儲存為邏輯名稱。當完成商務邏輯後,Action 選擇並向Servlet返回一個ActionForward。Servlet 然後使用儲存在ActionForward 對象中的路徑來調用頁面完成響應。
Struts 將這些細節都綁定在一個ActionMapping 對象中。每個ActionMapping 相對於一個特定的路徑。當某個路徑被請求時,Servlet 就查詢ActionMapping 對象。ActionMapping對象告訴servlet哪個Actions、 ActionForms 和 ActionForwards 將被使用。
所有這些細節,關於Action, ActionForm, ActionForward, ActionMapping,以及其他一些東西,都在struts-config.xml 檔案中定義。 ActionServlet 在啟動時讀取這個設定檔,並建立一個設定物件資料庫。在運行時,Struts 應用根據的是檔案建立的設定物件,而不是檔案本身。
基於Struts架構的應用設計執行個體
本文以“面向鑄造行業的網路化製造ASP平台開發”項目中的軟體租用模組為例,來說明如何設計基於Struts架構的Web應用。在該模組中,使用者合法登陸網站後,可以根據需要選擇所要租用的軟體類型及軟體中的功能模組,確認資訊提交伺服器後,使用者將收到系統給予的登陸密碼,使用者即可登陸網站,線上使用租用軟體,實行業務託管。
根據項目需求分析,確定該系統必須具備的效能有:1)良好的互動性:工作內容中有相當大的部分是人機交流,這就要求系統的互動性要強。2)較好的可擴充性:工作的內容和形式具有多變性,要求系統具有良好的可擴充性。3)良好的可維護性:系統投入使用後,主要是由管理員承擔系統維護的工作,維護人員不定期變動,這就要求系統的可維護性強。4)具有較好的跨平台性:使用者可能使用各種不同的作業系統,而且為了適應今後可能的變化,系統應具有較好的跨平台性。基於以上四點,在開發軟體租用模組時,採用J2EE編程環境,並相應採用了專為J2EE定製的Struts架構。
做基於Struts架構的項目開發,關鍵是要有一個好的整體模型,計劃好系統中包括哪幾個模組,每個模組各需要什麼樣的FormBean、JavaBean,各種處理結果都通過哪些JSP頁面來展現,同時配置好struts-config.xml檔案。本系統的設計模型如圖3所示。
ActionServlet接受所有的HTTP請求,然後根據設定檔的內容,決定將請求映射到哪一個Action對象,本系統中有兩個Action對象,分別對應著登陸遠程軟體(LogonAction)和系統反饋密碼(MailAction)。
LogonAction首先會驗證使用者是否已經登入,如果沒有登入則重新導向到登入頁面(Logon.jsp),驗證通過後根據請求參數決定下一步的處理,如果使用者還沒有選擇租用軟體,則轉到軟體介紹租用介面(Query.jsp),選擇需要租用的軟體或軟體的某些模組,提交資訊後,MailAction使伺服器向使用者提交密碼,使用者接收到密碼後,登陸運行軟體。
如果使用者登陸軟體成功,則通過設定檔struts-config.xml中的ActionForward,通過GetInfo對象把該使用者租用的軟體資訊讀取道FormBean中,然後調用JSP頁面顯示Bean裡的資料。如果是儲存資料資訊,則調SaveInfo對象將FormBean裡保持的資訊存入資料庫;如果是修改資訊,則調ModifyInfo對象將FormBean裡保持的修改後的資訊存入資料庫;如果是刪除資料資訊,則調用DeleteInfo對象將FormBean裡保持的資訊從資料庫中刪除。
經過這樣設計的系統,使用者介面和資料處理已經完全分離,再加上在JSP頁面中使用了自訂標籤,使頁面中沒有了Java的指令碼代碼,這樣Web介面的設計和後端程式的編寫就有了清晰的界線,便於Team Dev的分工,並且維護起來也很方便。
結束語
Struts是一種非常優秀的基於J2EE的MVC應用程式框架,雖然從正式發布到現在也只有兩年多的時間,但它已經越來越多地運用於企業平台之上,許多大型網站已成功地應用了Struts架構。本文在總結了Struts架構技術及其工作原理的基礎上,結合“面向鑄造行業的網路化製造ASP平台開發”項目,提出了線上租用模組的設計思路,這為今後更好的應用採用Struts架構提供了參考。