Tomcat通俗理解

327 阅读3分钟
  1. Tomcat各个模块介绍
  • bin:用来存放和服务相关的脚本,比如启动tomcat、关闭tomcat等

  • conf:存放例如web.xml的配置文件

  • logs:存放tomcat运行所需要的库文件

  • webapps:web项目部署的根目录

  • work:存放jsp编译后的class文件

  1. Tomcat系统结构简介

    (1)server:server可以看作是Tomcat最顶层的构成元素,提供一个接口让其他程序能够访问到server中的service集合,同时也负责维护其包含的service的生命周期。

    (2)service:是server的下一个集合,多个connector和一个container就构成了一个service

    (3)connector:connector的作用是监听客户端请求,并将请求交给与他相连接的container处理,然后将处理的结果返回客户端,connector种类有很多,例如Coyote Http/1.1 Connector 在端口8080处侦听来自客户browser的http请求等

    (4)container:可以看作是容器,像Host、Engine、Context都是继承自container,所以都可以看作是容器 a. Engine

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

    b. Host

    -代表一个Virtual Host,虚拟主机,每个虚拟主机和某个网络域名相匹配
    
    -每一个Host可以部署多个webapp,每个webapp对应一个context
    
    -当Host获得一个请求的时候,将把该请求匹配到某个Context上,然后把该请求交给Context处理
    
    -所有Context无法匹配的情况下,将最终和默认的Context想匹配
    

    c. Context

    -一个Context对应于一个Web App,每个Web App是由一个或者多个servlet组成的
    
    -当一个Web App被初始化的时候,它将用自己的ClassLoader对象载入“部署配置文件web.xml”中定义的每个servlet类
    
    -它首先载入在$CATALINA_HOME/conf/web.xml中部署的servlet类
    
    -然后载入在自己的Web App根目录下的WEB-INF/web.xml中部署的servlet类
    
    -web.xml文件有两部分:servlet类定义和servlet映射定义
    
    -每个被载入的servlet类都有一个名字,且被填入该Context的映射表(mapping table)中,和某种URL PATTERN对应
    
    -当该Context获得请求时,将查询mapping table,找到被请求的servlet,并执行以获得请求回应
    
    -分析一下所有的Context共享的web.xml文件,在其中定义的servlet被所有的Web App载入
    

    (3) 举例说明

    我们将通过一个例子来说明Tomcat处理一个http请求的过程 假设来自客户端的请求为

    http://localhost:8080/test/test_index.jsp

    请求被发送到本机的8080端口你,由那里一直侦听的connector获得。

    connector将请求交个其service所有的container处理

    Engine获得localhost:8080/test/test_index.jsp,匹配其虚拟主机localhost

    Host localhost获得/test/test_index.jsp,匹配其Context为test,

    path为/test的context获得请求/test_index.jsp,并寻找对应的servlet

    Context找到对应的servlet类

    构造req和resp对象,调用servlet的doGet方法或者doPost方法

    最后把执行的resp对象依次返还给Host、Engine、Connector、browser。