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/

Tomcat8 结构原理解析的更多相关文章

  1. MYSQL索引结构原理、性能分析与优化

    [转]MYSQL索引结构原理.性能分析与优化 第一部分:基础知识 索引 官方介绍索引是帮助MySQL高效获取数据的数据结构.笔者理解索引相当于一本书的目录,通过目录就知道要的资料在哪里, 不用一页一页 ...

  2. 开源磁力搜索爬虫dhtspider原理解析

    开源地址:https://github.com/callmelanmao/dhtspider. 开源的dht爬虫已经有很多了,有php版本的,python版本的和nodejs版本.经过一些测试,发现还 ...

  3. Android中插件开发篇之----应用换肤原理解析

    一.前言 今天又到周末了,感觉时间过的很快呀.又要写blog了.那么今天就来看看应用的换肤原理解析.在之前的一篇博客中我说道了Android中的插件开发篇的基础:类加载器的相关知识.没看过的同学可以转 ...

  4. Skinned Mesh原理解析和一个最简单的实现示例

    Skinned Mesh 原理解析和一个最简单的实现示例   作者:n5 Email: happyfirecn##yahoo.com.cn Blog: http://blog.csdn.net/n5 ...

  5. (转)HashMap深入原理解析

    [HashMap]深入原理解析 分类: 数据结构 自考 equals与“==”(可以参考自己的另一篇博文) 1,基本数据类型(byte,short,char,int,long,float,double ...

  6. Nginx 原理解析和配置摘要

    前言 Nginx 作为高性能的 http 服务器,知名度不必多言,相似产品中无出其右.本篇随笔记录我认为较为重要的原理和配置. 1. 原理解析 1.1 结构 以上是 Nginx 的结构图,其包含一个 ...

  7. [转]谈NAND Flash的底层结构和解析

    这里我想以一个纯玩家的角度来谈谈关于NAND Flash的底层结构和解析,可能会有错误的地方,如果有这方面专家强烈欢迎指正. NAND Flash作为一种比较实用的固态硬盘存储介质,有自己的一些物理特 ...

  8. Java虚拟机(一)结构原理与运行时数据区域

    我们来学习Java虚拟机的结构原理与运行时数据区域. 1.Java虚拟机概述 Oracle官方定义的Java技术体系主要包括以下几个部分: Java程序设计语言 各种平台的Java虚拟机 Class文 ...

  9. 2. Attention Is All You Need(Transformer)算法原理解析

    1. 语言模型 2. Attention Is All You Need(Transformer)算法原理解析 3. ELMo算法原理解析 4. OpenAI GPT算法原理解析 5. BERT算法原 ...

随机推荐

  1. codeforces E. Phone Talks(dp)

    题目链接:http://codeforces.com/contest/158/problem/E 题意:给出一些电话,有打进来的时间和持续的时间,如果人在打电话,那么新打进来的电话入队,如果人没有打电 ...

  2. Java微服务(一):dubbo-admin控制台的使用

    1.环境准备 使用CentOS7+Docker+Zookeeper3.4.10搭建dubbo微服务 1.1.安装docker容器 (1).uname -r:docker要求CentOS的内核版本高于3 ...

  3. ubantu下配置共享文件

    原文转自 http://blog.chinaunix.net/uid-25305993-id-3754109.html 一 samba的安装: sudo apt-get install samba   ...

  4. Springboot2.x 自动创建表并且执行初始化数据

    1.使用springboot jdbc初始化数据库 项目结构 schema.sql drop table if exists user; create table user (id bigint(20 ...

  5. java 中for循环中断的办法

    /* 中断for循环的办法: 1.break ***2.return是结束方法的,不是结束循环的. 3.标签的方法. 格式: 表签名:语句 运行结果:D:\test\day0413>java T ...

  6. SpringBoot系列__02HelloWorld探究

    在前文中,我们创建了一个简单的hello world,现在,利用这个简单的程序,来简单分析一下SpringBoot的启动过程. 如果你是使用过SSM框架的人,尤其是4.0之前的版本,相信你使用过xml ...

  7. 作为Java开发人员不会饿死的5个理由

    尽管已有20多年的历史,Java仍然是最广泛使用的编程语言之一.只需看看统计数据:根据2018年Stack Overflow开发人员调查,Java是世界上第三大最受欢迎的技术. TIOBE指数,这是一 ...

  8. 微信小程序常用的3种弹窗

    1. 表示操作成功,文字上方会显示一个表示操作成功的图标. wx.showToast({ title: '操作成功!', icon: 'success', duration: 1500 // 提示窗停 ...

  9. AirFlow常见问题汇总

    airflow常见问题的排查记录如下: 1,airflow怎么批量unpause大量的dag任务 ​ 普通少量任务可以通过命令airflow unpause dag_id命令来启动,或者在web界面点 ...

  10. Hive bucket表

    Hive 桶 对于每一个表(table)或者分区, Hive可以进一步组织成桶,也就是说桶是更为细粒度的数据范围划分.Hive也是 针对某一列进行桶的组织.Hive采用对列值哈希,然后除以桶的个数求余 ...