tomcat 6.0.24 源代码分析笔记(2010年2月23日更新)

转载请注明:来自http://blog.csdn.net/cnbird2008

 

tomcat是支持jsp的一套中间件,为了更好的学习java编程思想所以以tomcat源代码来分析和学习,请大家多多指点

 

1.tomcat的一些目录结构就不多说了,首先程序的启动bin目录下的bootstrap.jar里面包含了org.apache.catalina和org.apache.naming 2个包里面分成很多小包

org.apache.catalina包含了startup,security,loader三个包

程序首先从startup包的Bootstrap类开始执行

 

开始分析org.apache.catalina.startup的Bootstrap类开始分析

程序

public static void main(String[] args)
  {
    if (daemon == null) {
      daemon = new Bootstrap();

java程序都是从public static void main开始执行

daemon是指创建的Bootstrap类,不多说了很好理解

  public Bootstrap()
  {
    this.catalinaDaemon = null;

    this.commonLoader = null;
    this.catalinaLoader = null;
    this.sharedLoader = null;
  }

类创建实例时执行以上的初始化

 

 try {
        daemon.init();
      } catch (Throwable t) {
        t.printStackTrace(); 
        return;
      }

使用init的初始化方法如果错误抛出异常t.printStackTrace();打印错误堆栈信息

 public void init()
    throws Exception
  {
    setCatalinaHome();
    setCatalinaBase();

    initClassLoaders();

 

setCatalinaHome()方法设置catalina.home环境变量(系统函数参考JAVA API中文文档获得系统的相关环境的文章

http://blog.csdn.net/kongqz/archive/2009/03/13/3987198.aspx

http://blog.csdn.net/gloomyboyo/archive/2009/08/14/4443870.aspx

java.io.FILE类以及相关的方法

http://www.blogjava.net/dreamstone/archive/2007/08/08/134968.html)

 

private void setCatalinaHome()
  {
    if (System.getProperty("catalina.home") != null)
      return;
    File bootstrapJar = new File(System.getProperty("user.dir"), "bootstrap.jar");

    if (bootstrapJar.exists()) {
      try {
        System.setProperty("catalina.home", new File(System.getProperty("user.dir"), "..").getCanonicalPath());
      }
      catch (Exception e)
      {
        System.setProperty("catalina.home", System.getProperty("user.dir"));
      }
    }
    else
      System.setProperty("catalina.home", System.getProperty("user.dir"));
  }

 

setCatalinaBase设置catalina.base环境变量

  private void setCatalinaBase()
  {
    if (System.getProperty("catalina.base") != null)
      return;
    if (System.getProperty("catalina.home") != null) {
      System.setProperty("catalina.base", System.getProperty("catalina.home"));
    }
    else
      System.setProperty("catalina.base", System.getProperty("user.dir"));
  }

 

3.initClassLoaders方法

  private void initClassLoaders()
  {
    try
    {
      this.commonLoader = createClassLoader("common", null);
      if (this.commonLoader == null)
      {
        this.commonLoader = super.getClass().getClassLoader();
      }
      this.catalinaLoader = createClassLoader("server", this.commonLoader);
      this.sharedLoader = createClassLoader("shared", this.commonLoader);
    } catch (Throwable t) {
      log.error("Class loader creation threw exception", t);
      System.exit(1);
    }
  }

你可能感兴趣的:(tomcat 6.0.24 源代码分析笔记(2010年2月23日更新))