Tomcat Jboss,jetty,Apache WebLogic區別與比較(阿里面試)


Jetty和tomcat的比較

相同點:

Tomcat和Jetty都是一種Servlet引擎,他們都支持標准的servlet規范和JavaEE的規范。

不同點:

架構比較
Jetty的架構比Tomcat的更為簡單
Jetty的架構是基於Handler來實現的,主要的擴展功能都可以用Handler來實現,擴展簡單。
Tomcat的架構是基於容器設計的,進行擴展是需要了解Tomcat的整體設計結構,不易擴展。

性能比較
Jetty和Tomcat性能方面差異不大
Jetty可以同時處理大量連接而且可以長時間保持連接,適合於web聊天應用等等。
Jetty的架構簡單,因此作為服務器,Jetty可以按需加載組件,減少不需要的組件,減少了服務器內存開銷,從而提高服務器性能。
Jetty默認采用NIO結束在處理I/O請求上更占優勢,在處理靜態資源時,性能較高

少數非常繁忙;Tomcat適合處理少數非常繁忙的鏈接,也就是說鏈接生命周期短的話,Tomcat的總體性能更高。
Tomcat默認采用BIO處理I/O請求,在處理靜態資源時,性能較差。

其它比較
Jetty的應用更加快速,修改簡單,對新的Servlet規范的支持較好。
Tomcat目前應用比較廣泛,對JavaEE和Servlet的支持更加全面,很多特性會直接集成進來。

 

1. Tomcat是Apache鼎力支持的Java Web應用服務器只能做JSP和Servlet的Container,不支持EJB,由於它優秀的穩定性以及豐富的文檔資料,廣泛的使用人群,從而在開源領域受到最廣泛的青睞。­實際上Tomcat 部分是Apache 服務 器的擴展,但它是獨立運行的,所以當你運行tomcat 時,它實際上作為一個與Apache 獨立的進 程單獨運行的。

 

2.Apache全球應用最廣泛的http服務器,免費,出自apache基金組織.apache僅有的不足是,它本身僅提供html靜態頁面的功能,不能支持jsp、java servlet、asp等功能,

但通過同其他應用服務器一起工作或添加插件來支持。(穩定高效,通常需要與其他服務器軟件或插件協同工作)

 

3. Jboss作為Java EE應用服務器它不但是Servlet容器,而且是EJB容器(同時支持EJB的優化版tomcat),是完整的J2EE容器從而受到企業級開發人員的歡迎,從而彌補了Tomcat只是一個Servlet容器的缺憾。­

 

4.BEA WebLogic Server是專門為企業電子商務應用系統開發的它不但是Servlet容器,而且是EJB容器(同時支持EJB的優化版tomcat),是完整的J2EE容器, 企業電子商務應用系統需要快速開發,並要求服務器端組件具有良好的靈活性和安全性,

同時還要支持關鍵任務所必需的擴展、性 能、和高可用性。BEA WebLogic Server簡化了可移植及可擴展的應用系統的開發,並為其它應用 系統和系統提供了豐富的互操作性。

是weblogic不是一款開源的軟件,雖然存在免費試用等,但它主要的應用目標為大型商業應用,而這種應用需要高額的license費用

 

5.resin:resin是Caucho公司的產品。resin最突出的是它的性能非常高效,連html頁面的效率也直追apache;支持 servlet/jsp,EJB。雖然resin是開源的,不過有兩種lisence:GPL和商用lisence,

可以在GPL下免費使用,但注意商用 的是要交錢的。(高效全功能的輕型服務器軟件)

6.websphere:websphere是IBM旗下的一款應用服務器軟件。與weblogic相似,同為商業軟件,同具有穩定、高效,支持多種應 用……。也是需要高額的費用,適於大型商業應用;有Community Edition版本,是開源的。

(如果有IBM其他配套產品,大型商用考慮使用)

 

搭配: 
1. 如果僅需要展示html頁面,而不要其他功能,apache; 
2. 如果是在開發時使用或者是一般小型應用,需要支持jsp/servlet,而又不需要EJB的,tomcat; 
3. 需要支持jsp/servlet,不需要EJB,有希望提高服務器的效率和穩定性的,apache+tomcat; 
4. 需要支持jsp/servlet/EJB,而又想免費的,apache+jboss(包含tomcat的版本); 
5. 需要支持jsp/servlet/EJB,又可以花點小錢的,resin(實在認為有必要,可以考慮resin+apache); 
6. 大型商用,可以支付較高費用,weblogic(websphere可選); 
7. 大型商用,可以支付較高費用,且有其他IBM相關功能服務的,websphere。

