J2EE簡介
J2EE是一個開放的、基于標(biāo)準(zhǔn)的平臺,可以開發(fā)、部署和管理N層結(jié)構(gòu)的、面向Web的、以服務(wù)器為中心的企業(yè)級應(yīng)用,它是利用Java 2 平臺來簡化與多級企業(yè)解決方案的開發(fā)、部署和管理相關(guān)的諸多復(fù)雜問題的應(yīng)用體系結(jié)構(gòu)。
J2EE平臺采用一個多層次分布式的應(yīng)用模式。這意味著應(yīng)用邏輯根據(jù)功能被劃分成組件,組成J2EE應(yīng)用的不同應(yīng)用組件安裝在不同的服務(wù)器上,這種劃分是根據(jù)應(yīng)用組件屬于多層次J2EE環(huán)境中的哪一個層次來決定的。如圖1所示,J2EE應(yīng)用可以由三或四個層次組成,J2EE多層次應(yīng)用一般被認(rèn)為是三層應(yīng)用,因為它們是被分布在三個不同的地點:客戶端機器、J2EE服務(wù)器和數(shù)據(jù)庫或后端的傳統(tǒng)系統(tǒng)服務(wù)器。三層架構(gòu)應(yīng)用是對標(biāo)準(zhǔn)的客戶端/服務(wù)器應(yīng)用架構(gòu)的一種擴(kuò)展, 即在客戶端應(yīng)用和后臺存儲之間增加一個多線程應(yīng)用服務(wù)器。

J2EE體系包括JSP、Servlet、EJB、WEB SERVICE等多項技術(shù)。這些技術(shù)的出現(xiàn)給電子商務(wù)時代的WEB應(yīng)用開發(fā)提供了一個非常有競爭力的選擇。怎樣把這些技術(shù)組合起來,形成一個適應(yīng)項目需要的穩(wěn)定架構(gòu)是項目開發(fā)過程中一個非常重要的步驟。
一個成功的軟件需要有一個成功的架構(gòu),但軟件架構(gòu)的建立是一個復(fù)雜而又持續(xù)改進(jìn)的過程,軟件開發(fā)者們不可能對每個不同的項目做不同的架構(gòu),而總是盡量重用以前的架構(gòu),或開發(fā)出盡量通用的架構(gòu)方案,Struts就是流行的基于J2EE的架構(gòu)方案之一,其他常用的基于J2EE的架構(gòu)方案還有Turbine、RealMothods等。本文主要探討Struts框架技術(shù)的應(yīng)用。
J2EE應(yīng)用程序架構(gòu)的發(fā)展
在J2EE應(yīng)用程序架構(gòu)的發(fā)展路程中,主要經(jīng)歷了兩個大的階段:
1、Model 1
在JSP頁面中結(jié)合業(yè)務(wù)邏輯、服務(wù)器端處理程序和HTML,在JSP頁面中同時實現(xiàn)顯示、業(yè)務(wù)邏輯和流程控制,從而快速的完成Web應(yīng)用開發(fā)。這種模型的不足之處:1)不利于應(yīng)用擴(kuò)展和更新。2)業(yè)務(wù)邏輯和表示邏輯混合在JSP頁面中沒有進(jìn)行抽象和分離,不利于應(yīng)用系統(tǒng)業(yè)務(wù)的重用和改動。
2、Model 2
表示的是基于MVC模式的框架。根據(jù)Model 2,servlet 處理數(shù)據(jù)存取和導(dǎo)航流, JSP處理表現(xiàn)。Model 2 使Java 工程師和HTML設(shè)計者分別工作于它們所擅長和負(fù)責(zé)的部分。Model 2應(yīng)用的一部分發(fā)生改變并不強求其他部分也跟著發(fā)生改變。HTML 開發(fā)人員可以改變程序的外觀和感覺,并不需要改變后端servlet的工作方式。把應(yīng)用邏輯、處理過程和顯示邏輯分成不同的組件實現(xiàn)。彌補了Model1的不足。
Struts框架技術(shù)
Struts 框架就是基于Model 2 的架構(gòu),也就是基于MVC模式的框架技術(shù)。它是一個免費的開源的WEB層的應(yīng)用框架,具有很高的可配置性,和有一個不斷增長的特性列表。一個前端控制組件,一系列動作類,動作映射,處理XML的實用工具類,服務(wù)器端java bean 的自動填充,支持驗證的WEB 表單,國際化支持,生成HTML,實現(xiàn)表現(xiàn)邏輯和模板組成了struts的靈魂。圖2顯示了Struts組件是如何一起工作的。

