**1.結構圖**

tomcat主要組件
服務器Server,服務Service,連接器Connector,容器Container
**2.Connector**
一個Connecter將在某個指定的端口上偵聽客戶請求,接收瀏覽器的發過來的 tcp 連接請求,創建一個 Request 和 Response 對象分別用于和請求端交換數據,然后會產生一個線程來處理這個請求并把產生的 Request 和 Response 對象傳給處理Engine(Container中的一部分),從Engine出獲得響應并返回客戶。?
Tomcat中有兩個經典的Connector,一個直接偵聽來自Browser的HTTP請求,另外一個來自其他的WebServer請求。HTTP/1.1 Connector在端口8080處偵聽來自客戶Browser的HTTP請求,AJP/1.3 Connector在端口8009處偵聽其他Web Server(其他的HTTP服務器)的Servlet/JSP請求。?
Connector 最重要的功能就是接收連接請求然后分配線程讓 Container 來處理這個請求,所以這必然是多線程的,多線程的處理是 Connector 設計的核心。

**3.Container**
Container是容器的父接口,該容器的設計用的是典型的責任鏈的設計模式,它由四個自容器組件構成,分別是Engine、Host、Context、Wrapper。這四個組件是負責關系,存在包含關系。通常一個Servlet class對應一個Wrapper,如果有多個Servlet定義多個Wrapper,如果有多個Wrapper就要定義一個更高的Container,如Context。?
Context 還可以定義在父容器 Host 中,Host 不是必須的,但是要運行 war 程序,就必須要 Host,因為 war 中必有 web.xml 文件,這個文件的解析就需要 Host 了,如果要有多個 Host 就要定義一個 top 容器 Engine 了。而 Engine 沒有父容器了,一個 Engine 代表一個完整的 Servlet 引擎。
Engine 容器?
Engine 容器比較簡單,它只定義了一些基本的關聯關系
Host 容器?
Host 是 Engine 的子容器,一個 Host 在 Engine 中代表一個虛擬主機,這個虛擬主機的作用就是運行多個應用,它負責安裝和展開這些應用,并且標識這個應用以便能夠區分它們。它的子容器通常是 Context,它除了關聯子容器外,還有就是保存一個主機應該有的信息。
Context 容器?
Context 代表 Servlet 的 Context,它具備了 Servlet 運行的基本環境,理論上只要有 Context 就能運行 Servlet 了。簡單的 Tomcat 可以沒有 Engine 和 Host。Context 最重要的功能就是管理它里面的 Servlet 實例,Servlet 實例在 Context 中是以 Wrapper 出現的,還有一點就是 Context 如何才能找到正確的 Servlet 來執行它呢? Tomcat5 以前是通過一個 Mapper 類來管理的,Tomcat5 以后這個功能被移到了 request 中,在前面的時序圖中就可以發現獲取子容器都是通過 request 來分配的。
Wrapper 容器?
Wrapper 代表一個 Servlet,它負責管理一個 Servlet,包括的 Servlet 的裝載、初始化、執行以及資源回收。Wrapper 是最底層的容器,它沒有子容器了,所以調用它的 addChild 將會報錯。?
Wrapper 的實現類是 StandardWrapper,StandardWrapper 還實現了擁有一個 Servlet 初始化信息的 ServletConfig,由此看出 StandardWrapper 將直接和 Servlet 的各種信息打交道。
**4.其他組件**
Tomcat 還有其它重要的組件,如安全組件 security、logger 日志組件、session、mbeans、naming 等其它組件。這些組件共同為 Connector 和 Container 提供必要的服務。
**5.http請求過程**

