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. Three.js 开发机房(四)

    这一节我们讲讲怎么画机柜,其实机柜如果作的复杂一点.逼真一点可以用3D建模工具,不过一般的项目中也不用做的那么麻烦,那我们就可以将机柜抽象以下,首先它是一块具有长宽高的立方体铁块,然后我们从中间在掏掉 ...

  2. Caused by: com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class org.apache.catalina.connector.CoyoteWriter and no properties discovered to create BeanSerializer

    一.什么是序列化In computer science, in the context of data storage, serialization is the process of transla ...

  3. 【Offer】[28] 【对称的二叉树】

    题目描述 思路分析 测试用例 Java代码 代码链接 题目描述 请实现一个函数,用来判断一-棵二叉树是不是对称的.如果一棵二叉树和它的镜像一样,那么它是对称的.  牛客网刷题地址 思路分析 利用前序 ...

  4. 虚拟化(二)-VMware workstation

    https://www.cnblogs.com/zhrngM/p/9547945.html vmware workstation的最新版本是10.0.2.相信大家也都使用过,其中的简单的虚拟机的创建, ...

  5. Docker的优缺点

    Docker解决的问题 由于不同的机器有不同的操作系统,以及不同的库和组件,将一个应用程序部署到多台机器上需要进行大量的环境配置操作.(例如经常出现的类似"在我的机器上就没问题"这 ...

  6. Android 网络通信框架Volley(三)

    NetworkImageView 分析:public class NetworkImageView extends ImageView 他继承自ImageView,并且添加了一个新方法: public ...

  7. Linux变量替换技术

    1.1.1   ${value:-word} 如果变量value没有定义,则返回word,如果已经赋值则返回value变量的值 result=${jimyy:-UNSET} echo $result ...

  8. 疑难杂症----udf提权无法导出.dll

    昨天进行测试一个网站,进行udf提权时候,没办法导出.dll, 起初以为是这个马的问题,后来用专用马,一样不行,但是有报错了,有上网找了半天,终于被我找到了. Mysql数据库从文件导入或导出到文件, ...

  9. CSS——段落处理

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  10. 白话系列之IOC,三个类实现简单的Ioc

    前言:博客园上已经有很多IOC的博客.而且很多写的很好,达到开源的水平,但是对于很多新人来说,只了解ioc的概念,以及怎么去使用ioc.然后想更进一步去看源码,但是大部分源码都比较困难,当不知道一个框 ...