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

原文地址:https://www.cnblogs.com/feng9exe/p/12125509.html

时间: 2024-07-30 14:47:32

tomcat加载web.xml的过程---StandardContext、ContextConfig源码分析的相关文章

Spring学习(一)tomcat加载web.xml、以及项目集成Spring支持

tomcat容器加载web.xml 一. 1 .启动一个 WEB 项目的时候, WEB 容器会去读取它的配置文件 web.xml ,读取 <listener> 和 <context-param> 两个结点. 2 .紧急着,容创建一个 ServletContext ( servlet 上下文),这个 web 项目的所有部分都将共享这个上下文. 3 .容器将 <context-param> 转换为键值对,并交给 servletContext . 4 .容器创建 <li

tomcat加载web.xml

这几天看tomcat的源码,疑问很多,比如之一“ tomcat 怎么加载 web.xml”,下面是跟踪的过程,其中事件监听器有一个观察者模式,比较好.记录下来以供参考 1 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>tomcat load web.xml&g

tomcat加载web.xml机制

原文: http://www.cnblogs.com/wky1680/archive/2013/03/13/2957109.html 一. 1.启动一个WEB项目的时候, WEB容器会去读取它的配置文件web.xml, 读取<listener>和<context-param>两个结点. 2.紧急着, 容创建一个ServletContext(servlet上下文), 这个web项目的所有部分都将共享这个上下文. 3.容器将<context-param>转换为键值对, 并交

Tomcat(一):Tomcat启动时加载web.xml

server.xml配置文件样例: <?xml version="1.0" encoding="UTF-8"?> <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional inf

osgEarth如何加载离线谷歌卫星地图瓦片的源码教程

说明 本实例演示重新编译bing驱动直接加载本地离线影像瓦片地图. 本实例使用软件版本:osg3.3.1和osgEarth2.5 VC10编译环境(参考osgearth加载谷歌卫星地图的源码案例),vs2010,水经注万能地图下载器.  osgdb_osgearth_bingd.rar (52.96 KB, 下载次数: 786)  osgearthAPI.rar (31.91 KB, 下载次数: 831) 影像瓦片来源"水经注万能地图下载器".如果没有安装本软件,可以百度"水

vue element-ui,上传文件加载进度条显示效果(使用定时器实现源码分享)

上传文件效果如图: 父组件相关代码 html <drag-upload ref='mychild' action="//接口相关地址" v-model="versionwareList" @submitUploadParent='formSubmit' @input='delUpload' :autoUpload="autoUpload" :visible="visible" :disabled="disabl

postgres创建表的过程以及部分源码分析

背景:修改pg内核,在创建表时,表名不能和当前的用户名同名. 首先我们知道DefineRelation此函数是最终创建表结构的函数,最主要的参数是CreateStmt这个结构,该结构如下 typedef struct CreateStmt { NodeTag type; RangeVar *relation; /* relation to create */ List *tableElts; /* column definitions (list of ColumnDef) */ List *i

Tomcat源码分析——server.xml文件的加载

前言 作为Java程序员,对于tomcat的server.xml想必都不陌生.本文基于Tomcat7.0的Java源码,对server.xml文件是如何加载的进行分析. 源码分析 Bootstrap的load方法是加载tomcat的server.xml的入口,load方法实际通过反射调用了Catalina的load方法,见代码清单1. 代码清单1 /** * Load daemon. */ private void load(String[] arguments) throws Exceptio

【Spring源码分析】非懒加载的Bean实例化过程(下篇)

doCreateBean方法 上文[Spring源码分析]非懒加载的Bean实例化过程(上篇),分析了单例的Bean初始化流程,并跟踪代码进入了主流程,看到了Bean是如何被实例化出来的.先贴一下AbstractAutowireCapableBeanFactory的doCreateBean方法代码: 1 protected Object doCreateBean(final String beanName, final RootBeanDefinition mbd, final Object[]