2. TOMCAT学习——TOMCAT的启动过程

  • TOMCAT的启动过程

    Tomcat的启动入口是 Bootstrap 类的main方法Bootstrap 会初始化一些基础环境,比如设置环境变量和默认类加载器。然后调用 Catalina 的方法来加载和启动Tomcat。
    启动过程总体分为两个步骤:

    load();
    start();
    
  1. load

    load方法会根据配置文件加载整个TOMCAT,将TOMCAT的所有组件按照设计好的结构装配起来。整个load的过程中最重要的地方在Catalina 中。Catalina 的load方法会去解析 Server.xml 文件并且加载文件中包含的组件。

    <!--这里剔除了一些无关的组件内容-->
    <Server port="8005" shutdown="SHUTDOWN">
      <Listener className="org.apache.catalina.core.AprLifecycleListener" 
                SSLEngine="on" />
      <Service name="Catalina">
        <Connector port="8080" protocol="HTTP/1.1" redirectPort="8443" />
        <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
        <Engine name="Catalina" defaultHost="localhost">
          <Host name="localhost"  appBase="webapps"
                unpackWARs="true" autoDeploy="true"
                xmlValidation="false" xmlNamespaceAware="false">
            <Context path="/test" docBase="test"/>
          </Host>
        </Engine>
      </Service>
    </Server>
    

    以上述文件为例。
    TOMCAT解析 Server.xml 的时序图如下
    在这里插入图片描述

     1.  Catalina调用自己的parse方法开始解析Server.xml
     2.  读取到Server标签,实例化Server,将Server关联到Catalina。
     3.  读到Listener标签,将Listener关联到Server。
     4.  读到Service标签,将Service关联到Server。
     5.  读到Connector标签,将Connector关联到Service。
     6.  读到Engine标签,将Engine关联到Service。
     7.  读到Host标签,将HOST关联到Engine。
     8.  读到Context标签,将Context关联到Host。
     实际上整个load的过程就是从外到内,一步步实例化,并将子容器关联到父容器的过程。
    
  2. start

    start方法会一层层的启动TOMCAT,直至整个TOMCAT启动完成或者遇到异常启动失败。

    1. Catalina调用Server的启动方法。
    2. Server遍历自己的Service列表,启动所有的Service。
    3. Service启动Connector列表中所有的Connector。
    4. Service启动默认容器Engine。
    5. Engine启动所有的直接子容器Host。
    6. Host部署并启动所有的Context。
    7. Context解析并启动所有的Wrapper。

    这里比较重要的两个点:

     1. Host的start方法中会部署所有的Context。(在之前的文章中说过,context容器对应的是servlet应用)
     2. Context的start方法中会解析web应用中的web.xml并初始化Wrapper。(Wrapper对应的是具体的servlet)
    

  • TOMCAT启动时序图
    在这里插入图片描述

    这个时序图对应了上面所有的内容(parse方法就是解析Server.xml的过程)。

    这里省略了一些细节的部分,从宏观上描述了TOMCAT启动的大体流程。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Tomcat作为一种常用的Java Web服务器,在使用过程中可能会出现各种异常。下面是一些常见的Tomcat异常及其解决方法。 1. java.lang.OutOfMemoryError 这是由于JVM内存不足导致的错误。解决方法如下: - 增加JVM内存:可以通过修改Tomcat启动脚本中的JAVA_OPTS参数,增加-Xmx和-Xms参数来增加JVM内存。 - 优化代码:尽量避免创建过多的对象、避免使用大量的静态变量等。 2. java.net.BindException: Address already in use: JVM_Bind 这是由于端口被占用导致的错误。解决方法如下: - 查看占用该端口的进程:使用命令netstat -ano | grep 端口号,查看该端口号被哪个进程占用。 - 杀死占用该端口的进程:使用命令kill -9 进程号,杀死该进程。 3. java.lang.ClassNotFoundException 这是由于类文件缺失导致的错误。解决方法如下: - 检查类路径:检查类文件是否在类路径下,如果不在则加入类路径。 - 检查类命名:检查类文件是否命名正确。 4. java.lang.IllegalArgumentException: Invalid character found in the request target 这是由于请求URL中包含无效字符导致的错误。解决方法如下: - 检查URL中的无效字符:检查URL中是否存在特殊字符或空格等无效字符,如果存在则进行替换或删除。 - 使用URL编码:对URL进行编码,将无效字符替换为特定的编码表示。 5. java.lang.NullPointerException 这是由于空指针引用导致的错误。解决方法如下: - 检查代码逻辑:检查代码中是否存在空指针引用,如果存在则进行修复。 - 使用断言:在代码中使用断言进行判断,避免出现空指针引用。 以上是一些常见的Tomcat异常及其解决方法,希望能对大家有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值