美文网首页
Tomcat浅析

Tomcat浅析

作者: 靈08_1024 | 来源:发表于2017-07-20 07:26 被阅读11次

    1、Tomcat的层级结构:
    最顶层是一个Server,一个server中有N+个service,一个service中有N+个Connector和1个Container。

    2、Tomcat的生命周期管理方式:
    Tomcat的Server有org.apache.catalina.startup.Catalina来管理的,也就是说Catalina是整个Tomcat的管理类。它有三个方法:load、start、stop方法。

    • load用来根据server.xml来创建Server并调用Server的init初始化方法进行初始化。
    • start用来启动服务,其内部调用了Server的start方法。
    • stop用来停止服务,其内部调用了Server的stop方法。
      这三个方法是会逐级调用的,比如load调用Server的init方法,Server的init方法会(循环)调用Service的init方法,Service的init方法会调用Connector的init方法和Container的init方法。同理于start和stop。

    3、Tomcat的入口:在org.apache.catalina.startup.Bootstrap中。这个类的作用相当于一个Catalina类的适配器。便于将入口和具体的管理分开。也便于创建多种启动方式。

    4、Tomcat的启动流程:
    //todo
    //Here is a picture to show Tomcat's start-flow。

    5、Lifecycle接口是Tomcat用来统一管理生命周期的。

    6、Container的结构:
    一个Container只包含一个Engine(引擎),一个Engine中包含N+个Host(主机),一个Host中包含N+个Context(应用),一个Context中包含N+个Wrapper,每个Wrapper中封装了以个Servlet。
    //todo
    //Here is a picture to show Container's struction。

    Context和Host的区别: Context代表一个应用,比如webapps下每个目录都是一个应用,其中ROOT放着主应用,其他目录放着子应用,而整个webapps是一个站点。假如www.aaa.com域名对应着webapps目录所代表的站点,其中ROOT目录可以使用域名直接访问:www.aaa.com;而webapps/test对应的是子应用test,访问使用www.aaa.com/test。

    7、Container中4个容器的配置方法:

    <!-- 以下是一段简短的配置,仅用来说明部分容器中的属性意义 -->
    <Engine name="Catalina" defaultHost="localhost">
        <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
          <Alias>xxx.com</Alias>
        </Host>
    </Engine>
    

    Engine中的defaultHost指如果请求的域名在所有应用中找不到时,采用这个域名。
    Host中的name为域名,appBase指该站点对应的应用位置,unpackWARs是是否自动解压WAR包,autoDeploy指是否自动部署。Alias是别名,指xxx.com和localhost具有同等效果。

    Context的配置方法:

    1. 通过文件配置;
    2. 将WAR应用放到Host对应的目录下,Tomcat自动解压;
    3. 将应用的文件夹放到Host目录下,Tomcat会自动查找并添加到Host中。
    Context通过文件配置一共有5个地方可以配置:
     1. conf/server.xml中Context标签;
     2. conf/[enginename]/[hostname]/目录下以应用命名的xml文件。
     3. 应用自己的/META_INF/context.xml文件。
     4. conf/context.xml文件。
     5.  conf/[enginename]/[hostname]/context.xml.default 文件。
    前三个是用于配置单独的应用,后两个配置的Context是共享的,conf/context.xml文件中配置的内容在整个Tomcat中共享,第5种配置在对应的站点(Host)中共享。
    
    

    8、Container的启动:

    • 在start时才校验是否init。
    • Context和Wrapper是动态添加到对应的容器的。

    9、Container是采用Pipeline-Vavle处理模式(责任链模式)来处理请求的。即一个请求会多个处理者来依次进行处理,每个处理者只负责自己的部分,处理完成后返回请求,并递交给下一个处理者。

    • 在每一个上层容器的BaseVavle中会调用下一个容器的处理。

    10、Connector用于接收并将请求按照HTTP协议封装成Request和Response来处理。最底层采用Socket来进行连接。

    请求最先经过Connector,封装成对应HTTPRequest和HTTPResponse,转交给Container,Container处理完之后,把结果交给Connector,Connector使用Socket将结果返回给客户端。

    相关文章

      网友评论

          本文标题:Tomcat浅析

          本文链接:https://www.haomeiwen.com/subject/pvkrkxtx.html