您的位置:首页 > 运维架构 > Tomcat

tomcat的结构 以及处理请求的流程

2015-07-12 11:22 671 查看
1. Tomcat结构

Tomcat是一个基于组件的服务器,它的构成组件都是可配置的,其中最外层的组件是Catalina Servlet容器,其他的组件按照一定的格式要求配置在这个顶层容器中。Tomcat的各个组件是在<TOMCAT_HOME>\conf\server.xml文件中配置的,Tomcat服务器默认情况下对各种组件都有默认的实现,下面通过分析server.xml文件来理解Tomcat的各个组件是如何组织的。server.xml文件的基本组成结构如下。



XML配置文件结构

<Server> 顶层类元素:一个配置文件中只能有一个<Server>元素,可包含多个Service。

<Service> 顶层类元素:本身不是容器,可包含一个Engine,多个Connector。

<Connector/> 连接器类元素:代表通信接口。

<Engine> 容器类元素:为特定的Service组件处理所有客户请求,可包含多个Host。

<Host> 容器类元素:为特定的虚拟主机处理所有客户请求,可包含多个Context。

<Context> 容器类元素:为特定的Web应用处理所有客户请求。

</Context>

</Host>

</Engine>

</Service>

</Server>

1)Service

Service组件是一些Connector组件的集合,它本身不是一个容器,所以在这里不能定义日志等组件。一个Service组件中只能有一个Engine组件,可以包含多个Connector组件。

2)Connector组件

Connector组件表示一个接口,通过这个接口接收客户的请求,然户发送给其他的容器组件,最后再把服务器的响应结果传递给客户。

3) Engine, Host和context

上面介绍的3个组件本身并不能处理客户请求,也不能生成响应。在Tomcat中只有3个组件是可以处理客户请求并生成响应的,这3个组件分别是 Engine、Host和Context组件。这3个组件分别代表了不同的服务范围,通过嵌套关系可以知道3个组件的范围有如下的关系:Engine>Host>Context。

a.Engine组件下可以包含多个Host组件,它为特定的Service组件处理所有客户请求。

b.一个Host组件代表一个虚拟主机,一个虚拟主机中可以包含多个Web应用(Context组件)。

c.Context组件代表一个Web应用。

Tomcat的各个组件关系,可以用下图描述。



2. Tomcat处理一个HTTP请求的过程

假设来自客户的请求为: http://localhost:8080/wsota/wsota_index.jsp
1) 请求被发送到本机端口8080,被在那里侦听的Coyote HTTP/1.1 Connector获得

2) Connector把该请求交给它所在的Service的Engine来处理,并等待来自Engine的回应

3) Engine获得请求localhost/wsota/wsota_index.jsp,匹配它所拥有的所有虚拟主机Host

4) Engine匹配到名为localhost的Host(即使匹配不到也把请求交给该Host处理,因为该Host被定义为该Engine的默认主机)

5) localhost Host获得请求/wsota/wsota_index.jsp,匹配它所拥有的所有Context

6) Host匹配到路径为/wsota的Context(如果匹配不到就把该请求交给路径名为""的Context去处理)

7) path="/wsota"的Context获得请求/wsota_index.jsp,在它的mapping table中寻找对应的servlet

8) Context匹配到URL PATTERN为*.jsp的servlet,对应于JspServlet类

9) 构造HttpServletRequest对象和HttpServletResponse对象,作为参数调用JspServlet的doGet或doPost方法

10)Context把执行完了之后的HttpServletResponse对象返回给Host

11)Host把HttpServletResponse对象返回给Engine

12)Engine把HttpServletResponse对象返回给Connector

13)Connector把HttpServletResponse对象返回给客户browser
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: