现在的位置: 首页 > 综合 > 正文

Tomcat6整体结构

2014年11月18日 ⁄ 综合 ⁄ 共 1907字 ⁄ 字号 评论关闭

1 Server
Tomcat server实例,需提供接口让其它程序能够访问到其中 Service 集合,同时要维护它所包含的所有 Service 的生命周期,包括如何初始化、如何结束服务、如何找到别人要访问的 Service。

Service
Service 只是在 Connector 和 Container 外面多包一层,把它们组合在一起,向外面提供服务,同时通过lifecycle接口管理下属组件(Connector和Engine)的生命周期。一个 Service 可以设置多个 Connector,但是只能有一个 Container(可以是Engine、Host或者Context、Wrapper)。

3 Connector
Connector 组件是 Tomcat两个核心组件之一,它的主要任务是负责接收浏览器的发过来的 tcp 连接请求,创建一个 Request 和 Response 对象分别用于和请求端交换数据,然后会产生一个线程来处理这个请求并把产生的 Request 和 Response 对象传给处理这个请求的线程,处理这个请求的线程就是 Container 组件要做的事了。

4 Container
Container是容器的父接口,所有子容器都必须实现这个接口,Container还有一个抽象实现类ContainerBase,Engine、Host、Context、Wrapper的默认实现都继承了这个类。
Container 容器的设计用的是典型的责任链的设计模式,它有四个子容器组件构成,分别是:Engine、Host、Context、Wrapper,这四个组件是父子关系,Engine 包含 Host,Host 包含 Context,Context 包含 Wrapper。
通常一个 Servlet class 对应一个 Wrapper,如果有多个 Servlet 就可以定义多个 Wrapper,如果有多个 Wrapper 就要定义一个更高的 Container 了,如Context。Context 还可以定义在父容器 Host 中,Host 不是必须的,但是要运行 war 程序,就必须要 Host,因为 war 中必有 web.xml 文件,这个文件的解析就需要 Host 。如果要有多个 Host 就要定义一个 top 容器 Engine 。而 Engine 没有父容器了,一个
Engine 代表一个完整的 Servlet 引擎。总之保证一个Service只有一个top container(这个top container里面可以有多个子container)。

5 Engine
比较简单的一个容器,主要分负责管理子容器的周期。

6 Host
Host 是 Engine 的子容器,一个 Host 在 Engine 中代表一个虚拟主机,这个虚拟主机的作用就是运行多个应用,它负责安装和展开这些应用,并且标识这个应用以便能够区分它们。它的子容器通常是 Context,它除了关联子容器外,还有就是保存一个主机应该有的信息。
关于Host中name属性和Engine中defaultHost的作用: 如果有个host的name = localhost,那么Tomcat会将此host设置为默认访问的Host。即:如果出现下图中的情况,则client最终会去访问name=localhost的host,而不是defaultHost值定义的host(即不会去访问192.168.0.102)

Context
Context 代表 Servlet 的 Context,它具备了 Servlet 运行的基本环境,理论上只要有 Context 就能运行 Servlet 了。简单的 Tomcat 可以没有 Engine 和 Host。Context 最重要的功能就是管理它里面的
Servlet 实例,Servlet 实例在 Context 中是以 Wrapper 出现的。

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

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

StandardWrapperFacade:Wrapper的一个重要属性,对Wrapper做了一次封装,和 Wrapper一样实现了ServletConfig。

Wrapper中的重要方法:loadServlet(),该方法包含对servlet的基本操作,包括调用init()和service()方法。

 

抱歉!评论已关闭.