您的位置:首页 > Web前端 > BootStrap

BootStrap类

2013-11-13 00:00 120 查看
1. BootStrap

initClassLoaders 主要是load tomcat lib下的文件

try {

commonLoader = createClassLoader("common", null);

if( commonLoader == null ) {

// no config file, default to this loader - we might be in a 'single' env.

commonLoader=this.getClass().getClassLoader();

}

catalinaLoader = createClassLoader("server", commonLoader);

sharedLoader = createClassLoader("shared", commonLoader);

} catch (Throwable t) {

handleThrowable(t);

log.error("Class loader creation threw exception", t);

System.exit(1);

}

catalinaDaemon是一个Catalina 对象, 是tomcat的外壳程序。

catalinaDaemon反射调用load方法,执行用户输入的参数。

2. Digester

Catalina的createStartDigester会创建一个Digester,

Digester digester = new Digester();

digester.setValidating(false);

digester.setRulesValidation(true);

HashMap<Class<?>, List<String>> fakeAttributes = new HashMap<>();

ArrayList<String> attrs = new ArrayList<>();

attrs.add("className");

fakeAttributes.put(Object.class, attrs);

digester.setFakeAttributes(fakeAttributes);

digester.setClassLoader(StandardServer.class.getClassLoader());

// Configure the actions we will be using

digester.addObjectCreate("Server",

"org.apache.catalina.core.StandardServer",

"className");

digester.addSetProperties("Server");

digester.addSetNext("Server",

"setServer",

"org.apache.catalina.Server");

digester.addObjectCreate("Server/GlobalNamingResources",

"org.apache.catalina.deploy.NamingResourcesImpl");

digester.addSetProperties("Server/GlobalNamingResources");

digester.addSetNext("Server/GlobalNamingResources",

"setGlobalNamingResources",

"org.apache.catalina.deploy.NamingResourcesImpl");

digester.addObjectCreate("Server/Listener",

null, // MUST be specified in the element

"className");

digester.addSetProperties("Server/Listener");

digester.addSetNext("Server/Listener",

"addLifecycleListener",

"org.apache.catalina.LifecycleListener");

digester.addObjectCreate("Server/Service",

"org.apache.catalina.core.StandardService",

"className");

digester.addSetProperties("Server/Service");

digester.addSetNext("Server/Service",

"addService",

"org.apache.catalina.Service");

digester.addObjectCreate("Server/Service/Listener",

null, // MUST be specified in the element

"className");

digester.addSetProperties("Server/Service/Listener");

digester.addSetNext("Server/Service/Listener",

"addLifecycleListener",

"org.apache.catalina.LifecycleListener");

//Executor

digester.addObjectCreate("Server/Service/Executor",

"org.apache.catalina.core.StandardThreadExecutor",

"className");

digester.addSetProperties("Server/Service/Executor");

digester.addSetNext("Server/Service/Executor",

"addExecutor",

"org.apache.catalina.Executor");

digester.addRule("Server/Service/Connector",

new ConnectorCreateRule());

digester.addRule("Server/Service/Connector",

new SetAllPropertiesRule(new String[]{"executor"}));

digester.addSetNext("Server/Service/Connector",

"addConnector",

"org.apache.catalina.connector.Connector");

digester.addObjectCreate("Server/Service/Connector/Listener",

null, // MUST be specified in the element

"className");

digester.addSetProperties("Server/Service/Connector/Listener");

digester.addSetNext("Server/Service/Connector/Listener",

"addLifecycleListener",

"org.apache.catalina.LifecycleListener");

// Add RuleSets for nested elements

digester.addRuleSet(new NamingRuleSet("Server/GlobalNamingResources/"));

digester.addRuleSet(new EngineRuleSet("Server/Service/"));

digester.addRuleSet(new HostRuleSet("Server/Service/Engine/"));

digester.addRuleSet(new ContextRuleSet("Server/Service/Engine/Host/"));

addClusterRuleSet(digester, "Server/Service/Engine/Host/Cluster/");

digester.addRuleSet(new NamingRuleSet("Server/Service/Engine/Host/Context/"));

// When the 'engine' is found, set the parentClassLoader.

digester.addRule("Server/Service/Engine",

new SetParentClassLoaderRule(parentClassLoader));

addClusterRuleSet(digester, "Server/Service/Engine/Cluster/");

long t2=System.currentTimeMillis();

if (log.isDebugEnabled()) {

log.debug("Digester for server.xml created " + ( t2-t1 ));

}

3. Catalina.configFile方法获得Server.xml
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  tomcat BootStrap