`
xussen
  • 浏览: 30101 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论
阅读更多
前言: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
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里面生成的
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics