`
chinese.darren
  • 浏览: 99211 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Tomcat初始化和启动详细过程

阅读更多

花了一个下午专门研究了一下tomcat的初始化和启动过程,记录如下,以便其他朋友了解.

《init部分1》
0. setCatalinaHome,setCatalinaBase,存入系统属性
1. 装载配置文件(catalina.properties),写入System.setProperty
2. 创建classloader(common,server,shared),默认创建common classloader, 三者都使用StandardClassLoader(URL[])创建。
   common的parent classloader为null,且它将作为其他两个的父classloader。
3. 向MBeanServer注册classloader,交给MBeanServer管理
4. setContextClassLoader(catalinaLoader),catalinaLoader即为server classloader。
5. 如果可以获取到securitymanager,还要显示的对一些安全类进行预加载。
6  启动org.apache.catalina.startup.Catalina,并调用他的setParentClassLoader(sharedLoader)方法。

《init部分2》
0. 解析启动参数指令,并将相应的参数赋值到catalina类中,同时写入System.setProperty,事实上,catalina是一个启动配置相关的脚本类。
1. 初始化目录,实际上就是catalina_home,catalina_base之类。
2. 初始化命名系统(initNaming),即向System.setProperty注入java.naming.factory.initial之类,用于上下文查询的工厂类是org.apache.naming.java.javaURLContextFactory
3. 解析server.xml配置文件——使用digester,解析配置文件中的层次结构,并将关系注入到对应的类中。创建connector时创建protocolhandler
4. 初始化standardserver,初始化阶段会触发fireLifecycleEvent,如果在外围注入相应的listner就可以监听事件
5. 注册standardserver到MBeanServer
6. 初始化service服务,
7. 注册standardservice到MBeanServer
8. 初始化connector
9. 注册connector到MBeanServer
10. 初始化protocolHandler
11. 初始化endpoint(底层socket初始化等)

《start部分》
0. 启动standardserver启动阶段会触发fireLifecycleEvent,如果在外围注入相应的listner就可以监听事件
1. 启动service服务,启动阶段会触发fireLifecycleEvent,如果在外围注入相应的listner就可以监听事件
2. 启动(也包含了init)container(这里指engine),顺便启动(也包含了init)Realm,然后一次初始化(也包含了init)child container(这里主要是host)
   接下来启动StandardPipeline,其主要工作是将pipeline中的value注册到MBeanServer中,默认只有一个basic value,它在调用standardengine构造函数时被设置。
   最后,启动container的后台线程ContainerBackgroundProcessor,它所做的工作在ContainerBackgroundProcessor类中
3. 启动executors
4. 启动connector,将protocolHandler注册到MBeanServer。初始化mapperListener并将它注册到MBeanServer。
初始化MBeanServer主要做以下工作:registerEngine,registerHost,registerContext,registerWrapper等和具体的web应用模块相关的问题。
5. 启动protocolHandler将endpoint和GlobalRequestProcessor注册到MBeanServer。
6. 启动endpoint,启动worker,acceptor线程

以上这些对象都需要注册到MBeanServer,且都含有LifecycleEvent
分享到:
评论

相关推荐

    我的tomcat7源码手撕过程

    Tomcat初始化流程分析,Tomcat启动流程分析 Tomcat处理一次请求过程分析 servlet初始化流程

    Tomcat中用web.xml控制Web应用详解

    监听器可以在 Web 应用启动时执行一些初始化操作。容器将创建 listener 中的类实例,并将其作为监听器。监听器可以在 ServletContext 中注册监听器,以便在特定的生命周期事件中执行操作。 load-on-startup 元素 ...

    Eclipse启动Tomcat超时问题的解决方法

    在 Eclipse 中启动 Tomcat 服务器时,由于配置文件初始化项目多,导致出现 45 秒超时的 Tomcat 服务器启动错误。等待超时后,会弹出以下错误提示:“服务器启动超时”。这将导致开发者无法正常使用 Tomcat 服务器,...

    Tomcat优化相关问题.pdf

    * minSpareThreads:Tomcat 初始化时创建的线程数。 * maxSpareThreads:一旦创建的线程超过这个值,Tomcat 就会关闭不再需要的 socket 线程。 Tomcat 优化需要根据实际情况进行调整和测试,以找到最合适的参数设置...

    1、spring启动流程.vsdx

    使用vision画的spring启动流程图,详细介绍了spring从tomcat启动到创建初始化根上下文的过程。

    14-Servlet注解以及IDEA与tomcat相关配置.pdf

    * initParams 属性:指定 Servlet 的初始化参数,默认为空数组。 * asyncSupported 属性:指定 Servlet 是否支持异步处理,默认为 false。 * smallIcon 属性:指定 Servlet 的小图标,默认为空字符串。 * largeIcon ...

    2、refresh流程.vsdx

    使用visio画的spring启动流程、refresh的时序图。详细介绍了spring从tomcat启动到创建初始化根上下文的过程

    Spring Boot快速搭建和部署应用程序

    开发者只需要提供少量的配置信息,Spring Boot就可以自动根据配置信息进行应用程序的初始化和部署。这种约定优于配置的方式可以大大减少开发时间和提高开发效率。 另一个重要特点是自动化的依赖管理。Spring Boot...

    JAVA商业项目源代码--商铺经营管理系统(挥泪奉献!!!)

    项目编译成功后,完成了数据库的初始化! 3. 重新启动TOMCAT 5.5 系统的运行地址: http://localhost:8080/businessMis 初始用户名: admin 登录密码: 111111 登录后可更改用户的权限以便能使用系统...

    看透springMvc源代码分析与实践

    13.5.1 初始化Model192 13.5.2 更新Model197 13.6 ServletInvocableHandlerMethod199 13.6.1 HandlerMethod199 13.6.2 InvocableHandlerMethod203 13.6.3 ServletInvocableHandler-Method205 13.7 ...

    CMS系统Rk_Cms.zip

    E:\Tools\apache-maven-3.1.1\bin注意那个分号编译说明基于mavenmvn clean package war:war运行说明初始化数据库, root密码设置为root.create database platform default character set utf8;将war放入...

    基于JSP酒店管理系统设计软件程序源码+数据库+WORD毕业设计论文文档.zip

    2)初始化数据库 a、创建db_jiudian数据库 b、执行数据库脚本文件,初始化数据库 3)部署酒店系统 4)启动测试 3 功能介绍 1)基本操作 2)客户管理 3)客房管理 4)菜品管理 5)餐桌预定 6)餐饮消费...

    类excel报表开发工具FineReport教程之服务器性能优化:内存.pdf

    JVM 参数定义:- Xms:初始化内存大小,- Xmx:可以使用的最大内存。 Tomcat 服务器内存修改 Tomcat 服务器内存修改需要在服务启动文件中添加 JVM 参数,例如在 Windows 系统中,找到 %Tomcat_Home%/bin/catalina...

    jwp-basic-201501:2015 第一学期 Java Web 编程基础

    1. 描述启动Tomcat服务器时初始化Web应用程序的过程。 2、Tomcat服务器启动后访问,说明调用顺序和流程。 7.解释为什么ListController和ShowController在多线程的情况下会出现问题。

    jwp-basic-2015-reflection:T_T

    2. 描述启动Tomcat服务器时初始化web应用程序的过程。 3、Tomcat服务器启动后,说明访问时的调用顺序和流程。 10.解释为什么ListController和ShowController在多线程的情况下会出现问题。

    基于Java开发的派单管理系统demo源码+项目说明+sql数据库(课程大作业).zip

    - 执行doc/db.sql文件,初始化数据 - 修改application.properties文件,更新MySQL账号和密码 - Eclipse、IDEA运行PdsApplication.java,则可启动项目 - 项目访问路径:http://localhost - API文档路径:...

    云捷平台使用手册

    1.2.1执行初始化脚本 4 1.2.2配置数据源 5 1.3 运行Studio 6 1.3.1 打开Studio 6 1.3.2 启动Tomcat 6 1.4 运行系统 7 第二章 建模过程介绍 7 2.1 数据建模 8 2.1.1 概念建模阶段 8 2.1.2 逻辑建模阶段 9 2.1.3 物理...

    《程序天下:J2EE整合详解与典型案例》光盘源码

    8.4.3 改变初始化和销毁方式 8.4.4 改变异常处理的方式 8.5 小结 第九章 CVS使用指南 9.1 CVS介绍 9.1.1 CVS简介 9.1.2 为什么要使用CVS 9.2 建立CVS的开发环境 9.2.1 下载CVS 9.2.2 配置CVS 9.3 CVS的使用方法 ...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (2)

    8.4.3 改变初始化和销毁方式 8.4.4 改变异常处理的方式 8.5 小结 第九章 CVS使用指南 9.1 CVS介绍 9.1.1 CVS简介 9.1.2 为什么要使用CVS 9.2 建立CVS的开发环境 9.2.1 下载CVS 9.2.2 配置CVS 9.3 CVS的使用方法 ...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (1)

    8.4.3 改变初始化和销毁方式 8.4.4 改变异常处理的方式 8.5 小结 第九章 CVS使用指南 9.1 CVS介绍 9.1.1 CVS简介 9.1.2 为什么要使用CVS 9.2 建立CVS的开发环境 9.2.1 下载CVS 9.2.2 配置CVS 9.3 CVS的使用方法 ...

Global site tag (gtag.js) - Google Analytics