Tomcat源码解读--代码走读之(三十一的6-12)StandardContext之configure_start(三十三)

fireLifecycleEvent(Lifecycle.CONFIGURE_START_EVENT,null);StandardContext在此情况下有4listeners

1、ContextConfig,执行configureStart(),方法。

1)、webConfig();

   1)、得到默认的defaultWebXmlWEB-INF/web.xml,在StandardContext中加入watchedResourcesWEB-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)、校验一些额外属性,如下图

扫描二维码关注公众号,回复: 723216 查看本文章



 

2StandardHost,在此阶段没有动作。

3TldConfig,主要是执行execute方法。



 

1)、tldScanWebXml();扫描TagLibs

2tldScanResourcePaths(WEB_INF);扫描子jar文件。

3)、扫描一些classLoader加载的文件。

4NamingContextListener



 

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);

 

 

猜你喜欢

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