omcat源码解读--代码走读之Catalina. load(六)

承接上文,在执行参数校验和设置之后,就开始执行startupInstance的load();方法,主要有以下内容。



 

 

1、  initDirs(),此方法是设置“catalina.home”和“catalina.base”的路径,设置为绝对路径。

 

 

2、  initNaming(),此方法是设置Naming,将URL_PKG_PREFIXES = "java.naming.factory.url.pkgs"设置为"org.apache.naming",将INITIAL_CONTEXT_FACTORY= "java.naming.factory.initial" 设置为"org.apache.naming.java.javaURLContextFactory"。

3、  创建digester对象,digester的任务就是将xml文档里DOM信息,映射为对象,可以参考这篇文章http://onjava.com/pub/a/onjava/2002/10/23/digester.html?page=1,主要映射的对象有Server、Server/GlobalNamingResources、Server/Listener、Server/Service、Server/Service/Listener、Server/Service/Executor、Server/Service/Connector、Server/Service/Connector/Listener、等等。这里有一个重点,设置父classloader为sharedLoader,如下图,后续会说明。

 

 

4、  去加载conf/server.xml这个文件,以InputStream方式引入,之后做了一些如果inputStream==null的处理过程。

5、  用digester对象去解析xml文档,digester.push(this)传入当前对象startupInstance,digester.parse(inputSource)传入的上个步骤中产生的inputStream对象,最终解析conf/server.xml文档,根据dom的树形结构并建立关系,形成对象树赋值给startupInstance的server属性。

6、  获取当前对象startupInstance的属性server,并且调用init方法。

猜你喜欢

转载自83519144.iteye.com/blog/1886972