tomcat學習筆記之默認鏈接器

一、http 1.1的新特性java

(1)持久鏈接web

  • 當下載了頁面後,服務器不會當即關閉鏈接
  • 等待被該頁面引用的全部資源下載完(同一個鏈接下載)
  • 考慮到 打開/關閉 http 鏈接系統開銷很大
  • 故web 服務端、網絡、客戶端都節省了大量的時間和工做量
  • 默認使用持久鏈接,顯式請求頭:

(2)塊編碼apache

  • 創建持久鏈接,服務器能夠從多個資源發送字節流,客戶端可使用該鏈接發送多個請求
  • 發送方必須在每次發送時、在請求頭或響應頭添加content-length 頭信息
  • http 1.0 中不須要content-length ,讀到-1 返回關閉
  • http 1.1 transfer-encoding 頭信息,指明字節流會分塊發送

  • 第一塊:1D 是16進制數,表明10進制的29個字符
  • 第二塊:9個字符,看到0\r\n 代表結束

(3)狀態碼100的使用緩存

  • 發送請求體以前,發送以下請求頭,等待服務器確認

  • 服務器響應,表明能夠接收並處理請求

二、Connector 接口服務器

  • 提供不少接口的聲明,包括關聯容器、request、responce等

三、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 請求會被忽略

  • 每一個HttpProcesser 實例負責解析請求行和請求頭,填充Request 對象
  • 關聯一個Request 和Response 對象

五、提供Http 請求服務編碼

  • 獲取一個HttpProcesser 實例

六、HttpProcesser 類線程

  • assign() 方法的異步實現
  • process() 方法負責解析http 請求,並調用響應servlet 容器的invoke() 方法
  • 實現了java.lang.Runnable 接口,每一個實例運行在本身的線程裏,叫:處理器線程
  • assign 方法和await  方法對比

七、Request 對象對象

  • 實現了org.apache.catalina.Request 接口

八、處理請求

  • 解析鏈接、解析請求、解析請求頭
  • 經過鏈接器能夠設置緩存區的大小

九、簡單的容器實現 SimpleContainer

相關文章
相關標籤/搜索