posts - 40,  comments - 7,  trackbacks - 0

          J2EE簡(jiǎn)介



          J2EE是一個(gè)開(kāi)放的、基于標(biāo)準(zhǔn)的平臺(tái),可以開(kāi)發(fā)、部署和管理N層結(jié)構(gòu)的、面向Web的、以服務(wù)器為中心的企業(yè)級(jí)應(yīng)用,它是利用Java 2 平臺(tái)來(lái)簡(jiǎn)化與多級(jí)企業(yè)解決方案的開(kāi)發(fā)、部署和管理相關(guān)的諸多復(fù)雜問(wèn)題的應(yīng)用體系結(jié)構(gòu)。

          J2EE平臺(tái)采用一個(gè)多層次分布式的應(yīng)用模式。這意味著應(yīng)用邏輯根據(jù)功能被劃分成組件,組成J2EE應(yīng)用的不同應(yīng)用組件安裝在不同的服務(wù)器上,這種劃分是根據(jù)應(yīng)用組件屬于多層次J2EE環(huán)境中的哪一個(gè)層次來(lái)決定的。如圖1所示,J2EE應(yīng)用可以由三或四個(gè)層次組成,J2EE多層次應(yīng)用一般被認(rèn)為是三層應(yīng)用,因?yàn)樗鼈兪潜环植荚谌齻€(gè)不同的地點(diǎn):客戶(hù)端機(jī)器、J2EE服務(wù)器和數(shù)據(jù)庫(kù)或后端的傳統(tǒng)系統(tǒng)服務(wù)器。三層架構(gòu)應(yīng)用是對(duì)標(biāo)準(zhǔn)的客戶(hù)端/服務(wù)器應(yīng)用架構(gòu)的一種擴(kuò)展, 即在客戶(hù)端應(yīng)用和后臺(tái)存儲(chǔ)之間增加一個(gè)多線程應(yīng)用服務(wù)器。



          J2EE體系包括JSP、Servlet、EJB、WEB SERVICE等多項(xiàng)技術(shù)。這些技術(shù)的出現(xiàn)給電子商務(wù)時(shí)代的WEB應(yīng)用開(kāi)發(fā)提供了一個(gè)非常有競(jìng)爭(zhēng)力的選擇。怎樣把這些技術(shù)組合起來(lái),形成一個(gè)適應(yīng)項(xiàng)目需要的穩(wěn)定架構(gòu)是項(xiàng)目開(kāi)發(fā)過(guò)程中一個(gè)非常重要的步驟。

          一個(gè)成功的軟件需要有一個(gè)成功的架構(gòu),但軟件架構(gòu)的建立是一個(gè)復(fù)雜而又持續(xù)改進(jìn)的過(guò)程,軟件開(kāi)發(fā)者們不可能對(duì)每個(gè)不同的項(xiàng)目做不同的架構(gòu),而總是盡量重用以前的架構(gòu),或開(kāi)發(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)歷了兩個(gè)大的階段:

          1、Model 1

          在JSP頁(yè)面中結(jié)合業(yè)務(wù)邏輯、服務(wù)器端處理程序和HTML,在JSP頁(yè)面中同時(shí)實(shí)現(xiàn)顯示、業(yè)務(wù)邏輯和流程控制,從而快速的完成Web應(yīng)用開(kāi)發(fā)。這種模型的不足之處:1)不利于應(yīng)用擴(kuò)展和更新。2)業(yè)務(wù)邏輯和表示邏輯混合在JSP頁(yè)面中沒(méi)有進(jìn)行抽象和分離,不利于應(yīng)用系統(tǒng)業(yè)務(wù)的重用和改動(dòng)。

          2、Model 2

          表示的是基于MVC模式的框架。根據(jù)Model 2,servlet 處理數(shù)據(jù)存取和導(dǎo)航流, JSP處理表現(xiàn)。Model 2 使Java 工程師和HTML設(shè)計(jì)者分別工作于它們所擅長(zhǎng)和負(fù)責(zé)的部分。Model 2應(yīng)用的一部分發(fā)生改變并不強(qiáng)求其他部分也跟著發(fā)生改變。HTML 開(kāi)發(fā)人員可以改變程序的外觀和感覺(jué),并不需要改變后端servlet的工作方式。把應(yīng)用邏輯、處理過(guò)程和顯示邏輯分成不同的組件實(shí)現(xiàn)。彌補(bǔ)了Model1的不足。

          Struts框架技術(shù)

          Struts 框架就是基于Model 2 的架構(gòu),也就是基于MVC模式的框架技術(shù)。它是一個(gè)免費(fèi)的開(kāi)源的WEB層的應(yīng)用框架,具有很高的可配置性,和有一個(gè)不斷增長(zhǎng)的特性列表。一個(gè)前端控制組件,一系列動(dòng)作類(lèi),動(dòng)作映射,處理XML的實(shí)用工具類(lèi),服務(wù)器端java bean 的自動(dòng)填充,支持驗(yàn)證的WEB 表單,國(guó)際化支持,生成HTML,實(shí)現(xiàn)表現(xiàn)邏輯和模板組成了struts的靈魂。圖2顯示了Struts組件是如何一起工作的。



          Struts 的ActionServlet 控制導(dǎo)航流。其他Struts 類(lèi),比如Action, 用來(lái)訪問(wèn)業(yè)務(wù)邏輯類(lèi)。當(dāng) ActionServlet 從容器接收到一個(gè)請(qǐng)求,它使用URI (或者路徑“path”) 來(lái)決定哪個(gè)Action 將用來(lái)處理請(qǐng)求。一個(gè) Action可以校驗(yàn)輸入,并且訪問(wèn)業(yè)務(wù)層以從數(shù)據(jù)庫(kù)或其他數(shù)據(jù)服務(wù)中檢索信息。

          為校驗(yàn)輸入或者使用輸入來(lái)更新數(shù)據(jù)庫(kù), Action 需要知道什么被提交上來(lái)。并不是強(qiáng)制每個(gè)Action 從請(qǐng)求中抓取這些值,而是由 ActionServlet 將輸入綁定到JavaBean中。輸入 bean是Struts ActionForm c類(lèi)的子類(lèi)。ActionServlet 通過(guò)查找請(qǐng)求的路徑可以決定使用哪個(gè)ActionForm,Action 也是通過(guò)同樣的方法選取的。每個(gè)Action都必須以HTTP 響應(yīng)進(jìn)行應(yīng)答。 通常, Struts Action 并不自行加工響應(yīng)信息,而是將請(qǐng)求轉(zhuǎn)發(fā)到其他資源,比如JSP 頁(yè)面。Struts 提供一個(gè)ActionForward 類(lèi),用來(lái)將一個(gè)頁(yè)面的路徑存儲(chǔ)為邏輯名稱(chēng)。當(dāng)完成業(yè)務(wù)邏輯后,Action 選擇并向Servlet返回一個(gè)ActionForward。Servlet 然后使用存儲(chǔ)在ActionForward 對(duì)象中的路徑來(lái)調(diào)用頁(yè)面完成響應(yīng)。

          Struts 將這些細(xì)節(jié)都綁定在一個(gè)ActionMapping 對(duì)象中。每個(gè)ActionMapping 相對(duì)于一個(gè)特定的路徑。當(dāng)某個(gè)路徑被請(qǐng)求時(shí),Servlet 就查詢(xún)ActionMapping 對(duì)象。ActionMapping對(duì)象告訴servlet哪個(gè)Actions、 ActionForms 和 ActionForwards 將被使用。

          所有這些細(xì)節(jié),關(guān)于Action, ActionForm, ActionForward, ActionMapping,以及其他一些東西,都在struts-config.xml 文件中定義。 ActionServlet 在啟動(dòng)時(shí)讀取這個(gè)配置文件,并創(chuàng)建一個(gè)配置對(duì)象數(shù)據(jù)庫(kù)。在運(yùn)行時(shí),Struts 應(yīng)用根據(jù)的是文件創(chuàng)建的配置對(duì)象,而不是文件本身。

          基于Struts框架的應(yīng)用設(shè)計(jì)實(shí)例

          本文以“面向鑄造行業(yè)的網(wǎng)絡(luò)化制造ASP平臺(tái)開(kāi)發(fā)”項(xiàng)目中的軟件租用模塊為例,來(lái)說(shuō)明如何設(shè)計(jì)基于Struts框架的Web應(yīng)用。在該模塊中,用戶(hù)合法登陸網(wǎng)站后,可以根據(jù)需要選擇所要租用的軟件類(lèi)型及軟件中的功能模塊,確認(rèn)信息提交服務(wù)器后,用戶(hù)將收到系統(tǒng)給予的登陸密碼,用戶(hù)即可登陸網(wǎng)站,在線使用租用軟件,實(shí)行業(yè)務(wù)托管。

          根據(jù)項(xiàng)目需求分析,確定該系統(tǒng)必須具備的性能有:1)良好的交互性:工作內(nèi)容中有相當(dāng)大的部分是人機(jī)交流,這就要求系統(tǒng)的交互性要強(qiáng)。2)較好的可擴(kuò)展性:工作的內(nèi)容和形式具有多變性,要求系統(tǒng)具有良好的可擴(kuò)展性。3)良好的可維護(hù)性:系統(tǒng)投入使用后,主要是由管理員承擔(dān)系統(tǒng)維護(hù)的工作,維護(hù)人員不定期變動(dòng),這就要求系統(tǒng)的可維護(hù)性強(qiáng)。4)具有較好的跨平臺(tái)性:用戶(hù)可能使用各種不同的操作系統(tǒng),而且為了適應(yīng)今后可能的變化,系統(tǒng)應(yīng)具有較好的跨平臺(tái)性。基于以上四點(diǎn),在開(kāi)發(fā)軟件租用模塊時(shí),采用J2EE編程環(huán)境,并相應(yīng)采用了專(zhuān)為J2EE定制的Struts框架。

          做基于Struts框架的項(xiàng)目開(kāi)發(fā),關(guān)鍵是要有一個(gè)好的整體模型,計(jì)劃好系統(tǒng)中包括哪幾個(gè)模塊,每個(gè)模塊各需要什么樣的FormBean、JavaBean,各種處理結(jié)果都通過(guò)哪些JSP頁(yè)面來(lái)展現(xiàn),同時(shí)配置好struts-config.xml文件。本系統(tǒng)的設(shè)計(jì)模型如圖3所示。



          ActionServlet接受所有的HTTP請(qǐng)求,然后根據(jù)配置文件的內(nèi)容,決定將請(qǐng)求映射到哪一個(gè)Action對(duì)象,本系統(tǒng)中有兩個(gè)Action對(duì)象,分別對(duì)應(yīng)著登陸遠(yuǎn)程軟件(LogonAction)和系統(tǒng)反饋密碼(MailAction)。

          LogonAction首先會(huì)驗(yàn)證用戶(hù)是否已經(jīng)登錄,如果沒(méi)有登錄則重定向到登錄頁(yè)面(Logon.jsp),驗(yàn)證通過(guò)后根據(jù)請(qǐng)求參數(shù)決定下一步的處理,如果用戶(hù)還沒(méi)有選擇租用軟件,則轉(zhuǎn)到軟件介紹租用界面(Query.jsp),選擇需要租用的軟件或軟件的某些模塊,提交信息后,MailAction使服務(wù)器向用戶(hù)提交密碼,用戶(hù)接收到密碼后,登陸運(yùn)行軟件。

          如果用戶(hù)登陸軟件成功,則通過(guò)配置文件struts-config.xml中的ActionForward,通過(guò)GetInfo對(duì)象把該用戶(hù)租用的軟件信息讀取道FormBean中,然后調(diào)用JSP頁(yè)面顯示Bean里的數(shù)據(jù)。如果是保存數(shù)據(jù)信息,則調(diào)SaveInfo對(duì)象將FormBean里保持的信息存入數(shù)據(jù)庫(kù);如果是修改信息,則調(diào)ModifyInfo對(duì)象將FormBean里保持的修改后的信息存入數(shù)據(jù)庫(kù);如果是刪除數(shù)據(jù)信息,則調(diào)用DeleteInfo對(duì)象將FormBean里保持的信息從數(shù)據(jù)庫(kù)中刪除。

          經(jīng)過(guò)這樣設(shè)計(jì)的系統(tǒng),用戶(hù)界面和數(shù)據(jù)處理已經(jīng)完全分離,再加上在JSP頁(yè)面中使用了自定義標(biāo)記,使頁(yè)面中沒(méi)有了Java的腳本代碼,這樣Web界面的設(shè)計(jì)和后端程序的編寫(xiě)就有了清晰的界線,便于開(kāi)發(fā)團(tuán)隊(duì)的分工,并且維護(hù)起來(lái)也很方便。

          結(jié)束語(yǔ)

          Struts是一種非常優(yōu)秀的基于J2EE的MVC應(yīng)用框架,雖然從正式發(fā)布到現(xiàn)在也只有兩年多的時(shí)間,但它已經(jīng)越來(lái)越多地運(yùn)用于企業(yè)平臺(tái)之上,許多大型網(wǎng)站已成功地應(yīng)用了Struts框架。本文在總結(jié)了Struts框架技術(shù)及其工作原理的基礎(chǔ)上,結(jié)合“面向鑄造行業(yè)的網(wǎng)絡(luò)化制造ASP平臺(tái)開(kāi)發(fā)”項(xiàng)目,提出了在線租用模塊的設(shè)計(jì)思路,這為今后更好的應(yīng)用采用Struts框架提供了參考。

          posted on 2006-08-17 19:36 Lansing 閱讀(1220) 評(píng)論(1)  編輯  收藏 所屬分類(lèi): StrutsJava

          FeedBack:
          # re: Struts框架技術(shù)在J2EE中的研究和應(yīng)用[未登錄](méi)
          2007-04-25 17:34 | aa
          dfetetgfgf  回復(fù)  更多評(píng)論
            

          只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          <2006年8月>
          303112345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          歡迎探討,努力學(xué)習(xí)Java哈

          常用鏈接

          留言簿(3)

          隨筆分類(lèi)

          隨筆檔案

          文章分類(lèi)

          文章檔案

          Lansing's Download

          Lansing's Link

          我的博客

          搜索

          •  

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 长垣县| 博白县| 元氏县| 屏山县| 运城市| 磐安县| 青海省| 左权县| 彰武县| 如皋市| 静安区| 金塔县| 祁阳县| 北流市| 泰来县| 甘泉县| 泰州市| 宜兰市| 万年县| 丰原市| 进贤县| 青河县| 云梦县| 绥阳县| 迁安市| 南陵县| 施秉县| 永寿县| 榆社县| 张家港市| 合山市| 华宁县| 潞西市| 乐都县| 两当县| 道孚县| 汝州市| 丹东市| 太仆寺旗| 屏边| 县级市|