使用Tomcat时一次Http访问的过程

    首先我们得看看Tomcat的基本元素,各个版本中相似但不同,在Tomcat中的server.xml中描述了以下的元素:


@ server:顶层元素,代表整个Catalina Servlet容器,可以包含一个或者是多个Service;

@ Service:连接器元素,它由一个或者多个Connector和一个Engine组成,负责处理所有的Connector所获得的客户请求。这些    Connector共享一个Engine。

@Connector: 一个Connector将在某个指定端口上侦听客户请求,并且将获得的请求交给Engine来处理,再从Engine上或的回        应然后返回给客户端。

@Engine: 容器类元素,可以包含多个Virtual Host元素,每个虚拟主机都有一个域名,当Engine获得一个Connector发出的    HTTP请求时,它吧请求匹配到某个Host上,然后把该请求交给该Host来处理,Engine有一个默认的虚拟主机    Localhost。当请求无法匹配到任何一个Host来处理,将交给默认的Host来处理。

@Host: 定义一个虚拟主机,每个虚拟主机都和某个DNS相匹配,每个虚拟主机下都可以部署多个web应用程序。当Host获得一 个请求时,将该请求匹配到某个Context上,然后将该请求交给该Context处理。所有无法与Context匹配的都与path=“”的默认Context匹配。

@Context: Context代表一个虚拟主机上运行的一个应用,一个Context对应一个web应用程序,一个Context包含多Servlet。


下面我们来看一下Tomcat Server的关系图:


使用Tomcat时一次Http访问的过程_第1张图片


下面我们来看一下一个请求的过程:(假设请求为:http://localhost:8080/test/index.jsp)


 1. 请求被发送到本机端口8080,被在哪里侦听的HTTP Connector获得;

 2. Connector把请求交给他所在的Service的Engine来处理,等待来自Engine的回应;

 3.Engine获得请求localhost:8080/test/index.jsp并且匹配她所拥有的虚拟主机Host;

 4.Engine匹配到Localhost主机,如果匹配不到的话,就匹配默认主机;

 5.Host匹配到路径为“/test”的Context,如果匹配不到就交给默认的Context处理;

 6.path = “/test”的Context获得请求/index.jsp,在他的mapping table中寻找对应的Servlet

 7.Context匹配到URL为*.jsp的Servlet,对应于JspSevlet类;

 8.HttpServletRequest对象和HttpServletResponse对象作为参数调用JspSevlet中的doPost和doGet方法;

 9.Context将执行完的HttpServletResponse对象返回给Host;

 10.Host将执行完的HttpServletResponse对象返回给Engine;

 11.Engine将执行完的HttpServletResponse对象返回给Connector;

 12.Connector将执行完的HttpServletResponse对象返回给客户端;


你可能感兴趣的:(java,网络)