如果對J2EE 包含了 JSF 和EJB 就是標准的javaSE和企業版EJB

 

    EJB從我們一開始沒怎么接觸J2EE的時候就開始聽說了,聽說他是一個容器,聽說他很高大上,但是對於我們這種java菜小鳥來說真的聽不懂呀,這段時間經過我的廣泛搜集資料,算是把他的基本定義和基本使用方式知道的差不多了。

      我們都知道我們這部分學習的是J2EE,之前學習過J2SE,那么構建知識網的原則我們知道我們需要映射,知道他們之間的相同點和不同點,我們前期在學習J2SE的時候使用到了CMD而我們學習J2EE的時候卻沒有說使用CMD,可以說J2SE是J2EE的一部分,J2EE適用范圍更廣,它可以看成在J2SE的平台上加上了無數的組件,才構成了他現在的功能!而我們這次的主角EJB就是這樣的一個組件容器,我們以前接觸過ITOO的框架我們將我們的工程分為三層表現層、業務邏輯層和數據層,而我們的EJB就是相當於業務邏輯層,土體的他的位置,請見下圖:

 

      視圖層或表現層:提供用戶界面;接收用戶輸入;數據輸出。WEB應用的情況,JSP以及SERVLET屬於視圖層組件。
      業務邏輯層:實際的業務邏輯處理。根據視圖層傳送過來的數據,進行實際的業務邏輯處理(包括數據庫的查詢,更新等),再把處理后的結果返回給視圖層。EJB,以及不使用EJB的情況下擔當業務邏輯處理部分的JavaBean等歸屬於業務邏輯層組件。
    數據庫層或數據持久化層:多指用於保存業務數據的數據庫,也可以是文件等等。
    EJB屬於J2EE體系結構中的業務邏輯層部分。

     

    SessionBean
    主要負責業務邏輯的處理。根據處理時的狀態保持與否,SessionBean又被分為:
    Stateful SessionBean(有狀態SessionBean)

    Stateless Bean(無狀態SessionBean)對象的“狀態”是指對象的屬性值,也就是對象所攜帶的數據。Stateful SessionBean能維持會話的狀態,就是說能為同一客戶端保持上一回被調用時的狀態,類似於HttpSession;而Stateless SessionBean則不能維持會話狀態,也就是說,對Stateless SessionBean來說,每個方法都是獨立的,因為對特定客戶端不保持會話狀態,所以一般也不在Stateless SessionBean里定義成員變量。
EntityBean
       負責數據庫的訪問。通常由SessionBean調用。EntityBean的一個實例所表示的數據通常代表了關系數據庫中特定表的特定的一行數據。EJB3開始,EntityBean部分的功能可以通過JPA來實現。
EntityBean的作用:
1,對數據庫的操作:查詢,數據的更新,刪除等
2,數據庫表數據的攜帶
根據對數據庫操作(持久化)的不同,EntityBean分為以下2種類型:
1,BMP (Bean-managed persistence:bean管理持久化):持久化操作(數據庫的訪問,數據的創建,更新,刪除等)由EntityBean的實現(javax.ejb.EntityBean的實現類)自身完成。
2,CMP (Container-managed persistence:容器管理持久化):持久化操作由容器根據deploy時的配置信息(ejb-jar.xml)自動完成。
MDB (message-driven bean:消息驅動bean)
      MDB主要用來處理異步消息。客戶端調用SessionBean,EntityBean的方法時,會一直處於等待狀態,直到被調用的方法處理完畢。但使用MDB,客戶端向容器發送一個JMS消息之后,不必等待MDB處理完畢便可直接返回。JMS被發送給由容器管理的JMS消息隊列,容器在適當的時候通知MDB的callback方法onMessage加以處理。一個MDB需要實現javax.jms.MessageListener接口與javax.ejb.MessageDrivenBean接口。

平時我們經常看到各種容器名稱:Servlet容器、WEB容器、Java WEB容器、Java EE容器等,還有各種服務器名稱:應用服務器、WEB服務器、WEB應用服務器、Java WEB應用服務器、Java EE服務器等,這么多相似名稱,難以弄明白它們之間的區別與聯系。

       下面我們嘗試從它們的定義中,區分它們,找出他們之間的聯系,最后通過Apache、nginx、tomcat等舉例說明容器以及服務器的聯系。

