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

  • 相关阅读:
    [转]oracle in 多个字段
    [转][MVC4]ASP.NET MVC4+EF5(Lambda/Linq)读取数据
    SQL Server “复制”表结构,创建_Log表及触发器
    [转]WordPress主题开发:主题初始化
    struts2请求过程源码分析
    java调优
    websocket之四:WebSocket 的鉴权授权方案
    高可用性及容灾的几个衡量指标
    Struts2返回JSON对象的方法总结
    java websocket @ServerEndpoint注解说明
  • 原文地址:https://www.cnblogs.com/lovesong/p/8995053.html
Copyright © 2011-2022 走看看