tomcat

什么是tomcat

是apache的一款开源软件,实现了servlet、webSocket等规范的一个web服务器(tomcat容器)

tomcat的目录结构

  1. bin 存放bat和sh脚本信息。
  2. conf :存放配置文件信息
  3. lib: 存放jar包信息
  4. logs:存放日志信息
  5. temp:存放jvm运行的时候产生的临时文件
  6. webapps:存放web项目
  7. work:存放jsp编译生成servlet文件

    catalina.home和catalina.base

    想运行多个实例但是只想解压一个tomcat.

catalina.home指向公用信息的位置,就是bin和lib的父目录。
catalina.base指向每个Tomcat目录私有信息的位置,就是conf、logs、temp、webapps和work的父目录。

tomcat的server.xml的基本结构

  1. server:控制整个tomcat的关闭和启动
  2. services:服务是一个或者多个连接器的组成
    1. connector:使用javaNio来处理连接的连接器
    2. engine:引擎管理多个host
      1. host:主机管理多个context或者说项目,
        1. context:多项目下的多个servlet进行管理

image.png

tomcat 下的web.xml

所有的web应用的默认值都取决于conf/web.xml,自己配置的web-inf下的web.xml相当于子类,可以重写。

tomcat 下的context.xml

这个文件下的内容将会被每一个应用共享。
监听资源,监听了这两个web.xml,改动了之后立马重新加载应用

  1. <Context>
  2. <!-- Default set of monitored resources. If one of these changes, the -->
  3. <!-- web application will be reloaded. -->
  4. <WatchedResource>WEB-INF/web.xml</WatchedResource>
  5. <WatchedResource>${catalina.base}/conf/web.xml</WatchedResource>
  6. <!-- Uncomment this to disable session persistence across Tomcat restarts -->
  7. <!--
  8. <Manager pathname="" />
  9. -->
  10. </Context>

tomcat的架构

image.png

  1. 浏览器访问负载均衡服务器(http/https)
  2. 负载均衡服务器访问tomcat服务器(http/https/AJP)
  3. tomcat容器
    1. server组件,服务器,里面有listener,可以JNDI(Java Naming and Directory Interface)接口访问共享resource
      1. services组件,服务,里面存在connector连接器,
        1. connector连接器组件。使用javaNio和线程池获取连接。
        2. engine 引擎,包含主机组件
          1. host
            1. context 一个context可以配置一个应用,有独立的loader,以及session管理其manager
              1. 到这里就是我们最熟悉的应用了,里面有常用的filter和servlet等组件。可以拦截请求处理请求等。

需要学习的组件总结如下

  1. server
  2. services
  3. connector
  4. engine
  5. host
  6. context
  7. manager
  8. listener
  9. pipoline
  10. valve
  11. filter
  12. servlet

tomcat的层级结构概述

树形结构,结构中的父节点管理子节点的生命周期

tomcat的生命周期管理

方法:init、start、stop、destory四个生命周期方法,和下面12种状态。

  1. //新建
  2. NEW(false, null),
  3. //初始化中后
  4. INITIALIZING(false, Lifecycle.BEFORE_INIT_EVENT),
  5. INITIALIZED(false, Lifecycle.AFTER_INIT_EVENT),
  6. //启动前中后
  7. STARTING_PREP(false, Lifecycle.BEFORE_START_EVENT),
  8. STARTING(true, Lifecycle.START_EVENT),
  9. STARTED(true, Lifecycle.AFTER_START_EVENT),
  10. //结束前中后
  11. STOPPING_PREP(true, Lifecycle.BEFORE_STOP_EVENT),
  12. STOPPING(false, Lifecycle.STOP_EVENT),
  13. STOPPED(false, Lifecycle.AFTER_STOP_EVENT),
  14. //销毁前中后
  15. DESTROYING(false, Lifecycle.BEFORE_DESTROY_EVENT),
  16. DESTROYED(false, Lifecycle.AFTER_DESTROY_EVENT),
  17. //失败状态
  18. FAILED(false, null);

tomcat容器的生命周期管理

容器也是一个组件,container继承自lifecycle接口,有拥有自己的生命周期和监听器。
容器之间存在父子关系,容器执行后台的周期性的方法,定义的周期执行的时间。