Tomcat Server 的组成部分
1. Server
A Server element represents the entire Catalina servlet container. (Singleton)
Server 是整个 Catalina 容器的入口点,它是由 Server 接口实现,通过 ServerFactory 生成 Server 实例类。 Server 操作:
- 读取资源
- 初始化
- 启动
- 服务阶段
- 关闭
2. Service
A Service element represents the combination of one or more Connector components that share a single Engine
Service 是一个集合:它由一个或多个 Connector 组成,以及一个 Engine,负责处理所有 Connector 所获得的客户请求。 Server 可以包含一个或多个 Service 实例,但他们相互之间是完全独立的,仅共享 JVM 资源。通常默认使用 Tomcat Standalone 模式下的 Service,这种方式下的 Service 提供解析 JSP 和 Servlet 的服务。Service 有 Service 接口实现,实现类为 StandardService。 Service 操作:
- 启动并初始化
- 停止
3. Connector
一个 Connector 将在某个指定端口上侦听客户请求,并将获得的请求交给 Engine 来处理,从 Engine 处获得回应并返回客户。 Tomcat 有两个典型的 Connector,一个直接侦听来自 browser 的 HTTP 请求,一个侦听来自其它 WebServer 的请求。 Coyote HTTP/1.1 Connector 在端口 8080 处侦听来自客户 browser 的 HTTP 请求。 Coyote JK2 Connector 在端口 8009 处侦听来自其它 WebServer (Apache) 的 servlet/jsp 代理请求。 Tomcat 都是在容器里处理问题,而容器又到哪里取得输入信息呢?这里就要用到 Connector,它会把从 Socket 传递过来的数据封装成 Request,传递给容器处理。通常我们用到两种 Connector,一个是 HTTP Connector 用来传递 HTTP 请求,一个是 AJP Connector。 Connector 是由 Connector 类实现。 Connector 操作:
- 构造加载协议
- 启动
- 请求
- 响应
- 关闭
4. Engine
The Engine element represents the entire request processing machinery associated with a particular Service. It receives and processes all requests from one or more Connectors and returns the completed response to the Connector for ultimate transmission back to the client
Engine 下可以配置多个虚拟主机 VirtualHost,每个虚拟主机都有一个域名。 当 Engine 获得一个请求时,它把该请求匹配到某个 Host 上,然后把该请求交给该 Host 来处理。 Engine 有一个默认虚拟主机,当请求无法匹配到任何一个 Host 上的时候,将交给该默认 Host 来处理。 当 HTTP Connector 把请求传递给顶级容器 Engine 时,我们的视线就移动到 Container 这个层面来了,Container 包含 3 个容器:Engine、Host 和 Context。Engine 收到 Connector 传递来的请求后,经过处理后将结果返回给 Service(Service 是通过 Connector 这个媒介来和 Engine 互动的),Engine 是由 StandardEngine 类实现。 Engine 操作:
- 构造,创建过滤网
- 启动,初始化
- 关闭
5. Host
代表一个 Virtual Host,虚拟主机,每个虚拟主机和某个网络域名 Domain Name 相匹配。 每个虚拟主机下都可以部署 (deploy) 一个或者多个 Web App,每个 Web App 对应于一个 Context,有一个 ContextPath。 当 Host 获得一个请求时,将把该请求匹配到某个 Context 上,然后把该请求交给该 Context 来处理。 匹配的方法是'最长匹配',所以一个 path==""的 Context 将成为该 Host 的默认 Context。 所有无法和其它 Context 的路径名匹配的请求都将最终和该默认 Context 匹配。 Engine 收到 Connector 传递过来的请求后,不会自己处理,而是交给合适的 Host 来处理,Host 在这里就是虚拟主机的意思,通常我们只会用到"localhost",即本地主机来处理,Host 是由 StandardHost 类实现。 Host 操作:


