一、servlet 容器用來處理請求servlet資源、爲客戶端封裝Response 對象的模塊web
二、tomcat 容器分四種:apache
- Engine:整個Catalina servlet 引擎
- Host:包含一個或多個Context 容器的虛擬主機
- Context:表示一個web應用程序
- Wrapper:表示一個獨立的servlet
三、Container 接口tomcat
- Engine接口,標準實現類 StandardEngine
- Host接口,標準實現類 StandardHost
- Context接口,標準實現類 StandardContext
- Wrapper接口,標準實現類 StandardWrapper
- 四個藉口都繼承至Container 接口
- 實現類都繼承至ContainerBase 抽象類
- 在org.apache.catalina.core包裏面
四、一個容器能夠有0個或多個低級子容器app
- Engine > Host >Context > Wrapper
- 包含關係 不能夠倒置
五、容器能夠包含支持的組件:server
- 載入器、記錄器、管理器、領域、資源等
- loader、logger、manager、realm、Resource
六、部署應用時,tomcat 管理員能夠經過編輯配置文件(server.xml)來決定使用哪一種容器xml
- 這是經過引入容器中的管道(pipeline)和閥(value)的集合來實現的
七、管道任務對象
- Pipeline接口
- Value 接口
- ValueContext 接口
- Contained 接口
- 在org.apache.catalina包裏面
八、管道包含該servlet 容器將要調用的任務繼承
- 一個閥表示一個要具體執行的任務
- servlet 容器的管道中,有一個基礎閥
- 能夠添加任意數量的閥(數量不包括基礎閥)
- 能夠編輯tomcat 配置文件動態添加閥
- 管道就像過濾器鏈同樣傳遞Request對象和response對象
- 閥相似過濾器(是Value 接口的實例)
- 基礎閥最後一個執行
- 一個servlet 容器有一條管道
- 當調用容器的invoke 方法時,容器會將處理工做交由管道完成
- 管道調用第一個閥開始處理
- 管道處理僞代碼:
九、管道必須保證添加到其中的全部閥和基礎閥都被調用一次接口
- 經過建立ValueContext 接口實例實現的
- ValueContext是管道的內部類實現,因此ValueContext 接口能夠訪問到管道全部成員
- ValueContext 最重要方法
- 建立ValueContext 實例後,實例會調用 invokeNext 方法
- 先調用第一個閥,執行完後調用後面的閥
- ValueContext 實例將自身傳遞給閥,每一個閥都能調用ValueContext 實例的invokeNext 方法
- 一個實現了ValueContext 接口的內部類 StandardPipelineValueContext
十、Contained 接口ip
- 閥能夠選擇是否實現該接口
- 接口實現類可使用接口中的方法,至多與一個servlet 容器相關聯
十一、Wrapper 級的servlet 容器
- 表示一個獨立級的servlet 定義
- Wrapper 接口實現類負責管理其基礎servlet 類的servlet 週期
- 調用servlet 的init、service、destory方法
- 最低級servlet 容器,不能添加子容器
- 重要方法load 、allocate
- load 方法載入並初始化servlet 類
十二、Wrapper 應用程序
核心類 SimpleWrapper
- 包含一個Pipeline 實例
- Pipeline 實例包含一個基礎閥(SimpleWrapperValue)和兩個額外閥
- 兩個額外閥:ClientIPLoggerValue、HeaderLoggerValue
- 使用一個Loader 實例載入servlet 類
- Wrapper 實例的基礎閥調用servlet 實例的 service() 方法
1三、Context 應用程序
- 當應用程序中有多個Wrapper 實例時,須要使用映射器
- 映射器是組件,幫助servlet 容器,選擇一個子容器來處理servlet 請求
- 映射器僅僅存在於tomcat4中,tomcat5使用了別的方法
- 映射器實現 org.apache.catalina.Mapper 接口
- 一個映射器支持一個請求協議
- getProtocol 方法負責得到 該映射器處理的協議
- map 方法返回 負責處理某個特定請求子容器的實例