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许可
以Apache License许可方式发布
免费
修改并发布变更版本的用户不必公开修改部分源码
修改tomcat的用户不必变更捐献给Apache软件基金会
所有包含源码及二进制的重新发布均包含Apache许可
任何重新发布的资料必须经过Apache基金会批准
无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之后新特性
Servlet3.1、JSP2.3、EL3.0、WebSocket1.1、9.0开始支持Servlet4.0
Servlet4.0预览API
默认的HTTP、AJP链接器采用NIO,而非BIO
全新的资源实现
链接器新增支持JDK7的NIO2
链接器新增支持HTTP/2协议
默认采用异步日志处理方式
大量代码重构
Tomcat总体架构设计
Tomcat启动流程
Tomcat请求处理流程
Tomcat类加载机制
从缓存中加载
如果没有,从JVM的Bootstrap类加载器加载
如果没有,则从当前类加载器加载(WEB-INF/classes 、WEB-INF/lib的顺序)
如果没有,则从父类加载器加载,由于父类加载器采用默认的委派模式,所以加载顺序为System、Common、Shared
如果启用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/
完
版权声明: 本文为 InfoQ 作者【墨凡】的原创文章。
原文链接:【http://xie.infoq.cn/article/f8831306bb5811b64c144b11e】。文章转载请联系作者。
评论