tomcat 容器

Tomcat的组成部分

1、server

A Server element represents the entire Catalina servlet container. (Singleton)

2、service

service包括多个connector以及一个engine,其职责为处理由connector获得的客户请求。

3、connector

一个connector在某个制定的端口上监听来自客户的请求,将得到的请求交给engine进行处理,并从engine处获得响应,进而返回给用户。

connector主要包括两类:

        一是Coyote Http/1.1 Connector   在8080端口侦听来自浏览器的客户http请求;

        二是Coyote JK2 Connector 在8009端口侦听来自其它WebServer的请求;

4、engine

Engine下可以配置多个虚拟主机Virtual Host,每个虚拟主机都有一个域名。当Engine获得一个请求时,根据请求域名将该请求的匹配到响应的Host上,然后把该请求交给该Host来处理。
Engine有一个默认虚拟主机,当请求无法匹配到任何一个Host上的时候,将交给该默认Host来处理。

5、host

代表一个Virtual Host,虚拟主机,每个虚拟主机和某个网络域名Domain Name相匹配。每个虚拟主机下都可以部署一个或者多个Web App,每个Web App对应于一个Context,有一个Context path
当Host获得一个请求时,将把该请求匹配到某个Context上,然后把该请求交给该Context来处理。无法和其它Context的路径名匹配的请求,最终将和该默认Context匹配。而该Host的默认Context为

 Context path=“”。

6、context

一个Context对应于一个Web Application,一个Web Application由一个或者多个Servlet组成。Context在创建的时候将根据配置文件$CATALINA_HOME/conf/web.xml和$WEBAPP_HOME/WEB-INF/web.xml载入Servlet类
当Context获得请求时,将在自己的映射表(mapping table)中寻找相匹配的Servlet类。如果找到,则执行该类,获得请求的回应,并返回。

 7、servlet容器

  • servlet容器接收客户请求解析
  • servlet容器创建servletRequest对象:包含客户请求信息及关于客户的信息如请求头、请求正文、客户机的ip等。
  • servlet容器创建servletResponse对象。
  • 调用客户请求的service方法api,将servletRequest、servletResponse作为参数传递进去;
  • 根据客户参数中的客户请求信息,利用servletResponse对象产生响应的结果
  • servlet容器将结果交给context

Tomcat运行范例

url:http://vt.ct.test.sankuai.info/api/product?contractId=9e506d54-58f1-11e3-8dea-00222822153f

  1. 由sankuai.info 寻址到对应的server;
  2. 该url端口号默认为8080,由service部分的Coyote Http/1.1 Connector侦听到来自客户的请求,并将其交付给service中的engine;
  3. engine根据url对应的host域名vt.ct.test.sankuai.info匹配到对应的host,同时将请求交付给对应的host;
  4. host由context path匹配对应的context,合同系统仅有context path=“”的默认context,则将请求交付给默认context;
  5. 合同系统主要存在一个servlet,将请求交付对应的servlet,由客户申请servlet生成HttpServletRequest对象,HttpServletResponse对象;
  6. 由controller的url/api/product寻址到对应的函数接口,将参数contractId=9e506d54-58f1-11e3-8dea-00222822153f传进去
  7. 将返回通过servletResponse传递给servlet;
  8. Context把执行完了之后的HttpServletResponse对象返回给Host
  9. Host把HttpServletResponse对象返回给Engine
  10. Engine把HttpServletResponse对象返回给Connector
  11. Connector把HttpServletResponse对象返回给客户

相关推荐