有点乱,基本上是看代码时的笔记。
StandardServer.init
StandardService.initialize
Http11Protocol.init
JIoEndpoint.init
connector.initialize()
JkCoyoteHandler.init
JkMain.init
这里的几个类基本都实现了Lifecycle接口,这个接口非常重要。
StandardServer.start()
StandardService.start()
StandardEngine.start() --StandardEngine[Catalina], it is Container
ContainerBase.start() : 分别start 其 children
StandardHost.start()
在HostConfig.deployDirectories(当然还有deployWARs)中读出若干目录,跟别deployDirectory各个,在这里为每个
应用例如examples,创建一个Context,这里是用默认的class loader的,即:
普通的context = (Context) Class.forName(contextClass).newInstance(); 并创建ContextConfig来监听其lifecycle的事件,并
使其成为StandardHost的child,
| 利用lifecycleEvent -->start HostConfig
child|
StandardContext.init()
StandardContext.start()
利用lifecycleEvent-->start ContextConfig, ContextConfig start的时候,重点有两个:
defaultWebConfig(); -- 解析conf/web.xml 及 conf\Catalina\localhost\web.xml.default文件
applicationWebConfig(); -- 解析应用下的web.xml
都是用Digester来解析web.xml(默认是此文件)的(Digester的解析,主要利用WebRuleSet这个类,这里的用法比较复杂,暂放在这里),从里面读到servlet的配置就将他作为一个child加到Context中。每个servlet用StandardWrapper来代理,看它的声明:
public class StandardWrapper extends ContainerBase implements ServletConfig, Wrapper, NotificationEmitter
每个servlet也是container,它的context是ApplicationContextFacade (implements ServletContext)
由于每个应用有一个Context,而每个Context的start方法中都进行了defaultWebConfig,而这里的conf/web.xml和web.xml.default是所有应用共同的,说明如果一个tomcat server在启动的时候,如果有多个应用,那么default web.xml是解析了多遍,而且在各个应用的Context中都有default web.xml 中配置的servlet(默认是default和jsp两个)实例。
每个Context会有一个loader,如果没有,就加一个WebappLoader,这里有classLoader(WebappClassLoader), 还有classLoader需要的路径和jar file,包括work目录lib目录中的jar files,
所以是每个Context有自己的class loader和domain的。
在Context的start中做了很多事情,包括listenner.start(),pipeline.start(),manager.start(), filterStart()
start listenner的时候,用Context中的class loader,另外可能需要处理Annotation。
在start filter的时候,如果是Tomcat自带的filter,就用当前的class loader,否则用Context中的class loader,也可能需要处理Annotation。
每个Context有个Realm,这个有待进一步了解。
参看server.xml的配置
<Server port="8005" shutdown="SHUTDOWN">
<Listener>
<GlobalNamingResource
<Resource name="UserDatabase" auth="Container"
</GlobalNamingResources>
<Service name="Catalina"> 处理
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
<Engine name="Catalina" defaultHost="localhost">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"/>
</Engine>
</Service>
</Server>
在server.xml中默认是定义了两个Connector的,一个事在8080(protocol="HTTP/1.1"),一个是在8009(protocol="AJP/1.3")
Connector.start()
Http11Protocol.start()
JIoEndpoint.start(): new 了一个WorkerStack(Worker(Runable对象)数组) new 了一个thread,运行Acceptor对象,用来在后台监听TCP/IP连接请求,然后将
请求分配给一个合适的processor。
这时看线程有三个:
main
ContainerBackgroundProcessor[StandardEngine(Catalina)]
http-8080-Acceptor-0
分享到:
相关推荐
- 日志文件通常会记录Tomcat启动过程中的详细信息,包括任何异常或错误消息。首先查看`logs`目录下的日志文件,尤其是`catalina.out`,以获取有关启动失败的具体原因。 2. **检查端口号** - 确认Tomcat监听的端口...
这段描述涉及到了Tomcat启动过程中由于MySQL JDBC驱动加载问题导致的常见错误。下面我们将对该问题进行详细分析。 ### 1. MySQL JDBC驱动加载失败 #### 原因分析: - **路径配置错误**:根据错误提示,“Could not...
### Tomcat 6.0 启动过程分析 #### Bootstrap 类的作用 `Bootstrap` 类作为 Tomcat 的启动入口,承担着构建一个独立的类加载器的任务,用于装载 `Catalina` 的内部类,以此来确保这些内部类与系统的 classpath 相...
本文将详细介绍Tomcat启动过程中可能遇到的问题及其解决方案,帮助读者快速定位并解决问题。 #### 二、理解Tomcat启动脚本 ##### 1. `startup.bat` 和 `catalina.bat` - **`startup.bat`**: 这是Windows系统下...
3. **系统资源不足**:包括内存、CPU等硬件资源不足,或者磁盘空间不足等情况,也可能导致Tomcat启动过程中出现问题。 4. **Tomcat配置文件问题**:如`server.xml`、`web.xml`等文件配置不当,可能导致启动失败。 5....
【描述】:Tomcat启动管理工具涵盖了启动、停止、监控以及配置Tomcat服务器的过程。这些工具可以帮助开发者有效地管理他们的应用服务,确保系统稳定运行,并在必要时进行故障排查。 【标签】: 1. Tomcat:Apache ...
### 解决Tomcat无法启动的方法 在日常的开发工作中,我们经常会遇到Tomcat服务器无法启动的问题,这不仅会影响到项目的正常运行,也会增加开发者的调试难度...希望本文能帮助大家顺利解决Tomcat启动过程中的各种问题。
【标题】:Tomcat启动顺序 【描述】:Tomcat作为Apache软件基金会的开源Java Servlet容器,其启动过程是理解其工作原理的关键部分。Tomcat的启动顺序涉及到多个层次的加载,从Bootstrap类开始,逐步加载系统配置、...
**Tomcat启动原理解析** Tomcat作为一款广泛使用的开源Java应用服务器,其启动过程涉及了众多关键步骤和组件的协同工作。理解Tomcat的启动原理对于开发者来说至关重要,不仅有助于提升性能优化的能力,还能在遇到...
同时,检查日志文件以确认Tomcat启动过程中是否存在任何错误或异常。 #### 7. 故障排查与维护 如果在设置开机启动过程中遇到问题,如服务无法启动或启动后立即停止,应检查Tomcat的日志文件和Windows事件查看器中的...
它会调用`catalina.sh`主脚本来执行实际的启动过程。在Windows中,`startup.bat`是批处理文件,同样会调用`catalina.bat`。启动脚本会加载Tomcat的配置文件,初始化Java环境,然后启动服务器。 二、Tomcat停止脚本 ...
理解Tomcat的启动过程和配置对于优化服务器性能和管理Web应用至关重要。本文将深入解析Tomcat的组成部分、启动流程及关键配置文件。 1. Tomcat Server的组成部分 Tomcat的架构由以下几个核心元素构成: 1.1 ...
- **监控日志**:可以监控Tomcat启动过程中的输出信息,确认服务是否成功启动。 #### 3. Java编程实现 - **类结构**:程序主要由`CheckTomcat`类构成,其中包含了`checkTomcatIsAlive`方法用于检测Tomcat状态,...
一、TOMCAT启动过程 1. **初始化**:当TOMCAT启动时,会读取`conf/server.xml`配置文件,这个文件定义了服务器的各个组件,如监听器、连接器、容器等。 2. **加载服务**:TOMCAT会根据配置文件创建一个`Catalina`...
然而,在实际操作过程中,不少用户会遇到Eclipse中Tomcat启动失败的问题,这不仅影响了开发效率,也可能导致项目延期。本文将深入探讨这一问题,并提供一系列可能的解决方案,帮助开发者们有效应对Eclipse中Tomcat...
这个过程对于软件实施工程师来说非常重要,因为它可以简化维护工作,避免每次系统重启后手动启动Tomcat。以下是如何在CentOS 7上设置Tomcat 8开机启动的详细步骤: 1. **配置Tomcat环境变量**: 首先,我们需要在...
之前tomcat启动老是报错,虽然不影响项目的启动运行,但是有强迫症的程序员会心里不爽: 如下: 问题分析 由于本机安装的jdk版本与tomcat中使用的jdk版本不一致导致的。 解决方法 后面我把原先tomcat启动环境用的...
标题中的“Tomcat启动和关闭”是指在Apache Tomcat服务器中进行服务的启停操作,这是每个Java Web开发者必备的基础技能。Apache Tomcat是一个开源的Servlet容器,它实现了Java Servlet和JavaServer Pages(JSP)规范...
标题中的“tomcat启动时定时循环执行内容(action)”指的是在Tomcat服务器启动过程中,通过配置或者自定义代码实现一个定时任务,使得该任务在Tomcat启动后能够周期性地自动执行。这种机制常用于需要定期检查、更新...
6. **等待Jenkins初始化**:当Tomcat启动并加载WAR包后,Jenkins会开始初始化过程。这个过程可能需要几分钟,取决于服务器性能和网络速度。 7. **访问Jenkins**:打开浏览器,输入`...