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/

     完

  • 相关阅读:
    java枚举enum
    冒泡排序、选择排序、插入排序、二分法排序、快速排序、二叉树排序、堆排序总结
    Django-tinymce富文本的使用
    Redis-基本操作总结
    git-总结大全
    css-总结
    html-table布局
    html表单示例
    html总结
    python-浅拷贝、深拷贝实例以及讲解
  • 原文地址:https://www.cnblogs.com/sunlightlee/p/10994281.html
Copyright © 2011-2022 走看看