Tomcat 简介

Tomcat 服务器是一个开源的轻量级 Web 应用服务器,在中小型系统和并发量小的场合下被普遍使用,是开发和调试 Servlet、JSP 程序的首选。

Tomcat 官网地址:http://tomcat.apache.org/

Tomcat 结构图

Tomcat主要组件:服务器 Server,服务 Service,连接器 Connector、容器 Container。连接器 Connector 和容器 Container是 Tomcat 的核心。

一个 Container 容器和一个或多个 Connector 组合在一起,加上其他一些支持的组件共同组成一个 Service 服务。有了 Service 服务便可以对外提供能力了,但是 Service 服务的生存需要一个环境,这个环境便是 Server。Server 组件为 Service 服务的正常使用提供了生存环境,Server 组件可以同时管理一个或多个 Service 服务。

Tomcat 三大组件

Connector 连接器

一个 Connecter 将在某个指定的端口上侦听客户请求,接收浏览器的发过来的 TCP 连接请求,创建一个 Request 和 Response 对象分别用于和请求端(如:浏览器)交换数据,然后会产生一个线程来处理这个请求,并把产生的 Request 和 Response 对象传给 Engine (Container中的一部分) 进行处理,从 Engine 中获得响应并返回客户。 

Tomcat 中有两个经典的 Connector:

  • HTTP/1.1 Connector 在端口 8080 处侦听来自客户 Browser 的 HTTP 请求;

  • AJP/1.3 Connector 在端口 8009 处侦听其他 Web Server(其他的HTTP服务器)的 Servlet/JSP 请求;

Connector 最重要的功能就是接收客户端连接请求,然后分配线程让 Container 容器来处理这些请求;所以这导致 Connector 是多线程的,并且多线程的处理是 Connector 设计的核心。

Container 容器

Container 是容器的父接口,容器的设计用的是典型的责任链的设计模式,它由四个自容器组件构成,分别是 EngineHostContextWrapper

这四个组件是负责关系,存在包含关系。通常一个 Servlet class 对应一个 Wrapper,如果有多个 Servlet 定义多个 Wrapper,如果有多个 Wrapper 就要定义一个更高的 Container,如:Context。

Context 还可以定义在父容器 Host 中,Host 不是必须的,但是要运行 war 程序,就必须要 Host,因为 war 中必有 web.xml 文件,这个文件的解析就需要 Host 了。如果有多个 Host 就要定义一个顶级容器 Engine 了,而 Engine 没有父容器了,一个 Engine 代表一个完整的 Servlet 引擎。

  • Engine 容器 

Engine 容器比较简单,它只定义了一些基本的关联关系

  • Host 容器 

Host 是 Engine 的子容器,一个 Host 在 Engine 中代表一个虚拟主机,这个虚拟主机的作用就是运行多个应用,它负责安装和展开这些应用,并且标识这个应用以便能够区分它们。它的子容器通常是 Context,它除了关联子容器外,还有就是保存一个主机应该有的信息。

  • Context 容器 

Context 代表 Servlet 的上下文,它具备了 Servlet 运行的基本环境,理论上只要有 Context 就能运行 Servlet 了。简单的 Tomcat 可以没有 Engine 和 Host。Context 最重要的功能就是管理它里面的 Servlet 实例,Servlet 实例在 Context 中是以 Wrapper 出现的,还有一点就是 Context 如何才能找到正确的 Servlet 来执行它呢? Tomcat5 以前是通过一个 Mapper 类来管理的,Tomcat5 以后这个功能被移到了 request 中。

  • Wrapper 容器 

Wrapper 代表一个 Servlet,它负责管理一个 Servlet,包括的 Servlet 的装载、初始化、执行以及资源回收。Wrapper 是最底层的容器,它没有子容器了,所以调用它的 addChild 将会报错。 

Wrapper 的实现类是 StandardWrapper,StandardWrapper 还实现了拥有一个 Servlet 初始化信息的 ServletConfig。因此,可以看出 StandardWrapper 将直接和 Servlet 的各种信息打交道。

其他组件

Tomcat 除了上面的 Connector 和 Container 核心组件外,还提供了其它重要的组件,例如:安全组件 security、logger 日志组件、session、mbeans、naming 等其它组件,这些组件共同为 Connector 和 Container 提供必要的服务。

说说我的看法
全部评论(
没有评论
关于
本网站属于个人的非赢利性网站,转载的文章遵循原作者的版权声明,如果原文没有版权声明,请来信告知:hxstrive@outlook.com
公众号