• [Java] Tomcat


    架构

    • Server
      • 服务器,只有一个
      • 对应一个Tomcat实例
      • 可通过8005监听并关闭
    • Service
      • 服务,把连接器和容器组装在一起,可有多个
      • 实现通过不同端口号访问同一台机器上部署的不同应用
    • Connector(Coyote)
      • 连接器,负责对外交流,可有多个
      • 将客户端请求连接到Tomcat
      • 与Container之间通过标准的ServletRequest和ServletResponse通信
      • 功能
        • EndPoint:网络I/O通信,实现TCP/IP协议,提供字节流给Processor
        • Processor:应用层协议解析,实现HTTP,提供Tomcat Request对象给Adapter
        • Adapter:Request/Response与ServletRequest/ServletResponse转化,提供ServletRequest 对象给容器
    • Container(Catalina)
      • Tomcat核心,Servlet容器,负责内部处理
      • Engine:引擎(默认为Catalina),只有一个
      • Host:虚拟机,基于域名分发请求,可有多个
      • Context:服务器,隔离各个WEB应用,可有多个,每个Context的ClassLoader都是独立的(jar包独立)
      • Wrapper:包装组件,一个Wrapper封装一个Servlet
    • Component
      • 组件
      • Manager(管理器)
      • logger(日志管理)
      • loader(载入器)
      • pipeline(管道)
      • valve(管道中的阀)

     

    套娃式架构优点

    • 组件关系清晰,便于后期组件生命周期的管理
    • 和配置文件server.xml中标签的包含方式对应,后续解读及封装对象过程中容易对应
    • 便于子容器继承父容器配置

    支持

    • I/O模型
      • NIO:非阻塞I/O
      • NIO2:异步I/O
      • APR:Apache可移植运行库,用于并发调优
    • 应用层协议
      • HTTP/1.1
      • AJP:用于和Web服务器(Apache)集成,Apache处理动态资源,Tomcat处理静态资源

    启动

    • 复制war包至webapp目录
    • 执行startup.bat脚本启动
    • 启动过程中war包会被自动解压装载

    启动参数

    • 组件实例化
    • 统一对象声明周期,抽象出了LifeCycle生命周期接口
    • 入口
      • startup.sh --> catalina.sh start --> java xxxx.jar org.apache.catalina.startup.Bootstrap(main) start
    • 启动流程分析
      • catalinaDaemon = catalina 对象

    工作原理

    • 多个Connector和一个Engine组成一个服务
    • 一个Container可对应多个Connector
    • Servlet=server+applet
    • applet:客户端应用程序,用鼠标就可操作
    • Servlet:服务端应用程序,通过网络请求操作
    • Servlet接口(规范)
      • service()

    目录结构

    • /bin:存放 Windows 或 Linux 平台上启动和关闭 Tomcat 的脚本文件
    • /conf:存放 Tomcat 的各种全局配置文件,其中最重要的是 server.xml
    • /lib:存放 Tomcat 以及所有 Web 应用都可以访问的 JAR 文件
    • /logs:存放 Tomcat 执行时产生的日志文件
    • /work:存放 JSP 编译后产生的 Class 文件
    • /webapps:Tomcat 的 Web 应用目录,默认情况下把 Web 应用放在这个目录下

     

    源码剖析

    • 原则
      • 定焦原则:抓主线(抓一个核心流程去分析,不要漫无目的的去看源码)
      • 宏观原则:站在上帝视角,先脉络后枝叶(切忌视图搞清楚看到的每一行代码,源码考虑因素多,不看辅助功能不影响主线)
    • 方法技巧
      • 断点(观察调用栈)
      • 反调(右键,Find Usages)
      • 经验(如doXX(),service()实现业务逻辑)
      • 见名思意(通过方法名称联想到方法作用)
      • 多动手

    参考

    四张图带你了解Tomcat系统架构

    https://blog.csdn.net/qq_38245537/article/details/79009448

    web容器,servlet容器,spring容器,springmvc容器的联系

    https://blog.csdn.net/qq_31772441/article/details/104163457

    Tomcat系列(4)——Tomcat 组件及架构详细部分

    https://www.cnblogs.com/haimishasha/p/10740606.html

    tomcat7完整的源码及依赖包下载(即编即用)

    http://www.xwood.net/_site_domain_/_root/5870/5930/5932/t_c258846.html

    IDEA搭建Tomcat源码环境

    https://blog.csdn.net/qq_45859054/article/details/104726732

    tomcat -ROOT 与webapps 的关系

    https://www.cnblogs.com/wei-lai/p/6249595.html

  • 相关阅读:
    贪心[2019.5.25]
    顺序统计算法[2019.5.25]
    polya/burnside 学习
    虚拟机上装uoj
    一些常用的数据结构维护手法
    发一个数据生成器
    圆方树学习
    四校联考 推冰块
    Codeforces Training S03E01泛做
    HAOI2015 泛做
  • 原文地址:https://www.cnblogs.com/cxc1357/p/12662689.html
Copyright © 2020-2023  润新知