隨筆 - 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

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


          網站導航:
           
          主站蜘蛛池模板: 永宁县| 凤城市| 丰原市| 长沙市| 汝阳县| 重庆市| 蓬安县| 宁城县| 平江县| 吴川市| 城步| 商都县| 漯河市| 兴义市| 岐山县| 若羌县| 南昌市| 榆树市| 高阳县| 静乐县| 安泽县| 宝鸡市| 松潘县| 泰州市| 九台市| 汶川县| 永顺县| 正蓝旗| 双峰县| 高尔夫| 南溪县| 丰镇市| 惠州市| 齐齐哈尔市| 明水县| 岳西县| 莒南县| 武汉市| 防城港市| 耿马| 台南市|