亚洲国产日韩欧美在线a乱码,国产精品路线1路线2路线,亚洲视频一区,精品国产自,www狠狠,国产情侣激情在线视频免费看,亚洲成年网站在线观看

J2EE與.NET技術(shù)架構(gòu)的比較

時(shí)間:2020-11-10 19:18:56 J2EE培訓(xùn) 我要投稿

J2EE與.NET技術(shù)架構(gòu)的比較

  隨著三層/多層企業(yè)信息系統(tǒng)結(jié)構(gòu)的深度發(fā)展和下一代分布式計(jì)算模型Web 服務(wù)的出現(xiàn),軟件開發(fā)中關(guān)于平臺(tái)、框架、語(yǔ)言的競(jìng)爭(zhēng)也愈演愈烈。自從微軟推出.NET平臺(tái),業(yè)界關(guān)于J2EE平臺(tái)與.NET平臺(tái)的比較從未停止過(guò)。那么J2EE與.NET有什么區(qū)別呢?下面跟yjbys小編一起來(lái)了解吧!

  本文在收集整理相關(guān)文章的基礎(chǔ)上,試圖對(duì)目前兩種主要的應(yīng)用軟件開發(fā)技術(shù)架構(gòu)J2EE與.NET進(jìn)行一個(gè)客觀、公正、全面的比較,以幫助軟件開發(fā)商選擇一個(gè)較為合適的開發(fā)平臺(tái)進(jìn)行應(yīng)用軟件的開發(fā)。

  一、J2EE簡(jiǎn)介

  Java于1995年由Sun公司推出,當(dāng)時(shí)它的主要用途是制作產(chǎn)生動(dòng)態(tài)網(wǎng)頁(yè)的Applet。后來(lái),人們發(fā)現(xiàn)Java的“一次開發(fā),多次運(yùn)行”、純面向?qū)ο蟮奶匦、垃圾回收機(jī)制和內(nèi)置安全特別適合于開發(fā)企業(yè)應(yīng)用系統(tǒng)。于是,企業(yè)應(yīng)用開發(fā)商紛紛在Java標(biāo)準(zhǔn)版的基礎(chǔ)上各自擴(kuò)展出許多企業(yè)應(yīng)用API,其結(jié)果導(dǎo)致基于Java的企業(yè)應(yīng)用呈爆炸式增長(zhǎng)。但是各企業(yè)系統(tǒng)API之間又不能相互兼容,破壞了Java的平臺(tái)的獨(dú)立性。鑒于此,Sun公司聯(lián)合IBM、Oracle、BEA等大型企業(yè)應(yīng)用系統(tǒng)開發(fā)商于1999年共同制訂了一個(gè)基于Java組件技術(shù)的企業(yè)應(yīng)用系統(tǒng)開發(fā)規(guī)范,該規(guī)范定義了一個(gè)多層企業(yè)信息系統(tǒng)的標(biāo)準(zhǔn)平臺(tái),旨在簡(jiǎn)化和規(guī)范企業(yè)應(yīng)用系統(tǒng)的開發(fā)和部署。這一規(guī)范和其定義的平臺(tái)就構(gòu)成了J2EE。它定義了基于組件的方式設(shè)計(jì)、開發(fā)、組裝和部署企業(yè)應(yīng)用系統(tǒng)的各個(gè)組成部分。同時(shí),J2EE規(guī)范定義了分布式多層應(yīng)用系統(tǒng)模型、組件重用策略、一體化的安全模型以及靈活的事務(wù)控制策略等,使得獨(dú)立軟件提供商(ISV)能夠比以前更快的速度,向市場(chǎng)推出用戶適應(yīng)的解決方案。

  J2EE是一套針對(duì)于企業(yè)級(jí)分布式應(yīng)用的計(jì)算環(huán)境,其結(jié)構(gòu)體系如圖1所示。它定義了動(dòng)態(tài)Web頁(yè)面功能(Servlet和Jsp)、商業(yè)組件(EJB)、異步消息傳輸機(jī)制(JMS)、名稱和目錄定位服務(wù)(JNDI)、數(shù)據(jù)庫(kù)訪問(wèn)(JDBC)、與子系統(tǒng)的連接器(JCA)和安全服務(wù)等。

  需要注意的是,J2EE本身是一個(gè)標(biāo)準(zhǔn),而不是一個(gè)現(xiàn)成的產(chǎn)品(雖然現(xiàn)在有很多符合J2EE標(biāo)準(zhǔn)的產(chǎn)品),它由以下幾個(gè)部分組成:

  (1)J2EE規(guī)范 該規(guī)范定義了J2EE平臺(tái)的體系結(jié)構(gòu)、平臺(tái)角色及J2EE中每種服務(wù)和核心API的實(shí)現(xiàn)要求。它是J2EE應(yīng)用服務(wù)器開發(fā)商的大綱。

  (2)J2EE兼容性測(cè)試站點(diǎn) Sun公司提供的一個(gè)測(cè)試J2EE應(yīng)用服務(wù)器是否符合J2EE規(guī)范的站點(diǎn),對(duì)通過(guò)該站點(diǎn)測(cè)試的產(chǎn)品,Sun公司將發(fā)放兼容性證書。

  (3)J2EE參考實(shí)現(xiàn) 即J2EE SDK,它既是Sun公司自己對(duì)J2EE規(guī)范的一個(gè)非商業(yè)性實(shí)現(xiàn),又是為開發(fā)基于J2EE企業(yè)級(jí)應(yīng)用系統(tǒng)原型提供的一個(gè)免費(fèi)的底層開發(fā)環(huán)境。

  (4)J2EE實(shí)施指南 即BluePrints文檔,該文檔通過(guò)實(shí)例來(lái)指導(dǎo)開發(fā)人員如何去開發(fā)一個(gè)基于J2EE的多層企業(yè)應(yīng)用系統(tǒng)。

  1.組件-容器模型

  J2EE是一個(gè)基于組件-容器模型的系統(tǒng)平臺(tái),其核心概念是容器。容器是指為特定組件提供服務(wù)的一個(gè)標(biāo)準(zhǔn)化的運(yùn)行時(shí)環(huán)境,Java虛擬機(jī)就是一個(gè)典型的容器。組件是一個(gè)可以部署的程序單元,它以某種方式運(yùn)行在容器中,容器封裝了J2EE底層的API,為組件提供事務(wù)處理、數(shù)據(jù)訪問(wèn)、安全性、持久性等服務(wù)。在J2EE中組件和組件之間并不直接訪問(wèn),而是通過(guò)容器提供的協(xié)議和方法來(lái)相互調(diào)用。組件和容器間的關(guān)系通過(guò)“協(xié)議”來(lái)定義。容器的底層是J2EE服務(wù)器,它為容器提供J2EE中定義的各種服務(wù)和API。一個(gè)J2EE服務(wù)器(也叫J2EE應(yīng)用服務(wù)器)可以支持一種或多種容器。

  2.J2EE的核心——EJB

  J2EE定義了四種組件:Applet組件、Application客戶組件、Web組件及EJB(Enterprise JavaBeans)組件。其中Applet和Application客戶組件在客戶端運(yùn)行,J2EE通過(guò)Java插件為Applet提供運(yùn)行環(huán)境,Application客戶的容器就是本地Java虛擬機(jī);Web及EJB組件在服務(wù)端運(yùn)行。J2EE中包含JSP和Servlet兩種Web組件,它們是Web服務(wù)器的功能擴(kuò)展,都能生成動(dòng)態(tài)Web頁(yè)面。不同的是JSP是將Java代碼嵌入到HTML中,服務(wù)器負(fù)責(zé)解釋執(zhí)行,生成結(jié)果返回用戶(與ASP技術(shù)相似);而Servlet是單獨(dú)的Java類,它動(dòng)態(tài)生成HTML文件返回給客戶。Web組件的容器比較典型的就是基于Java的Web服務(wù)器。

  EJB是J2EE平臺(tái)的核心,也是J2EE得到業(yè)界廣泛關(guān)注和支持的主要原因。眾所周知J2EE的一個(gè)主要目的就是簡(jiǎn)化企業(yè)應(yīng)用系統(tǒng)的開發(fā),使程序員將主要精力放在商業(yè)邏輯的開發(fā)上。EJB正是基于這種思想的服務(wù)器端技術(shù),它本身也是一種規(guī)范,該規(guī)范定義了一個(gè)可重用的組件框架來(lái)實(shí)現(xiàn)分布式的、面向?qū)ο蟮纳虡I(yè)邏輯;其核心思想是將商業(yè)邏輯與底層的系統(tǒng)邏輯分開,使開發(fā)者只需關(guān)心商業(yè)邏輯,而由EJB容器實(shí)現(xiàn)目錄服務(wù)、事務(wù)處理、持久性、安全性等底層系統(tǒng)邏輯。

  一個(gè)可部署的EJB組件包含3個(gè)部分:Remote接口、Home接口和Enterprise Beans類。

  (1)Remote接口 Remote接口定義EJB組件中提供的可供用戶調(diào)用的方法,也就是通常所說(shuō)的實(shí)現(xiàn)商業(yè)邏輯的函數(shù)或過(guò)程(如計(jì)算商品價(jià)格的函數(shù)),以供遠(yuǎn)程客戶端調(diào)用。在EJB組件部署到容器的時(shí)候,容器會(huì)自動(dòng)生成Remote接口相應(yīng)的實(shí)例,即EJB對(duì)象,它負(fù)責(zé)代理用戶的調(diào)用請(qǐng)求。

  (2)Home接口 Home接口定義了一組方法來(lái)創(chuàng)建新的EJB對(duì)象,查找、定位和清除已有的EJB對(duì)象。在EJB組件部署時(shí),容器也會(huì)自動(dòng)生成相應(yīng)的Home對(duì)象,該對(duì)象負(fù)責(zé)查找和創(chuàng)建EJB對(duì)象,返回EJB對(duì)象的引用給客戶;用戶利用該引用調(diào)用EJB組件的方法,得到結(jié)果;最后Home對(duì)象清除EJB對(duì)象。可以形象地稱Home接口為EJB對(duì)象的工廠。

  (3)Enterprise Beans類 Enterprise Beans類是商業(yè)邏輯的具體實(shí)現(xiàn)類。它可供用戶調(diào)用的方法在Remote接口中定義。根據(jù)功能不同,EJB 2.0規(guī)范中定義了三種Enterprise Beans:會(huì)話Beans(Session Beans)、實(shí)體Beans(Entity Beans)和消息驅(qū)動(dòng)Beans(Message-driven Beans)。

  ①會(huì)話Beans分無(wú)狀態(tài)和有狀態(tài)兩種。一般無(wú)狀態(tài)的會(huì)話Beans模擬商業(yè)邏輯,比如計(jì)算價(jià)格等。有狀態(tài)的會(huì)話Beans通常模擬一個(gè)客戶會(huì)話,它會(huì)臨時(shí)保存客戶信息,根據(jù)客戶要求調(diào)用其他Beans來(lái)存取數(shù)據(jù)。兩種會(huì)話Beans都不保存狀態(tài)信息或數(shù)據(jù),當(dāng)客戶斷開連接或服務(wù)器關(guān)閉時(shí),會(huì)話Beans也隨之消失。一個(gè)會(huì)話Beans的典型例子是網(wǎng)站上的購(gòu)物車。

 、趯(shí)體Beans模擬商業(yè)數(shù)據(jù),并表示一個(gè)數(shù)據(jù)存儲(chǔ),可以是狀態(tài)信息或數(shù)據(jù)庫(kù)中的一條記錄。實(shí)體Beans在客戶斷開連接或服務(wù)器關(guān)閉后,仍有服務(wù)保證其數(shù)據(jù)得以保存。一個(gè)實(shí)體Beans的典型例子就是客戶賬號(hào)信息。

 、巯Ⅱ(qū)動(dòng)Beans在行為上很像會(huì)話Beans。不同的是僅在需要向這些Beans發(fā)送消息時(shí)才調(diào)用消息驅(qū)動(dòng)Beans,比如在需要的時(shí)候發(fā)送用戶確認(rèn)信息等。

  另外,在提交和部署EJB組件時(shí),還需要兩個(gè)文件:部署描述文件,容器根據(jù)該文件來(lái)部署Enterprise Beans,提供所要求的服務(wù);EJB jar文件,它是提交給EJB容器的一個(gè)部署單元,容器(應(yīng)用服務(wù)器)在部署時(shí)解開它,裝入Enterprise Beans。

  EJB容器非常復(fù)雜,一般由專業(yè)的J2EE應(yīng)用服務(wù)器開發(fā)商提供,比較流行的EJB容器由IBM的WebShpere、BEA公司的WebLogic Server、Sun公司的iPlant等應(yīng)用服務(wù)器提供。EJB容器除了為EJB提供事務(wù)處理、目錄服務(wù)、持久性管理和安全性服務(wù)外,還負(fù)責(zé)EJB的部署、發(fā)布和生命周期管理。

  3.平臺(tái)標(biāo)準(zhǔn)服務(wù)

  服務(wù)是組件和容器之間,以及容器和J2EE服務(wù)器之間的接口,在實(shí)現(xiàn)層面上它就是一系列API和協(xié)議。J2EE平臺(tái)定義了一組標(biāo)準(zhǔn)的服務(wù),其中有些服務(wù)是由J2SE提供的,有些則是J2EE對(duì)Java的擴(kuò)展。

  (1) 目錄服務(wù)JNDI(Java Name and Directory) API為應(yīng)用程序提供了一個(gè)統(tǒng)一的接口來(lái)完成標(biāo)準(zhǔn)的目錄操作,由于JNDI是獨(dú)立于目錄協(xié)議的,應(yīng)用程序可以用它訪問(wèn)各種目錄服務(wù),如LDAP、NDS、DNS等。

  (2) 數(shù)據(jù)訪問(wèn)JDBC(Java Database Connectivity) API為訪問(wèn)不同類型的'數(shù)據(jù)庫(kù)提供了統(tǒng)一的途徑,屏蔽了不同數(shù)據(jù)庫(kù)的細(xì)節(jié),具有平臺(tái)無(wú)關(guān)性。J2EE平臺(tái)除了要求核心的JDBC API(包含在J2SE中)外,還要求擴(kuò)展的JDBC API 2.0,它支持行集、連接池和分布式的事務(wù)處理。

  (3) 事務(wù)處理JTA(Java Transaction Architecture) 它定義了一組標(biāo)準(zhǔn)的接口,為應(yīng)用系統(tǒng)提供可靠的事務(wù)處理支持。JTS(Java Transaction Service)是CORBA OTS事務(wù)監(jiān)控的Java實(shí)現(xiàn)。JTS規(guī)定了事務(wù)管理器的實(shí)現(xiàn)方式,該事務(wù)管理器在高層支持JTA標(biāo)準(zhǔn),在底層實(shí)現(xiàn)了OMG OTS規(guī)范的Java映射。

  (4) 消息服務(wù)JMS(Java Message Service) 它是一組用于和面向消息的中間件相互通信的API,它既支持點(diǎn)對(duì)點(diǎn)的消息通信,也支持發(fā)布/訂閱式的消息通信。電子郵件 JavaMail API允許在應(yīng)用程序中以獨(dú)立于平臺(tái)、獨(dú)立于協(xié)議的方式收發(fā)電子郵件。JAF(JavaBeans Activation Framework)負(fù)責(zé)處理MIME編碼,JavaMail利用JAF來(lái)處理MIME編碼的郵件附件。

  (5) CORBA兼容接口 RMI(遠(yuǎn)程方法調(diào)用)是在分布式對(duì)象間通信的Java本地方法,它使應(yīng)用程序調(diào)用遠(yuǎn)程方法像調(diào)用本地方法一樣,不需要考慮所調(diào)用對(duì)象的位置。RMI-IIOP是RMI的擴(kuò)展,是符合CORBA標(biāo)準(zhǔn)的對(duì)象通信協(xié)議,也是J2EE默認(rèn)的組件通信協(xié)議。Java IDL允許J2EE應(yīng)用組件通過(guò)IIOP協(xié)議訪問(wèn)外部的CORBA對(duì)象。

  (6) 安全服務(wù)JAAS(Java Authentication and Authorization Service) 它用兩個(gè)步驟實(shí)現(xiàn)安全性:認(rèn)證,即由用戶提供認(rèn)證信息(如用戶名和密碼)來(lái)獲得系統(tǒng)認(rèn)證,這一過(guò)程又稱之為登錄;授權(quán),在被確認(rèn)為合法用戶后,系統(tǒng)根據(jù)用戶的角色授予其相應(yīng)的權(quán)限。J2EE的授權(quán)是基于安全角色的概念,一個(gè)安全角色是一個(gè)擁有相同權(quán)限的邏輯組。J2EE的安全角色由應(yīng)用組件提供商來(lái)定義。

  4.對(duì)WEB服務(wù)的支持

  Sun提供了一套API及其實(shí)現(xiàn)WSDP作為對(duì)J2EE的擴(kuò)展。在WSDP中,JAXP用來(lái)解析XML文檔;JAXR向UDDI服務(wù)器注冊(cè)Web Services;JTX/RPC用基于XML的協(xié)議(如SOAP)來(lái)發(fā)送和接收XML文檔;JWSDL處理WSDL文檔。

  J2EE 1.4的設(shè)計(jì)目標(biāo)就是Web服務(wù),其中新加入了像JAX-RPC/SAAJ和JAXR等API,另外EJB 2.1里也增加了許多針對(duì)Web服務(wù)設(shè)計(jì)的特性。

  5 多層應(yīng)用模型

  從應(yīng)用的角度來(lái)看,J2EE為企業(yè)應(yīng)用系統(tǒng)的開發(fā)提供了一種多層分布式企業(yè)應(yīng)用模型。在J2EE中,應(yīng)用邏輯按功能不同可以劃分為不同類型的組件,各組件根據(jù)它們所在的層分布在不同的機(jī)器上,共同組成一個(gè)基于組件的分布式系統(tǒng)。

  如圖1所示,J2EE定義了一個(gè)典型的四層結(jié)構(gòu),分別是客戶層、表示層(Web層)、業(yè)務(wù)邏輯層和企業(yè)信息系統(tǒng)層。

  在應(yīng)用開發(fā)時(shí),J2EE定義的四層模型可根據(jù)實(shí)際情況靈活運(yùn)用。由于除Applet外,其他的組件都可以訪問(wèn)數(shù)據(jù)庫(kù)、EJB組件和企業(yè)信息系統(tǒng),因此通過(guò)不同層的取舍及組合,可以衍生出許多應(yīng)用軟件開發(fā)模型,如基于Web的四層模型、基于桌面應(yīng)用的三層模型(不包括Web層)、B2B模型(不包括客戶層)等。如果應(yīng)用系統(tǒng)比較簡(jiǎn)單,一般不用EJB作為邏輯層,而直接用Web組件來(lái)實(shí)現(xiàn)商業(yè)邏輯和數(shù)據(jù)訪問(wèn),畢竟EJB的開發(fā)和部署費(fèi)用還相當(dāng)高。

  二、.NET簡(jiǎn)介

  .NET來(lái)自于微軟,是一套全能的框架平臺(tái),支持C++、C#、J++、VB、ASP等語(yǔ)言,能夠解決C/S、B/S和單機(jī)等結(jié)構(gòu)的軟件開發(fā)需求。.NET平臺(tái)將這些語(yǔ)言編譯成CLR語(yǔ)言,使它們可以無(wú)差別的運(yùn)行在.NET Framework上,是2000年以后微軟最為重要的軟件開發(fā)套件產(chǎn)品。

  .NET的絕大部分是微軟Windows DNA(Distributed Network Architecture)的重寫,DNA是微軟以前開發(fā)企業(yè)應(yīng)用程序的平臺(tái)。Windows DNA中包括了許多已經(jīng)被證實(shí)的技術(shù),新的.NET框架取代了這些技術(shù),并包含了Web服務(wù)層和改良的語(yǔ)言支持。圖2是.NET開發(fā)平臺(tái)的體系結(jié)構(gòu)。

  1.﹒NET框架內(nèi)核

  .NET框架實(shí)現(xiàn)了語(yǔ)言開發(fā)、代碼編譯、組件配置、程序運(yùn)行和對(duì)象交互等各個(gè)層面的功能,為Web服務(wù)及普通應(yīng)用程序提供了一個(gè)托管、安全和高效的執(zhí)行環(huán)境。所有在.NET平臺(tái)上創(chuàng)建的應(yīng)用程序運(yùn)行都需要兩個(gè)核心模塊:Common Language Runtime(CLR,通用語(yǔ)言運(yùn)行時(shí))和.NET Framework類庫(kù)。

  (1)CLR——.NET的虛擬機(jī) CLR是一個(gè)軟件引擎,用來(lái)加載應(yīng)用程序,確認(rèn)它們可以沒(méi)有錯(cuò)誤地運(yùn)行,并進(jìn)行相應(yīng)的安全許可驗(yàn)證,執(zhí)行應(yīng)用程序,然后將被清除。它為.NET應(yīng)用程序提供了一個(gè)托管的代碼執(zhí)行環(huán)境,托管意味著將原來(lái)由程序員或操作系統(tǒng)做的工作剝離出來(lái)交由CLR來(lái)完成,從而使程序運(yùn)行獲得更高的安全性和穩(wěn)定性。這些工作包括內(nèi)存管理、即時(shí)編譯、組件自描述、安全管理、代碼驗(yàn)證以及其他一些系統(tǒng)服務(wù)。CLR提供一個(gè)技術(shù)規(guī)范,無(wú)論程序使用什么語(yǔ)言編寫,只要能編譯成中間語(yǔ)言,就可以在它的支持下運(yùn)行,這樣.NET應(yīng)用程序就可以獨(dú)立于語(yǔ)言。CLR還在應(yīng)用程序運(yùn)行環(huán)境中為基于組件的編程提供了直接支持,比如它支持屬性、事件、對(duì)象、繼承性、多態(tài)性和接口等組件編程特性。

  CLR中的自動(dòng)垃圾收集器負(fù)責(zé).NET應(yīng)用程序運(yùn)行時(shí)的內(nèi)存分配、對(duì)象布局、內(nèi)存釋放等內(nèi)存管理問(wèn)題,徹底解決了多年來(lái)困擾程序員的內(nèi)存泄漏問(wèn)題,大大增強(qiáng)了應(yīng)用程序的健壯性。

  即時(shí)編譯器在運(yùn)行時(shí),將中間語(yǔ)言以調(diào)用對(duì)象的方法將單位動(dòng)態(tài)編譯成本地二進(jìn)制代碼。

  (2)類庫(kù) NET Framework類庫(kù)向程序員提供軟件組件,用來(lái)編寫在CLR控制下運(yùn)行的代碼,它們按照單一有序的分級(jí)組織提供了一個(gè)龐大的功能集,包括從文件系統(tǒng)到對(duì)XML功能的網(wǎng)訪問(wèn)的每一樣功能。該類庫(kù)為開發(fā)提供了三種基本編程模板:基于ASP.NET的Web表單應(yīng)用、基于ASP.NET的Web服務(wù)應(yīng)用和基于傳統(tǒng)GUI交互的Windows應(yīng)用。

  .NET Framework類庫(kù)由一組廣泛的、面向?qū)ο蟮、可被開發(fā)者用于任何編程語(yǔ)言的可重用類集合組成,它提供了幾乎所有應(yīng)用程序都需要的公共代碼;在此之上是許多應(yīng)用程序模板,這些模板為開發(fā)網(wǎng)絡(luò)站點(diǎn)和網(wǎng)絡(luò)服務(wù)提供特定的高級(jí)組件和服務(wù),無(wú)論是傳統(tǒng)的命令行程序,還是Windows圖形界面程序,亦或是面向下一代互聯(lián)網(wǎng)分布式計(jì)算平臺(tái)的ASP.NET或Web服務(wù)應(yīng)用,與在Windows和它的SDK中發(fā)送的代碼庫(kù)一樣,.NET框架類庫(kù)將程序員從繁重的編程細(xì)節(jié)中解放出來(lái),而專注于程序的商業(yè)邏輯。它將核心Win32 API最常用的功能和外掛SDK的功能封裝到了一個(gè)統(tǒng)一的包中,并采用清晰而有條理的方式對(duì)類庫(kù)進(jìn)行分組和描述,這樣開發(fā)者就能夠更方便地找到其應(yīng)用程序所需要的大多數(shù)功能。

  2.ADO.NET組件

  ADO.NET為基于網(wǎng)絡(luò)的、可擴(kuò)展的應(yīng)用程序和服務(wù)提供數(shù)據(jù)訪問(wèn)服務(wù)。它不僅支持傳統(tǒng)的基于鏈接指針風(fēng)格的數(shù)據(jù)訪問(wèn),而且對(duì)于更適合于把數(shù)據(jù)返回到客戶端應(yīng)用程序的無(wú)鏈接數(shù)據(jù)模板,也提供高性能的訪問(wèn)支持。

  3.XML數(shù)據(jù)組件

  通過(guò)它開發(fā)人員可以對(duì)任何數(shù)據(jù)進(jìn)行XML轉(zhuǎn)換、傳輸和確認(rèn),所有數(shù)據(jù)都可以被看作是XML格式的。同時(shí),系統(tǒng)也支持ADO.NET數(shù)據(jù)與XML數(shù)據(jù)之間的通用轉(zhuǎn)換。

  4.WINDOWS表單組件

  Windows表單組件為開發(fā)人員提供了強(qiáng)大的Windows應(yīng)用程序模型和豐富的Windows用戶口,包括傳統(tǒng)的ActiveX控件和Windows XP的新界面,如透明的、分層的浮動(dòng)窗口。

  5.ASP.NET應(yīng)用服務(wù)

  ASP.NET的核心是其用于處理基于HTTP請(qǐng)求的高性能的運(yùn)行語(yǔ)言,其編譯運(yùn)行的方式大大提高了它的性能。ASP.NET使用基于構(gòu)件的.NET框架配置模板,因此,它獲得了諸如XCOPY配置、構(gòu)件并行配置和基于XML配置之類的優(yōu)點(diǎn)。它還支持應(yīng)用程序的實(shí)時(shí)更新,同時(shí)提供高速緩沖服務(wù),以改善性能。

  ASP.NET Web表單把VB表單高效率的優(yōu)點(diǎn)帶到了Web應(yīng)用程序的開發(fā)中。它支持傳統(tǒng)的將HTML內(nèi)容與腳本代碼混合的ASP語(yǔ)法,但是它提出了一種將應(yīng)用程序代碼和用戶接口內(nèi)容分離的、更加結(jié)構(gòu)化的方法。它提供一套映射傳統(tǒng)HTML用戶接口部件(包括列表框、文本框和按鈕)的ASP.NET Web表單控件和一套更加復(fù)雜的Web應(yīng)用控件(如日歷和廣告轉(zhuǎn)板)。

  6.對(duì)Web服務(wù)的支持

  ASP.NET應(yīng)用服務(wù)體系架構(gòu)為用ASP.NET建立Web服務(wù)提供了一個(gè)高級(jí)的可編程模板。雖然建立Web服務(wù)并不限定使用特定的服務(wù)平臺(tái),但是ASP.NET的許多優(yōu)點(diǎn)將簡(jiǎn)化其開發(fā)過(guò)程。使用這個(gè)編程模型,開發(fā)人員甚至無(wú)需理解HTTP、SOAP或其他任何網(wǎng)絡(luò)的服務(wù)規(guī)范。ASP.NET可以利用現(xiàn)存的體系架構(gòu)和應(yīng)用程序,為在互聯(lián)網(wǎng)上綁定應(yīng)用程序提供了一個(gè)簡(jiǎn)單、靈活和基于產(chǎn)業(yè)標(biāo)準(zhǔn)的模型。

  三、J2EE與.NET比較

  1.體系架構(gòu)的比較

  作為彼此競(jìng)爭(zhēng)的應(yīng)用平臺(tái),J2EE和.NET開發(fā)平臺(tái)在目標(biāo)和體系結(jié)構(gòu)上極其相似,但在實(shí)現(xiàn)上又完全不同。

  (1)類似的平臺(tái)基礎(chǔ)構(gòu)造 J2EE和.NET兩個(gè)平臺(tái)在底層的執(zhí)行引擎都源于托管的虛擬機(jī)概念,但.NET的CLR沿著Java虛擬機(jī)(JVM)走得更遠(yuǎn),CLR在借鑒了JVM的自動(dòng)垃圾收集、異常處理等機(jī)制的同時(shí),又為.NET平臺(tái)添加了多語(yǔ)言支持、組件自描述等新的特性。

  在.NET和 J2EE平臺(tái)上,程序的編譯都經(jīng)過(guò)兩個(gè)類似的過(guò)程。首先,特定高級(jí)語(yǔ)言編譯器將C#(及其他.NET語(yǔ)言)和Java源代碼分別翻譯成中間語(yǔ)言(IL)和字節(jié)代碼(ByteCode)。.NET在中間語(yǔ)言設(shè)計(jì)時(shí)通盤考慮了多個(gè)主流高級(jí)語(yǔ)言,在這一層面實(shí)現(xiàn)了.NET平臺(tái)的跨語(yǔ)言承諾;J2EE的基石是Java語(yǔ)言,它最典型的特征是:一次編寫,多次運(yùn)行?缙脚_(tái)是J2EE一直引以為豪的關(guān)鍵,這是通過(guò)JVM來(lái)實(shí)現(xiàn)的。

  其次,在執(zhí)行時(shí),中間語(yǔ)言被即時(shí)編譯器(JIT)編譯成特定平臺(tái)的二進(jìn)制代碼,字節(jié)代碼則通過(guò)JVM解釋執(zhí)行,完成各自語(yǔ)言的指令功能。鑒于微軟在“Wintel平臺(tái)”上的代碼優(yōu)化功底,.NET代碼的執(zhí)行速度較之于Java有明顯的優(yōu)勢(shì)是不爭(zhēng)的事實(shí)。但在Unix/Linux平臺(tái)上,由于.NET遲遲未能實(shí)現(xiàn)其跨平臺(tái)的承諾,J2EE幾乎成了惟一的選擇,執(zhí)行效率的比較也就無(wú)所謂。在代碼執(zhí)行的同時(shí),通用語(yǔ)言運(yùn)行時(shí)和Java虛擬機(jī)也都提出了異常捕捉、類型安全、內(nèi)存分配和垃圾收集等自動(dòng)化內(nèi)存管理工作,大大減輕少了現(xiàn)代軟件的內(nèi)存泄漏問(wèn)題,減輕了程序員的繁重負(fù)擔(dān)。

  面向?qū)ο蟪绦蛟O(shè)計(jì)在J2EE和.NET平臺(tái)中都獲得了直接的支持,單根繼承加多接口實(shí)現(xiàn)是它們共有的特征。但在面向?qū)ο笾猓?NET對(duì)現(xiàn)代組件編程提供了直接支持。當(dāng)然,當(dāng)下很多企業(yè)中間件都是基于J2EE平臺(tái),只是.NET從設(shè)計(jì)、編碼、配置到運(yùn)行都給予了組件編程更多、更直接的支持。

  在基礎(chǔ)的和企業(yè)級(jí)的服務(wù)上兩個(gè)平臺(tái)很難一決高低。從基礎(chǔ)的集合、字符串操作到企業(yè)級(jí)的API接口,如JMS、JDBC、JAX和JNDI等,J2EE在這方面有著非常堅(jiān)實(shí)的結(jié)構(gòu)。微軟.NET框架類庫(kù)也不示弱,提供了從圖畫、網(wǎng)絡(luò)、線程到ADO.NET、ADSI、Windows表單和ASP.NET等一系列的API。

  除去API類庫(kù)的無(wú)縫的功能復(fù)用外,對(duì)本地平臺(tái)的調(diào)用操作也是值得關(guān)注的。CLR和Java虛擬機(jī)都支持本地方法的調(diào)用。在異構(gòu)平臺(tái)方面,J2EE更鐘情于IIOP(Internet InterORB Protocol),而.NET則使用SOAP。

  (2)相同的三層/多層體系 基于三層/多層分布式計(jì)算結(jié)構(gòu)已毋庸置疑地成為當(dāng)今企業(yè)應(yīng)用的主流模式,也是兩個(gè)平臺(tái)較量的著力點(diǎn)。

  在客戶端,表示層負(fù)責(zé)用戶與系統(tǒng)的交互。對(duì)于不同的處理要求,.NET和J2EE都提出了基于桌面的應(yīng)用程序和基于瀏覽器的Web應(yīng)用的開發(fā)組件:Java Application與Windows表單、Java Servlet/JSP與ASP.NET雙雙形成犄角之勢(shì)。但Windows表單依賴微軟桌面系統(tǒng)的天然優(yōu)勢(shì),無(wú)論在交互速度還是在界面的表現(xiàn)性能上都較Java Application稍勝一籌。Servlet/JSP與ASP.NET是目前企業(yè)在“瘦客戶端”應(yīng)用的重點(diǎn),兩者都基于HTTP請(qǐng)求/響應(yīng)模型,通過(guò)HTML瀏覽器頁(yè)面完成用戶交互。雖然ASP.NET聲稱在底層通過(guò)編譯執(zhí)行獲得了相當(dāng)高的處理速度和服務(wù)器方控件的瀏覽器自適應(yīng)能力,但目前并沒(méi)有這方面的硬性數(shù)據(jù),很難據(jù)此而論高低。在緩存、狀態(tài)優(yōu)化等方面兩者可謂是旗鼓相當(dāng)。另一個(gè)與客戶端應(yīng)用相關(guān)的技術(shù)是ActiveX與Applet,從目前的趨勢(shì)來(lái)看,它們?cè)趦蓚(gè)平臺(tái)上的地位逐漸邊緣化,也不為大多數(shù)企業(yè)所接受。

  在中間層,分布式業(yè)務(wù)組件負(fù)責(zé)企業(yè)應(yīng)用的商業(yè)邏輯部署。由于這些業(yè)務(wù)組件經(jīng)常負(fù)責(zé)處理數(shù)據(jù)庫(kù)連接、網(wǎng)絡(luò)資源和線程等高昂的資源,所以一直是三層/多層架構(gòu)的關(guān)鍵和企業(yè)應(yīng)用的核心。J2EE的EJB是一個(gè)成熟的、得到業(yè)界廣泛支持的大型企業(yè)級(jí)組件框架,而.NET組件則是建立在新型的COM+服務(wù)之上,兩者在組件與操作系統(tǒng)的交互、客戶端資源共享等方面都有很好的支持。.NET則通過(guò)元數(shù)據(jù)支持自描述性的組件開發(fā)、XCOPY部署以及多版本共存,無(wú)需注冊(cè)表和描述文件,對(duì)企業(yè)客戶有一定的吸引力。

  在后端數(shù)據(jù)層,兩個(gè)平臺(tái)都為數(shù)據(jù)庫(kù)連接量身定做了一套數(shù)據(jù)存取模型:J2EE的JDBC和.NET的ADO.NET,它們?cè)谥С謧鹘y(tǒng)SQL數(shù)據(jù)源的同時(shí),也支持新型的XML數(shù)據(jù)源。這方面由于更多地涉及到具體的數(shù)據(jù)庫(kù)產(chǎn)品,很難說(shuō)那種數(shù)據(jù)模型更有優(yōu)勢(shì)。

  兩種架構(gòu)的簡(jiǎn)單對(duì)照如表1所示。

  2 移植性比較

  在移植性方面,.NET支持跨語(yǔ)言,J2EE支持跨平臺(tái)。

  微軟通過(guò).NET 通用語(yǔ)言運(yùn)行時(shí)來(lái)消除編程語(yǔ)言的差別,“選擇.NET平臺(tái)就意味著選擇Windows”,這句話至少在可預(yù)見的一段時(shí)間里仍然是一個(gè)基本事實(shí)。J2EE則通過(guò)Java虛擬機(jī)來(lái)消除平臺(tái)差別,跨平臺(tái)是它的一大賣點(diǎn),也是在選擇企業(yè)應(yīng)用開發(fā)平臺(tái)時(shí)的一個(gè)重要參考因素,幾乎所有的主流操作系統(tǒng)都提供了對(duì)J2EE的支持;實(shí)際上如果要搭建跨Unix、Windows等多個(gè)操作系統(tǒng)平臺(tái),J2EE平臺(tái)幾乎是惟一的選擇,J2EE更關(guān)注跨平臺(tái)而不是跨語(yǔ)言。但微軟認(rèn)為,如果企業(yè)的應(yīng)用都能通過(guò)標(biāo)準(zhǔn)協(xié)議以Web服務(wù)的方式發(fā)布,那么平臺(tái)都是中立的。為了吸引更多的開發(fā)者和鼓勵(lì)廣大企業(yè)廠商轉(zhuǎn)到.NET平臺(tái),微軟提出了多語(yǔ)言支持,希望用跨語(yǔ)言的交互性來(lái)平衡跨平臺(tái)的互操作。

  3. 性能比較

  性能是J2EE和.NET喋喋不休的話題。二者之間著名的論戰(zhàn)是一個(gè)關(guān)于寵物店的范例應(yīng)用。寵物店是Sun一度以來(lái)作為J2EE典型應(yīng)用的展示范例,而.NET“自告奮勇”地在自己的平臺(tái)上實(shí)現(xiàn)了該寵物店應(yīng)用,且聲稱代碼行是J2EE的1/3,效率卻是J2EE的30倍。但Sun的理由是這個(gè)范例根本不適合用來(lái)做性能比較,該范例實(shí)現(xiàn)也沒(méi)有做針對(duì)性能的優(yōu)化,而且指責(zé)微軟通過(guò)后端數(shù)據(jù)庫(kù)優(yōu)化和緩存虛抬了.NET平臺(tái)的效率。這樣的爭(zhēng)吵當(dāng)然不能作為判斷的依據(jù),目前也沒(méi)有見到更客觀的第三方評(píng)測(cè)報(bào)告。在“Wintel平臺(tái)”上也許沒(méi)有理由懷疑.NET的性能;至于非Windows平臺(tái),.NET和J2EE也不再具有可比性。

  4.安全性、穩(wěn)定性比較

  WINDOWS本身的安全漏洞,使得.NET的安全性不如J2EE。同時(shí),在應(yīng)用服務(wù)器的選擇上,.NET只能用IIS,安全性、穩(wěn)定性難以保證;而J2EE有更多的選擇,可以在諸多遵循標(biāo)準(zhǔn)的廠商所提供的應(yīng)用程序服務(wù)器中,選擇最符合需要、成本最低、而且又被認(rèn)為是最佳的平臺(tái)。

  5.可擴(kuò)展性比較

  .NET平臺(tái)的擴(kuò)展思想是基于軟件的橫向擴(kuò)展,而J2EE平臺(tái)的擴(kuò)展思想則是基于硬件的縱向擴(kuò)展。

  Windows系統(tǒng)一般只能擴(kuò)展到不超過(guò)8個(gè)處理器,而Sun的系統(tǒng)卻可以擴(kuò)展到100個(gè)甚至更多處理器。

  基于J2EE平臺(tái)的應(yīng)用程序可被部署到各種操作系統(tǒng)上,例如可被部署到高端UNIX與大型機(jī)系統(tǒng),這種系統(tǒng)單機(jī)可支持64至256個(gè)處理器,這是NT服務(wù)器所望塵莫及的。J2EE領(lǐng)域的供應(yīng)商提供了更為廣泛的負(fù)載平衡策略,能消除系統(tǒng)中的瓶頸,允許多臺(tái)服務(wù)器集成部署。這種部署可達(dá)數(shù)千個(gè)處理器,實(shí)現(xiàn)可高度伸縮的系統(tǒng),滿足未來(lái)商業(yè)應(yīng)用的需要。

  6.成熟度比較

  在平臺(tái)的成熟度方面,兩者也有一比。J2EE在1999年形成了成熟的架構(gòu),發(fā)展至今已經(jīng)具有相當(dāng)成熟的、經(jīng)過(guò)檢驗(yàn)的企業(yè)應(yīng)用系統(tǒng)。而.NET究其淵源是源自微軟以前開發(fā)企業(yè)應(yīng)用程序的平臺(tái)DNA(Distributed Network Architecture),其中包括了許多已經(jīng)被證實(shí)的技術(shù),并且這些技術(shù)已經(jīng)在產(chǎn)品中得到實(shí)現(xiàn),包括微軟的事務(wù)服務(wù)器、COM+、消息隊(duì)列和SQL Server數(shù)據(jù)庫(kù)等。

  7.第三方廠商的支持

  J2EE作為一種開放的規(guī)范,從一開始就得到了眾多廠商的支持,IBM、BEA、HP、Oracle等在J2EE的實(shí)施上都有較大的投入。目前市場(chǎng)上最好的J2EE應(yīng)用服務(wù)器并不是Sun與Netscape合資的iPlanet,而是BEA的WebLogic和IBM的Webshpere。開發(fā)工具有Borland的JBuilder、Sun的Forte for Java、BEA的WebLogic Workshop、Oracle 的JDeveloper、IBM的VisualAge for Java等。

  而.NET在設(shè)計(jì)之初就緊緊地把平臺(tái)規(guī)范與產(chǎn)品膠合在一起。雖然,NET架構(gòu)的一小部分具有開放性(如C#語(yǔ)言、通用語(yǔ)言基礎(chǔ)構(gòu)造CLI 和Web服務(wù)標(biāo)準(zhǔn)),但至少目前很難想象會(huì)有一個(gè)非微軟的.NET實(shí)現(xiàn)。Visual Stdio.NET是其唯一的開發(fā)工具。

  8.開源支持比較

  J2EE開源產(chǎn)品眾多,免費(fèi)框架居多,相應(yīng)的最佳實(shí)踐設(shè)計(jì)模式層出不窮。而.NET無(wú)開源社區(qū)支持,是以框架開發(fā)者為主導(dǎo)的設(shè)計(jì)。

  9.學(xué)習(xí)成本比較

  J2EE門檻較高,由于多且雜,需要開發(fā)人員花費(fèi)很長(zhǎng)時(shí)間才能熟悉整個(gè)體系。而.NET門檻較低,使用方便,學(xué)習(xí)成本較低。但是,對(duì)于開發(fā)人員來(lái)說(shuō),.NET在系統(tǒng)整體架構(gòu)的設(shè)計(jì)方面不如J2EE易于把握。

  10.對(duì)WEB服務(wù)支持的比較

  從.NET和J2EE這兩個(gè)平臺(tái)的發(fā)展歷程來(lái)看,.NET從一開始就深深打上了Web服務(wù)技術(shù)的烙印,在它的市場(chǎng)推廣活動(dòng)中,無(wú)時(shí)無(wú)刻不凸顯其作為Web服務(wù)的開發(fā)和部署平臺(tái)的特征,可以說(shuō),.NET天生就是為Web服務(wù)準(zhǔn)備的開發(fā)和部署平臺(tái)。相對(duì).NET而言,J2EE是一個(gè)比較“老”的東西,最初它是為了將Java平臺(tái)拓展到企業(yè)級(jí)應(yīng)用領(lǐng)域而制訂的一個(gè)平臺(tái)框架規(guī)范,隨著Web服務(wù)技術(shù)的興起和發(fā)展,J2EE平臺(tái)作為一個(gè)企業(yè)級(jí)應(yīng)用的開發(fā)和部署平臺(tái),無(wú)法回避業(yè)界的重大技術(shù)革命——Web服務(wù),J2EE也不斷地引入了對(duì)Web服務(wù)的支持。

  從服務(wù)描述、服務(wù)實(shí)現(xiàn)和服務(wù)的發(fā)布、發(fā)現(xiàn)與綁定,以及服務(wù)的調(diào)用和執(zhí)行這些不同的角度看,J2EE和.NET的支持基本不相上下,惟一的區(qū)別可能是.NET的開發(fā)工具更為方便一些、集成度更高一些。

  在Web服務(wù)規(guī)范的控制方面,微軟與IBM共同主推了大量的Web服務(wù)規(guī)范,在一段時(shí)間內(nèi),兩家公司W(wǎng)eb服務(wù)技術(shù)的市場(chǎng)推廣活動(dòng)都是聯(lián)合舉行的,不難看出這兩家公司在這個(gè)領(lǐng)域背后的戰(zhàn)略合作關(guān)系。最初的Web服務(wù)核心技術(shù)SOAP、WSDL主要由這兩家公司制訂,后來(lái)的UDDI是由這兩家為首的多家核心企業(yè)共同制訂,再后來(lái)的一些不是核心的Web服務(wù)規(guī)范,如WS-Inspection、WSFL、WS-Security、WS-Routing、WS-License和WS-Referral等,則完全是由這兩家來(lái)制訂的。不難看出:IBM和微軟對(duì)于Web服務(wù)的貢獻(xiàn)以及它們對(duì)Web服務(wù)規(guī)范的控制。

  盡管由于某種原因,Sun公司曾經(jīng)在很長(zhǎng)的一段時(shí)間里被排除在WS-I(由IBM,微軟和BEA發(fā)起成立的促進(jìn)WEB服務(wù)互操作的一個(gè)組織)的門外,但這并沒(méi)有影響Sun公司繼續(xù)在WEB服務(wù)方面堅(jiān)持開放的戰(zhàn)略。Sun公司是Java語(yǔ)言的發(fā)明者,而作為一個(gè)開放的跨平臺(tái)的技術(shù)體系,Java在WEB服務(wù)的開發(fā)方面也起著非常重要的作用。雙方妥協(xié)后,Sun最終被接納為WS-I的董事成員。

  Sun公司積極地參與了制訂Web服務(wù)規(guī)范的過(guò)程,像XML和ebXML。并已經(jīng)在Java中支持WEB服務(wù)中最重要的規(guī)范,例如SOAP(JAX-RPC、JAXM、SAAJ和JMS)、WSDL(Java API for WSDL)、UDDI/ebXML(JAXR)和XML(JAXP,JAXB)等等。Sun公司除了積極地參與Web服務(wù)領(lǐng)域里的標(biāo)準(zhǔn)化工作,更是努力地為客戶提供全面的軟件產(chǎn)品,為用戶開發(fā)和部署Web服務(wù)提供平臺(tái)。Sun公司的Sun ONE Web服務(wù)平臺(tái)開發(fā)版,是業(yè)界第一個(gè)用于基于Java技術(shù)的Web服務(wù)和Web應(yīng)用開發(fā)的全方位的集成平臺(tái)。該平臺(tái)集成了多種Sun ONE服務(wù)器軟件、Java開發(fā)工具,支持業(yè)界的WEB服務(wù)標(biāo)準(zhǔn),而且是面向開發(fā)人員設(shè)計(jì),安裝和使用都非常簡(jiǎn)單。

  四、結(jié)束語(yǔ)

  關(guān)于J2EE和.NET之間的討論已經(jīng)持續(xù)很多年了,孰優(yōu)孰劣仍然很難下結(jié)論。事實(shí)上,.NET和J2EE都各有特長(zhǎng),兩者都是十分優(yōu)秀的開發(fā)平臺(tái),短時(shí)間內(nèi)誰(shuí)也不可替代對(duì)方。選擇哪種開發(fā)平臺(tái),除了要看軟件開發(fā)人員對(duì)語(yǔ)言的掌握能力及個(gè)人喜好,也要根據(jù)開發(fā)內(nèi)容和企業(yè)具體情況、具體需求而定。

  J2EE最大的優(yōu)勢(shì)是跨平臺(tái),.NET最大的優(yōu)勢(shì)是入門容易和性能較高(鑒于微軟在“Wintel平臺(tái)”上的代碼優(yōu)化功底,.NET代碼的執(zhí)行速度較之于JAVA有明顯的優(yōu)勢(shì))。對(duì)于沒(méi)有.NET和J2EE平臺(tái)基礎(chǔ)的開發(fā)團(tuán)隊(duì)來(lái)說(shuō),如果開發(fā)的應(yīng)用軟件沒(méi)有跨平臺(tái)的要求,只需要運(yùn)行于微軟平臺(tái)之上,則選擇.NET平臺(tái)較好;如果要求跨平臺(tái),則只能使用J2EE。如果開發(fā)團(tuán)隊(duì)具有.NET或J2EE平臺(tái)基礎(chǔ),在進(jìn)行新的應(yīng)用軟件開發(fā)時(shí),如果沒(méi)有跨平臺(tái)要求,則沒(méi)有必要更換開發(fā)平臺(tái),因?yàn)椋鼡Q平臺(tái)會(huì)帶來(lái)不小的培訓(xùn)成本。

【J2EE與.NET技術(shù)架構(gòu)的比較】相關(guān)文章:

1.J2EE與.NET技術(shù)架構(gòu)的區(qū)別

2.j2ee技術(shù)體系架構(gòu)

3.J2EE架構(gòu)與設(shè)計(jì)培訓(xùn)

4.J2EE Web架構(gòu)與CS架構(gòu)命名上的差異

5.ASP.NET架構(gòu)及開發(fā)技術(shù)詳解教程

6.J2EE架構(gòu)與開發(fā)簡(jiǎn)答題

7.J2EE架構(gòu)主要版本

8.云計(jì)算架構(gòu)技術(shù)與實(shí)踐