官术网_书友最值得收藏!

3.2 Servlet容器

通俗點說,所謂容器,就是放東西的地方。Servlet容器自然就是放Servlet的地方。在Servlet開發中,我們需要按照Servlet的規范寫代碼,那么這樣的代碼就能在Servlet容器中運行。容器會按照規則加載類,并運行它。

Servlet容器的作用是負責處理客戶請求,當客戶請求來到時,Servlet容器獲取請求,然后調用某個Servlet,并把Servlet的執行結果返回給客戶。

Servlet容器可以嵌入宿主的Web服務器中,或者通過Web務器的本地擴展API單獨作為附加組件安裝。Servelt容器也可能內嵌或安裝到啟用Web功能的應用服務器中。

所有的Servlet容器必須支持HTTP協議以處理請求和響應,但額外的基于請求/響應的協議,如HTTPS(HTTP over SSL)的支持是可選的。對于HTTP規范需要的版本,容器必須支持HTTP/1.1和HTTP/2。

在支持HTTP/2時,Servlet容器必須支持h2和h2c協議標識符,這意味著所有Servlet容器都必須支持ALPN。因為容器可能有緩存,它可以在將它們傳遞給Servlet之前修改來自客戶端的請求,可以在將Servlet發送到客戶端之前修改響應,或者可以響應請求而不將它們傳遞給Servlet。

Java SE 8是與Servlet 4.0一起使用的最低Java平臺版本。

3.2.1 常用Servlet容器

市面上,常見的Servlet容器有閉源的,也有開源的,包括Tomcat、Jetty、Oracle Application Server、Oracle Weblogic Server、JBoss Application Server等。其中,Tomcat、Jetty在開源界比較有名,且在市場上占有率比較高。

下面就Tomcat和Jetty的異同點進行比較。

3.2.2 Tomcat和Jetty的相同點

Tomcat和Jetty都是Servlet引擎,它們都支持標準的Servlet規范和Java EE的規范。

它們都是開源的,免費使用。

3.2.3 Tomcat和Jetty的不同點

在架構上,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目前應用比較廣泛,對Java EE和Servlet的支持更加全面,很多特性會直接集成進來。

3.2.4 總結

Jetty的主要特性是易用性、可擴展性及易嵌入性。可以把Jetty理解為一個嵌入式的Web服務器,Jetty的運行速度較快,而且是輕量級的。Jetty的輕量級也使其在處理高并發細粒度請求的場景下顯得更快速高效。

Jetty更靈活,體現在其可插拔性和可擴展性,更易于開發者對Jetty本身進行二次開發,定制一個適合自身需求的Web服務器。

Tomcat支持的規范更全面,功能也更多,但也顯得更加“重量級”。所以,當需要大規模企業級應用時,Jetty也許便需要擴展,在這場景下使用Tomcat會更加方便。

Jetty更滿足公有云的分布式環境的需求,而Tomcat更符合企業級環境。

綜上所述,輕量級Java EE技術框架很適合基于Jetty或者Tomcat來實現內嵌容器。在本書的后續章節中,還會對Jetty、Tomcat進行深入探討。欲了解更多有關Servlet方面的內容,可以參閱筆者所著的開源電子書《Java Servlet 3.1規范》。

主站蜘蛛池模板: 柳河县| 昌邑市| 沾益县| 龙门县| 绥宁县| 赣州市| 乾安县| 景洪市| 溆浦县| 绥滨县| 兴宁市| 集安市| 贞丰县| 依兰县| 炉霍县| 准格尔旗| 三亚市| 盘锦市| 阿拉善盟| 绥德县| 建昌县| 苍南县| 浦县| 行唐县| 浦县| 织金县| 永登县| 博客| 庄河市| 灌云县| 抚顺县| 如东县| 安国市| 伊川县| 闽清县| 宁城县| 徐汇区| 遂平县| 博兴县| 安丘市| 闸北区|