HelloWorld 善戰者,求之于勢,不責于人;故能擇人而任勢。

          知止而后有定,定而后能靜,靜而后能安,安而后能慮,慮而后能得。物有本末,事有終始。知所先后,則近道矣。

            BlogJava :: 首頁 ::  :: 聯系 ::  :: 管理 ::
            167 隨筆 :: 1 文章 :: 40 評論 :: 0 Trackbacks
          編寫 Tomcat 管理程序
          評分:
          作者:jilili   瀏覽次數:439   創建于: 2006-01-03   更新于: 2006-11-19
          關鍵字:

          1.前言
             
              基于Tomcat的應用程序在發布時總是存在啟動服務和重新加載的問題,有時甚至需要重新啟動Tomcat服務,經過一段時間的使用對Tomcat有了些了解,這篇文章的目的是介紹有關怎樣通過程序去控制Tomcat,主要內容如下:
             
              添加刪除虛擬主機添加刪除Host別名啟動停止Host、啟動停止Context發布卸載程序

          2. 準備知識和參考資料

          2.1 類加載器和Tomcat安全管理(可以在讀完整篇文章后作為補充材料閱讀
             
                 類裝入問題解密(http://www-128.ibm.com/developerworks/cn/java/j-dclp1/)
                 了解 Java ClassLoader(http://www- 128.ibm.com/developerworks/cn/views/java/tutorials.jsp?cv_doc_id=84959)這篇文章需要注冊才能看到
                 Java 編程的動態性,第 1 部分: 類和類裝入(http://www-128.ibm.com/developerworks/cn/java/j-dyn0429/)
                 The Tomcat 5.5 Servlet/JSP Container Class LoaderHOW-TO(http://tomcat.apache.org/tomcat-5.5-doc/class-loader- howto.html)
                 The Tomcat 5.5 Servlet/JSP Container Security Manager HOW-TO(http://tomcat.apache.org/tomcat-5.5-doc/security-manager- howto.html)

          2.2 ContainerServlet

              org.apache.catalina.ContainerServlet 是一個接口類,它可以訪問Catalina的內部功能,它有Catalina被類加載器加載,而不是我們的WebApplication類加載器。它的Setter方法在這個Servlet的新的實例被放進Service時被執行。
              我們使用它獲取 Engine, Host,  Context等內部對象。要使用這個類必需在Context配置中使 privileged="true"如下:
             
              <Context docBase="/opt/vhost/ideais.net/tomcat.war" path="/tomcat" privileged="true"/>

          2.3 JMX

              Tomcat5.X中提供了JMX對象,它對于Tomcat的管理提供了完整的管理,可是對于服務的控制只有通過借用ContainerServlet來實現。

          3. Tomcat 層次結構




          4. 獲取Tomcat內部對象

          ...
          import org.apache.catalina.*;
          ...

          public class XmlAdminServlet extends HttpServlet implements ContainerServlet

            ...
            protected Wrapper wrapper = null;
            protected Context context = null;
            protected Host host = null;
            ...
           
            public void setWrapper(Wrapper wrapper) {
                  this.wrapper = wrapper;
                  if (wrapper == null) {
                      context = null;
                      host = null;
                      engine = null;
                  } else {
                      context = (Context) wrapper.getParent();
                      host = (Host) context.getParent();
                      engine = (Engine) host.getParent();
                  }
            }
           
            ...
              Container[] hosts = engine.findChildren();
            ...
           
          }



          </script>

          posted on 2007-12-06 14:01 helloworld2008 閱讀(763) 評論(0)  編輯  收藏 所屬分類: java
          主站蜘蛛池模板: 恭城| 麻栗坡县| 鄂伦春自治旗| 嘉定区| 长武县| 治县。| 洛隆县| 上林县| 明光市| 滁州市| 安岳县| 福州市| 昭觉县| 沽源县| 蚌埠市| 南宁市| 岐山县| 晋中市| 奉贤区| 利辛县| 乌拉特中旗| 灵川县| 沁阳市| 赤壁市| 长垣县| 获嘉县| 亳州市| 中超| 名山县| 鄂州市| 南昌市| 沙田区| 达州市| 桐城市| 平陆县| 吉首市| 临汾市| 黄平县| 宜兰市| 胶州市| 色达县|