編寫 Tomcat 管理程序
作者:jilili 瀏覽次數(shù):439 創(chuàng)建于: 2006-01-03 更新于: 2006-11-19
關鍵字:
1.前言
基于Tomcat的應用程序在發(fā)布時總是存在啟動服務和重新加載的問題,有時甚至需要重新啟動Tomcat服務,經(jīng)過一段時間的使用對Tomcat有了些了解,這篇文章的目的是介紹有關怎樣通過程序去控制Tomcat,主要內(nèi)容如下:
添加刪除虛擬主機、添加刪除Host別名、啟動停止Host、啟動停止Context、發(fā)布卸載程序
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 編程的動態(tài)性,第 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的內(nèi)部功能,它有Catalina被類加載器加載,而不是我們的WebApplication類加載器。它的Setter方法在這個Servlet的新的實例被放進Service時被執(zhí)行。
我們使用它獲取 Engine, Host, Context等內(nèi)部對象。要使用這個類必需在Context配置中使 privileged="true"如下:
<Context docBase="/opt/vhost/ideais.net/tomcat.war" path="/tomcat" privileged="true"/>
2.3 JMX
Tomcat5.X中提供了JMX對象,它對于Tomcat的管理提供了完整的管理,可是對于服務的控制只有通過借用ContainerServlet來實現(xiàn)。
3. Tomcat 層次結(jié)構(gòu)

4. 獲取Tomcat內(nèi)部對象
...
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>