写点什么

Tomcat 学习分享

用户头像
墨凡
关注
发布于: 2020 年 05 月 24 日
Tomcat学习分享

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



文章迁移自我自己的博客园:https://www.cnblogs.com/sunlightlee/p/10994281.html


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/

 完



发布于: 2020 年 05 月 24 日阅读数: 72
用户头像

墨凡

关注

文字,是一种表达方式 2017.12.22 加入

90后程序员,对代码有追求,对人生有态度

评论

发布
暂无评论
Tomcat学习分享