隨筆 - 8, 文章 - 0, 評論 - 6, 引用 - 0
          數據加載中……

          Tomcat筆記(一)

          包org.apache.catalina主要由接口組成。我們可以把這些接口分為幾個大類。

          第一類接口主要是對web application及其各個組成部分的抽象。這些接口以Container為父接口,分別為Context,Engine,Host,Wrapper。

          Engine代表的是整個Catalina Servlet引擎。

          Host代表的是Catalina Servlet引擎中的一個虛擬主機。

          Context

          Wrapper代表的是某一個具體的servlet

          下面我從Container的抽象實現ContainerBase來切入Container,Context,Engine,Host,Wrapper的實現。

          由于Container接口是web application中各部分的抽象的公共部分,因此其實現類ContrainerBase是一個抽象類。對于Container接口的各個子接口的實現類,則通過繼承ContainerBase來實現接口Container接口。例如Engine接口繼承Container接口,Engine的實現類StandardEnginer繼承ContainerBase類。

          ContainerBase實現得接口有Container,Lifecycle,MBeanRegistration, Pipeline,Serializable。其中Lifecycle,Pipeline和Container屬于同一個包。

          Lifecycle接口定義了一個具有生命期屬性的組件所必須提供的方法:start(啟動一個組件),stop(停止一個組件);除此之外該接口還定義了與具有生命期屬性的組件的Listener相關的3個方法,用來添加、刪除、查找對該組件的生命期階段變化感興趣的Listener。

          Pipeline在Tomcat中是一個或者多個Value的組合,Value用來對Request進行處理,生成Response或者將Request和Response傳給下一個Value進行處理。Tomcat并沒有象通常一樣將Pipeline和Value作為同一個接口,即使用Composite模式,而是Pipeline和Value分別作為集合和元素,Pipeline只能加入Value而不能加入Pipeline,Value則不能包含任何子Value。

          ContainerBase對lifecycle接口的實現分為兩類,addLifecycleListener、findLifecycleListener、removeLifecycleListener都是通過調用ContainerBase的一個LifecycleSupport成員實現;start和stop方法則為ContainerBase自己實現。我一開始以為LifecycleSupport也實現了lifecycle接口,但實際上并不是這樣,原因是start和stop方法與具體的組件密切相關。此外LifecycleSupport中還包括一個名為fireLifecycleEvent的方法,該方法遍歷所有的LifeCycleListener,并觸發Lifecycle事件。總體上看LifecycleSupport實現了所有實現Lifecycle接口的組件的公共部分,維護一個LifecycleListener的數組,提供了添加、修改、獲取LifecycleListener和觸發各個Listener的方法。一個有趣的情況是,LifecycleSupport是一個final類,無法被繼承,利用java的語言性質強制執行了面向對象中組合優于繼承的思想。

          posted on 2007-04-25 22:21 Job Hu 閱讀(353) 評論(1)  編輯  收藏

          評論

          # re: Tomcat筆記(一)  回復  更多評論   

          sf
          2007-04-29 17:14 | klvt

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 神木县| 澄城县| 黄平县| 莱西市| 井陉县| 察隅县| 乐清市| 四子王旗| 大洼县| 隆安县| 林甸县| 滕州市| 额尔古纳市| 旺苍县| 洱源县| 游戏| 泗阳县| 义乌市| 台南县| 策勒县| 饶阳县| 冀州市| 达拉特旗| 金坛市| 阿鲁科尔沁旗| 营口市| 荔浦县| 万安县| 曲靖市| 新安县| 无极县| 肥东县| 河北省| 靖宇县| 会宁县| 洪湖市| 万全县| 虹口区| 桑日县| 清河县| 建湖县|