1、容器與服務器的聯系

       如上圖,我們先來看下容器與服務器的聯系:容器是位於應用程序/組件和服務器平台之間的接口集合,使得應用程序/組件可以方便部署到服務器上運行。

2、各種容器的區別/聯系

2-1、容器(Containers)

       容器通常理解就是裝東西的,我們這里說技術上的容器就是可以部署應用程序,並在上面運行的環境。

       一般來說,它處理屏蔽了服務器平台的復雜性,使得應用程序在它的基礎上可以方便快捷的部署;而對於應用程序來說,它就是位於應用程序和平台之間的接口集合。

       容器管理組件的生命周期,向應用程序組件分派請求,並提供與上下文數據(如關於當前請求的信息)的接口。

       注意,容器技術虛擬化(如Docker 應用容器引擎)不在本文關注范圍內。

2-2、Servlet容器

       Servlet:屬於Java EE重要技術規范,構建了"接收請求--調用servlet程序處理--返回響應"基本模型。

       Servlet程序:Java提供了開發Servlet程序的API,該API可以說Servlet容器的一部分,它對接應用程序與Servlet容器;

       Servlet容器:就是實現了Servlet技術規范的部署環境,它可以部署運行Servlet程序。

2-3、Java WEB容器

       WEB容器:可以部署多個WEB應用程序的環境。

       Java WEB容器:實現了Java EE規定的WEB應用技術規范的的部署環境。

       Java EE WEB應用技術規范:Servlet、JSP(JavaServer Pages)、Java WebSocket等。

       所以,完整的Java WEB容器包含Servlet容器。

2-4、Java EE容器

       Java EE容器:實現了Java EE技術規范的部署環境。

       Java EE技術規范:除了上面說的Servlet、JSP等Java EE WEB應用技術規范,還包括EJB(Enterprise JavaBeans)等許多技術規范。

       所以,完整的Java EE容器包含Java WEB容器(Servlet容器)、EJB容器等。

 Apache與Tomcat 區別:

兩者定位:Apache是HTTP Web服務器,Tomcat是Web容器。

有一個非常形象的比喻:Apache是一輛車,可以裝載靜態的物件(HTML靜態網頁等);但不能裝動態的水(JSP、CGI等),要裝水就需要桶(容器),當然桶也可以不放在車上而單獨存放,則該容器即為Tomcat。

兩者的主要區別:

  • Apache是世界上最流行的Web服務器(其次是微軟的IIS),可以處理瀏覽器的HTTP請求,默認端口為80;Tomcat是運行在Apache之上的應用服務器,為客戶端提供可以調用的方法。Tomcat是一個Servlet容器(可以認為Apache的擴展),可獨立運行。
  • Apache只支持HTML等靜態普通網頁,可以單向連通Tomcat(Apache可以訪問Tomcat的資源,反之不然);Tomcat是Servlet容器,可以支持JSP、PHP和CGI等,其中CGI是公共網關接口,可以用Perl編寫CGI腳本。
  • Apache側重於HTTP Server;Tomcat側重於Servlet引擎。

兩者可以整合:當客戶端需要請求靜態資源,只需要Apache服務器響應請求;當客戶端需要動態資源,如JSP,需要Tomcat服務容器(Tomcat可以將JSP解析為Servlet)。由於JSP需要JDK的數據庫驅動接口,所以一般組合是Apache+Tomcat+JDK。

兩篇介紹Apache服務網器比較好的博客:Apache與Tomcat的區別於聯系,http://www.admin10000.com/document/974.html;web服務器apache架構與原理,http://www.cnblogs.com/fnng/archive/2012/11/08/2761713.html。

Tomcat==>web容器,包含了Servlet容器;

由於Servlet沒有main方法,Servlet生命周期方法的調用受控於容器,即容器管理Servlet的生命周期,包括初始化(init)、服務調用(service)和銷毀(destroy),Tomcat就是一個Servlet容器。

當Web服務器得到一個Servlet請求時,並不是直接將請求提交給Servlet,而是轉交給部署該Servlet的Web容器(Tomcat),由容器向Servlet提供HTTP請求和響應,並由容器調用Servlet的方法,如doGet()和doPost()。更詳細的容器處理請求和響應過程,后邊再整理。

 

 參考:Web服務器(Apache)與Servlet容器(Tomcat)

參考:J2EE總結之EJB總結

參考:Tomcat Jboss Apache WebLogic區別與比較

參考:各種容器與服務器的區別與聯系:Servlet容器 WEB容器 Java EE容器 應用服務器 WEB服務器 Java EE服務器


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM