tomcat加载web.xml的过程---StandardContextContextConfig源码分析

Posted zzfx

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了tomcat加载web.xml的过程---StandardContextContextConfig源码分析相关的知识,希望对你有一定的参考价值。

一个Context对应一个web应用,而一个web应用应该有一个web.xml
观察StandardContext的startInternal方法

startInternal() -> fireLifecycleEvent(Lifecycle.CONFIGURE_START_EVENT, null)
-> child.start()
-> mergeParameters()
-> listenerStart()

-> setApplicationEventListeners()
-> setApplicationLifecycleListeners()
-> filterStart()
-> loadOnStartup(findChildren())

(1)fireLifecycleEvent
StandardContext默认会被添加ContextConfig(Llistener),此时会通知到它,观察ContextConfig的lifecycleEvent方法。

configureStart()

-> webConfig()

-> webXmlParser.parseWebXml()
-> configureContext(webXml)

此处会使用digester读取web.xml并设置到StandardContext里。

(2)mergeParameters
步骤(1)中会将web.xml中的context-param元素设置到context的parameters里,此处则是把parameters设置到servletContext里。

(3)启动listener
步骤(1)中会将web.xml中的listener元素设置到context的applicationListeners里,
此处则取出listener类名,创建实例,并将listener分为两类
eventlistener:ServletRequestAttributeListener、ServletRequestListener、HttpSessionIdListener、HttpSessionAttributeListener
lifecyclelistener:ServletContextListener、HttpSessionListener
对于ServletContextListener,会调用listener.contextInitialized(event)

(4)启动filter
步骤(1)中会将web.xml中的filter元素设置到filter的filterdef里,此处则会实例化filter设置到filterConfigs里。

(5)启动servlet
步骤(1)中会将web.xml中的servlet元素封装成wrapper并调用addChild方法设置到Context里,
此处则会检查是否需要loadonstartup,如果需要则load。

 


————————————————
版权声明:本文为CSDN博主「lbl2018」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/lblblblblzdx/article/details/80946526

以上是关于tomcat加载web.xml的过程---StandardContextContextConfig源码分析的主要内容,如果未能解决你的问题,请参考以下文章

web.xml的加载过程配置详解

web.xml 组件加载顺序

Tomcat:Tomcat启动时加载web.xml

web.xml详解

JAVA Web.xml 加载顺序

tomcat加载web.xml机制