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. Java集合中List、Set以及Map

    概述: List , Set, Map都是接口:List , Set继承至Collection接口,Map为独立接口 Set下有HashSet,LinkedHashSet,TreeSet List下有 ...

  2. 慕课网jojo老师的Angular课程中遇到的问题

    @Input() private rating:number=0; 一直提示说“Input”不能识别,去网上查了才知道原来是没有导入包,于是把原有的 import { Component,OnInit ...

  3. c语言实现配置文件的读写

    配置文件的格式如下: key1 = value1 key2 = value2 . . . 名值对以一个=链接,一条记录以换行符分割 头文件: #include<stdio.h> #incl ...

  4. dropwizard-core模块和应用启动分析

    简介 Dropwizard是一款开发运维友好.高效.RESTful web服务的框架.Dropwizard将稳定.成熟的java生态系统中的库整合为一个简单的.轻量级的包,即跨越了库和框架之间的界限, ...

  5. 如何完美激活pycharm2019.2.2

    本号持续关注pycharm的更新,这不本月11号迎来新版本,为防走丢,请关注公众号,让我们携手并行!有道是"予人玫瑰手留余香",分享的确是件令人愉快的事,这也是我创建公众号的初心. ...

  6. Python 为了提升性能,竟运用了共享经济

    大家或许知道,Python 为了提高内存的利用效率,采用了一套共用对象内存的分配策略. 例如,对于那些数值较小的数字对象([-5, 256]).布尔值对象.None 对象.较短的字符串对象(通常 是 ...

  7. 单点登录(两种单点登录类型:SSO/CAS、相同一级域名的SSO)

    单点登录:SSO(Single Sign On) 什么是单点登录:大白话就是多个网站共享一个用户名和密码的技术,对于普通用户来说,只需要登录其中任意一个网站,登录其他网站的时候就能够自动登陆,不需要再 ...

  8. 一键升级所有pip过期库

    import pipfrom subprocess import callfrom pip._internal.utils.misc import get_installed_distribution ...

  9. scrapy-redis分布式爬取猫眼电影

    能够利用redis缓存数据库的优点去重来避免数据的大面积冗余 1.首先就是要创建猫眼爬虫项目 2.进入项目内部创建一个爬虫文件 创建完文件之后就是要爬取的内容,我这边以爬取猫眼电影的title和lin ...

  10. Vue2.x-社交网络程序项目的总结

    最近几天一直在学习Vue的课程,通过这个项目进行进一步的学习Vue方面的知识.掌握如何使用Vue搭建前端,如何请求Node.js写好的后端接口. 一.实现前后端连载 首先在后端的文件中  vue  i ...