zoukankan      html  css  js  c++  java
  • 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类

    参考文献

    https://tomcat.apache.org/tomcat-8.0-doc/architecture/index.html

  • 相关阅读:
    思念
    空白
    curl json string with variable All In One
    virtual scroll list All In One
    corejs & RegExp error All In One
    socket.io All In One
    vue camelCase vs PascalCase vs kebabcase All In One
    element ui 表单校验,非必填字段校验 All In One
    github 定时任务 UTC 时间不准确 bug All In One
    input range & color picker All In One
  • 原文地址:https://www.cnblogs.com/lovesong/p/8995053.html
Copyright © 2011-2022 走看看