`
mooncui
  • 浏览: 72477 次
社区版块
存档分类
最新评论

Tomcat 启动过程

    博客分类:
  • Java
阅读更多

有点乱,基本上是看代码时的笔记。

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启动不了问题处理

    - 日志文件通常会记录Tomcat启动过程中的详细信息,包括任何异常或错误消息。首先查看`logs`目录下的日志文件,尤其是`catalina.out`,以获取有关启动失败的具体原因。 2. **检查端口号** - 确认Tomcat监听的端口...

    tomcat启动的错误

    这段描述涉及到了Tomcat启动过程中由于MySQL JDBC驱动加载问题导致的常见错误。下面我们将对该问题进行详细分析。 ### 1. MySQL JDBC驱动加载失败 #### 原因分析: - **路径配置错误**:根据错误提示,“Could not...

    Tomcat 6.0启动过程分析

    ### Tomcat 6.0 启动过程分析 #### Bootstrap 类的作用 `Bootstrap` 类作为 Tomcat 的启动入口,承担着构建一个独立的类加载器的任务,用于装载 `Catalina` 的内部类,以此来确保这些内部类与系统的 classpath 相...

    tomcat启动问题

    本文将详细介绍Tomcat启动过程中可能遇到的问题及其解决方案,帮助读者快速定位并解决问题。 #### 二、理解Tomcat启动脚本 ##### 1. `startup.bat` 和 `catalina.bat` - **`startup.bat`**: 这是Windows系统下...

    启动tomcat version一闪而过解决方案

    3. **系统资源不足**:包括内存、CPU等硬件资源不足,或者磁盘空间不足等情况,也可能导致Tomcat启动过程中出现问题。 4. **Tomcat配置文件问题**:如`server.xml`、`web.xml`等文件配置不当,可能导致启动失败。 5....

    tomcat启动管理工具

    【描述】:Tomcat启动管理工具涵盖了启动、停止、监控以及配置Tomcat服务器的过程。这些工具可以帮助开发者有效地管理他们的应用服务,确保系统稳定运行,并在必要时进行故障排查。 【标签】: 1. Tomcat:Apache ...

    解决tomcat无法启动.txt

    ### 解决Tomcat无法启动的方法 在日常的开发工作中,我们经常会遇到Tomcat服务器无法启动的问题,这不仅会影响到项目的正常运行,也会增加开发者的调试难度...希望本文能帮助大家顺利解决Tomcat启动过程中的各种问题。

    Tomcat启动顺序

    【标题】:Tomcat启动顺序 【描述】:Tomcat作为Apache软件基金会的开源Java Servlet容器,其启动过程是理解其工作原理的关键部分。Tomcat的启动顺序涉及到多个层次的加载,从Bootstrap类开始,逐步加载系统配置、...

    tomcat启动原理解析

    **Tomcat启动原理解析** Tomcat作为一款广泛使用的开源Java应用服务器,其启动过程涉及了众多关键步骤和组件的协同工作。理解Tomcat的启动原理对于开发者来说至关重要,不仅有助于提升性能优化的能力,还能在遇到...

    设置开机启动tomcat.txt

    同时,检查日志文件以确认Tomcat启动过程中是否存在任何错误或异常。 #### 7. 故障排查与维护 如果在设置开机启动过程中遇到问题,如服务无法启动或启动后立即停止,应检查Tomcat的日志文件和Windows事件查看器中的...

    Tomcat启动停止脚本

    它会调用`catalina.sh`主脚本来执行实际的启动过程。在Windows中,`startup.bat`是批处理文件,同样会调用`catalina.bat`。启动脚本会加载Tomcat的配置文件,初始化Java环境,然后启动服务器。 二、Tomcat停止脚本 ...

    Tomcat启动分析以及如何启动

    理解Tomcat的启动过程和配置对于优化服务器性能和管理Web应用至关重要。本文将深入解析Tomcat的组成部分、启动流程及关键配置文件。 1. Tomcat Server的组成部分 Tomcat的架构由以下几个核心元素构成: 1.1 ...

    检测Tomcat运行状态-自动重启

    - **监控日志**:可以监控Tomcat启动过程中的输出信息,确认服务是否成功启动。 #### 3. Java编程实现 - **类结构**:程序主要由`CheckTomcat`类构成,其中包含了`checkTomcatIsAlive`方法用于检测Tomcat状态,...

    模拟TOMCAT工作的全部过程

    一、TOMCAT启动过程 1. **初始化**:当TOMCAT启动时,会读取`conf/server.xml`配置文件,这个文件定义了服务器的各个组件,如监听器、连接器、容器等。 2. **加载服务**:TOMCAT会根据配置文件创建一个`Catalina`...

    Eclipse中Tomcat启动失败的解决方案

    然而,在实际操作过程中,不少用户会遇到Eclipse中Tomcat启动失败的问题,这不仅影响了开发效率,也可能导致项目延期。本文将深入探讨这一问题,并提供一系列可能的解决方案,帮助开发者们有效应对Eclipse中Tomcat...

    centOS7设置Tomcat8开机启动

    这个过程对于软件实施工程师来说非常重要,因为它可以简化维护工作,避免每次系统重启后手动启动Tomcat。以下是如何在CentOS 7上设置Tomcat 8开机启动的详细步骤: 1. **配置Tomcat环境变量**: 首先,我们需要在...

    Tomcat启动时报错:java.lang.UnsatisfiedLinkError的解决

    之前tomcat启动老是报错,虽然不影响项目的启动运行,但是有强迫症的程序员会心里不爽: 如下: 问题分析 由于本机安装的jdk版本与tomcat中使用的jdk版本不一致导致的。 解决方法 后面我把原先tomcat启动环境用的...

    tomcat启动和关闭

    标题中的“Tomcat启动和关闭”是指在Apache Tomcat服务器中进行服务的启停操作,这是每个Java Web开发者必备的基础技能。Apache Tomcat是一个开源的Servlet容器,它实现了Java Servlet和JavaServer Pages(JSP)规范...

    tomcat启动时定时循环执行内容(action)

    标题中的“tomcat启动时定时循环执行内容(action)”指的是在Tomcat服务器启动过程中,通过配置或者自定义代码实现一个定时任务,使得该任务在Tomcat启动后能够周期性地自动执行。这种机制常用于需要定期检查、更新...

    Linux 部署jenkins war包直接tomcat启动

    6. **等待Jenkins初始化**:当Tomcat启动并加载WAR包后,Jenkins会开始初始化过程。这个过程可能需要几分钟,取决于服务器性能和网络速度。 7. **访问Jenkins**:打开浏览器,输入`...

Global site tag (gtag.js) - Google Analytics