已閱讀5頁(yè),還剩7頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
J2EE初學(xué)者需要注意的問(wèn)題J2EE體系結(jié)構(gòu)簡(jiǎn)單介紹 一、J2EE提出的背景1、 企業(yè)級(jí)應(yīng)用框架的需求在許多企業(yè)級(jí)應(yīng)用中,例如數(shù)據(jù)庫(kù)連接、郵件服務(wù)、事務(wù)處理等都是一些通用企業(yè)需求模塊,這些模塊如果每次再開(kāi)發(fā)中都由開(kāi)發(fā)人員來(lái)完成的話,將會(huì)造成開(kāi)發(fā)周期長(zhǎng)和代碼可靠性差等問(wèn)題。于是許多大公司開(kāi)發(fā)了自己的通用模塊服務(wù)。這些服務(wù)性的軟件系列同陳為中間件。2、 為了通用必須要提出規(guī)范,不然無(wú)法達(dá)到通用在上面的需求基礎(chǔ)之上,許多公司都開(kāi)發(fā)了自己的中間件,但其與用戶(hù)的溝通都各有不同,從而導(dǎo)致用戶(hù)無(wú)法將各個(gè)公司不同的中間件組裝在一塊為自己服務(wù)。從而產(chǎn)生瓶頸。于是提出標(biāo)準(zhǔn)的概念。其實(shí)J2EE就是基于JAVA技術(shù)的一系列標(biāo)準(zhǔn)。注:中間件的解釋 中間件處在操作系統(tǒng)和更高一級(jí)應(yīng)用程序之間。他充當(dāng)?shù)墓δ苁牵簩?yīng)用程序運(yùn)行環(huán)境與操作系統(tǒng)隔離,從而實(shí)現(xiàn)應(yīng)用程序開(kāi)發(fā)者不必為更多系統(tǒng)問(wèn)題憂(yōu)慮,而直接關(guān)注該應(yīng)用程序在解決問(wèn)題上的能力 。我們后面說(shuō)到的容器的概念就是中間件的一種。二、相關(guān)名詞解釋容器:充當(dāng)中間件的角色WEB容器:給處于其中的應(yīng)用程序組件(JSP,SERVLET)提供一個(gè)環(huán)境,使JSP,SERVLET直接更容器中的環(huán)境變量接口交互,不必關(guān)注其它系統(tǒng)問(wèn)題。主要有WEB服務(wù)器來(lái)實(shí)現(xiàn)。例如:TOMCAT,WEBLOGIC,WEBSPHERE等。該容器提供的接口嚴(yán)格遵守J2EE規(guī)范中的WEB APPLICATION 標(biāo)準(zhǔn)。我們把遵守以上標(biāo)準(zhǔn)的WEB服務(wù)器就叫做J2EE中的WEB容器。EJB容器:Enterprise java bean 容器。更具有行業(yè)領(lǐng)域特色。他提供給運(yùn)行在其中的組件EJB各種管理功能。只要滿(mǎn)足J2EE規(guī)范的EJB放入該容器,馬上就會(huì)被容器進(jìn)行高效率的管理。并且可以通過(guò)現(xiàn)成的接口來(lái)獲得系統(tǒng)級(jí)別的服務(wù)。例如郵件服務(wù)、事務(wù)管理。WEB容器和EJB容器在原理上是大體相同的,更多的區(qū)別是被隔離的外界環(huán)境。WEB容器更多的是跟基于HTTP的請(qǐng)求打交道。而EJB容器不是。它是更多的跟數(shù)據(jù)庫(kù)、其它服務(wù)打交道。但他們都是把與外界的交互實(shí)現(xiàn)從而減輕應(yīng)用程序的負(fù)擔(dān)。例如SERVLET不用關(guān)心HTTP的細(xì)節(jié),直接引用環(huán)境變量session,request,response就行、EJB不用關(guān)心數(shù)據(jù)庫(kù)連接速度、各種事務(wù)控制,直接由容器來(lái)完成。RMI/IIOP:遠(yuǎn)程方法調(diào)用/internet對(duì)象請(qǐng)求中介協(xié)議,他們主要用于通過(guò)遠(yuǎn)程調(diào)用服務(wù)。例如,遠(yuǎn)程有一臺(tái)計(jì)算機(jī)上運(yùn)行一個(gè)程序,它提供股票分析服務(wù),我們可以在本地計(jì)算機(jī)上實(shí)現(xiàn)對(duì)其直接調(diào)用。當(dāng)然這是要通過(guò)一定的規(guī)范才能在異構(gòu)的系統(tǒng)之間進(jìn)行通信。RMI是JAVA特有的。JNDI:JAVA命名目錄服務(wù)。主要提供的功能是:提供一個(gè)目錄系統(tǒng),讓其它各地的應(yīng)用程序在其上面留下自己的索引,從而滿(mǎn)足快速查找和定位分布式應(yīng)用程序的功能。JMS:JAVA消息服務(wù)。主要實(shí)現(xiàn)各個(gè)應(yīng)用程序之間的通訊。包括點(diǎn)對(duì)點(diǎn)和廣播。JAVAMAIL:JAVA郵件服務(wù)。提供郵件的存儲(chǔ)、傳輸功能。他是JAVA編程中實(shí)現(xiàn)郵件功能的核心。相當(dāng)MS中的EXCHANGE開(kāi)發(fā)包。JTA:JAVA事務(wù)服務(wù)。提供各種分布式事務(wù)服務(wù)。應(yīng)用程序只需調(diào)用其提供的接口即可。JAF:JAVA安全認(rèn)證框架。提供一些安全控制方面的框架。讓開(kāi)發(fā)者通過(guò)各種部署和自定義實(shí)現(xiàn)自己的個(gè)性安全控制策略。EAI:企業(yè)應(yīng)用集成。是一種概念,從而牽涉到好多技術(shù)。J2EE技術(shù)是一種很好的集成實(shí)現(xiàn)。三、J2EE的優(yōu)越性1、 基于JAVA 技術(shù),平臺(tái)無(wú)關(guān)性表現(xiàn)突出2、 開(kāi)放的標(biāo)準(zhǔn),許多大型公司已經(jīng)實(shí)現(xiàn)了對(duì)該規(guī)范支持的應(yīng)用服務(wù)器。如BEA ,IBM,ORACLE等。3、 提供相當(dāng)專(zhuān)業(yè)的通用軟件服務(wù)。4、 提供了一個(gè)優(yōu)秀的企業(yè)級(jí)應(yīng)用程序框架,對(duì)快速高質(zhì)量開(kāi)發(fā)打下基礎(chǔ)四、現(xiàn)狀J2EE是由SUN 公司開(kāi)發(fā)的一套企業(yè)級(jí)應(yīng)用規(guī)范?,F(xiàn)在最高版本是1.4。支持J2EE的應(yīng)用服務(wù)器有IBM WEBSPHERE APPLICATION SERVER,BEA WEBLOGIC SERVER,JBOSS,ORACLE APPLICATION SERVER,SUN ONE APPLICATION SERVER 等。J2EE開(kāi)發(fā)中幾個(gè)主流框架的簡(jiǎn)短使用總結(jié)2008-11-13 作者:夢(mèng)紫纖芊 來(lái)源:網(wǎng)絡(luò) 閱讀 203 次 spring,SSH框架處于一個(gè)難于撼動(dòng)的地位,spring以其輕量級(jí),易操作的,開(kāi)發(fā)高效等優(yōu)點(diǎn),被業(yè)界內(nèi)廣泛應(yīng)用。IOC及AOP是spring被重要應(yīng)用的兩點(diǎn),由于struts,struts2,webword等一系列view框架的存在,springMVC的應(yīng)用顯得有些力不從心,不能被廣為推廣使用。AOP使用中目前主要用,配置ehcache的時(shí)候用到過(guò)一次,其它地方應(yīng)用不是太多,更多的是IOC的操作。與hibernate,struts結(jié)合使用,采用不同的設(shè)計(jì)模式,面向接口編程,已經(jīng)成為業(yè)界公認(rèn)的框架模式。struts的action交由spring配置bean文件來(lái)完成,由spring代理其action的操作,數(shù)據(jù)源/數(shù)據(jù)庫(kù)連接池也在其配置文件里完成。 spring更重要的是完成了應(yīng)用間的解耦,更加有利于程序的維護(hù),擴(kuò)展。 hibernate,ORM領(lǐng)域中的經(jīng)典之作。OO與關(guān)系型數(shù)據(jù)庫(kù)處于不協(xié)調(diào)發(fā)展的局面,數(shù)據(jù)庫(kù)如今卻成了OO編程路上的絆腳石,阻礙著OO向前發(fā)展,ORM于此解決了關(guān)系型數(shù)據(jù)庫(kù)與對(duì)象間的映射。hibernate自動(dòng)生成sql語(yǔ)句封裝在內(nèi)部,開(kāi)發(fā)人員無(wú)須寫(xiě)SQL語(yǔ)句,HQL語(yǔ)法又相當(dāng)簡(jiǎn)單,大大簡(jiǎn)化了開(kāi)發(fā)的步驟。由于hibernate處理持久層的角色,只要數(shù)據(jù)庫(kù)設(shè)計(jì)合理,更多的是利用IDE(MyEclipse)就可以生成相對(duì)的持久類(lèi)POJO以及映射配置文件,與數(shù)據(jù)庫(kù)關(guān)聯(lián)起來(lái),操作POJO類(lèi)即操作數(shù)據(jù)庫(kù)。spring對(duì)hibernate提供了很好的兼容性,在hibernate配置二級(jí)緩存,可以對(duì)系統(tǒng)應(yīng)用起到良好的效果。 Ibatis,ORM領(lǐng)域中一個(gè)框架,相對(duì)hibernate而言,ibatis更加小巧,更易于學(xué)習(xí),對(duì)數(shù)據(jù)庫(kù)設(shè)計(jì)不太友好的,使用IBATIS比hibernate更合適。ibatis不會(huì)像hibernate一樣生成SQL,而是需要開(kāi)發(fā)人員自己去寫(xiě)SQL語(yǔ)句,這一點(diǎn)也給于了開(kāi)發(fā)人員更靈活的設(shè)計(jì)與操作。hibernate相對(duì)來(lái)說(shuō),在一些復(fù)雜的數(shù)據(jù)處理方,并不如IBATIS靈活。struts+ibatis+spring與SSH相比,也是一種不錯(cuò)的組合,巧手(7iaoshou)就是基于此框架組合。 struts,MVC經(jīng)典的一個(gè)實(shí)現(xiàn),近階段依然于其它框架無(wú)法超載的地位,不是說(shuō)struts有多強(qiáng)大,完美,而是struts似乎成為了MVC開(kāi)發(fā)的標(biāo)準(zhǔn)。主要應(yīng)用有以下這些:對(duì)于大中型的企業(yè)級(jí)應(yīng)用,多模塊開(kāi)發(fā)必然應(yīng)用到,很多模塊只有分開(kāi)在不同的配置文件里寫(xiě),才能更有利于書(shū)寫(xiě),維護(hù);自身FORM的驗(yàn)證,validate;struts豐富的頁(yè)面標(biāo)簽書(shū)寫(xiě)頁(yè)面更加靈活強(qiáng)大;與spring,hibernate完美的結(jié)合在一起使用,快速高效開(kāi)發(fā)。 其它WEB開(kāi)發(fā)框架還有JSF,Struts 2.0,webwork等等,由于只是簡(jiǎn)單了解,并未投入生產(chǎn)使用,只能由讀者自己去體會(huì)了。目前流行的J2EE Web應(yīng)用架構(gòu)介紹和分析2008-11-13 作者:夢(mèng)紫纖芊 來(lái)源:網(wǎng)絡(luò) 閱讀 142 次1. 架構(gòu)概述 J2EE體系包括java server pages(JSP) ,java SERVLET, enterprise bean,WEB service等技術(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è)基線有很多好處:各種因數(shù)初步確定為了形成架構(gòu)基線,架構(gòu)設(shè)計(jì)師要對(duì)平臺(tái)(體系)中的技術(shù)進(jìn)行篩選,各種利弊的權(quán)衡。往往架構(gòu)設(shè)計(jì)師在這個(gè)過(guò)程中要閱讀大量的技術(shù)資料,聽(tīng)取項(xiàng)目組成員的建議,考慮領(lǐng)域?qū)<业男枨?,考慮贊助商成本(包括開(kāi)發(fā)成本和運(yùn)行維護(hù)成本)限額。一旦架構(gòu)設(shè)計(jì)經(jīng)過(guò)評(píng)審,這些因數(shù)初步地就有了在整個(gè)項(xiàng)目過(guò)程中的對(duì)項(xiàng)目起多大作用的定位。定向技術(shù)培訓(xùn)一旦架構(gòu)師設(shè)計(jì)的架構(gòu)得到了批準(zhǔn)形成了基線,項(xiàng)目開(kāi)發(fā)和運(yùn)行所采用的技術(shù)基本確定下來(lái)了。眾多的項(xiàng)目經(jīng)理都會(huì)對(duì)預(yù)備項(xiàng)目組成員的技術(shù)功底感到擔(dān)心;他們需要培訓(xùn)部門(mén)提供培訓(xùn),但就架構(gòu)師面對(duì)的技術(shù)海洋,項(xiàng)目經(jīng)理根本就提不出明確的技術(shù)培訓(xùn)需求。怎不能夠?qū)w系中所有技術(shù)都進(jìn)行培訓(xùn)吧!有了架構(gòu)里程碑基線,項(xiàng)目經(jīng)理能確定這個(gè)項(xiàng)目開(kāi)發(fā)會(huì)采用什么技術(shù),這是提出培訓(xùn)需求應(yīng)該是最精確的。不過(guò)在實(shí)際項(xiàng)目開(kāi)發(fā)中,技術(shù)培訓(xùn)可以在基線確定之前與架構(gòu)設(shè)計(jì)并發(fā)進(jìn)行。角色分工有了一個(gè)好的架構(gòu)藍(lán)圖,我們就能準(zhǔn)確劃分工作。如網(wǎng)頁(yè)設(shè)計(jì),JSP 標(biāo)簽處理類(lèi)設(shè)計(jì),SERVLET 設(shè)計(jì),session bean設(shè)計(jì),還有各種實(shí)現(xiàn)。這些任務(wù)在架構(gòu)藍(lán)圖上都可以清晰地標(biāo)出位置,使得項(xiàng)目組成員能很好地定位自己的任務(wù)。一個(gè)好的架構(gòu)藍(lán)圖同時(shí)也能規(guī)范化任務(wù),能很好地把任務(wù)劃分為幾類(lèi),在同一類(lèi)中的任務(wù)的工作量和性質(zhì)相同或相似。這樣工作量估計(jì)起來(lái)有一個(gè)非常好的基礎(chǔ)。運(yùn)行維護(hù)前面說(shuō)過(guò)各個(gè)任務(wù)在架構(gòu)圖上都有比較好的定位。任何人能借助它很快地熟悉整個(gè)項(xiàng)目的運(yùn)行情況,錯(cuò)誤出現(xiàn)時(shí)能比較快速地定位錯(cuò)誤點(diǎn)。另外,有了清晰的架構(gòu)圖,項(xiàng)目版本管理也有很好的版本樹(shù)軀干。擴(kuò)展性架構(gòu)猶如一顆參天大樹(shù)的軀干,只要軀干根系牢,樹(shù)干粗,長(zhǎng)一些旁支,加一些樹(shù)葉輕而易舉無(wú)疑。同樣,有一個(gè)穩(wěn)定的經(jīng)得起考驗(yàn)的架構(gòu),增加一兩個(gè)業(yè)務(wù)組件是非??焖俸腿菀椎?。大家都知道這些好處,一心想形成一個(gè)這樣的J2EE應(yīng)用程序架構(gòu)(就像在windows平臺(tái)中的MFC)。在這個(gè)路程中經(jīng)歷了兩個(gè)大的階段:1.1. 模型1模型1其實(shí)不是一個(gè)什么穩(wěn)定架構(gòu),甚至談不上形成了架構(gòu)。模型1的基礎(chǔ)是JSP文件。它從HTTP的請(qǐng)求中提取參數(shù),調(diào)用相應(yīng)的業(yè)務(wù)邏輯,處理HTTP會(huì)話,最后生成HTTP文檔。一系列這樣的JSP文件形成一個(gè)完整的模型1應(yīng)用,當(dāng)然可能會(huì)有其他輔助類(lèi)或文件。早期的ASP 和 PHP 技術(shù)就屬于這個(gè)情況??偟目磥?lái),這個(gè)模型的好處是簡(jiǎn)單,但是它把業(yè)務(wù)邏輯和表現(xiàn)混在一塊,對(duì)大應(yīng)用來(lái)說(shuō),這個(gè)缺點(diǎn)是令人容忍不了的。1.2. 模型2在經(jīng)過(guò)一番實(shí)踐,并廣泛借鑒和總結(jié)經(jīng)驗(yàn)教訓(xùn)之后,J2EE應(yīng)用程序終于迎來(lái)了MVC(模型-視圖-控制)模式。MVC模式并不是J2EE行業(yè)人士標(biāo)新立異的,所以前面我談到廣發(fā)借鑒。MVC的核心就是做到三層甚至多層的松散耦合。這對(duì)基于組件的,所覆蓋的技術(shù)不斷膨脹的J2EE體系來(lái)說(shuō)真是福音和救星。它在瀏覽器(本文對(duì)客戶(hù)代理都稱(chēng)瀏覽器)和JSP或SERVLET之間插入一個(gè)控制組件。這個(gè)控制組件集中了處理瀏覽器發(fā)過(guò)來(lái)的HTTP請(qǐng)求的分發(fā)邏輯,也就是說(shuō),它會(huì)根據(jù)HTTP請(qǐng)求的URL,輸入?yún)?shù),和目前應(yīng)用的內(nèi)部狀態(tài),把請(qǐng)求分發(fā)給相應(yīng)的WEB 層的JSP 或SERVLET。另外它也負(fù)責(zé)選擇下一個(gè)視圖(在J2EE中,JSP,SERVLET會(huì)生成回給瀏覽器的html從而形成視圖)。集中的控制組件也有利于安全驗(yàn)證,日志紀(jì)錄,有時(shí)也封裝請(qǐng)求數(shù)據(jù)給下面的WEB tier層。這一套邏輯的實(shí)現(xiàn)形成了一個(gè)像MFC的應(yīng)用框架,位置如圖:1.3. 多層應(yīng)用下圖為J2EE體系中典型的多層應(yīng)用模型。Client tier客戶(hù)層一般為瀏覽器或其他應(yīng)用。客戶(hù)層普遍地支持HTTP協(xié)議,也稱(chēng)客戶(hù)代理。WEB tier WEB應(yīng)用層在J2EE中,這一層由WEB 容器運(yùn)行,它包括JSP, SERVLET等WEB部件。EJB tier 企業(yè)組件層企業(yè)組件層由EJB容器運(yùn)行,支持EJB, JMS, JTA 等服務(wù)和技術(shù)。EIS tier 企業(yè)信息系統(tǒng)層企業(yè)信息系統(tǒng)包含企業(yè)內(nèi)傳統(tǒng)信息系統(tǒng)如財(cái)務(wù),CRM等,特點(diǎn)是有數(shù)據(jù)庫(kù)系統(tǒng)的支持。應(yīng)用框架目前主要集中在WEB層,旨在規(guī)范這一層軟件的開(kāi)發(fā)。其實(shí)企業(yè)組件層也可以實(shí)現(xiàn)這個(gè)模型,但目前主要以設(shè)計(jì)模式的形式存在。而且有些框架可以擴(kuò)充,有了企業(yè)組件層組件的參與,框架會(huì)顯得更緊湊,更自然,效率會(huì)更高。2. 候選方案目前,實(shí)現(xiàn)模型2的框架也在不斷的涌現(xiàn),下面列出比較有名的框架。2.1. Apache StrutsStruts是一個(gè)免費(fèi)的開(kāi)源的WEB層的應(yīng)用框架,apache軟件基金致力于struts的開(kāi)發(fā)。Struts具是高可配置的性,和有一個(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.1.1. Struts和MVC模型2的目的和MVC的目的是一樣的,所以模型2基本可以和MVC等同起來(lái)。下圖體現(xiàn)了Struts的運(yùn)作機(jī)理:. 控制如圖所示,它的主要部件是一個(gè)通用的控制組件。這個(gè)控制組件提供了處理所有發(fā)送到Struts 的HTTP請(qǐng)求的入口點(diǎn)。它截取和分發(fā)這些請(qǐng)求到相應(yīng)的動(dòng)作類(lèi)(這些動(dòng)作類(lèi)都是Action類(lèi)的子類(lèi))。另外控制組件也負(fù)責(zé)用相應(yīng)的請(qǐng)求參數(shù)填充 From bean,并傳給動(dòng)作類(lèi)。動(dòng)作類(lèi)實(shí)現(xiàn)核心商業(yè)邏輯,它可以通過(guò)訪問(wèn)java bean 或調(diào)用EJB。最后動(dòng)作類(lèi)把控制權(quán)傳給后續(xù)的JSP 文件,后者生成視圖。所有這些控制邏輯利用一個(gè)叫struts-config.xml文件來(lái)配置。. 模型模型以一個(gè)或幾個(gè)java bean的形式存在。這些bean分為三種:Form beans(表單Beans)它保存了HTTP post請(qǐng)求傳來(lái)的數(shù)據(jù),在Struts里,所有的Form beans都是 ActionFrom 類(lèi)的子類(lèi)。業(yè)務(wù)邏輯beans專(zhuān)門(mén)用來(lái)處理業(yè)務(wù)邏輯。系統(tǒng)狀態(tài)beans它保存了跨越多個(gè)HTTP 請(qǐng)求的單個(gè)客戶(hù)的會(huì)話信息,還有系統(tǒng)狀態(tài)。. 視圖控制組件續(xù)傳HTTP請(qǐng)求給實(shí)現(xiàn)了視圖的JSP文件。JSP能訪問(wèn)beans 并生成結(jié)果文檔反饋到客戶(hù)。Struts提供JSP 標(biāo)簽庫(kù): Html,Bean,Logic,Template等來(lái)達(dá)到這個(gè)目的,并有利于分開(kāi)表現(xiàn)邏輯和程序邏輯。2.1.2. Struts的細(xì)節(jié)分析. 視圖-控制-模型用戶(hù)發(fā)出一個(gè)*.do的HTTP請(qǐng)求,控制組件接收到這個(gè)請(qǐng)求后,查找針對(duì)這個(gè)請(qǐng)求的動(dòng)作映射,再檢查是否曾創(chuàng)建過(guò)相應(yīng)的動(dòng)作對(duì)象(action實(shí)例),如果沒(méi)有則調(diào)用actionmapping生成一個(gè)動(dòng)作對(duì)象,控制組件會(huì)保存這個(gè)動(dòng)作對(duì)象供以后使用。接著調(diào)用actionmapping的方法得到actionForm對(duì)象。之后把a(bǔ)ctionForm作為參數(shù)傳給動(dòng)作對(duì)象的perform方法,這個(gè)方法結(jié)束之后會(huì)返回給控制組件一個(gè) actionforward對(duì)象??刂平M件接著從這個(gè)對(duì)象中獲取下一個(gè)視圖的路徑和重定向?qū)傩?。如果為重定向則調(diào)用HTTPSERVLETREPONSE的方法來(lái)顯示下一個(gè)視圖,否則相繼調(diào)用requestdispatcher, SERVLETcontext的方法續(xù)傳HTTP請(qǐng)求到下一個(gè)視圖。當(dāng)動(dòng)作對(duì)象運(yùn)行perform方法時(shí),可能出現(xiàn)錯(cuò)誤信息。動(dòng)作對(duì)象可以保存這些錯(cuò)誤信息到一個(gè)error對(duì)象中,接著調(diào)用自身的saveerrors方法把這個(gè)錯(cuò)誤保存到request對(duì)象的屬性中。接著動(dòng)作對(duì)象調(diào)用actionmapping對(duì)象的getInput方法從動(dòng)作映射中獲取input參數(shù),也就是產(chǎn)生輸入的視圖,并以這個(gè)input為參數(shù)生成一個(gè)actionforward對(duì)象返回。這個(gè)input參數(shù)的JSP中一般有HTTP:errors定制標(biāo)簽讀取這些錯(cuò)誤信息并顯示在頁(yè)面上。. 模型到視圖模型到視圖指視圖在顯示之前裝載系統(tǒng)數(shù)據(jù)到視圖的過(guò)程。系統(tǒng)數(shù)據(jù)一般為模型內(nèi)java bean的信息。示意圖表現(xiàn)了由控制組件forward過(guò)來(lái)的有html:form定制標(biāo)簽的JSP 的處理邏輯。html:form定制標(biāo)簽處理對(duì)象從application scope(通過(guò)查詢(xún)SERVLETCONTEXT對(duì)象的屬性來(lái)實(shí)現(xiàn))獲取先前由控制組件actionSERVLET放在那里的動(dòng)作映射等對(duì)象,由html:form 的action屬性查得actionform名字、類(lèi)型和范圍等信息,在相應(yīng)的范圍內(nèi)查找actionform,如果有則利用它的信息填充html form表單實(shí)際填充動(dòng)作在嵌套的html:text等定制標(biāo)簽的處理對(duì)象中。否則在相應(yīng)范圍內(nèi)創(chuàng)建一個(gè)actionform 對(duì)象。 2.1.3. 優(yōu)缺點(diǎn)優(yōu)點(diǎn):一些開(kāi)發(fā)商開(kāi)始采用并推廣這個(gè)框架作為開(kāi)源項(xiàng)目,有很多先進(jìn)的實(shí)現(xiàn)思想對(duì)大型的應(yīng)用支持的較好有集中的網(wǎng)頁(yè)導(dǎo)航定義缺點(diǎn):不是業(yè)屆標(biāo)準(zhǔn)對(duì)開(kāi)發(fā)工具的支持不夠復(fù)雜的taglib,需要比較長(zhǎng)的時(shí)間來(lái)掌握html form 和 actionform的搭配比較封閉,但這也是它的精華所在。修改建議把a(bǔ)ctionform屬性的設(shè)置器和訪問(wèn)器修改成讀取或生成xml文檔的方法,然后 html form和actionform之間用xml文檔進(jìn)行數(shù)據(jù)交換,使之松散耦合,適應(yīng)數(shù)據(jù)結(jié)構(gòu)易變化的應(yīng)用。2.2. JATOJATO應(yīng)用程序框架是iPlanet 應(yīng)用程序框架的舊名。它是一個(gè)成熟的、強(qiáng)大的,基于J2EE標(biāo)準(zhǔn)的面向于開(kāi)發(fā)WEB應(yīng)用程序的應(yīng)用框架。結(jié)合了顯示字段、應(yīng)用程序事件、組件層次和以頁(yè)面為中心的開(kāi)發(fā)方法、以及MVC和服務(wù)到工作者service-to-workers的設(shè)計(jì)模式等概念。JATO可適用于中、大、超大規(guī)模的WEB應(yīng)用。但是它也不是一個(gè)企業(yè)層的應(yīng)用框架,也就是說(shuō)它不會(huì)直接提供創(chuàng)建EJB, WEB services等企業(yè)層組件的方法,但用它可以構(gòu)造出訪問(wèn)企業(yè)層組件的客戶(hù)應(yīng)用。這個(gè)框架功能主要有三部分組成:iPlanet應(yīng)用框架核心;iPlanet應(yīng)用框架組件;iPlanet應(yīng)用框架擴(kuò)展。應(yīng)用框架核心定義了基本接口、對(duì)象協(xié)議、簡(jiǎn)單組件,以及iPlanet應(yīng)用框架程序的最小核心。包括視圖簡(jiǎn)單組件、模型簡(jiǎn)單組件、請(qǐng)求分發(fā)組件和可重用命令對(duì)象。iPlanet應(yīng)用框架組件利用框架核心定義的基本接口、協(xié)議和組件向開(kāi)發(fā)者提供高層的重用組件,這些組件既有與特定視覺(jué)效果無(wú)關(guān)的水平組件,同時(shí)也有適應(yīng)特定實(shí)用環(huán)境、提高可用性而特意提供的垂直型組件??蚣軘U(kuò)展實(shí)現(xiàn)了用框架相容的方法訪問(wèn)非J2EE環(huán)境的方法。通常情況下,擴(kuò)展被框架應(yīng)用程序用來(lái)無(wú)縫訪問(wèn)J2EE容器特定功能。JATO平臺(tái)棧圖很清楚地表達(dá)了這個(gè)情況。JATO最大的威力在:對(duì)于快速開(kāi)發(fā)用戶(hù),你能利用框架組件和擴(kuò)展提高生產(chǎn)率,對(duì)于要求更大靈活性的用戶(hù),你能實(shí)現(xiàn)框架核心提供的接口來(lái)保持應(yīng)用的框架兼容性。此圖表示實(shí)現(xiàn)一個(gè)JATO應(yīng)用程序,可以簡(jiǎn)單地實(shí)現(xiàn)控制組件module1Servlet,視圖組件ListCustomersViewBean和模型組件CustomersModuleImpl,以及一個(gè)給客戶(hù)代理顯示界面的ListCustomers.jsp文件。并清楚地表明這些組件與JATO框架組件的繼承關(guān)系。JATO標(biāo)簽庫(kù)提供了VIEW對(duì)象與JSP文件的接口。庫(kù)中標(biāo)簽處理程序負(fù)責(zé)實(shí)現(xiàn)VIEW對(duì)象和JSP產(chǎn)生地客戶(hù)端文檔的信息同步和交換。這個(gè)圖清楚地表達(dá)了這種對(duì)應(yīng)關(guān)系2.2.1. MVC分析前端控制組件接收用戶(hù)發(fā)來(lái)的任何請(qǐng)求,這個(gè)可在WEB.xml中指定請(qǐng)求分發(fā)組件負(fù)責(zé)視圖管理和導(dǎo)航,和前端控制組件封裝在ApplicationSERVLETBase一起實(shí)現(xiàn)。應(yīng)用程序開(kāi)發(fā)者需要為每一個(gè)子系統(tǒng)(人力資源,財(cái)務(wù),CRM等)實(shí)現(xiàn)一個(gè)此類(lèi)的繼承。請(qǐng)求分發(fā)組件分發(fā)請(qǐng)求給工作者,工作者實(shí)現(xiàn)了command接口。應(yīng)用開(kāi)發(fā)者可以實(shí)現(xiàn)這個(gè)接口。JATO提供了一個(gè)缺省實(shí)現(xiàn):DefaultRequestHandingCommand,這個(gè)實(shí)現(xiàn)會(huì)把請(qǐng)求傳給視圖組件的特定事件。組合視圖是指視圖組件在顯示給用戶(hù)時(shí)的層次關(guān)系:根視圖是一個(gè)ViewBean類(lèi)的對(duì)象字段是一個(gè)DisplayField類(lèi)的對(duì)象,容器視圖是一個(gè)ContainerView類(lèi)的對(duì)象。視圖組件類(lèi)的層次關(guān)系如下圖:2.2.2. 優(yōu)缺點(diǎn)分析優(yōu)點(diǎn):這種框架的適應(yīng)范圍大,即提供了底層接口,也有立即可用的組件具有與客戶(hù)端RAD開(kāi)發(fā)工具相似的開(kāi)發(fā)概念如頁(yè)為中心(等同于VB的FORM),事件處理等.對(duì)大型的應(yīng)用支持較好缺點(diǎn):不是業(yè)屆標(biāo)準(zhǔn)目前還沒(méi)有開(kāi)發(fā)工具的支持(然JATO已經(jīng)為工具支持做好了準(zhǔn)備)沒(méi)有定義網(wǎng)頁(yè)導(dǎo)航,開(kāi)發(fā)者在視圖中自己指定具體的導(dǎo)航URL修改建議把眾多的VIEW/MODEL對(duì)應(yīng)修改成xml文檔傳遞數(shù)據(jù),加上集中的網(wǎng)頁(yè)導(dǎo)航定義2.3. JSF(JavaServer Faces)JSF是一個(gè)包括SUN在內(nèi)的專(zhuān)家組正在定義的開(kāi)發(fā)WEB應(yīng)用用戶(hù)界面的框架,JSF 技術(shù)包括:一組API,它實(shí)現(xiàn)UI了組件,管理組件的狀態(tài),處理事件,輸入校驗(yàn),定義頁(yè)面導(dǎo)航,支持國(guó)際化和訪問(wèn);一個(gè)JSP定制標(biāo)簽庫(kù)實(shí)現(xiàn)與JSP的接口。JSF非常簡(jiǎn)單,是一個(gè)定義良好的編程模型。利用這個(gè)技術(shù),開(kāi)發(fā)者通過(guò)在頁(yè)面內(nèi)組合可重用的UI組件,在把這些組件和應(yīng)用的數(shù)據(jù)源相連,路由客戶(hù)產(chǎn)生的事件到服務(wù)器端的事件處理器進(jìn)行編程。JSP處理了所有幕后的復(fù)雜工作,使得開(kāi)發(fā)者把關(guān)注重點(diǎn)放在應(yīng)用代碼上。2.3.1. STRUTS、JATO和JSF比較它們之間有部分重疊,但重點(diǎn)不一樣。STRUTS和JATO都提供了一個(gè)MVC式的應(yīng)用模型,而JSF只在用戶(hù)界面上提供編程接口。這意味著前兩者涉及的范圍比后者廣。JSF可以成為前兩者在UI開(kāi)發(fā)的部分。JSF的規(guī)范的發(fā)布版將在 2002年底發(fā)布,實(shí)現(xiàn)可能要比這個(gè)時(shí)間晚些。另外將會(huì)有工具支持這個(gè)框架的應(yīng)用開(kāi)發(fā)。2.4. WAFWAF是WEB APPLICATION FRAMWORK的簡(jiǎn)稱(chēng),是SUN藍(lán)皮書(shū)例子程序中提出的應(yīng)用框架。它實(shí)現(xiàn)了 MVC和其他良好的設(shè)計(jì)模式。2.4.1. 細(xì)節(jié)分析2.4.2. 視圖-控制-模型如圖所示,開(kāi)發(fā)人員編寫(xiě)的兩個(gè)xml配置文件定義了WAF的運(yùn)作參數(shù)。Screendefinition.xml定義了一系列的屏幕(screen)。Mapping.xml則定義了某個(gè)動(dòng)作之后應(yīng)該顯示的屏幕,但沒(méi)有指定屏幕到哪里拿數(shù)據(jù)。用戶(hù)發(fā)出一個(gè)HTTP請(qǐng)求(*.screen),由TemplateSERVLET屏幕前端控制組件接收,它提取請(qǐng)求信息,設(shè)置request對(duì)象CurrentScreen屬性,再把請(qǐng)求發(fā)到模版JSP。模版JSP收到請(qǐng)求后,JSP中的Template標(biāo)簽察看這個(gè)當(dāng)前屏幕,并從屏幕定義文件(Screendefinition.xml)中獲取這個(gè)屏幕的具體參數(shù),再生成html返回給客戶(hù)。假設(shè)返回給客戶(hù)的html中包括了html表單,用戶(hù)在輸入一定數(shù)據(jù)之后提交,發(fā)出一個(gè)HTTP請(qǐng)求(*.do)。這個(gè)請(qǐng)求被MainSERVLET接收,它提取請(qǐng)求信息,察看動(dòng)作映射文件(mapping.xml),設(shè)置處理這個(gè)請(qǐng)求的動(dòng)作對(duì)象(HTTPAction對(duì)象),交給requestprosessor對(duì)象處理。Requestprosessor對(duì)象調(diào)用動(dòng)作對(duì)象完成任務(wù),如果需要進(jìn)一步處理,requestprosessor對(duì)象會(huì)調(diào)用WEBclientcontroler對(duì)象的事件處理機(jī)制。MainSERVLET在處理完請(qǐng)求之后,從屏幕流管理對(duì)象那里得到下一個(gè)屏幕,并把請(qǐng)求傳給這個(gè)屏幕的JSP文件。值得一提的是WEBclientcontroler事件處理機(jī)制最終把HTTP請(qǐng)求的數(shù)據(jù)傳到了EJBAction對(duì)象那里處理。這樣HTTPAction對(duì)象和EJBAction對(duì)象形成了兩級(jí)處理機(jī)制,前一級(jí)與request對(duì)象緊密相關(guān),把數(shù)據(jù)封裝起來(lái)形成一個(gè)Event對(duì)象,再傳給了EJBAction對(duì)象,后者與Request對(duì)象無(wú)關(guān)。這個(gè)方式可以形成一個(gè)session級(jí)別的數(shù)據(jù)處理機(jī)制。下圖顯示了這個(gè)方法。HTTPAction1對(duì)象處理一個(gè)請(qǐng)求,并把數(shù)據(jù)放到一個(gè)狀態(tài)SessionBean內(nèi),HTTPAction2也如此,當(dāng)HTTPAction3接收到HTTP請(qǐng)求之后,把控制傳給EJBAction, 后者獲取狀態(tài)SessionBean數(shù)據(jù),處理請(qǐng)求,成功后清控狀態(tài)SessionBean的內(nèi)容。這個(gè)機(jī)制非常適應(yīng)多個(gè)輸入頁(yè)面才能滿(mǎn)足一個(gè)業(yè)務(wù)的輸入數(shù)據(jù)的情況(比如購(gòu)物車(chē))。2.4.3. 優(yōu)缺點(diǎn)分析優(yōu)點(diǎn)屏幕導(dǎo)航定義明確為框架的擴(kuò)展提供了一個(gè)空間缺點(diǎn)源碼比較亂,穩(wěn)定性和可靠性沒(méi)人驗(yàn)證。只是一個(gè)框架軀干,沒(méi)有正式的model層,視圖的概念不強(qiáng)沒(méi)有模型到視圖的定義修改意見(jiàn)只有一個(gè)框架軀干,正為實(shí)現(xiàn)自己的應(yīng)用框架提供了靈活性。沒(méi)有僵化的視圖概念,提供了在網(wǎng)頁(yè)輸入到模型的擴(kuò)充接口,比如插入XML數(shù)據(jù)交換。結(jié)合Struts和Hibernate 談J2EE數(shù)據(jù)表示2008-11-13 作者:夢(mèng)紫纖芊 來(lái)源:網(wǎng)絡(luò) 閱讀 185 次在struts+ hibernate 這種結(jié)構(gòu)中,是不應(yīng)該把Hibernate產(chǎn)生的PO直接傳遞給JSP的,不管他是Iterator,還是List,這是一個(gè)設(shè)計(jì)錯(cuò)誤。 我來(lái)談?wù)勗贘2EE架構(gòu)中各層的數(shù)據(jù)表示方法:Web層的數(shù)據(jù)表示是FormBean,數(shù)據(jù)來(lái)源于HTML Form POST業(yè)務(wù)層的數(shù)據(jù)表示是VO持久層的數(shù)據(jù)表示是PO,其數(shù)據(jù)來(lái)源于數(shù)據(jù)庫(kù),持久層的數(shù)據(jù)表示例如CMP在一個(gè)規(guī)范的J2EE架構(gòu)中,不同層的數(shù)據(jù)表示應(yīng)該被限制在層內(nèi),而不應(yīng)該擴(kuò)散到其它層,這樣可以降低層間的耦合性,提高J2EE架構(gòu)整體的可維護(hù)性和可擴(kuò)展性。比如說(shuō)Web層的邏輯進(jìn)行了修改,那么只需要修改FormBean的結(jié)構(gòu),而不需要觸動(dòng)業(yè)務(wù)層和持久層的代碼修改。同樣滴,當(dāng)數(shù)據(jù)庫(kù)表進(jìn)行了小的調(diào)整,那么也只需要修改持久層數(shù)據(jù)表示,而不需要觸動(dòng)業(yè)務(wù)層代碼和Web層代碼。不過(guò)由于Hibernate的強(qiáng)大功能,例如動(dòng)態(tài)生成PO,PO的狀態(tài)管理可以脫離Session,使得在應(yīng)用了Hibernate的J2EE框架中,PO完全可以充當(dāng)VO,因此我們下面把PO和VO合并,統(tǒng)稱(chēng)為PO。先來(lái)談?wù)凙ctionFormBean和持久層的PO之間的重大區(qū)別。在簡(jiǎn)單的應(yīng)用中,ActionFormBean和PO幾乎是沒(méi)有區(qū)別,所以很多人干脆就是用ActionFormBean來(lái)充當(dāng)PO,于是ActionFormBean從JSP頁(yè)面到Servlet控制層再到業(yè)務(wù)層,然后穿過(guò)持久層,最后一直映射到數(shù)據(jù)庫(kù)表。真是一竿子捅到了底!但是在復(fù)雜的應(yīng)用中,ActionFormBean和PO是分離的,他們也不可能一樣。ActionFormBean是和網(wǎng)頁(yè)里面的Form表單一一對(duì)應(yīng)的,F(xiàn)orm里面有什么元素,Bean里面就有什么屬性。而PO和數(shù)據(jù)庫(kù)表對(duì)應(yīng),因此如果數(shù)據(jù)庫(kù)表不修改,那么PO也不會(huì)修改,如果頁(yè)面的流程和數(shù)據(jù)庫(kù)表字段對(duì)應(yīng)關(guān)系不一致,那么你又如何能夠使用ActionFormBean來(lái)取代PO呢?比如說(shuō)吧,用戶(hù)注冊(cè)頁(yè)面要求注冊(cè)用戶(hù)的基本信息,因此HTML Form里面包含了基本信息屬性,于是你需要一個(gè)ActionFormBean來(lái)一一對(duì)應(yīng)(注意:是一一對(duì)應(yīng)),每個(gè)Bean屬性對(duì)應(yīng)一個(gè)文本框或者選擇框什么的。而用戶(hù)這個(gè)持久對(duì)象呢?他的屬性和ActionFormBean有什么明顯不同呢?他會(huì)有一些ActionFormBean所沒(méi)有的集合屬性,比如說(shuō)用戶(hù)的權(quán)限屬性,用戶(hù)的組屬性,用戶(hù)的帖子等等。另外還有可能的是在ActionFormBean里面有3個(gè)屬性,分別是用戶(hù)的First Name, Middle Name, Last Name,而在我的User這個(gè)持久對(duì)象中就是一個(gè) Name 對(duì)象屬性。假設(shè)我的注冊(cè)頁(yè)面原來(lái)只要你提供First Name,那么ActionFormBean就這一個(gè)屬性,后來(lái)我要你提供全名,你要改ActionFormBean,加兩個(gè)屬性。但是這個(gè)時(shí)候PO是不應(yīng)該修改滴,因?yàn)閿?shù)據(jù)庫(kù)沒(méi)有改。那么在一個(gè)完整的J2EE系統(tǒng)中應(yīng)該如何進(jìn)行合理的設(shè)計(jì)呢?JSP(View) - ActionFormBean(Module) - Action(Control)ActionFormBean是Web層的數(shù)據(jù)表示,它和HTML頁(yè)面Form對(duì)應(yīng),只要Web頁(yè)面的操作流程發(fā)生改變,它就要相應(yīng)的進(jìn)行修改,它不應(yīng)該也不能被傳遞到業(yè)務(wù)層和持久層,否則一旦頁(yè)面修改,會(huì)一直牽連到業(yè)務(wù)層和持久層的大面積的代碼進(jìn)行修改,對(duì)于軟件的可維護(hù)性和可擴(kuò)展性而言,是一個(gè)災(zāi)難,Actiont就是他的邊界,到此為止!Action(Web Control) - Business Bean - DAO - ORM -DB而PO則是業(yè)務(wù)層和持久層的數(shù)據(jù)表示,它在業(yè)務(wù)層和持久層之間進(jìn)行流動(dòng),他不應(yīng)該也不能被傳遞到Web層的View中去,而ActionServlet就是他的邊界,到此為止!然后來(lái)看一看整個(gè)架構(gòu)的流程:當(dāng)用戶(hù)通過(guò)瀏覽器訪問(wèn)網(wǎng)頁(yè),提交了一個(gè)頁(yè)面。于是Action拿到了這個(gè)FormBean,他會(huì)把FormBean屬性讀出來(lái),然后構(gòu)造一個(gè)PO對(duì)象,再調(diào)用業(yè)務(wù)層的Bean類(lèi),完成了注冊(cè)操作,重定向到成功頁(yè)面。而業(yè)務(wù)層Bean收到這個(gè)PO對(duì)象之后,調(diào)用DAO接口方法,進(jìn)行持久對(duì)象的持久化操作。當(dāng)用戶(hù)查詢(xún)某個(gè)會(huì)員的信息的時(shí)候,他用全名進(jìn)行查詢(xún),于是Action得到一個(gè)UserNameFormBean包括了3個(gè)屬性,分別是first name, middle name, last name,然后Action把UserNameFormBean的3個(gè)屬性讀出來(lái),構(gòu)造Name對(duì)象,再調(diào)用業(yè)務(wù)Bean,把Name對(duì)象傳遞給業(yè)務(wù)Bean,進(jìn)行查詢(xún)。業(yè)務(wù)Bean取得Name(注意: Name對(duì)象只是User的一個(gè)屬性)對(duì)象之后調(diào)用DAO接口,返回一個(gè)User的PO對(duì)象,注意這個(gè)User不同于在Web層使用的UserFormBean,他有很多集合屬性滴。然后業(yè)務(wù)Bean把User對(duì)象返回給Action。Action拿到User之后,把User的基本屬性取出(集合屬性如果不需要就免了),構(gòu)造UserFormBean,然后把UserFormBean request.setAttribute(.),然后重定向到查詢(xún)結(jié)果頁(yè)面。查詢(xún)頁(yè)面拿到request對(duì)象里面的ActionFormBean,自動(dòng)調(diào)用tag顯示之??偨Y(jié):FormBean是Web層的數(shù)據(jù)表示,他不能被傳遞到業(yè)務(wù)層;PO是持久層的數(shù)據(jù)表示,在特定情況下,例如Hibernate中,他可以取代VO出現(xiàn)在業(yè)務(wù)層,但是不管PO還是VO都必須限制在業(yè)務(wù)層內(nèi)使用,最多到達(dá)Web層的Control,絕不能被擴(kuò)散到View去。FormBean和PO之間的數(shù)據(jù)轉(zhuǎn)化是在Action中進(jìn)行滴。BTW:JDO1.x還不能像Hibernate功能這樣強(qiáng)大,PO不能脫離持久層,所以必須在業(yè)務(wù)層使用VO,因此必須在業(yè)務(wù)層進(jìn)行大量的VO和PO的轉(zhuǎn)化操作,相對(duì)于Hibernate來(lái)說(shuō),編程比較煩瑣。初學(xué)者如何開(kāi)發(fā)出一個(gè)高質(zhì)量的J2EE系統(tǒng)2008-11-13 作者:夢(mèng)紫纖芊 來(lái)源:網(wǎng)絡(luò) 閱讀 169 次J2EE學(xué)習(xí)者越來(lái)越多,J2EE本身技術(shù)不斷在發(fā)展,涌現(xiàn)出各種概念,本文章試圖從一種容易理解的角度對(duì)這些概念向初學(xué)者進(jìn)行解釋?zhuān)员阏莆諏W(xué)習(xí)J2EE學(xué)習(xí)方向。 首先我們需要知道Java和J2EE是兩個(gè)不同概念,Java不只是指一種語(yǔ)言,已經(jīng)代表與微軟不同的另外一個(gè)巨大陣營(yíng),所以Java有時(shí)是指一種軟件系統(tǒng)的流派,當(dāng)然目前主要是.NET和Java兩大主流體系。J2EE可以說(shuō)指Java在數(shù)據(jù)庫(kù)信息系統(tǒng)上實(shí)現(xiàn),數(shù)據(jù)庫(kù)信息系統(tǒng)從早期的dBase、到Delphi/VB等C/S結(jié)構(gòu),發(fā)展到B/S(Browser瀏覽器/Server服務(wù)器)結(jié)構(gòu),而J2EE主要是指B/S結(jié)構(gòu)的實(shí)現(xiàn)。J2EE又是一種框架和標(biāo)準(zhǔn),框架類(lèi)似API、庫(kù)的概念,但是要超出它們。如果需要詳細(xì)了解框架,可先從設(shè)計(jì)模式開(kāi)始學(xué)習(xí)。J2EE是一個(gè)虛的大的概念,J2EE標(biāo)準(zhǔn)主要有三種子技術(shù)標(biāo)準(zhǔn):WEB技術(shù)、EJB技術(shù)和JMS,談到J2EE應(yīng)該說(shuō)最終要落實(shí)到這三個(gè)子概念上。這三種技術(shù)的每個(gè)技術(shù)在應(yīng)用時(shí)都涉及兩個(gè)部分:容器部分和應(yīng)用部分,Web容器也是指Jsp/Servlet容器,你如果要開(kāi)發(fā)一個(gè)Web應(yīng)用,無(wú)論是編譯或運(yùn)行,都必須要有Jsp/Servlet庫(kù)或API支持(除了JDK/J2SE以外)。Web技術(shù)中除了Jsp/Servlet技術(shù)外,還需要JavaBeans或Java Class實(shí)現(xiàn)一些功能或者包裝攜帶數(shù)據(jù),所以Web技術(shù)最初裸體簡(jiǎn)稱(chēng)為Jsp/Servlet+JavaBeans系統(tǒng)。談到JavaBeans技術(shù),就涉及到組件構(gòu)件技術(shù)(component),這是Java的核心基礎(chǔ)部分,很多軟件設(shè)計(jì)概念(設(shè)計(jì)模式)都是通過(guò)JavaBeans實(shí)現(xiàn)的。JavaBeans不屬于J2EE概念范疇中,如果一個(gè)JavaBeans對(duì)象被Web技術(shù)(也就是Jsp/Servlet)調(diào)用,那么JavaBeans就運(yùn)行在J2EE的Web容器中;如果它被EJB調(diào)用,它就運(yùn)行在EJB容器中。EJB(企業(yè)JavaBeans)是普通JavaBeans的一種提升和規(guī)范,因?yàn)槠髽I(yè)信息系統(tǒng)開(kāi)發(fā)中需要一個(gè)可伸縮的性能和事務(wù)、安全機(jī)制,這樣能保證企業(yè)系統(tǒng)平滑發(fā)展,而不是發(fā)展到一種規(guī)模重新更換一套軟件系統(tǒng)。至此,JavaBeans組件發(fā)展到EJB后,并不是說(shuō)以前的那種JavaBeans形式就消失了,這就自然形成了兩種JavaBeans技術(shù):EJB和POJO,POJO完全不同于EJB概念,指的是普通JavaBeans,而且這個(gè)JavaBeans不依附某種框架,或者干脆可以說(shuō):這個(gè)JavaBeans是你為這個(gè)應(yīng)用程序單獨(dú)開(kāi)發(fā)創(chuàng)建的。J2EE應(yīng)用系統(tǒng)開(kāi)發(fā)工具有很多:如JBuilder、Eclipse等,這些IDE首先是Java開(kāi)發(fā)工具,也就是說(shuō),它們首要基本功能是可以開(kāi)發(fā)出JavaBeans或Java class,但是如果要開(kāi)發(fā)出J2EE系統(tǒng),就要落實(shí)到要么是Web技術(shù)或EJB技術(shù),那么就有可能要一些專(zhuān)門(mén)模塊功能(如eclipse需要lomboz插件),最重要的是,因?yàn)镴2EE系統(tǒng)區(qū)分為容器和應(yīng)用兩個(gè)部分,所以,在任何開(kāi)發(fā)工具中開(kāi)發(fā)J2EE都需要指定J2EE容器。J2EE容器分為WEB容器和EJB容器,Tomcat/Resin是Web容器;JBoss是EJB容器+Web容器等,其中Web容器直接使用Tomcat實(shí)現(xiàn)的。所以你開(kāi)發(fā)的Web應(yīng)用程序可以在上面兩種容器運(yùn)行,而你開(kāi)發(fā)的Web+EJB應(yīng)用則只可以在JBoss服務(wù)器上運(yùn)行,商業(yè)產(chǎn)品Websphere/Weblogic等和JBoss屬于同一種性質(zhì)。J2EE容器也稱(chēng)為J2EE服務(wù)器,大部分時(shí)它們概念是一致的。如果你的J2EE應(yīng)用系統(tǒng)的數(shù)據(jù)庫(kù)連接是通過(guò)JNDI獲得,也就是說(shuō)是從容器中獲得,那么你的J2EE應(yīng)用系統(tǒng)基本與數(shù)據(jù)庫(kù)無(wú)關(guān),如果你在你的J2EE應(yīng)用系統(tǒng)耦合了數(shù)據(jù)庫(kù)JDBC驅(qū)動(dòng)的配置,那么你的J2EE應(yīng)用系統(tǒng)就有數(shù)據(jù)庫(kù)概念色彩,作為一個(gè)成熟需要推廣的J2EE應(yīng)用系統(tǒng),不推薦和具體數(shù)據(jù)庫(kù)耦合,當(dāng)然這其中如何保證J2EE應(yīng)用系統(tǒng)運(yùn)行性能又是體現(xiàn)你的設(shè)計(jì)水平了。衡量J2EE應(yīng)用系統(tǒng)設(shè)計(jì)開(kāi)發(fā)水平高低的標(biāo)準(zhǔn)就是:解耦性;你的應(yīng)用系統(tǒng)各個(gè)功能是否能夠徹底脫離?是否不相互依賴(lài),也只有這樣,才能體現(xiàn)可維護(hù)性、可拓展性的軟件設(shè)計(jì)目標(biāo)。為了達(dá)到這個(gè)目的,誕生各種框架概念,J2EE框架標(biāo)準(zhǔn)將一個(gè)系統(tǒng)劃分為WEB和EJB主要部分,當(dāng)然我們有時(shí)不是以這個(gè)具體技術(shù)區(qū)分,而是從設(shè)計(jì)上抽象為表現(xiàn)層、服務(wù)層和持久層,這三個(gè)層次從一個(gè)高度將J2EE分離開(kāi)來(lái),實(shí)現(xiàn)解耦目的。因此,我們實(shí)際編程中,也要將自己的功能向這三個(gè)層次上靠,做到大方向清楚,涇渭分明,但是沒(méi)有技術(shù)上約束限制要做到這點(diǎn)是很不容易的,因此我們還是必須借助J2EE具體技術(shù)來(lái)實(shí)現(xiàn),這時(shí),你可以使用EJB規(guī)范實(shí)現(xiàn)服務(wù)層和持久層,Web技術(shù)實(shí)現(xiàn)表現(xiàn)層;EJB為什么能將服務(wù)層從Jsp/Servlet手中分離出來(lái),因?yàn)樗鼘?duì)JavaBeans編碼有強(qiáng)制的約束,現(xiàn)在有一種對(duì)JavaBeans弱約束,使用Ioc模式實(shí)現(xiàn)的(當(dāng)然EJB 3.0也采取這種方式),在Ioc模式誕生前,一般都是通過(guò)工廠模式來(lái)對(duì)JavaBeans約束,形成一個(gè)服務(wù)層,這也是是Jive這樣開(kāi)源論壇設(shè)計(jì)原理之一。由此,將服務(wù)層從表現(xiàn)層中分離出來(lái)目前有兩種可選架構(gòu)選擇:管理普通JavaBeans(POJO)框架(如Spring、JdonFramework)以及管理EJB的EJB框架,因?yàn)镋JB不只是框架,還是標(biāo)準(zhǔn),而標(biāo)準(zhǔn)可以擴(kuò)展發(fā)展,所以,這兩種區(qū)別將來(lái)是可能模糊,被納入同一個(gè)標(biāo)準(zhǔn)了。但是,個(gè)人認(rèn)為:標(biāo)準(zhǔn)制定是為某個(gè)目的服務(wù)的,總要犧牲一些換取另外一些,所以,這兩種架構(gòu)會(huì)長(zhǎng)時(shí)間并存。這兩種架構(gòu)分歧也曾經(jīng)誕生一個(gè)新名詞:完全POJO的系統(tǒng)也稱(chēng)為輕量級(jí)系統(tǒng)(lightweight),其實(shí)這個(gè)名詞本身就沒(méi)有一個(gè)嚴(yán)格定義,更多是一個(gè)吸引人的招牌,輕量是指容易學(xué)習(xí)容易使用嗎?按照這個(gè)定義,其實(shí)輕量Spring等系統(tǒng)并不容易學(xué)習(xí);而且EJB 3.0(依然叫EJB)以后的系統(tǒng)是否可稱(chēng)為輕量級(jí)了呢? 前面談了服務(wù)層框架,使用服務(wù)層框架可以將JavaBeans從Jsp/Servlet中分離出來(lái),而使用表現(xiàn)層框架則可以將Jsp中剩余的JavaBeans完全分離,這部分JavaBeans主要負(fù)責(zé)顯示相關(guān),一般是通過(guò)標(biāo)簽庫(kù)(taglib)實(shí)現(xiàn),不同框架有不同自己的標(biāo)簽庫(kù),Struts是應(yīng)用比較廣泛的一種表現(xiàn)層框架。這樣,表現(xiàn)層和服務(wù)層的分離是通過(guò)兩種框架達(dá)到目的,剩余的就是持久層框架了,通過(guò)持久層的框架將數(shù)據(jù)庫(kù)存儲(chǔ)從服務(wù)層中分離出來(lái)是其目的,持久層框架有兩種方向:直接自己編寫(xiě)JDBC等SQL語(yǔ)句(如iBatis);使用O/R Mapping技術(shù)實(shí)現(xiàn)的Hibernate和JDO技術(shù);當(dāng)然還有EJB中的實(shí)體Bean技術(shù)。持久層框架目前呈現(xiàn)百花齊放,各有優(yōu)缺點(diǎn)的現(xiàn)狀,所以正如表現(xiàn)層框架一樣,目前沒(méi)有一個(gè)框架被指定為標(biāo)準(zhǔn)框架,當(dāng)然,表現(xiàn)層框架現(xiàn)在又出來(lái)了一個(gè)JSF,它代表的頁(yè)面組件概念是一個(gè)新的發(fā)展方向,但是復(fù)雜的實(shí)現(xiàn)讓人有些忘而卻步。在所有這些J2EE技術(shù)中
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024高中語(yǔ)文第四單元?jiǎng)?chuàng)造形象詩(shī)文有別自主賞析項(xiàng)羽之死學(xué)案新人教版選修中國(guó)古代詩(shī)歌散文欣賞
- 2024高考化學(xué)一輪復(fù)習(xí)課練7鎂鋁及其化合物含解析
- 2024高考地理一輪復(fù)習(xí)專(zhuān)練16高低壓系統(tǒng)與鋒面氣旋含解析新人教版
- 小學(xué)全環(huán)境立德樹(shù)人工作方案
- 證券法期末考試題及答案
- 2024年海南政法職業(yè)學(xué)院高職單招語(yǔ)文歷年參考題庫(kù)含答案解析
- 2024年浙江安防職業(yè)技術(shù)學(xué)院高職單招職業(yè)適應(yīng)性測(cè)試歷年參考題庫(kù)含答案解析
- 2024年隴西縣第二人民醫(yī)院高層次衛(wèi)技人才招聘筆試歷年參考題庫(kù)頻考點(diǎn)附帶答案
- 2024年陽(yáng)江市中西醫(yī)結(jié)合醫(yī)院高層次衛(wèi)技人才招聘筆試歷年參考題庫(kù)頻考點(diǎn)附帶答案
- 2024年河南林業(yè)職業(yè)學(xué)院高職單招職業(yè)適應(yīng)性測(cè)試歷年參考題庫(kù)含答案解析
- 道路交通安全隱患排查整治方案
- 企業(yè)事業(yè)部制的績(jī)效評(píng)估與考核
- 中小學(xué)人工智能教育的國(guó)內(nèi)外研究綜述
- 月子中心評(píng)估項(xiàng)目可行性研究報(bào)告
- 中職數(shù)學(xué)課件
- 機(jī)械工程師筆試題目
- 傷口敷料種類(lèi)及作用-課件
- 電力安全工作規(guī)程(變電部分)課件
- 環(huán)保設(shè)施安全風(fēng)險(xiǎn)告知卡
- 卵石地層樁基旋挖鉆施工方案
- GB/T 4091-2001常規(guī)控制圖
評(píng)論
0/150
提交評(píng)論