花了一个下午专门研究了一下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启动过程中的详细信息,包括任何异常或错误消息。首先查看`logs`目录下的日志文件,尤其是`catalina.out`,以获取有关启动失败的具体原因。 2. **检查端口号** - 确认Tomcat监听的端口...
在启动过程中,Tomcat还会进行一系列的初始化操作,例如解析配置文件,创建和配置各个组件,启动监听器和管道等。此外,对于每个Web应用程序,Tomcat还会执行Servlet的加载和初始化,包括读取`web.xml`部署描述符,...
特别是在Windows操作系统上,为了实现Tomcat服务的自动化启动与管理,通常会选择将Tomcat安装为Windows服务的方式进行部署。然而,默认情况下,Tomcat服务的内存分配可能不足以支持大规模或高负载的应用场景,因此...
- 初始化日志系统,如`org.apache.juli.logging`,记录启动过程中的信息和错误。 11. **服务运行** - 此时,Tomcat已准备就绪,等待接收并处理来自客户端的请求。 通过深入理解这些步骤,开发者可以更好地理解...
理解Tomcat的启动过程和配置对于优化服务器性能和管理Web应用至关重要。本文将深入解析Tomcat的组成部分、启动流程及关键配置文件。 1. Tomcat Server的组成部分 Tomcat的架构由以下几个核心元素构成: 1.1 ...
从 `Bootstrap` 类开始,逐步初始化类加载器、加载配置文件,直到启动服务器并监听端口,最终形成一个完整的 Tomcat 启动过程。这一过程不仅揭示了 Tomcat 内部工作原理,也为进一步理解和优化 Tomcat 配置提供了...
启动脚本会加载Tomcat的配置文件,初始化Java环境,然后启动服务器。 二、Tomcat停止脚本 停止脚本,通常为`shutdown.sh`或`shutdown.bat`,用于优雅地关闭Tomcat服务。它发送一个特定的命令到正在运行的Tomcat进程...
2. 初始化:Tomcat初始化各个模块,如JMX注册、JNDI目录等。 3. 加载 Realm:Realm是Tomcat的安全组件,负责用户认证和授权。 4. 启动Connector:Connector监听特定端口,接收HTTP请求并将其传递给Coyote(Tomcat的...
总结来说,Tomcat 6的启动过程涉及到Bootstrap类的初始化、Catalina类的加载和配置解析,以及Digester的XML解析功能。这个过程保证了Tomcat能够正确地加载和应用配置,启动并运行Java Web应用程序。理解这一过程对于...
`--startmode`和`--stopmode`分别定义了启动和停止的方式,`--DisplayName`是服务在系统服务列表中的显示名,`--Classpath`指定了Tomcat运行所需的类路径,`--JvmMs`和`--JvmMx`设置了JVM的初始和最大内存。...
`Tomcat启动分析-Servlet-Web.xml.doc`文档可能涵盖了启动过程中的关键步骤,包括加载`context.xml`(用于全局配置)、解析`web.xml`(Web应用的部署描述符)以及初始化Servlet和过滤器等。在启动过程中,Tomcat会...
本文将深入探讨如何使用embeded Tomcat进行嵌入式JavaEE开发,并详细解释启动过程。 首先,理解embeded Tomcat的概念。Embeded Tomcat是指将Tomcat服务器作为Java应用程序的一部分,在代码中直接初始化和管理,而...
初始化虚拟机时出现错误 **问题描述**:启动时出现“Error occurred during initialization of VM”这样的错误。 **解决方法**:重启计算机通常可以解决此类问题。此外,检查JDK的安装路径是否包含空格或特殊字符,...
6. **等待Jenkins初始化**:当Tomcat启动并加载WAR包后,Jenkins会开始初始化过程。这个过程可能需要几分钟,取决于服务器性能和网络速度。 7. **访问Jenkins**:打开浏览器,输入`...
在这篇文章中,我们将深入探讨Apache Tomcat 7服务器的内部工作机制,重点关注`getServer().init()`方法在服务器初始化过程中的作用。Tomcat作为一款广泛使用的开源Java Servlet容器,它的性能和可扩展性使得它在Web...
如果启动时出现问题,`catalina.out`会记录详细的启动过程和错误信息。此外,使用`jstack`命令可以查看Tomcat的线程状态,帮助定位死锁或其他性能问题。 9. **优化与安全** 对于生产环境,还需要关注性能优化(如...
- 加载`$CATALINA_HOME/bin/bootstrap.jar`初始化Tomcat,并执行`Main`方法。 - 加载`$JAVA_HOME/lib/tools.jar`,Sun的工具类,包括编译JSP为Servlet的工具类。 - **Common**: - 这个目录下的类虽然对Tomcat和...
#### Tomcat初始化流程分析 Tomcat是一个流行的Java Servlet容器,用于部署和运行Web应用程序。理解Tomcat的工作原理对于优化应用性能、解决部署问题至关重要。以下是对Tomcat7启动流程的一个深入分析: 1. **启动...
Bootstrap是Apache Tomcat服务器的核心启动类,它是Tomcat初始化过程中的关键部分,主要负责加载服务器的配置信息并启动核心服务。在Java应用服务器领域,理解如何通过Bootstrap接口控制Tomcat的启动与关闭对于运维...