Tomcat
<h2>Tomcat组件</h2>
<p><img src="https://s1.ax1x.com/2020/03/24/8qkcy4.png" alt="Tomcat组件" />
Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,是一个小型的轻量级应用服务器。</p>
<ul>
<li>Server:表示一个Tomcat实例 (单例的);包含一个或多个service子容器。主要是用来管理容器下各个Serivce组件的生命周期。</li>
<li>Service:代表Tomcat中一组提供服务、处理请求的组件。是一个分组结构,包括多个Connector和一个Engine。</li>
<li>Connector是客户端连接到Tomcat容器的服务点,它为引擎提供协议服务来将引擎与客户端各种协议隔离开来,要监听的IP地址及端口号,以及所支持的协议。还有一个关键属性就是并发处理传入请求的最大线程数。</li>
<li>Engine 引擎:表示可运行的Catalina的servlet引擎实例,并且包含了servlet容器的核心功能。它主要功能是将传入请求委托给适当的虚拟主机处理。</li>
<li>Host 虚拟主机:作用就是运行多个应用,它负责安装和展开这些应用,并且标识这个应用以便能够区分它们。</li>
<li>Context上下文:代表 Servlet 的 Context,它具备了 Servlet 运行的基本环境,它表示Web应用程序本身。</li>
</ul>
<h2>Tomcat处理请求过程</h2>
<p>假设来自客户的请求为:<a href="http://localhost:8080/wsota/wsota_index.jsp">http://localhost:8080/wsota/wsota_index.jsp</a></p>
<ol>
<li>请求被发送到本机端口8080,被在那里侦听的Coyote HTTP/1.1 Connector获得</li>
<li>Connector把该请求交给它所在的Service的Engine来处理,并等待来自Engine的回应</li>
<li>Engine获得请求localhost/wsota/wsota_index.jsp,匹配它所拥有的所有虚拟主机Host</li>
<li>Engine匹配到名为localhost的Host(即使匹配不到也把请求交给该Host处理,因为该Host被定义为该Engine的默认主机)</li>
<li>localhost Host获得请求/wsota/wsota_index.jsp,匹配它所拥有的所有Context</li>
<li>Host匹配到路径为/wsota的Context(如果匹配不到就把该请求交给路径名为”"的Context去处理)</li>
<li>path=”/wsota”的Context获得请求/wsota_index.jsp,在它的mapping table中寻找对应的servlet</li>
<li>Context匹配到URL PATTERN为*.jsp的servlet,对应于JspServlet类</li>
<li>构造HttpServletRequest对象和HttpServletResponse对象,作为参数调用JspServlet的doGet或doPost方法</li>
<li>Context把执行完了之后的HttpServletResponse对象返回给Host</li>
<li>Host把HttpServletResponse对象返回给Engine</li>
<li>Engine把HttpServletResponse对象返回给Connector</li>
<li>Connector把HttpServletResponse对象返回给客户browser</li>
</ol>