1. 程式人生 > >Tomcat的設計模式分析

Tomcat的設計模式分析

  1. 責任鏈模式

Tomcat 中一個最容易發現的設計模式就是責任鏈模式,這個設計模式也是 Tomcat 中 Container 設計的基礎,整個容器的就是通過一個鏈連線在一起,這個鏈一直將請求正確的傳遞給最終處理請求的那個 Servlet。

    1. 責任鏈模式的原理

責任鏈模式,就是很多物件有每個物件對其下家的引用而連線起來形成一條鏈,請求在這條鏈上傳遞,直到鏈上的某個物件處理此請求,或者每個物件都可以處理請求,並傳給下一家,直到最終鏈上每個物件都處理完。這樣可以不影響客戶端而能夠在鏈上增加任意的處理節點。

通常責任鏈模式包含下面幾個角色:

  • Handler(抽象處理者):定義一個處理請求的介面
  • ConcreteHandler(具體處理者):處理請求的具體類,或者傳給下家
    1. Tomcat 中責任鏈模式示例

在 tomcat 中這種設計模式幾乎被完整的使用,tomcat 的容器設定就是責任鏈模式,從 Engine 到 Host 再到 Context 一直到 Wrapper 都是通過一個鏈傳遞請求。

Tomcat 中責任鏈模式的類結構圖如下:

 

上圖基本描述了四個子容器使用責任鏈模式的類結構圖,對應的責任鏈模式的角色,Container 扮演抽象處理者角色,具體處理者由 StandardEngine 等子容器扮演。與標準的責任鏈不同的是,這裡引入了 Pipeline 和 Valve 介面。他們有什麼作用呢?

實際上 Pipeline 和 Valve 是擴充套件了這個鏈的功能,使得在鏈往下傳遞過程中,能夠接受外界的干預。Pipeline 就是連線每個子容器的管子,裡面傳遞的 Request 和 Response 物件好比管子裡流的水,而 Valve 就是這個管子上開的一個個小口子,讓你有機會能夠接觸到裡面的水,做一些額外的事情。

為了防止水被引出來而不能流到下一個容器中,每一段管子最後總有一個節點保證它一定能流到下一個子容器,所以每個容器都有一個 StandardXXXValve。只要涉及到這種有鏈式是處理流程這是一個非常值得借鑑的模式。