J2ee開發主要是瀏覽器和服務器進行交互的一種結構.邏輯都是在后台進行處理,然后再把結果傳輸回給瀏覽器。可以看出服務器在這種架構是非常重要的。
這幾天接觸到兩種Java的web服務器,做項目用的Tomcat,看視頻看的是WebLogic Server(WLS),都是web服務器,有什么區別和聯系呢?
(一)先簡單介紹一下這兩種服務器。
WebLogic是美國bea公司出品的一個application server,確切的說是一個基於Javaee架構的中間件,純java開發的,最新版本WebLogic Server 9.0是迄今為止發布的最卓越的BEA應用服務器。BEA WebLogic是用於開發、集成、部署和管理大型分布式Web應用、網絡應用和數據庫應用的Java應用服務器。將Java的動態功能和Java Enterprise標准的安全性引入大型網絡應用的開發、集成、部署和管理之中。完全遵循J2EE 1.4規范。
Tomcat服務器是一個免費的開源的Web 應用服務器,是Apache 軟件基金會的Jakarta 項目中的一個核心項目,由Apache、Sun 和其他一些公司及個人共同開發而成。因為Tomcat 技術先進、性能穩定,運行時占用的系統資源小,擴展性好,支持負載平衡與郵件服務等開發應用系統常用的功能;而且很重要的是她免費,因而深受Java 愛好者的喜愛並得到了部分軟件開發商的認可,成為目前比較流行的Web 應用服務器。而且由於開源,它還在不斷的改進和完善中,任何一個感興趣的程序員都可以更改它或在其中加入新的功能。
(二)相同點:
WebLogic和Tomcat都是基於java的基礎架構來滿足實時處理需求,不同的版本與jdk版本兼容和有所不同;因為都是要和前台交互,所以他們都基於sun公司的servlet來實現的。
(三)不同點:
功能性:
WebLogic更加強大。weblogic是j2ee的應用服務器(application server),包括ejb ,jsp,servlet,jms等等,全能型的。是商業軟件里排名第一的容器(JSP、servlet、EJB等),並提供其他如JAVA編輯等工具,是一個綜合的開發及運行環境。
WebLogic應該是J2EE Container(Web Container + EJB Container + XXX規范)!
Tomcat只能算Web Container,是官方指定的JSP&Servlet容器。只實現了JSP/Servlet的相關規范,不支持EJB(硬傷啊)!不過Tomcat配合jboss和apache可以實現j2ee應用服務器功能
一般來說考慮stucts等架構tomcat就可以了,但如果考慮EJB的話,WebLogic是比較好的選擇。
擴展性:
用WebLogic運行標准的java可能並不是最好的方式,WebLogic里支持他自己的一些東西,這些東西雖然是在純java基礎上開發的,但其他工具里都沒有。WebLogic Server憑借其出色的群集技術,擁有處理關鍵Web應用系統問題所需的性能、可擴展性和高可用性。
WebLogic Server既實現了網頁群集,也實現了EJB組件 群集,而且不需要任何專門的硬件或操作系統支持。網頁群集可以實現透明的復制、負載平衡以及表示內容容錯 。
無論是網頁群集,還是組件群集,對於電子商務解決方案所要求的可擴展性和可用性都是至關重要的。共享的客戶機/服務器和數據庫連接以及數據緩存和EJB都增強了性能表現。這是其它Web應用系統所不具備的
所以,在擴展性方面WebLogic是遠遠超越了Tomcat。
費用上:
Tomcat開源免費。
WebLogic不開源不免費。
總之,在功能強大和擴展性和可用性等方面WLS比Tomcat好很多,但這也不能說明WLS適合每一方面,從Tomcat的使用流行度便可以看出,Tomcat雖功能有限,但也很受歡迎。其實關鍵看你要做什么。Tomcat 是免費開源的jsp,servlet引擎,入門級別的Web服務器,剛入門的IT人使用Tomcat簡單易上手。而且它一個輕量級應用服務器,最重要的是它免費,所以在中小型系統和並發訪問用戶不是很多的場合下被普遍使用,是開發和調試JSP 程序的首選。Tomcat比較輕巧,消耗資源較少。當然,項目大的時候,WLS肯定再合適不過,而且Tomcat也無法滿足太多需求,但是,WLS的費用也是不可小覷的。
總之,關鍵看你做什么,權衡利弊做選擇。
此外,還有其他J2EE Application Server,例如: IBM的websphere、Sun的Glassfish、resin等。Apache全球應用最廣泛的http服務器,免費。同樣開源免費的JBoss, 國內廠商生產的還有像東方通的Tongweb、金蝶Apusic應用服務器等。都是應用比較廣泛的。
附:
到底什么是EJB?
被稱為Java企業bean,服務器端組件,核心應用是部署分布式應用程序。用它部署的系統不限定平台。實際上ejb是一種產品,描述了應用組件要解決的標准
標准:
可擴展 (Scalable)
分布式 (Distributed)
事務處理(Transactional)
數據存儲(Persistent)
安全性 (Secure)
用通俗話說,EJB就是:"把你編寫的軟件中那些需要執行制定的任務的類,不放到客戶端軟件上了,而是給他打成包放到一個服務器上了"。是的,沒錯!EJB 就是將那些"類"放到一個服務器上,用C/S 形式的軟件客戶端對服務器上的"類"進行調用。
Java體系結構如圖:
EJB容器中有三種類也稱為組件,分別是會話Bean(Session Bean),實體Bean(Entity Bean)和消息驅動Bean(MessageDriven Bean)
Session bean(邏輯)
EntityBean(數據)
messageDrivenbean(消息)
上圖中可以看到
1 組件是在容器中的。容器提供了組件的環境並對其進行管理。
2 調用組件的被稱為ejb客戶端。客戶端可以運行在web容器中。如jsp,servlet,jndi,web service等
實現邏輯
實現邏輯組件中有各種抽象的方式。這樣通過客戶端的調用實現了業務的封裝
實現分布式
首先要認識到RMI技術(遠程調用),EJB的基礎是RMI,通過RMI,J2EE將EJB組件創建為遠程對象,EJB雖然用到了RMI,但是只需要定義遠程接口無需實現,這樣就將RMI技術細節屏蔽了。
這種將需要特定執行的類,放在Ejb中並打包發送到服務器上,,客戶端通過RMI技術到服務器上進行調用,這樣就實現了分布式調用。
所謂的服務器群
既然已經知道了,RMI是將各種任務與功能的類放到不同的服務器上,然后通過各個服務器間建立的調用規則實現分布式的運算,也就明白EJB所謂的"服務群集"的概念。就是將原來在一個計算機上運算的幾個類,分別放到其他計算機上去運行,以便分擔運行這幾個類所需要占用的CPU和內存資源。同時,也可以將不同的軟件功能模塊放到不同的服務器上,當需要修改某些功能的時候直接修改這些服務器上的類就行了,修改以后所有客戶端的軟件都被修改了
一個簡單的分布式群圖
小結:
EJB實現原理:就是把原來放到客戶端實現的代碼放到服務器端,並依靠RMI進行通信。
服務器集群:就是通過RMI的通信,連接不同功能模塊的服務器,以實現一個完整的功能。
EJB規范定義了EJB組件在何時如何與它們的容器進行交互作用。容器負責提供公用的服務,例如目錄服務、事務管理、安全性、資源緩沖池以及容錯性。但這里值得注意的是,EJB並不是實現J2EE的唯一途徑。