tomcat 启动

Tomcat下的一个web 应用通常是对应 Server.xml 下<Host>的一个子元素<Context>的。在商业发布你的应用应用的时候你应该在<Host>下面配制和你的web 应用对应的<Context>. 但是在平时大家开发测试的时候发现不怎么做,应用也能跑,通常大家都是扔一个war包或干脆扔一个文件夹就完了,再启动tomcat,不错就可以用了。

我们来插一段,仔细看看Tomcat中conf目录下的Server.xml文件,他基本上反映了正个Tomcat的结构。tomcat 是有容器中间组成的,而且容器嵌套的,一层包着一层,中间还有少量的公共插件。

tomcat 是点火式引擎,由org.apache.catalina.startup.Bootstrap 这个类来点燃整个系统的启动。Bootstrap 就像一根炮引。启动顺序为:
Server{init()-->start()} --> Service{start()} --> Connector(start()) --> Engine{start()} --> Host{start()} --> Context{start()}

在启动过程中tomcat 就以Server.xml这个配置文件为主导的。……^_^
下面我们回到楼主的我问题。
应用的启动顺序是怎么定的呢,其实就是tomcat如何加载Context的问题。
让我们打开apache-tomcat-6.0.16-src\java\org\apache\catalina\startup目录下的HostConfig.java文件,因为Context是Host的子元素,所以我们就是要看Host启动时,是如何加载Context的。找到HostConfig类的start()方法:
Java代码
  1. ……   
  2. public void start() {   
  3.   
  4.     ……   
  5.      //deployOnStartup见StandardHost    
  6.     if (host.getDeployOnStartup())                 
  7.         deployApps();   
  8.        
  9. }   
  10.   
  11. ……   
  12.   
  13.  protected void deployApps() {   
  14.   
  15.     File appBase appBase();   
  16.     File configBase configBase();   
  17.     // Deploy XML descriptors from configBase   
  18.     deployDescriptors(configBase, configBase.list());   
  19.     // Deploy WARs, and loop if additional descriptors are found   
  20.     deployWARs(appBase, appBase.list());   
  21.     // Deploy expanded folders   
  22.     deployDirectories(appBase, appBase.list());   
  23.        
  24. }   
  25. ……   
  26.   
  27.  protected File appBase() {   
  28.   
  29.     if (appBase != null{   
  30.         return appBase;   
  31.     }   
  32.   
  33.     File file new File(host.getAppBase());   
  34.     if (!file.isAbsolute())   
  35.         file new File(System.getProperty("catalina.base"),   
  36.                         host.getAppBase());   
  37.     try {   
  38.         appBase file.getCanonicalFile();   
  39.     catch (IOException e) {   
  40.         appBase file;   
  41.     }   
  42.     return (appBase);   
  43.   
  44. }   
  45. ……  

而apache-tomcat-6.0.16-src\java\org\apache\catalina\core\StandardHost.java
Java代码
  1. private boolean deployOnStartup true 



从deployApps()方法我们可以看出,tomcat是先加载
Server.xml配置文件下的Context元素的,然后是处理webapps下的war应用,接着是文件夹列表(appBase.list()))。这个文件夹就是Java 里面的文件夹了。如果你真的想知道这些文件夹应用的先后顺序,你可以创建一个文件目录,该目录下包含很多目录,组成一个链表,尝试过后就应该知道先后顺序了。我猜想应该是字典顺序。^_^.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值