1?what
一種web服務器,運行java servlet、jsp技術,能為java web提供運行環境并通過http協議處理客戶端請求。即tomcat = http服務器+ servlet容器。同類產品有jetty
- Web應用:Web應用是指通過Web瀏覽器訪問的應用程序,它使用Web技術和標準(如HTTP、HTML、CSS、JavaScript等)來提供用戶界面和與用戶的交互。Web應用可以包括前端和后端組件,前端負責用戶界面和展示,后端負責業務邏輯和數據處理。
- Servlet:Servlet是Java EE規范的一部分,它是一種運行在服務器端的Java程序,用于接收客戶端(如Web瀏覽器)的請求、處理這些請求(包括訪問數據庫、調用業務邏輯等),并返回響應給客戶端。Servlet是構建動態Web內容的核心技術之一
2 結構
連接器connector+容器container
容器就是engine、host、context、servlet/wrapper
所以架構就是service(8080端口)、connector、engine、host(http:localhost.com)、context(/mvc,一個web應用程序)、servlet/wrapper(/add,一個servlet)
?
3?關鍵組件
3.1 connector
3.1.1 Endpoint
用于:網絡層通信tcp/ip,如NIO\NIO2
3.1.2 Processor
用于:應用層協議解析,如http
3.1.3 Adapter
用于:統一轉換。tomcat request/response 轉為servlet request/response,從而傳給容器container。
- servlet request是Java Servlet API 中的一個關鍵接口。
- Java Servlet API是Java EE(現稱為Jakarta EE)中用于開發服務器端Java應用程序的一套接口和類。Servlet是JavaWeb的三大組件之一(Servlet、Filter、Listener),它主要用于處理客戶端的請求并生成響應。
3.2 設計模式
3.2.1 變動點和不變點的設計思路
不變點用抽象類、接口(如ProtocoHanlder、AbstrctProtocol),變點用具體類實現(如Http11NioProtocol、Http11Nio2Protocol)
3.2.2 適配器模式
Adapter,tomcat用CoyoteAdapter。
3.2 container
3.2.1 如何管理engine、host、context、servlet,用組合模式,讓他們都實現Container
- 組合模式(Composite Pattern)是一種結構型設計模式,它允許你將對象組合成樹形結構以表示“部分-整體”的層次結構。在這種模式中,客戶端對單個對象和復合對象的使用具有一致性,即客戶端能夠以相同的方式處理單個對象和它們的組合。
說白了就是,用一個類/接口組裝成樹結構(有父子關系),這就是組合了,然后因為都是實現同一個接口,所以對每個部分的調用都是一樣的。如下圖
3.2.2 engine、host、context、servlet是順序調用,用的是責任鏈模式Pipeline-Valve
pipeline是責任鏈,是隊列,隊列中的元素是valve。valve能執行處理邏輯,并轉給下一個value。
valve和filter的區別:valve是tomcat的,filter是java servlet api的。valve工作再web容器級別,攔截所有應用請求,filter工作在應用級別,攔截某個web應用請求
3.2.3 engine管生命周期和分配請求
分配請求:映射mapper組件。根據url一層層找到對應的wrapper。
生命周期:負責容器創建、初始化、啟動、銷毀等。每個Container都繼承了LifeCycle。所以也是個組合模式。
還用到了觀察者模式(監聽變更生命周期狀態)、
組合模式(樹結構即有父子關系)、
模板設計模式(寫通用模板(通用邏輯),模板里面調用新方法,新方法走具體實現)
?
4 架構設計
- 羅列需求
- 面向對象設計類
- 找出需求中的變動點和不變點
- 變動點用抽象類,不變點用具體類實現
?