Struts 的ActionServlet 控制導(dǎo)航流。其他Struts 類,比如Action, 用來訪問業(yè)務(wù)邏輯類。當(dāng) ActionServlet 從容器接收到一個請求,它使用URI (或者路徑“path”) 來決定哪個Action 將用來處理請求。一個 Action可以校驗輸入,并且訪問業(yè)務(wù)層以從數(shù)據(jù)庫或其他數(shù)據(jù)服務(wù)中檢索信息。
為校驗輸入或者使用輸入來更新數(shù)據(jù)庫, Action 需要知道什么被提交上來。并不是強制每個Action 從請求中抓取這些值,而是由 ActionServlet 將輸入綁定到JavaBean中。輸入 bean是Struts ActionForm c類的子類。ActionServlet 通過查找請求的路徑可以決定使用哪個ActionForm,Action 也是通過同樣的方法選取的。每個Action都必須以HTTP 響應(yīng)進(jìn)行應(yīng)答。 通常, Struts Action 并不自行加工響應(yīng)信息,而是將請求轉(zhuǎn)發(fā)到其他資源,比如JSP 頁面。Struts 提供一個ActionForward 類,用來將一個頁面的路徑存儲為邏輯名稱。當(dāng)完成業(yè)務(wù)邏輯后,Action 選擇并向Servlet返回一個ActionForward。Servlet 然后使用存儲在ActionForward 對象中的路徑來調(diào)用頁面完成響應(yīng)。
Struts 將這些細(xì)節(jié)都綁定在一個ActionMapping 對象中。每個ActionMapping 相對于一個特定的路徑。當(dāng)某個路徑被請求時,Servlet 就查詢ActionMapping 對象。ActionMapping對象告訴servlet哪個Actions、 ActionForms 和 ActionForwards 將被使用。
所有這些細(xì)節(jié),關(guān)于Action, ActionForm, ActionForward, ActionMapping,以及其他一些東西,都在struts-config.xml 文件中定義。 ActionServlet 在啟動時讀取這個配置文件,并創(chuàng)建一個配置對象數(shù)據(jù)庫。在運行時,Struts 應(yīng)用根據(jù)的是文件創(chuàng)建的配置對象,而不是文件本身。
基于Struts框架的應(yīng)用設(shè)計實例
本文以“面向鑄造行業(yè)的網(wǎng)絡(luò)化制造ASP平臺開發(fā)”項目中的軟件租用模塊為例,來說明如何設(shè)計基于Struts框架的Web應(yīng)用。在該模塊中,用戶合法登陸網(wǎng)站后,可以根據(jù)需要選擇所要租用的軟件類型及軟件中的功能模塊,確認(rèn)信息提交服務(wù)器后,用戶將收到系統(tǒng)給予的登陸密碼,用戶即可登陸網(wǎng)站,在線使用租用軟件,實行業(yè)務(wù)托管。
根據(jù)項目需求分析,確定該系統(tǒng)必須具備的性能有:1)良好的交互性:工作內(nèi)容中有相當(dāng)大的部分是人機交流,這就要求系統(tǒng)的交互性要強。2)較好的可擴(kuò)展性:工作的內(nèi)容和形式具有多變性,要求系統(tǒng)具有良好的可擴(kuò)展性。3)良好的可維護(hù)性:系統(tǒng)投入使用后,主要是由管理員承擔(dān)系統(tǒng)維護(hù)的工作,維護(hù)人員不定期變動,這就要求系統(tǒng)的可維護(hù)性強。4)具有較好的跨平臺性:用戶可能使用各種不同的操作系統(tǒng),而且為了適應(yīng)今后可能的變化,系統(tǒng)應(yīng)具有較好的跨平臺性?;谝陨纤狞c,在開發(fā)軟件租用模塊時,采用J2EE編程環(huán)境,并相應(yīng)采用了專為J2EE定制的Struts框架。
做基于Struts框架的項目開發(fā),關(guān)鍵是要有一個好的整體模型,計劃好系統(tǒng)中包括哪幾個模塊,每個模塊各需要什么樣的FormBean、JavaBean,各種處理結(jié)果都通過哪些JSP頁面來展現(xiàn),同時配置好struts-config.xml文件。本系統(tǒng)的設(shè)計模型如圖3所示。

ActionServlet接受所有的HTTP請求,然后根據(jù)配置文件的內(nèi)容,決定將請求映射到哪一個Action對象,本系統(tǒng)中有兩個Action對象,分別對應(yīng)著登陸遠(yuǎn)程軟件(LogonAction)和系統(tǒng)反饋密碼(MailAction)。
LogonAction首先會驗證用戶是否已經(jīng)登錄,如果沒有登錄則重定向到登錄頁面(Logon.jsp),驗證通過后根據(jù)請求參數(shù)決定下一步的處理,如果用戶還沒有選擇租用軟件,則轉(zhuǎn)到軟件介紹租用界面(Query.jsp),選擇需要租用的軟件或軟件的某些模塊,提交信息后,MailAction使服務(wù)器向用戶提交密碼,用戶接收到密碼后,登陸運行軟件。
如果用戶登陸軟件成功,則通過配置文件struts-config.xml中的ActionForward,通過GetInfo對象把該用戶租用的軟件信息讀取道FormBean中,然后調(diào)用JSP頁面顯示Bean里的數(shù)據(jù)。如果是保存數(shù)據(jù)信息,則調(diào)SaveInfo對象將FormBean里保持的信息存入數(shù)據(jù)庫;如果是修改信息,則調(diào)ModifyInfo對象將FormBean里保持的修改后的信息存入數(shù)據(jù)庫;如果是刪除數(shù)據(jù)信息,則調(diào)用DeleteInfo對象將FormBean里保持的信息從數(shù)據(jù)庫中刪除。
經(jīng)過這樣設(shè)計的系統(tǒng),用戶界面和數(shù)據(jù)處理已經(jīng)完全分離,再加上在JSP頁面中使用了自定義標(biāo)記,使頁面中沒有了Java的腳本代碼,這樣Web界面的設(shè)計和后端程序的編寫就有了清晰的界線,便于開發(fā)團(tuán)隊的分工,并且維護(hù)起來也很方便。
結(jié)束語
Struts是一種非常優(yōu)秀的基于J2EE的MVC應(yīng)用框架,雖然從正式發(fā)布到現(xiàn)在也只有兩年多的時間,但它已經(jīng)越來越多地運用于企業(yè)平臺之上,許多大型網(wǎng)站已成功地應(yīng)用了Struts框架。本文在總結(jié)了Struts框架技術(shù)及其工作原理的基礎(chǔ)上,結(jié)合“面向鑄造行業(yè)的網(wǎng)絡(luò)化制造ASP平臺開發(fā)”項目,提出了在線租用模塊的設(shè)計思路,這為今后更好的應(yīng)用采用Struts框架提供了參考。