zoukankan      html  css  js  c++  java
  • 【Tomcat源码学习】1.概述

      Tomcat是用java语言开发的一个Web服务器,最近花了差不多两周时间对Tomcat 9.0源码进行了一遍学习,由于知识储备有限,也只是理解了一个大概,下面就由我来给大家分享一下我对Tomcat的构成与实现原理的理解,存在不对的地方希望大家指出。

     
    Tomcat源码阅读存在如下知识点依赖:
    • JMX:Java管理扩展
    • NIO:Non-Blocking IO 非阻塞IO
    • HTTP:网络协议
    • 多线程及线程池
    • 设计模式
    • Degister:模板解析
     
    Tomcat整体功能架构:
            在阅读源码时,我们无妨就认为它就是我们自己公司最近在研发的一个项目,让自己完全融入到这个项目中,去理解的意义,的设计思路,以及优秀的设计地方,从而使用到自己真正的融入到项目中去。
     
     根据个人的理解Tomcat的设计存在如下重要几大块:
    1. 容器管理
      • 该部分内部主要对Tomcat容器的管理,其中包括容器的生命周期管理,容器的组成
      • 容器的生命周期管理分为:容器的创建、容器的初始化、容器的启动、容器的暂停、容器的停止等..
      • 容器的组成分为:Server、Service、Engine、Wapper、PipeLine
    2. 应用管理
      • 该部分主要描述应用程序如何被Tomcat识别、加载以及请求调用
    3. 连接管理
      • 针对于并发环境下的网络请求、NIO多组线程协同工作,消息的请求管理
    4. 请求管理
      • 针对于网络请求如何寻址对应Web应用并进行业务处理
    5. 事件管理
      • Tomcat的扩展机制,针对于容器与业务请求在各种场景下都通过对应的监听器来扩展
     
    Tomcat核心业务流程:
            Tomcat在整个生命周期中,下面选择比较具有代表性的流程:Tomcat的启动与Tomcat网络请求响应进行讲解。
    1. 启动流程
      • 执行Java Main方法
      • 执行Tomcat的用户级自定义ClassLoader进行Tomcat用到的类加载
      • 对Tomcat容器及相关组件进行初始化
      • 对容器下关联的Web应用进行ServletContext上下文创建以及在容器中注册
      • 对Web应用的下的类文件、jar文件进行加载
      • 加载完成后执行ServletContextListener
      • 容器与应用加载完毕后,初始化连接器下对应若干处理进程以及ServerSocketChannel监听进程
      • 启动完成
    2. 网络请求处理流程
      • Http网络请求发起
      • NIO ServerSocketChannel监听获取SocketChannel
      • 针对于Http请求行、报文头进行预处理
      • 将Http请求封装为Request、Response对象
      • 将Request、Response请求对象通过容器的管道(PipeLine)提交至容器下的对应应用的Wapper下
      • 将Request、Response请求对象通过ApplicationFilterChain执行拦截器处理
      • 将Request、Response请求对象执行业务Socket service调用
     
         上面为Tomcat的整体功能构成以及简易的处理流程,在接下来的章节会对Tomcat的构成与处理流程进行细化。
     
  • 相关阅读:
    二阶系统-阻尼系数
    信号反射的几个重要体现(过冲、下冲、振铃)及电路设计
    iPhone换电池是原装电池好还是换第三方大容量电池好?
    转:信号完整性:端接拓扑结构
    转:DDR中端接技术基本概念
    DDR 布线规则
    开始学习linux的一些疑问
    系统集成
    Oracle pipe
    工厂模式初识
  • 原文地址:https://www.cnblogs.com/hframe/p/5286206.html
Copyright © 2011-2022 走看看