zoukankan      html  css  js  c++  java
  • 【Tomcat8源码学习之二】Tomcat整体架构

    一、整体架构

    Tomcat主要有两个组件:连接器Connector和容器Container。Tomcat为了实现统一管理连接器和容器等各种组件,额外添加了服务器组件(server)和服务组件(service),一个server可以有多个service,一个service包含多个连接器和一个容器。

    1、服务器组件-Server
    (1)/tomcat8.5/conf/server.xml
    server.xml体现了上图的整体架构,Server作为顶层元素包括整个配置。
    包含一堆监听器,用于在Tomcat整个生命周期中对不同事件进行处理;提供了Tomcat容器全局的命名资源实现;监听某个端口以接收SHUTDOWN命令;多个Service。
    参考:

    Tomcat Server中的监听器

    tomcat中server.xml配置详解

    (2)org.apache.catalina.Server接口和org.apache.catalina.core.StandardServer实现
    StandardServer作为Server的唯一实现,主要方法如下:
    Server接口继承于Lifecycle接口,具有Lifecycle接口的全部特性。
    getPort/setPort,getPortOffset,setPortOffset设置TOMCAT停止的监听端口,setPort用于设置基本的端口,setPortOffset设置增量的端口,例如:port设置为8005,portoffset为1000,则实际的端口为:8005+1000=9005,在集群环境中,可以通过portoffset属性区分不同的实例。getPortWithOffset方法可以获得计算后的端口。
    如果端口被设置为:-2,则不开启监听,TOMCAT不会自己停止
    如果端口设置为-1,则,通过线程sleep等待停止命令
    否则通过监听端口,等待停止的命令
    getAddress/setAddress用于设置监听的地址,默认监听localhost。举个例子,默认情况下,通过192.168.1.2的局域网地址无法发送停止命令,TOMCAT不会响应,这是因为访问监听的地址为:localhost,只能通过127.0.0.1,或者localhost进行连接
    getShutdown/setShutdown用于设置停止的命令
    addService/removeService/findService/findServices,用于添加,删除,查询获取service信息

    2、服务组件-Service
    (1)Service是对外提供的服务,name唯一,不能重复。
    <Service name="Catalina">:处理所有直接由Tomcat服务器接收的web客户请求
    <Service name="Apache">:处理所有由Apahce服务器转发过来的Web客户请求

    (2)org.apache.catalina.Service接口的唯一实现类org.apache.catalina.core.StandardService,其中主要方法如下:
    getName/setName获取和设置service的name,server中,service的名字,不能重复
    getContainer/setContainer获取和设置engine容器,每个service只能包含一个engine容器
    getServer/setServer设置service依赖的server容器
    addConnector/removeConnector/findConnectors,添加删除查找connector,connector用于接收和处理请求,是和外部联系的组件
    addExecutor/findExecutors/getExecutor/removeExecutor,executor,是扩展至java标准的
    getMapper,返回mapper信息,mapper用于处理所有的servlet映射信息。

    (3)一个Service包含多个连接器-Connector和一个容器Container(Engine)。

    3、连接器-Connector
    连接器就是一个http请求过来了,连接器负责接收这个请求,然后解析请求协议、请求方法、请求路径、请求头、请求参数等,创建一个 Request 和 Response 对象分别用于和请求端交换数据,然后转发给容器来处理。
    (1)org.apache.catalina.connector.Connector为连接器类。
    (2)org.apache.coyote为对应的请求协议处理包,目前可以处理HTTP/1.1、AJP/1.3、HTTP/2协议。

    4、Servlet容器-Container
    容器即servlet容器,容器有很多层,分别是Engine,Host,Context,Wrapper。最大的容器Engine,代表一个servlet引擎,接下来是Host,代表一个虚拟机,然后是Context,代表一个应用,Wrapper对应一个servlet。从连接器传过来连接后,容器便会顺序经过上面的容器,最后到达特定的servlet。
    涉及的主要组件:
    org.apache.catalina.Container
    org.apache.catalina.Engine接口和org.apache.catalina.core.StandardEngine实现
    org.apache.catalina.Host接口和org.apache.catalina.core.StandardHost实现
    org.apache.catalina.Context接口和org.apache.catalina.core.StandardContext实现
    org.apache.catalina.Wrapper接口和org.apache.catalina.core.StandardWrapper实现

    二、源码包清单

    三、tomcat安装目录

    参考
    tomcat8.5官网手册
    Java架构师必读源码之Tomcat8
    深入理解Tomcat
    Tomcat源码分析
    Tomcat 系统架构与设计模式

    深入理解Tomcat Server和Service

  • 相关阅读:
    领域驱动设计(DomainDriven Design)
    Windows服务相关文档
    Attributes概述
    异步调用WebService方式!
    Msdn 杂志 asp.net ajax 文章汇集
    JavaScript
    常用数组效率比较
    Windows服务
    SOA实战
    Nunit使用方法
  • 原文地址:https://www.cnblogs.com/cac2020/p/12705076.html
Copyright © 2011-2022 走看看