色魔王子7 发表于 2017-1-15 10:45:35

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

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