Tomcat8-架構原理解析


  Tomcat是JavaWeb組件架構中一款apache開源的服務器軟件,通過對其的學習,總結並且分享了關於它的知識,下邊是分享ppt內容,希望對想了解tomcat人有幫助。

Tomcat歷史

  • 1999年第一個版本(3.x),基於Sun貢獻代碼,實現Servlet2.2和JSP1.1
  • 2001年里程碑版本4.0,實現Servlet2.3和JSP1.2規范
  • 當前Tomcat存在5個主要版本:
    •   6.x:JDK5以上
    •   7.x:JDK6以上
    •   8.x:JDK7以上
    •   8.5x:JDK7以上,發布於9.0之后,用於取代8,實現了部分9特性
    •   9.x:JDK8以上

 Tomcat許可

 

  1. 以Apache License許可方式發布
  2. 免費
  3. 修改並發布變更版本的用戶不必公開修改部分源碼
  4. 修改tomcat的用戶不必變更捐獻給Apache軟件基金會
  5. 所有包含源碼及二進制的重新發布均包含Apache許可
  6. 任何重新發布的資料必須經過Apache基金會批准
  7. 無Apache基金會許可並派生自Tomcat的源碼產品不能命名為Tomcat,Jakarta,Apache

 Tomcat安裝與啟動   

  • Windows上安裝
    •   .zip
    •   .exe
  • Linux上安裝
    •   apache-tomcat-8.5.6.tar.gz
    •   修改$CATALINA_HOME/bin/catalina.sh修改Tomcat啟動配置:JAVA_OPTS

 

 Tomcat嵌入使用支持

  • Tomcat支持嵌入到應用程序,比如:SpringBoot中的tomcat
  • 使系統以安裝包形式獨立提供
  • 為了滿足PAAS環境下應用研發、交付、管理。
  • 綁定一個端口將HTTP導出為服務

 

 Tomcat Debug啟動

  • bin>catalina jpda start
  • 依賴於JDK提供的JPDA
  • 默認調試端口:8000

 

 Tomcat主要目錄結構

 

 Tomcat8.5之后新特性

  1. Servlet3.1、JSP2.3、EL3.0、WebSocket1.1、9.0開始支持Servlet4.0
  2. Servlet4.0預覽API
  3. 默認的HTTP、AJP鏈接器采用NIO,而非BIO
  4. 全新的資源實現
  5. 鏈接器新增支持JDK7的NIO2
  6. 鏈接器新增支持HTTP/2協議
  7. 默認采用異步日志處理方式
  8. 大量代碼重構

 

 Tomcat總體架構設計

 

 

 Tomcat啟動流程

 

 Tomcat請求處理流程

 

 Tomcat類加載機制

  1. 從緩存中加載
  2. 如果沒有,從JVM的Bootstrap類加載器加載
  3. 如果沒有,則從當前類加載器加載(WEB-INF/classes 、WEB-INF/lib的順序)
  4. 如果沒有,則從父類加載器加載,由於父類加載器采用默認的委派模式,所以加載順序為System、Common、Shared
  5. 如果啟用Java委派模式(delegate=true):緩存-Bootstrap-從父類(System、common、shared)-當前類加載器加載

 

 組件Catalina

 

  • 包含所有的容器組件
  • 通過松耦合方式集成Cotoye
  • 包含啟動入口以及Shell
  • 使用Apache Digester解析XML配置文件並創建服務器

 

 Catalina依賴關系:

 Coyote組件:

  • Tomcat鏈接器名稱
  • 外部訪問接口服務
  • 建立鏈接,發送請求,並接收響應
  • 封裝底層網絡通信協議,為Catalina提供接口,使之與請求協議及I/O方式解耦
  • 將Socket輸入轉換為Request交由Catalina處理
  • 提供Response對象將Catalina的處理結果寫入輸出流
  • 此處的Request與Response與Servlet還未關聯

 

 Coyote與Catalina交互關系:

 Cotoye支持的協議

 

  • HTTP/1.1
  • AJP
  • HTTP/2.0
  • 8.5/9之后移除BIO支持
  • NIO java類庫實現
  • NIO2 JDK7最新的NIO2
  • APR(跨平台統一API工具) 采用Apache可移植運行庫實現APR是使用C/C++編寫的本地庫

 Jasper:  

 

  • 從Tomcat4.1開始重新設計了Jasper2
  • 運行時編譯
  • 預編譯:提供JspC用於支持JSP預編譯
  • 轉換為Servlet將頁面內容輸出

 JVM配置項

 

  • 例:JAVA_OPTS= “-server -Xms1024m -Xmx2048m -XX:PermSize=256m -XX:MaxPermSize=512m”
  • Xms:堆內存的初始大小
  • Xmx:堆內存上限
  • XX:PermSize:非堆內存初始大小(JDK8中改為:-XX:MetaspaceSize)
  • XX:MaxPermSize:非堆內存上限,(JDK8:-XX:MaxMetaspaceSize)
  • 涉及:性能、調試、JVM行為、垃圾回收、可按需添加詳見Oracle官網文檔

 

 系統屬性配置

  • 通過-Dproperty命令指定系統屬性
  • 涉及:屬性替換、集群、EL、Jasper、安全、規范、
  • 會話、日志、jar掃描等

 

 服務器配置

  • catalina.properties
  • server.xml
  • context.xml

 

 Web應用配置

 

  • SerlverContext初始化參數
  • 會話配置
  • Cookie
  • URL
  • SSL
  • Servlet聲明及映射
  • 生命周期監聽器
  • Filter定義及映射(比如:CorsFilter)
  • MIME類型映射
  • 歡迎頁列表、錯誤頁列表、本地化及編碼映射
  • 安全配置
  • JNDI配置以及其他配置

 

 Web服務器集成

 

  • 靜態資源優化
  • 多應用、虛擬機整合
  • 負載均衡
  • 復合場景
  • Apache HTTP Server
  • Ngnix(高並發、延遲處理、SSL、靜態內容壓縮緩存、請求限流、HTTP流媒體)

 

其它Tomcat內容

  • 集群
    •   可伸縮、高可用、高性能
    •   使用Apache Tribes通信模塊,
    •   會話同步
  • 安全
    •   server.xml移除不必要組件、修改關鍵配置如shutdown端口
    •   應用安全
    •   傳輸安全:SSL ,TLS
    •   catalina.opolicy
  • 性能調優
    •   測試與診斷工具
    •   配置優化
    •   Appache Bench、JMeter
    •   Linux:nload、bmon slurm 套接字:iftop iptraf tcptrack pktstat netwatch等

 參考資料:

https://book.douban.com/subject/27034717/

 http://tomcat.apache.org/

 完

 


免責聲明!

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



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