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

Tomcat结构的更多相关文章

  1. tomcat(二)--tomcat结构

    Tomcat结构及组件介绍 上面的层次结构在server.xml中有体现 <Server> <Service> <Connector> <Engine> ...

  2. Tomcat结构、启动过程、关键组件简单分析

                            Tomcat   结构:   Tomcat最顶层容器叫Server,代表整个服务器,Server中包含至少一个Service,用于具体提供服务,Serv ...

  3. Tomcat结构(转)

    资料:http://wenku.baidu.com/view/20720e78a26925c52cc5bfd6.html Tomcat系统架构 http://wenku.baidu.com/view/ ...

  4. tomcat#结构

    下面是一个tomcat的配置文件,通过分析tomcat配置文件的结构,和相关注释,可以大致了解tomcat的结构 <?xml version="1.0" encoding=& ...

  5. Tomcat【介绍Tomcat、结构目录、虚拟目录、临时域名、虚拟主机、体系结构】

    什么是Tomcat Tomcat简单的说就是一个运行JAVA的网络服务器,底层是Socket的一个程序,它也是JSP和Serlvet的一个容器. 为什么我们需要用到Tomcat 如果你学过html,c ...

  6. 浅入tomcat

    前言:学习笔记,以供参考 1.什么是服务器 所谓的服务器其实就是一段别人写好的程序,服务器有两个能力. a.可以帮助我们来管理资源. b.可以将资源向外界发布以便于外界来访问这个资源. 2.资源有哪些 ...

  7. Eclipse导入Tomcat源码(转)

    想要研究下Tomcat的体系结构或者源码,最好将Tomcat的源码导入到ide中,编写实例进行代码跟踪(debug). 这里参考了网上一些资料,将自己操作过程记个流水账. 准备: 1.Tomcat源码 ...

  8. Tomcat源码导入Eclipse测试

    想要研究下Tomcat的体系结构或者源码,最好将Tomcat的源码导入到ide中,编写实例进行代码跟踪(debug). 这里参考了网上一些资料,将自己操作过程记个流水账. 准备: 1.Tomcat源码 ...

  9. Tomcat 原理篇

    TOMCAT 原理篇一.Tomcat 组成(Tomcat 由以下组件组成) 1.server a) Server是一个Catalina Servlet容器: b) Server 可以包含一个或多个se ...

随机推荐

  1. python中的模块和包

    模块 一 什么是模块 模块就是一组功能的集合体,可以通过导入模块来复用模块的功能. 比如我在同一个文件夹定义两个.py文件,分别命名为A.py和B.py,那么可以通过在A文件里通过import B来使 ...

  2. Apollo 10 — adminService 全量发布

    目录 UI 界面 Portal 服务 admin 服务 总结 1. UI 界面 2. Portal 服务 当我们点击上面的发布按钮的时候,调用的当然是 portal 的接口.具体代码如下: /** * ...

  3. [Redux] redux的概述

    redux 的概述 随着 javascript 单页应用的不断发展,javascript 需要管理比以往都要多的状态,管理不断变化的 state 非常困难,数据流动不断变的模糊不可预测,代码的开发与维 ...

  4. 杭电ACM2002--计算球体积

    计算球体积 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submi ...

  5. Git Extensions 和 Tortoisegit 到底是什么?Git For VS(Git For Visual Studio)(Visual Studio 中使用 Git)

    前言: 我们使用 Git 作为版本控制的朋友们,一定都熟悉 Git Extensions 和 Tortoisegit 两款工具,但是对于初学者,可能就不那么了解了. 当然如果有幸,你接触过 SVN , ...

  6. MySQL分页查询性能优化

    当需要从数据库查询的表有上万条记录的时候,一次性查询所有结果会变得很慢,特别是随着数据量的增加特别明显,这时需要使用分页查询.对于数据库分页查询,也有很多种方法和优化的点.下面简单说一下我知道的一些方 ...

  7. C#中saveFileDialog(另存为)保存图片文件

    弹出另存为提示框保存图片文件: //用户自由选择指定路径保存文件            SaveFileDialog savedialog = new SaveFileDialog();        ...

  8. python学习笔记(二)、字符串操作

    该一系列python学习笔记都是根据<Python基础教程(第3版)>内容所记录整理的 1.字符串基本操作 所有标准序列操作(索引.切片.乘法.成员资格检查.长度.最小值和最大值)都适用于 ...

  9. 发生服务器错误: Error loading MySQLdb module: libmysqlclient.so.18: cannot open shared object file: No such file or directory

    在hue上配置Mysql的时候,出现的错误:  发生服务器错误: Error loading MySQLdb module: libmysqlclient.so.18: cannot open sha ...

  10. ReactDom

    今天工作中使用了这个,感觉很好用啊! 首先: 这个ReactDom是干嘛用的? 答:   react-dom 包提供了 DOM 特定的方法,可以在你的应用程序的顶层使用,如果你需要的话,也可以作为 R ...