花了一个下午专门研究了一下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
分享到:
相关推荐
Tomcat初始化流程分析,Tomcat启动流程分析 Tomcat处理一次请求过程分析 servlet初始化流程
监听器可以在 Web 应用启动时执行一些初始化操作。容器将创建 listener 中的类实例,并将其作为监听器。监听器可以在 ServletContext 中注册监听器,以便在特定的生命周期事件中执行操作。 load-on-startup 元素 ...
在 Eclipse 中启动 Tomcat 服务器时,由于配置文件初始化项目多,导致出现 45 秒超时的 Tomcat 服务器启动错误。等待超时后,会弹出以下错误提示:“服务器启动超时”。这将导致开发者无法正常使用 Tomcat 服务器,...
* minSpareThreads:Tomcat 初始化时创建的线程数。 * maxSpareThreads:一旦创建的线程超过这个值,Tomcat 就会关闭不再需要的 socket 线程。 Tomcat 优化需要根据实际情况进行调整和测试,以找到最合适的参数设置...
使用vision画的spring启动流程图,详细介绍了spring从tomcat启动到创建初始化根上下文的过程。
* initParams 属性:指定 Servlet 的初始化参数,默认为空数组。 * asyncSupported 属性:指定 Servlet 是否支持异步处理,默认为 false。 * smallIcon 属性:指定 Servlet 的小图标,默认为空字符串。 * largeIcon ...
使用visio画的spring启动流程、refresh的时序图。详细介绍了spring从tomcat启动到创建初始化根上下文的过程
开发者只需要提供少量的配置信息,Spring Boot就可以自动根据配置信息进行应用程序的初始化和部署。这种约定优于配置的方式可以大大减少开发时间和提高开发效率。 另一个重要特点是自动化的依赖管理。Spring Boot...
项目编译成功后,完成了数据库的初始化! 3. 重新启动TOMCAT 5.5 系统的运行地址: http://localhost:8080/businessMis 初始用户名: admin 登录密码: 111111 登录后可更改用户的权限以便能使用系统...
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 ...
E:\Tools\apache-maven-3.1.1\bin注意那个分号编译说明基于mavenmvn clean package war:war运行说明初始化数据库, root密码设置为root.create database platform default character set utf8;将war放入...
2)初始化数据库 a、创建db_jiudian数据库 b、执行数据库脚本文件,初始化数据库 3)部署酒店系统 4)启动测试 3 功能介绍 1)基本操作 2)客户管理 3)客房管理 4)菜品管理 5)餐桌预定 6)餐饮消费...
JVM 参数定义:- Xms:初始化内存大小,- Xmx:可以使用的最大内存。 Tomcat 服务器内存修改 Tomcat 服务器内存修改需要在服务启动文件中添加 JVM 参数,例如在 Windows 系统中,找到 %Tomcat_Home%/bin/catalina...
1. 描述启动Tomcat服务器时初始化Web应用程序的过程。 2、Tomcat服务器启动后访问,说明调用顺序和流程。 7.解释为什么ListController和ShowController在多线程的情况下会出现问题。
2. 描述启动Tomcat服务器时初始化web应用程序的过程。 3、Tomcat服务器启动后,说明访问时的调用顺序和流程。 10.解释为什么ListController和ShowController在多线程的情况下会出现问题。
- 执行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 物理...
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的使用方法 ...
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的使用方法 ...
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的使用方法 ...