一、http 1.1的新特性java
(1)持久鏈接web
- 當下載了頁面後,服務器不會當即關閉鏈接
- 等待被該頁面引用的全部資源下載完(同一個鏈接下載)
- 考慮到 打開/關閉 http 鏈接系統開銷很大
- 故web 服務端、網絡、客戶端都節省了大量的時間和工做量
- 默認使用持久鏈接,顯式請求頭:
![](http://static.javashuo.com/static/loading.gif)
(2)塊編碼apache
- 創建持久鏈接,服務器能夠從多個資源發送字節流,客戶端可使用該鏈接發送多個請求
- 發送方必須在每次發送時、在請求頭或響應頭添加content-length 頭信息
- http 1.0 中不須要content-length ,讀到-1 返回關閉
- http 1.1 transfer-encoding 頭信息,指明字節流會分塊發送
![](http://static.javashuo.com/static/loading.gif)
- 第一塊:1D 是16進制數,表明10進制的29個字符
- 第二塊:9個字符,看到0\r\n 代表結束
(3)狀態碼100的使用緩存
![](http://static.javashuo.com/static/loading.gif)
![](http://static.javashuo.com/static/loading.gif)
二、Connector 接口服務器
- 提供不少接口的聲明,包括關聯容器、request、responce等
![](http://static.javashuo.com/static/loading.gif)
三、HttpConnector 類網絡
- 實現了 org.apache.catalina.Connector 接口(可使用catalina 的鏈接器)
- 實現了 java.lang.Runnable 接口(確保實例在本身線程裏運行)
- 實現了 org.apache.catalina.LifeCycle 接口(維護每一個catalina 組件的生命週期)
- 建立HttpConnector 實例後,調用 initialize()、start() 方法(倆方法生命週期內執行一次)
- initialize(),調用open 方法從一個套接字工廠獲取一個實例
- 每一個HttpConnector 實例維護HttpProcesser 對象池,能夠同時處理多個http 請求
- 每一個HttpProcesser 實例運行在本身的線程中
四、HttpProcesser 對象池存儲在以下棧裏(java.io.Stack):異步
![](http://static.javashuo.com/static/loading.gif)
- 最小對象池數量和最大數量
- 最開始初始化最小數量對象
- 超過最大後,引入的http 請求會被忽略
![](http://static.javashuo.com/static/loading.gif)
- 每一個HttpProcesser 實例負責解析請求行和請求頭,填充Request 對象
- 關聯一個Request 和Response 對象
五、提供Http 請求服務編碼
![](http://static.javashuo.com/static/loading.gif)
六、HttpProcesser 類線程
- assign() 方法的異步實現
- process() 方法負責解析http 請求,並調用響應servlet 容器的invoke() 方法
- 實現了java.lang.Runnable 接口,每一個實例運行在本身的線程裏,叫:處理器線程
- assign 方法和await 方法對比
![](http://static.javashuo.com/static/loading.gif)
七、Request 對象對象
- 實現了org.apache.catalina.Request 接口
八、處理請求
- 解析鏈接、解析請求、解析請求頭
- 經過鏈接器能夠設置緩存區的大小
九、簡單的容器實現 SimpleContainer