1、用戶點擊網頁內容,請求被發送到本機端口8080,被在那里監聽的Coyote HTTP/1.1 Connector獲得。?
2、Connector把該請求交給它所在的Service的Engine來處理,并等待Engine的回應。?
3、Engine獲得請求localhost/test/index.jsp,匹配所有的虛擬主機Host。?
4、Engine匹配到名為localhost的Host(即使匹配不到也把請求交給該Host處理,因為該Host被定義為該Engine的默認主機),名為localhost的Host獲得請求/test/index.jsp,匹配它所擁有的所有的Context。Host匹配到路徑為/test的Context(如果匹配不到就把該請求交給路徑名為“ ”的Context去處理)。?
5、path=“/test”的Context獲得請求/index.jsp,在它的mapping table中尋找出對應的Servlet。Context匹配到URL PATTERN為*.jsp的Servlet,對應于JspServlet類。?
6、構造HttpServletRequest對象和HttpServletResponse對象,作為參數調用JspServlet的doGet()或doPost().執行業務邏輯、數據存儲等程序。?
7、Context把執行完之后的HttpServletResponse對象返回給Host。?
8、Host把HttpServletResponse對象返回給Engine。?
9、Engine把HttpServletResponse對象返回Connector。?
10、Connector把HttpServletResponse對象返回給客戶Browser。
- mybatis
- 基礎
- maven依賴
- 主配置文件
- 實體映射表
- Mapper接口
- xxxMapper.xml
- 代碼測試
- CURD
- 查詢操作
- 新增操作
- 修改操作
- 刪除操作
- 生命周期&作用域
- 實體類型配置別名
- 進階查詢
- 列名與屬性名不對應
- 多條件sql查詢
- 模糊查詢
- 獲取保存后的主鍵
- 動態sql
- where配合If
- where配合choose
- where配合foreach
- Sql片段
- 關聯查詢
- 表結構設計及實體類
- 多對一&一對一
- 一對多
- 多對多
- 嵌套查詢(多條sql)
- 多對一&一對一
- 一對多
- 多對多
- 加載策略
- 緩存
- 一級緩存
- 二級緩存
- 配置進階
- properties
- mapper注冊
- 連接池
- 注解開發
- spring
- 基礎
- maven依賴
- bean創建
- 基礎配置
- 測試代碼
- 簡單原理
- 構造方法創建對象
- 靜態工廠創建對象
- 動態工廠創建對象
- 作用域
- 初始化&銷毀方法
- 單例和原型作用域
- 依賴注入
- 構造方法注入
- set方法注入
- 集合&數組屬性注入
- 配置文件模塊化
- 注解配置
- 配置相關
- 注解釋義
- 純注解配置
- 小結
- Spring整合junit
- 依賴管理
- 使用
- Aop
- 依賴管理
- 配置相關
- aopDemo(非環繞通知)
- 名詞解釋
- 環繞通知
- xml混合注解Aop開發
- 純注解Aop
- Aop事務
- 代理相關
- 動態代理觀光代碼
- cglib代理觀光代碼
- SpringMVC
- 基礎
- 依賴管理
- 配置web.xml
- spring-mvc.xml
- idea tomcat配置
- Hello Controller
- Api解析
- @Controller
- @RequestMapping
- 編碼問題解決
- 獲取請求頭信息
- 獲取Cookie的值
- json相關
- 依賴管理
- 接收json請求參數
- 以json形式返回給客戶端
- restful風格
- 轉發
- 重定向
- 頁面傳值
- Request域
- Session域
- Aop異常處理
- 攔截器
- 番外篇
- Tomcat
- Servlet
- 創建
- 線程安全問題
- 生命周期相關
- Filter
- Listener
- ssm整合
- mybatis基礎篇
- mybatis依賴
- mybatis實體
- Mapper接口
- mybatis配置
- 測試代碼
- spring基礎篇
- 依賴
- AccountService接口
- AccountServiceImpl
- 測試代碼
- springmvc
- 依賴
- web.xml
- spring-mvc.xml
- AccountController
- spring整合mybatis
- 依賴
- 配置
- spring整合springmvc
- web.xml
- SpringBoot
- maven配置
- 引入SpringBoot技術
- 入口及測試控制器
- 打包插件
- 配置相關
- 配置實踐
- 配置自動適配
- 配置校驗
- 配置文件制定
- SpringBoot整合Junit
- 整合mybatis
- 依賴管理
- 配置相關
- @Mapper
- 整合freemarker
- 依賴管理
- 配置相關
- 測試控制器
- 目錄相關
- 驗證器
- maven依賴
- 驗證器定義
- 控制器接收參數
- 全局異常通知
- filter跨域解決方案
- 模板相關問題
- 上傳解決方案
- redis相關
- maven依賴管理
- 配置相關
- cache簡單封裝
- json處理
- SpringCloud
- 簡介
- 版本號
- eureka
- 簡介
- 組件
- eureka服務依賴
- eureka配置
- 項目啟動
- 父類依賴庫
- eureka_cli
- eureka客戶端依賴
- 配置項
- 啟動項
- eureka集群原理
- ribbon
- maven
- 配置
- 微服務實戰
- 項目架構
- 基類依賴
- eureka注冊中心
- 1依賴相關
- 2.配置相關
- 3.啟動項
- 業務service
- supergo-manager-service
- 依賴
- 配置
- 數據源監控
- 啟動項
- feign調用
- supergo-manager-feign
- 依賴
- 調用代碼
- 接口層
- supergo-manager-web
- 依賴
- 配置項
- 啟動項
- 通用mapper
- 逆向工程
- 數據庫連接配置
- 逆向工程配置
- 操作
- base-service
- 簡介
- 跨域
- 網關層
- zuul
- 依賴項
- 配置
- 啟動項