- 輕量級Java EE企業應用開發實戰
- 柳偉衛編著
- 1233字
- 2022-07-29 14:31:19
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規范》。
- Java程序設計與開發
- 嵌入式軟件系統測試:基于形式化方法的自動化測試解決方案
- Mastering Zabbix(Second Edition)
- 信息可視化的藝術:信息可視化在英國
- Learning AWS Lumberyard Game Development
- Java游戲服務器架構實戰
- Hadoop+Spark大數據分析實戰
- Apex Design Patterns
- Instant Debian:Build a Web Server
- 從零開始學UI:概念解析、實戰提高、突破規則
- Python物理建模初學者指南(第2版)
- 面向對象程序設計及C++(第3版)
- 虛擬現實建模與編程(SketchUp+OSG開發技術)
- Enterprise Application Architecture with .NET Core
- Android開發權威指南(第二版)