- 相關(guān)推薦
Java Web開發(fā)和J2EE的區(qū)別
什么是J2EE呢?從整體上講,J2EE是使用Java技術(shù)開發(fā)企業(yè)級應(yīng)用的一種事實(shí)上的工業(yè)標(biāo)準(zhǔn)(Sun公司出于其自身利益的考慮,至今沒有將Java及其相關(guān)技術(shù)納入標(biāo)準(zhǔn)化組織的體系),它是Java技術(shù)不斷適應(yīng)和促進(jìn)企業(yè)級應(yīng)用過程中的產(chǎn)物。目前,Java平臺有三個(gè)版本:適用于小型設(shè)備和智能卡的J2ME(Java 2 Platform Micro Edition)、適用于桌面系統(tǒng)的J2SE和適用于企業(yè)級應(yīng)用的J2EE。Sun推出J2EE的目的是為了克服傳統(tǒng)Client/Server模式的弊病,迎合Browser/Server架構(gòu)的潮流,為應(yīng)用Java技術(shù)開發(fā)服務(wù)器端應(yīng)用提供一個(gè)平臺的獨(dú)立的、可移植的、多用戶的、安全的和基于標(biāo)準(zhǔn)的企業(yè)級平臺,從而簡化企業(yè)應(yīng)用的開發(fā)、管理和部署。J2EE是一個(gè)標(biāo)準(zhǔn),而不是一個(gè)現(xiàn)成的產(chǎn)品。各個(gè)平臺開發(fā)商按照J(rèn)2EE規(guī)范分別開發(fā)了不同的J2EE應(yīng)用服務(wù)器,J2EE應(yīng)用服務(wù)器是J2EE企業(yè)級應(yīng)用的部署平臺。由于它們都遵循了J2EE規(guī)范,因此,使用J2EE技術(shù)開發(fā)的企業(yè)級應(yīng)用可以部署在各種J2EE應(yīng)用服務(wù)器上。
為了推廣并規(guī)范化使用J2EE架構(gòu)企業(yè)級應(yīng)用的體系架構(gòu),Sun同時(shí)給出了一個(gè)建議性的J2EE應(yīng)用設(shè)計(jì)模型:J2EE Blueprints。J2EE Blueprints提供了實(shí)施J2EE企業(yè)級應(yīng)用的體系架構(gòu)、設(shè)計(jì)模式和相關(guān)的代碼,通過應(yīng)用J2EE Blueprints所描述的體系模型,能夠部分簡化架構(gòu)企業(yè)級應(yīng)用這項(xiàng)復(fù)雜的工作。J2EE Blueprints是開發(fā)人員設(shè)計(jì)和優(yōu)化J2EE組件的基本原則,同時(shí)為圍繞開發(fā)工作進(jìn)行職能分工給出了指導(dǎo)性策略,以幫助應(yīng)用開發(fā)設(shè)計(jì)人員合理地分配技術(shù)資源。
下面我們參照J(rèn)2EE Blueprints,結(jié)合最新版的J2EE規(guī)范(J2EE 1.4),從整體上闡述如何使用J2EE架構(gòu)企業(yè)級應(yīng)用。
圖2給出了使用J2EE架構(gòu)企業(yè)級應(yīng)用的體系架構(gòu)。J2EE將組成一個(gè)完整企業(yè)級應(yīng)用的不同部分納入不同的容器(Container),每個(gè)容器中都包含若干組件(這些組件是需要部署在相應(yīng)容器中的),同時(shí)各種組件都能使用各種J2EE Service/API。J2EE容器包括:
◆ Web容器服務(wù)器端容器,包括兩種組件JSP和Servlet,JSP和Servlet都是Web服務(wù)器的功能擴(kuò)展,接受Web請求,返回動(dòng)態(tài)的Web頁面。Web容器中的組件可使用EJB容器中的組件完成復(fù)雜的商務(wù)邏輯。
◆ EJB容器 服務(wù)器端容器,包含的組件為EJB(Enterprise JavaBeans),它是J2EE的核心之一,主要用于服務(wù)器端的商業(yè)邏輯的實(shí)現(xiàn)。EJB規(guī)范定義了一個(gè)開發(fā)和部署分布式商業(yè)邏輯的框架,以簡化企業(yè)級應(yīng)用的開發(fā),使其較容易地具備可伸縮性、可移植性、分布式事務(wù)處理、多用戶和安全性等。
◆ Applet容器客戶端容器,包含的組件為Applet。Applet是嵌在瀏覽器中的一種輕量級客戶端,一般而言,僅當(dāng)使用Web頁面無法充分地表現(xiàn)數(shù)據(jù)或應(yīng)用界面的時(shí)候,才使用它。Applet是一種替代Web頁面的手段,我們僅能夠使用J2SE開發(fā)Applet,Applet無法使用J2EE的各種Service和API,這是為了安全性的考慮。
◆ Application Client容器 客戶端容器,包含的組件為Application Client。Application Client相對Applet而言是一種較重量級的客戶端,它能夠使用J2EE的大多數(shù)Service和API。
通過這四個(gè)容器,J2EE能夠靈活地實(shí)現(xiàn)前面描述的企業(yè)級應(yīng)用的架構(gòu)。
在View部分,J2EE提供了三種手段:Web容器中的JSP(或Servlet)、Applet和Application Client,分別能夠?qū)崿F(xiàn)面向?yàn)g覽器的數(shù)據(jù)表現(xiàn)和面向桌面應(yīng)用的數(shù)據(jù)表現(xiàn)。Web容器中的Servlet是實(shí)現(xiàn)Controller部分業(yè)務(wù)流程控制的主要手段;而EJB則主要針對Model部分的業(yè)務(wù)邏輯實(shí)現(xiàn)。至于與各種企業(yè)資源和企業(yè)級應(yīng)用相連接,則是依靠J2EE的各種服務(wù)和API。
在J2EE的各種服務(wù)和API中,JDBC和JCA用于企業(yè)資源(各種企業(yè)信息系統(tǒng)和數(shù)據(jù)庫等)的連接,JAX-RPC、JAXR和SAAJ則是實(shí)現(xiàn)Web Services和Web Services連接的基本支持。
J2EE的各種組件
我們就J2EE的各種組件、服務(wù)和API,進(jìn)行更加詳細(xì)的闡述,看看在開發(fā)不同類型的企業(yè)級應(yīng)用時(shí),根據(jù)各自需求和目標(biāo)的不同,應(yīng)當(dāng)如何靈活使用并組合不同的組件和服務(wù)。
· Servlet
Servlet是Java平臺上的CGI技術(shù)。Servlet在服務(wù)器端運(yùn)行,動(dòng)態(tài)地生成Web頁面。與傳統(tǒng)的CGI和許多其它類似CGI的技術(shù)相比,Java Servlet具有更高的效率并更容易使用。對于Servlet,重復(fù)的請求不會導(dǎo)致同一程序的多次轉(zhuǎn)載,它是依靠線程的方式來支持并發(fā)訪問的。
· JSP
JSP(Java Server Page)是一種實(shí)現(xiàn)普通靜態(tài)HTML和動(dòng)態(tài)頁面輸出混合編碼的技術(shù)。從這一點(diǎn)來看,非常類似Microsoft ASP、PHP等技術(shù)。借助形式上的內(nèi)容和外觀表現(xiàn)的分離,Web頁面制作的任務(wù)可以比較方便地劃分給頁面設(shè)計(jì)人員和程序員,并方便地通過JSP來合成。在運(yùn)行時(shí)態(tài),JSP將會被首先轉(zhuǎn)換成Servlet,并以Servlet的形態(tài)編譯運(yùn)行,因此它的效率和功能與Servlet相比沒有差別,一樣具有很高的效率。
· EJB
EJB定義了一組可重用的組件:Enterprise Beans。開發(fā)人員可以利用這些組件,像搭積木一樣建立分布式應(yīng)用。在裝配組件時(shí),所有的Enterprise Beans都需要配置到EJB服務(wù)器(一般的Weblogic、WebSphere等J2EE應(yīng)用服務(wù)器都是EJB服務(wù)器)中。EJB服務(wù)器作為容器和低層平臺的橋梁管理著EJB容器,并向該容器提供訪問系統(tǒng)服務(wù)的能力。所有的EJB實(shí)例都運(yùn)行在EJB容器中。EJB容器提供了系統(tǒng)級的服務(wù),控制了EJB的生命周期。EJB容器為它的開發(fā)人員代管了諸如安全性、遠(yuǎn)程連接、生命周期管理及事務(wù)管理等技術(shù)環(huán)節(jié),簡化了商業(yè)邏輯的開發(fā)。EJB中定義了三種Enterprise Beans:
◆ Session Beans
◆ Entity Beans
◆ Message-driven Beans
· JDBC
JDBC(Java Database Connectivity,Java數(shù)據(jù)庫連接)API是一個(gè)標(biāo)準(zhǔn)SQL(Structured Query Language,結(jié)構(gòu)化查詢語言)數(shù)據(jù)庫訪問接口,它使數(shù)據(jù)庫開發(fā)人員能夠用標(biāo)準(zhǔn)Java API編寫數(shù)據(jù)庫應(yīng)用程序。JDBC API主要用來連接數(shù)據(jù)庫和直接調(diào)用SQL命令執(zhí)行各種SQL語句。利用JDBC API可以執(zhí)行一般的SQL語句、動(dòng)態(tài)SQL語句及帶IN和OUT參數(shù)的存儲過程。Java中的JDBC相當(dāng)與Microsoft平臺中的ODBC(Open Database Connectivity)。
· JMS
JMS(Java Message Service,Java消息服務(wù))是一組Java應(yīng)用接口,它提供創(chuàng)建、發(fā)送、接收、讀取消息的服務(wù)。JMS API定義了一組公共的應(yīng)用程序接口和相應(yīng)語法,使得Java應(yīng)用能夠和各種消息中間件進(jìn)行通信,這些消息中間件包括IBM MQ-Series、Microsoft MSMQ及純Java的SonicMQ。通過使用JMS API,開發(fā)人員無需掌握不同消息產(chǎn)品的使用方法,也可以使用統(tǒng)一的JMS API來操縱各種消息中間件。通過使用JMS,能夠最大限度地提升消息應(yīng)用的可移植性。 JMS既支持點(diǎn)對點(diǎn)的消息通信,也支持發(fā)布/訂閱式的消息通信。
· JNDI
由于J2EE應(yīng)用程序組件一般分布在不同的機(jī)器上,所以需要一種機(jī)制以便于組件客戶使用者查找和引用組件及資源。在J2EE體系中,使用JNDI(Java Naming and Directory Interface)定位各種對象,這些對象包括EJB、數(shù)據(jù)庫驅(qū)動(dòng)、JDBC數(shù)據(jù)源及消息連接等。JNDI API為應(yīng)用程序提供了一個(gè)統(tǒng)一的接口來完成標(biāo)準(zhǔn)的目錄操作,如通過對象屬性來查找和定位該對象。由于JNDI是獨(dú)立于目錄協(xié)議的,應(yīng)用還可以使用JNDI訪問各種特定的目錄服務(wù),如LDAP、NDS和DNS等。
· JTA
JTA(Java Transaction API)提供了J2EE中處理事務(wù)的標(biāo)準(zhǔn)接口,它支持事務(wù)的開始、回滾和提交。同時(shí)在一般的J2EE平臺上,總提供一個(gè)JTS(Java Transaction Service)作為標(biāo)準(zhǔn)的事務(wù)處理服務(wù),開發(fā)人員可以使用JTA來使用JTS。
· JCA
JCA(J2EE Connector Architecture)是J2EE體系架構(gòu)的一部分,為開發(fā)人員提供了一套連接各種企業(yè)信息系統(tǒng)(EIS,包括ERP、SCM、CRM等)的體系架構(gòu),對于EIS開發(fā)商而言,它們只需要開發(fā)一套基于JCA的EIS連接適配器,開發(fā)人員就能夠在任何的J2EE應(yīng)用服務(wù)器中連接并使用它。基于JCA的連接適配器的實(shí)現(xiàn),需要涉及J2EE中的事務(wù)管理、安全管理及連接管理等服務(wù)組件。
· JMX
JMX(Java Management Extensions)的前身是JMAPI。JMX致力于解決分布式系統(tǒng)管理的問題。JMX是一種應(yīng)用編程接口、可擴(kuò)展對象和方法的集合體,可以跨越各種異構(gòu)操作系統(tǒng)平臺、系統(tǒng)體系結(jié)構(gòu)和網(wǎng)絡(luò)傳輸協(xié)議,開發(fā)無縫集成的面向系統(tǒng)、網(wǎng)絡(luò)和服務(wù)的管理應(yīng)用。JMX是一個(gè)完整的網(wǎng)絡(luò)管理應(yīng)用程序開發(fā)環(huán)境,它同時(shí)提供了廠商需要收集的完整的特性清單、可生成資源清單表格、圖形化的用戶接口;訪問SNMP的網(wǎng)絡(luò)API;主機(jī)間遠(yuǎn)程過程調(diào)用;數(shù)據(jù)庫訪問方法等。
· JAAS
JAAS(Java Authentication and Authorization Service)實(shí)現(xiàn)了一個(gè)Java版本的標(biāo)準(zhǔn)Pluggable Authentication Module(PAM)的框架。JAAS可用來進(jìn)行用戶身份的鑒定,從而能夠可靠并安全地確定誰在執(zhí)行Java代碼。同時(shí)JAAS還能通過對用戶進(jìn)行授權(quán),實(shí)現(xiàn)基于用戶的訪問控制。
· JACC
JACC(Java Authorization Service Provider Contract for Containers)在J2EE應(yīng)用服務(wù)器和特定的授權(quán)認(rèn)證服務(wù)器之間定義了一個(gè)連接的協(xié)約,以便將各種授權(quán)認(rèn)證服務(wù)器插入到J2EE產(chǎn)品中去。
· JAX-RPC
通過使用JAX-RPC(Java API for XML-based RPC),已有的Java類或Java應(yīng)用都能夠被重新包裝,并以Web Services的形式發(fā)布。JAX-RPC提供了將RPC參數(shù)(in/out)編碼和解碼的API,使開發(fā)人員可以方便地使用SOAP消息來完成RPC調(diào)用。同樣,對于那些使用EJB(Enterprise JavaBeans)的商業(yè)應(yīng)用而言,同樣可以使用JAX-RPC來包裝成Web服務(wù),而這個(gè)Web Servoce的WSDL界面是與原先的EJB的方法是對應(yīng)一致的。JAX-RPC為用戶包裝了Web服務(wù)的部署和實(shí)現(xiàn),對Web服務(wù)的開發(fā)人員而言,SOAP/WSDL變得透明,這有利于加速Web服務(wù)的開發(fā)周期。
· JAXR
JAXR(Java API for XML Registries)提供了與多種類型注冊服務(wù)進(jìn)行交互的API。JAXR運(yùn)行客戶端訪問與JAXR規(guī)范相兼容的Web Servcices,這里的Web Services即為注冊服務(wù)。一般來說,注冊服務(wù)總是以Web Services的形式運(yùn)行的。JAXR支持三種注冊服務(wù)類型:JAXR Pluggable Provider、Registry-specific JAXR Provider、JAXR Bridge Provider(支持UDDI Registry和ebXML Registry/Repository等)。
· SAAJ
SAAJ(SOAP with Attachemnts API for Java)是JAX-RPC的一個(gè)增強(qiáng),為進(jìn)行低層次的SOAP消息操縱提供了支持。
下面我們通過假設(shè)一個(gè)企業(yè)應(yīng)用的J2EE實(shí)現(xiàn),來了解各種組件和服務(wù)的應(yīng)用。假設(shè)應(yīng)用對象是計(jì)算機(jī)產(chǎn)品的生產(chǎn)商/零售商的銷售系統(tǒng),這個(gè)銷售系統(tǒng)能夠通過自己的網(wǎng)站發(fā)布產(chǎn)品信息,同時(shí)也能將產(chǎn)品目錄傳送給計(jì)算機(jī)產(chǎn)品交易市場。銷售系統(tǒng)能夠在線接受訂單(來自自己的Web網(wǎng)站或者來自計(jì)算機(jī)產(chǎn)品交易市場),并隨后轉(zhuǎn)入內(nèi)部企業(yè)管理系統(tǒng)進(jìn)行相關(guān)的后續(xù)處理。
參見圖3,這個(gè)企業(yè)應(yīng)用可以這種方式架構(gòu)。該企業(yè)應(yīng)用的核心是產(chǎn)品目錄管理和產(chǎn)品定購管理這兩個(gè)業(yè)務(wù)邏輯,使用EJB加以實(shí)現(xiàn),并部署在EJB容器中。由于產(chǎn)品目錄和定購信息都需要持久化,因此使用JDBC連接數(shù)據(jù)庫,并使用JTA來完成數(shù)據(jù)庫存取事務(wù)。
然后使用JSP/Servlet來實(shí)現(xiàn)應(yīng)用的Web表現(xiàn):在線產(chǎn)品目錄瀏覽和在線定購。為了將產(chǎn)品目錄發(fā)送給特定的交易市場,使用JMS實(shí)現(xiàn)異步的基于消息的產(chǎn)品目錄傳輸。為了使得更多的其它外部交易市場能夠集成產(chǎn)品目錄和定購業(yè)務(wù),需要使用Web Services技術(shù)包裝商業(yè)邏輯的實(shí)現(xiàn)。由于產(chǎn)品定購管理需要由公司內(nèi)部雇員進(jìn)行處理,因此需要集成公司內(nèi)部的用戶系統(tǒng)和訪問控制服務(wù)以方便雇員的使用,使用JACC集成內(nèi)部的訪問控制服務(wù),使用JNDI集成內(nèi)部的用戶目錄,并使用JAAS進(jìn)行訪問控制。由于產(chǎn)品訂購事務(wù)會觸發(fā)后續(xù)的企業(yè)ERP系統(tǒng)的相關(guān)操作(包括倉儲、財(cái)務(wù)、生產(chǎn)等),需要使用JCA連接企業(yè)ERP。
最后為了將這個(gè)應(yīng)用納入到企業(yè)整體的系統(tǒng)管理體系中去,使用Application Client架構(gòu)了一個(gè)管理客戶端(與其它企業(yè)應(yīng)用管理應(yīng)用部署在一臺機(jī)器上),并通過JMX管理這個(gè)企業(yè)應(yīng)用.
【Java Web開發(fā)和J2EE的區(qū)別】相關(guān)文章:
JAVA和.NET開發(fā)過程中的區(qū)別04-27
關(guān)于Java中Queue和BlockingQueue的區(qū)別06-06
J2EE項(xiàng)目開發(fā)風(fēng)險(xiǎn)匯總08-30
開發(fā)j2ee項(xiàng)目設(shè)置方法05-13
Eclipse j2ee開發(fā)環(huán)境的搭建05-10
J2EE軟件開發(fā)過程08-26
J2EE項(xiàng)目開發(fā)10大風(fēng)險(xiǎn)盤點(diǎn)06-20
emba和mba的區(qū)別06-03
211和985的區(qū)別06-06