前言:tomcat启动(BootStrap),会由Server(LifeCycle)的start调用传递到StandardContext(LifeCycle)容器的start调用。
1、init初始化方法:加入ContextConfig listener,然后lifeCycleSupport.fireLifecycleEvent(INIT_EVENT),会触发ContextConfig的init方法,找到conf/context.xml和Catalina/localhsot/context.xml.default解析并将配置元素设置到context
2、lifeCycleSupport.fireLifecycleEvent(BEFORE_START_EVENT)
3、设置new WebAppLoader(getParentClassLoader)。parentClassLoader是shared loader。像Catalina,StandardServer,StandardContext,Wrapper都是有catalina loader加载的。
Bootstrap
|
System
|
Common
/ \
Catalina Shared
/ \
Webapp1 Webapp2
|
System
|
Common
/ \
Catalina Shared
/ \
Webapp1 Webapp2
4、postWorkDirectory创建work底下的临时目录,会根据engineName和hostName创建目录结构
5、children[i].start() 子容器启动。这里的子容器是StandardWrapper,包装了一个Servlet,start里面其实没有做啥事
6、pipeline.start() 会启动pipeline里面的所有valve
7、lifeCycleSupport.fireLifecycleEvent(START_EVENT),会触发contextConfig的start(),会找到con/web.xml和/WEB-INFO/web.xml文件解析并将配置设置到context
8、设置Manager(StandardManager)并manager.start(),会将上次关闭的时候持久化到SESSION.ser的文件读入内存
9、启动后台容器线程,包括WebappLoad.backgroundProcess会自动监控webApp的改变,还有Manager.backgroundProcess会自动清除过期的session,还有容器里面所有的valve.backgroudProcess
10、lifeCycleSupport.fireLifecycleEvent(AFTER_START)
11、listenerStart 将context中的applicationListeners进行类加载(通过webAppLoader加载),特别还调用了ServletContextListener.contextInitialized。像Spring的容器加载入口就是通过这个方法进入
12、filterStart 将context中的filter进行类加载,并调用filter.init(FilterConfig)
13、loadOnStartup(children),对配置了load-on-startup的servlet进行wrapper.load()。servletClass.newInstance(),调用servlet.init(ServletConfig),ServletConfig的实现StandardWrapperFacade用的是门面模式,将Wrapper隔离。ServletConfig有个主要方法,getServletContext,ServletContext是从StandardContext里面生成的
相关推荐
tomcat 源码分析系列文档 http深入分析,tomcat中类的加载,tomcat的启动,tomcat的容器思想,
tomcat源码分析
TOMCAT 源码分析
TOMCAT 源码 分析 how tomcat works 读后总结
TOMCAT源码分析(启动框架).pdf
tomcat的基础脚本分析 tomcat的源码启动分析 tomcat的web应用启动分析 tomcat的socket分析 tomcat的cocket与容器对接时序分析
介绍了tomcat的架构,从源码分析tomcat组成!
Tomcat源码剖析 : 整体架构 层层分析 源码解析 架构分析 (Http服务器功能:Socket通信(TCP/IP)、解析Http报文 Servlet容器功能:有很多Servlet(自带系统级Servlet+自定义Servlet),Servlet处理具体的业务逻辑...
这些资源文档是本人在网上搜索了好多关于tomcat源码讲解的文章之后,觉得对tomcat6源码讲解不错的文章的整理,文档有别人分析,本人只是整理;
主要是讲解TOMCAT的系统框架, 以及启动流程。
对 NIO 模式,请求的流程描述的很详细。值得去仔细的研究。
1.2 Connector的配置对Connector的配置位于conf/server.xml文件中 1.2.1 BIO HTTP/1.1 Connector配置
} }process的功能也很简单,1:如果catalina.home和catalina.base两个属性没有设置就设置一下,2:参数正确的话就调用execut