Tomcat结构与启动顺序

发布时间:2018-05-13作者:laosun阅读(2745)

Tomcat结构与启动顺序

Tomcat 的安装基数已经连续两年超过排行榜的 50%。占到总份额的 58.22% 无疑使其成为赢家。免费、开源、跨平台的Tomcat无疑是我们开始学习Java EE的第一个服务器,会用对于日常开发完全够用了,但是还是要学一下Tomcat相关的原理和设计思想等,对于以后相关的扩展和优化有着重要的作用。下边是学习Tomcat,翻看Tomcat源码的一些总结和感悟,作为笔记查看。

    Tomcat结构

    Tomcat结构与启动顺序

    Server(服务器)

    服务器代表整个Tomcat容器。 Tomcat提供了服务器接口的默认实现(很少由用户定制)。

    Service(服务)

    服务是位于服务器内部的中间组件,将一个或多个连接器(Connector)绑定到一个引擎(Engine)。默认实现很简单且足够,很少由用户自定义。

    Connector(连接器)

    连接器处理与客户端的通信。 Tomcat有多个可用的连接器,例如HTTP连接器、AJP连接器。

    HTTP连接器:负责与客户端建立HTTP连接。

    AJP连接器:负责与其他web服务器建立连接。

    PS :AJP是定向包协议。因为性能原因,使用二进制格式来传输可读性文本。

    Container(容器)

    Container容器由四个子容器组件构成,分别是:Engine、Host、Context、Cluster。

    Engine(引擎)

    引擎是特定服务的请求处理管道。服务可能有多个连接器,引擎会接收并处理这些连接器的所有请求,并将响应传递给适当的连接器。引擎接口可以定制实现,但并不常见。

    PS:引擎可以通过设置jvmRoute参数用于Tomcat服务器集群。

    Host(主机)

    Host是Tomcat服务器里网络名称的关联。引擎可能包含多个Host,Host元素也支持网络别名。

    Context(上下文)

    一个Context代表一个web应用程序。一个Host可能包含多个Context,每个Context都有唯一的路径。

    Cluster(集群)

    Tomcat集群实现提供会话复制,上下文属性复制和WAR文件的集群部署。

    server.xml例子

    <Service name="Catalina">
      <Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
      <Connector port="8009" protocol="AJP/1.3" redirectPort="8443"/>
      <Engine defaultHost="localhost" name="Catalina">
      <!-- <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/> -->
      <Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true">
        <Context docBase="test" path="/test" reloadable="true" source="org.eclipse.jst.jee.server:test"/></Host>
      </Engine>
    </Service>

    服务器启动

    启动方式

    1、命令行启动。

    2、作为Java程序的嵌入式服务器。

    3、Windows服务自动启动。

    Tomcat启动顺序

    从命令行启动

    类:org.apache.catalina.startup.Bootstrap

    1、设置类加载器

    2、加载启动类(反射)

    3、Bootstrap.daemon.init()完成

    处理命令行参数(开始,停止)

    1、Catalina.setAwait(true);

    2、Catalina.load();

    initDirs -> initNaming -> createStartDigester -> server.xml加载 -> System.out和System.err分配给SystemLogHandler类 -> 初始化所有组件

    3、Catalina.start();

    启动NamingContext -> 启动服务 -> StandardHost

    4、通过HTTP端口接收请求

    5、调用servlet类


1 +1

版权声明

 Java  tomcat

 请文明留言

2 条评论