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許可
- 以Apache License許可方式發布
- 免費
- 修改並發布變更版本的用戶不必公開修改部分源碼
- 修改tomcat的用戶不必變更捐獻給Apache軟件基金會
- 所有包含源碼及二進制的重新發布均包含Apache許可
- 任何重新發布的資料必須經過Apache基金會批准
- 無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之后新特性
- Servlet3.1、JSP2.3、EL3.0、WebSocket1.1、9.0開始支持Servlet4.0
- Servlet4.0預覽API
- 默認的HTTP、AJP鏈接器采用NIO,而非BIO
- 全新的資源實現
- 鏈接器新增支持JDK7的NIO2
- 鏈接器新增支持HTTP/2協議
- 默認采用異步日志處理方式
- 大量代碼重構
Tomcat總體架構設計
Tomcat啟動流程
Tomcat請求處理流程
Tomcat類加載機制
- 從緩存中加載
- 如果沒有,從JVM的Bootstrap類加載器加載
- 如果沒有,則從當前類加載器加載(WEB-INF/classes 、WEB-INF/lib的順序)
- 如果沒有,則從父類加載器加載,由於父類加載器采用默認的委派模式,所以加載順序為System、Common、Shared
- 如果啟用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/
完