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 阅读(751) 评论(0)  编辑  收藏 所属分类: java

只有注册用户登录后才能发表评论。


网站导航: