zoukankan      html  css  js  c++  java
  • tomcat加载web.xml的过程---StandardContext、ContextConfig源码分析

    一个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

  • 相关阅读:
    条款33:避免遮掩继承而来的名称
    LeetCode OJ:Combinations (排列组合)
    LeetCode OJ:Delete Node in a Linked List(链表节点删除)
    LeetCode OJ:Contains Duplicate III(是否包含重复)
    LeetCode OJ:Contains DuplicateII(是否包含重复II)
    luogu 1004 方格取数
    平衡树之伸展树(Splay Tree)题目整理
    P2472 [SCOI2007]蜥蜴(网络最大流)
    P1349 广义斐波那契数列(矩阵加速)
    P4113 [HEOI2012]采花 (莫队TLE)
  • 原文地址:https://www.cnblogs.com/feng9exe/p/12125509.html
Copyright © 2011-2022 走看看