zoukankan      html  css  js  c++  java
  • Tomcat8-架构原理解析

      Tomcat是JavaWeb组件架构中一款apache开源的服务器软件,通过对其的学习,总结并且分享了关于它的知识,下边是分享ppt内容,希望对想了解tomcat人有帮助。

    Tomcat历史

    • 1999年第一个版本(3.x),基于Sun贡献代码,实现Servlet2.2和JSP1.1
    • 2001年里程碑版本4.0,实现Servlet2.3和JSP1.2规范
    • 当前Tomcat存在5个主要版本:
      •   6.x:JDK5以上
      •   7.x:JDK6以上
      •   8.x:JDK7以上
      •   8.5x:JDK7以上,发布于9.0之后,用于取代8,实现了部分9特性
      •   9.x:JDK8以上

     Tomcat许可

    1. 以Apache License许可方式发布
    2. 免费
    3. 修改并发布变更版本的用户不必公开修改部分源码
    4. 修改tomcat的用户不必变更捐献给Apache软件基金会
    5. 所有包含源码及二进制的重新发布均包含Apache许可
    6. 任何重新发布的资料必须经过Apache基金会批准
    7. 无Apache基金会许可并派生自Tomcat的源码产品不能命名为Tomcat,Jakarta,Apache

     Tomcat安装与启动   

    • Windows上安装
      •   .zip
      •   .exe
    • Linux上安装
      •   apache-tomcat-8.5.6.tar.gz
      •   修改$CATALINA_HOME/bin/catalina.sh修改Tomcat启动配置:JAVA_OPTS

     Tomcat嵌入使用支持

    • Tomcat支持嵌入到应用程序,比如:SpringBoot中的tomcat
    • 使系统以安装包形式独立提供
    • 为了满足PAAS环境下应用研发、交付、管理。
    • 绑定一个端口将HTTP导出为服务

     Tomcat Debug启动

    • bin>catalina jpda start
    • 依赖于JDK提供的JPDA
    • 默认调试端口:8000

     Tomcat主要目录结构

     

     Tomcat8.5之后新特性

    1. Servlet3.1、JSP2.3、EL3.0、WebSocket1.1、9.0开始支持Servlet4.0
    2. Servlet4.0预览API
    3. 默认的HTTP、AJP链接器采用NIO,而非BIO
    4. 全新的资源实现
    5. 链接器新增支持JDK7的NIO2
    6. 链接器新增支持HTTP/2协议
    7. 默认采用异步日志处理方式
    8. 大量代码重构

     Tomcat总体架构设计

     

     Tomcat启动流程

     

     Tomcat请求处理流程

     

     Tomcat类加载机制

    1. 从缓存中加载
    2. 如果没有,从JVM的Bootstrap类加载器加载
    3. 如果没有,则从当前类加载器加载(WEB-INF/classes 、WEB-INF/lib的顺序)
    4. 如果没有,则从父类加载器加载,由于父类加载器采用默认的委派模式,所以加载顺序为System、Common、Shared
    5. 如果启用Java委派模式(delegate=true):缓存-Bootstrap-从父类(System、common、shared)-当前类加载器加载

     组件Catalina

    • 包含所有的容器组件
    • 通过松耦合方式集成Cotoye
    • 包含启动入口以及Shell
    • 使用Apache Digester解析XML配置文件并创建服务器

     Catalina依赖关系:

     Coyote组件:

    • Tomcat链接器名称
    • 外部访问接口服务
    • 建立链接,发送请求,并接收响应
    • 封装底层网络通信协议,为Catalina提供接口,使之与请求协议及I/O方式解耦
    • 将Socket输入转换为Request交由Catalina处理
    • 提供Response对象将Catalina的处理结果写入输出流
    • 此处的Request与Response与Servlet还未关联

     Coyote与Catalina交互关系:

     Cotoye支持的协议

    • HTTP/1.1
    • AJP
    • HTTP/2.0
    • 8.5/9之后移除BIO支持
    • NIO java类库实现
    • NIO2 JDK7最新的NIO2
    • APR(跨平台统一API工具) 采用Apache可移植运行库实现APR是使用C/C++编写的本地库

     Jasper:  

    • 从Tomcat4.1开始重新设计了Jasper2
    • 运行时编译
    • 预编译:提供JspC用于支持JSP预编译
    • 转换为Servlet将页面内容输出

     JVM配置项

    • 例:JAVA_OPTS= “-server -Xms1024m -Xmx2048m -XX:PermSize=256m -XX:MaxPermSize=512m”
    • Xms:堆内存的初始大小
    • Xmx:堆内存上限
    • XX:PermSize:非堆内存初始大小(JDK8中改为:-XX:MetaspaceSize)
    • XX:MaxPermSize:非堆内存上限,(JDK8:-XX:MaxMetaspaceSize)
    • 涉及:性能、调试、JVM行为、垃圾回收、可按需添加详见Oracle官网文档

     系统属性配置

    • 通过-Dproperty命令指定系统属性
    • 涉及:属性替换、集群、EL、Jasper、安全、规范、
    • 会话、日志、jar扫描等

     服务器配置

    • catalina.properties
    • server.xml
    • context.xml

     Web应用配置

    • SerlverContext初始化参数
    • 会话配置
    • Cookie
    • URL
    • SSL
    • Servlet声明及映射
    • 生命周期监听器
    • Filter定义及映射(比如:CorsFilter)
    • MIME类型映射
    • 欢迎页列表、错误页列表、本地化及编码映射
    • 安全配置
    • JNDI配置以及其他配置

     Web服务器集成

    • 静态资源优化
    • 多应用、虚拟机整合
    • 负载均衡
    • 复合场景
    • Apache HTTP Server
    • Ngnix(高并发、延迟处理、SSL、静态内容压缩缓存、请求限流、HTTP流媒体)

    其它Tomcat内容

    • 集群
      •   可伸缩、高可用、高性能
      •   使用Apache Tribes通信模块,
      •   会话同步
    • 安全
      •   server.xml移除不必要组件、修改关键配置如shutdown端口
      •   应用安全
      •   传输安全:SSL ,TLS
      •   catalina.opolicy
    • 性能调优
      •   测试与诊断工具
      •   配置优化
      •   Appache Bench、JMeter
      •   Linux:nload、bmon slurm 套接字:iftop iptraf tcptrack pktstat netwatch等

     参考资料:

    https://book.douban.com/subject/27034717/

     http://tomcat.apache.org/

     完

  • 相关阅读:
    洛谷 P1226 【模板】快速幂||取余运算 题解
    洛谷 P2678 跳石头 题解
    洛谷 P2615 神奇的幻方 题解
    洛谷 P1083 借教室 题解
    洛谷 P1076 寻宝 题解
    洛谷 UVA10298 Power Strings 题解
    洛谷 P3375 【模板】KMP字符串匹配 题解
    Kafka Shell基本命令
    Mybatis与Hibernate的详细对比
    MyBatis简介
  • 原文地址:https://www.cnblogs.com/sunlightlee/p/10994281.html
Copyright © 2011-2022 走看看