Tomcat(一):简介

1、概念

    Tomcat 服务器是一个开源的轻量级Web应用服务器,在中小型系统和并发量小的场合下被广泛使用,是开发和调试Servlet、JSP 程序的首选。
web

2、原理

    Tomcat结构图:
设计模式

                

    Tomcat主要组件:服务器Server,服务Service,链接器Connector、容器Container。链接器Connector和容器Container是Tomcat的核心。
浏览器

    一个Container容器和一个或多个Connector组合在一块儿,加上其余一些支持的组件共同组成一个Service服务,有了Service服务即可以对外提供能力了,可是Service服务的生存须要一个环境,这个环境即是Server,Server组件为Service服务的正常使用提供了生存环境,Server组件能够同时管理一个或多个Service服务。
安全

3、两大组件

一、Connector
服务器

    一个Connecter将在某个指定的端口上侦听客户请求,接收浏览器的发过来的 tcp 链接请求,建立一个 Request 和 Response 对象分别用于和请求端交换数据,而后会产生一个线程来处理这个请求并把产生的 Request 和 Response 对象传给处理Engine(Container中的一部分),从Engine出得到响应并返回客户。 
Tomcat中有两个经典的Connector,一个直接侦听来自Browser的HTTP请求,另一个来自其余的WebServer请求。HTTP/1.1 Connector在端口8080处侦听来自客户Browser的HTTP请求,AJP/1.3 Connector在端口8009处侦听其余Web Server(其余的HTTP服务器)的Servlet/JSP请求。 
Connector 最重要的功能就是接收链接请求而后分配线程让 Container 来处理这个请求,因此这必然是多线程的,多线程的处理是 Connector 设计的核心。
session

二、Container
多线程

                

    Container是容器的父接口,该容器的设计用的是典型的责任链的设计模式,它由四个自容器组件构成,分别是Engine、Host、Context、Wrapper。这四个组件是负责关系,存在包含关系。一般一个Servlet class对应一个Wrapper,若是有多个Servlet定义多个Wrapper,若是有多个Wrapper就要定义一个更高的Container,如Context。 
Context 还能够定义在父容器 Host 中,Host 不是必须的,可是要运行 war 程序,就必需要 Host,由于 war 中必有 web.xml 文件,这个文件的解析就须要 Host 了,若是要有多个 Host 就要定义一个 top 容器 Engine 了。而 Engine 没有父容器了,一个 Engine 表明一个完整的 Servlet 引擎。
并发

  • Engine 容器 
    Engine 容器比较简单,它只定义了一些基本的关联关系
  • Host 容器 
    Host 是 Engine 的子容器,一个 Host 在 Engine 中表明一个虚拟主机,这个虚拟主机的做用就是运行多个应用,它负责安装和展开这些应用,而且标识这个应用以便可以区分它们。它的子容器一般是 Context,它除了关联子容器外,还有就是保存一个主机应该有的信息。
  • Context 容器 
    Context 表明 Servlet 的 Context,它具有了 Servlet 运行的基本环境,理论上只要有 Context 就能运行 Servlet 了。简单的 Tomcat 能够没有 Engine 和 Host。Context 最重要的功能就是管理它里面的 Servlet 实例,Servlet 实例在 Context 中是以 Wrapper 出现的,还有一点就是 Context 如何才能找到正确的 Servlet 来执行它呢? Tomcat5 之前是经过一个 Mapper 类来管理的,Tomcat5 之后这个功能被移到了 request 中,在前面的时序图中就能够发现获取子容器都是经过 request 来分配的。
  • Wrapper 容器 
    Wrapper 表明一个 Servlet,它负责管理一个 Servlet,包括的 Servlet 的装载、初始化、执行以及资源回收。Wrapper 是最底层的容器,它没有子容器了,因此调用它的 addChild 将会报错。 
    Wrapper 的实现类是 StandardWrapper,StandardWrapper 还实现了拥有一个 Servlet 初始化信息的 ServletConfig,由此看出 StandardWrapper 将直接和 Servlet 的各类信息打交道。

三、其余组件app

    Tomcat 还有其它重要的组件,如安全组件 security、logger 日志组件、session、mbeans、naming 等其它组件。这些组件共同为 Connector 和 Container 提供必要的服务。
jsp

4、HTTP请求过程

    

Tomcat Server处理一个HTTP请求的过程

一、用户点击网页内容,请求被发送到本机端口8080,被在那里监听的Coyote HTTP/1.1 Connector得到。 
二、Connector把该请求交给它所在的Service的Engine来处理,并等待Engine的回应。 
三、Engine得到请求localhost/test/index.jsp,匹配全部的虚拟主机Host。 
四、Engine匹配到名为localhost的Host(即便匹配不到也把请求交给该Host处理,由于该Host被定义为该Engine的默认主机),名为localhost的Host得到请求/test/index.jsp,匹配它所拥有的全部的Context。Host匹配到路径为/test的Context(若是匹配不到就把该请求交给路径名为“ ”的Context去处理)。 
五、path=“/test”的Context得到请求/index.jsp,在它的mapping table中寻找出对应的Servlet。Context匹配到URL PATTERN为*.jsp的Servlet,对应于JspServlet类。 
六、构造HttpServletRequest对象和HttpServletResponse对象,做为参数调用JspServlet的doGet()或doPost().执行业务逻辑、数据存储等程序。 
七、Context把执行完以后的HttpServletResponse对象返回给Host。 
八、Host把HttpServletResponse对象返回给Engine。 
九、Engine把HttpServletResponse对象返回Connector。 十、Connector把HttpServletResponse对象返回给客户Browser。