# Lintc **Repository Path**: liuxingtian/Lintc ## Basic Information - **Project Name**: Lintc - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-04-02 - **Last Updated**: 2021-12-27 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 作业 ## 作业一 地址: ## 作业二 Tomcat是一个servlet容器,实现了对Servlet和JSP的支持,除此之外,tomcat还可以作为一个web应用服务器。Tomcat 核心组件包括:连接器组件(Coyote)和 容器组件(Catalina)。 **Coyote:** Coyote是tomcat连接功能对外接口,用于接收、响应http请求,包括: 组件|描述| -|-| EndPonit|EndPoint是Coyote的通信端点,具体接收和处理Socket,是传输层的抽象,用于实现TCP/IP协议| Processor|Processor是Coyote协议处理接口,用于实现http协议,接收Endpoint的Socket,读取字节流,解析成Request、Response对象,通过Adapter提交给容器| ProtocolHandler|通过Endpoint和Processor实现对具体协议的处理能力,Tomcat按照协议和I/O提供了6个实现:AjpNioProtocol、AjpAprProtocol、AjpNio2Protocol、Http11NioProtocol、Http11Nio2Protocol、Http11AprProtocol| Adapter|由于协议不同,客户端发送的信息也不一样,Tomcat定义了自己的Request来封装这些信息,ProtocolHandler接口负责解析请求并生成Tomcat Request对象,但是Tomcat 的Request对象不是Servlet Request对象,不能直接发送给Servlet容器,此时需要CoyoteAdapter将tomcat request转换为ServletRequest| 流程如下: ![1.Coyote内部流程.png](images/1.Coyote内部流程.png) **Catalina:** Tomcat是一个由一系列可配置组件构成的Web容器(在conf/server.xml中配置),本质就是一个servlet容器。Catalina是servlet容器的具体实现,和具体业务类打交道,是tomcat的核心,其它模块都是为Catalina提供支撑的。 ![3.Catalina.png](images/3.Catalina.png) Tomcat 启动时加载 server.xml创建Catalina实例,Catalina创建并管理一个server,一个server又有多个service,一个service又有多个Connector和一个Container。其中: Catalina 负责解析Tomcat配置文件(server.xml),以此创建服务器server组件并进行管理; - Server 服务器:标示整个Catalina容器以及其它组件,负责启动并组装Servlet引擎、Tomcat连接器,Server通过实现Liftcyle接口,提供了一种优雅地启动和关闭系统的方式; - Service服务:Server内部组件,它将若干个Connector绑定到了一个Container; Container容器:负责处理Servlet请求,并且返回对象给用户模块; Container下有几种具体的组件,分别是Engine、Host、Context、Wrapper,这四种组件是父子关系,Tomcat通过分层,使得Servlet容器具有更好的灵活性,四种组件作用如下: - Engine:表示Catalina的Servlet引擎,用来管理多个虚拟站点,一个Server最多只能一个Engine,但是可以有多个Host; - Host:虚拟主机或者站点,可以给Tomcat配置多个虚拟地址,而一个虚拟主机可以包含多个Context; - Context:表示一个web应用,一个Web应用包含多个Wrapper; - Wrapper:表示一个Servlet,Wrapper作为容器最底层,不能包含子容器;