fireLifecycleEvent(Lifecycle.CONFIGURE_START_EVENT,null);StandardContext在此情况下有4个listeners。
1、ContextConfig,执行configureStart(),方法。
(1)、webConfig();
1)、得到默认的defaultWebXml为WEB-INF/web.xml,在StandardContext中加入watchedResources为WEB-INF/web.xml,并创建输入流
2)、parseWebXml(globalWebXml, webXmlDefaultFragment, false);分析默认的web.xml,将结果放入webXmlDefaultFragment对象中。
3)、得到应用的web.xml的信息流。WEB-INF/web.xml
4)、parseWebXml(contextWebXml, webXml, false);分析web-inf/web.xml,将结果放入webXml对象中。
5)、webXml.merge(defaults);将默认的与应用的进行合并,应用的会进行覆盖。
6)、webXml.configureContext(context),后续介绍。
7)、处理一些额外的jar包,Map<String,WebXml>fragments = processJarsForWebFragments();在这里生成的一些jar。
(2)、校验一些额外属性,如下图
2、StandardHost,在此阶段没有动作。
3、TldConfig,主要是执行execute方法。
(1)、tldScanWebXml();扫描TagLibs
(2)、tldScanResourcePaths(WEB_INF);扫描子jar文件。
(3)、扫描一些classLoader加载的文件。
4、NamingContextListener
(1)、创建namingContext对象。1个参数是空hashTable,一个是“/Catalina/localhost/docs”
(2)、contextNameBindings.put(name,context),进行绑定name=contextNameBindings.put(name,context),context如下图
(3)、createNamingContext()
1)、创建compCtx对象,在namingContext里有kv对。
2)、创建envCtx对象,在compCtx里有kv对。
3)、在namingResources里找资源,进行增加
4)、compCtx绑定一些kv
(4)、ContextBindings.bindClassLoader(container, container,
((Container)container).getLoader().getClassLoader());
1)、clBindings.put(classLoader, context);
2)、clNameBindings.put(classLoader, name);
|