| 
                         执行脚本参数,执行bootstrap.jar中的Bootstrap类中main方法,并传入参数start 
- hift 
 -  
 - eval exec ""$_RUNJAVA"" ""$LOGGING_CONFIG"" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS  
 -  
 - -D$ENDORSED_PROP=""$JAVA_ENDORSED_DIRS""  
 -  
 - -classpath ""$CLASSPATH""  
 -  
 - -Djava.security.manager  
 -  
 - -Djava.security.policy==""$CATALINA_BASE/conf/catalina.policy""  
 -  
 - -Dcatalina.base=""$CATALINA_BASE""  
 -  
 - -Dcatalina.home=""$CATALINA_HOME""  
 -  
 - -Djava.io.tmpdir=""$CATALINA_TMPDIR""  
 -  
 - org.apache.catalina.startup.Bootstrap "$@" start 
 
  
在上面脚本中我们可以看出最后执行的都是从Bootstrap的main方法作为入口的,所以我们打开Tomcat源码进去Bootstrap类中看它到底做了什么。 
启动类分析 
作为Tomcat的入口类,我们先看看Bootstrap中做了什么。这里只贴出main方法中重要的代码。 
- //初始化类加载器并且将Catalina文件加载进内存中 
 - bootstrap.init(); 
 - String command = "start"; 
 - if (args.length > 0) { 
 -  command = args[args.length - 1]; 
 - } 
 - if (command.equals("startd")) { 
 -  args[args.length - 1] = "start"; 
 -  //调用Catalina.java的load方法 
 -  daemon.load(args); 
 -  //调用Catalina.java的start 
 -  daemon.start(); 
 - } else if (command.equals("stopd")) { 
 -  args[args.length - 1] = "stop"; 
 -  //调用Catalina.java的stop 
 -  daemon.stop(); 
 - } else if (command.equals("start")) { 
 -  daemon.setAwait(true); 
 -  daemon.load(args); 
 -  daemon.start(); 
 -  if (null == daemon.getServer()) { 
 -  System.exit(1); 
 -  } 
 - } else if (command.equals("stop")) { 
 -  daemon.stopServer(args); 
 - } else if (command.equals("configtest")) { 
 -  daemon.load(args); 
 -  if (null == daemon.getServer()) { 
 -  System.exit(1); 
 -  } 
 -  System.exit(0); 
 - } else { 
 -  log.warn("Bootstrap: command "" + command + "" does not exist."); 
 - } 
 
  
这里是根据脚本中传入的不同命令,调用Catalina不同的方法。由于我们主要分析的Tomcat如何做到一键式启停的,所以我们主要分析Catalina的start方法。 
在Catalina的satrt方法中我们看到了这一句 
- getServer().start(); 
 
  
随后经过Debug都是经过了Lifecycle的start方法,我们把Lifecycle的方法列出来 
- public interface Lifecycle { 
 -  public void addLifecycleListener(LifecycleListener listener); 
 -  public LifecycleListener[] findLifecycleListeners(); 
 -  public void removeLifecycleListener(LifecycleListener listener); 
 -  public void init() throws LifecycleException; 
 -  public void start() throws LifecycleException; 
 -  public void stop() throws LifecycleException; 
 -  public void destroy() throws LifecycleException; 
 -  public LifecycleState getState(); 
 -  public String getStateName(); 
 -  public interface SingleUse { 
 -  } 
 - } 
 
                          (编辑:91站长网) 
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! 
                     |