tomcat是Apache基金会旗下的子项目,自从java web风行起来,便一直是java领域的webserver的首选。从项目创立开始至今,tomcat已经经历了3.x,4.x,5.x,6.x,7.x,8.x,9.x等7个大的版本变动。
我们来看一下版本列表:

从上表中,可以总结得出:
Tomcat的每一个对应的版本和JDK版本相关,几乎是tomcat每升级一个大版本,对应JDK肯定会升级一个版本
Tomcat对应三个Web容器的JAVA EE规范,JSP,Servlet,EL,Websocket,最新的Tomcat9 实现的是Servlet4.0,JSP2.4,EL3.1,Websocket1.2。Servlet3.x提出了原注释的功能,Servlet3.1可以进行异步Servlet,这两个规范的更新分别在Tomcat 6和Tomcat 7中,而对于替换掉commet的Websocket1.1规范,在Tomcat7中才提供支持。
从上图中可以看到每一个版本的几种状态,archived代表该版本已经进入了历史仓库了,出现bug或者后续的一些开源支持已经不再支持的范围之内了;Alpha版本是里面除了有大量的没有经过测试的功能,对JAVA EE标准的实现也不确定,例如最新的Tomcat 9,即使你想用最新的Servlet4.0,倒是可以一试,但是是否完全满足,以目前来看,不能确定;Beta版本是比Alpha稍微好一些,只有少量的功能没有经过测试,并且规范是完全实现的,如果不是使用比较边缘化的规范和功能,这个版本基本上就可以使用了;Stable版本是比较理想的版本,例如Tomcat 8.0.32,这种稳定版bug很少,适用于生产环境当中。
值得一提的是,Websocket规范在Tomcat6的后期版本中也进行了实现,但是需要使用JDK7+来运行Tomcat6。
看过上述的版本,我们来看一下每个Tomcat大版本之间的主要差异:
Tomcat3.X 是Tomcat的初始版本,就是实现了Servlet2.2和JSP1.1规范,并且基本上构建了Tomcat的前端请求和后端层次结构这种两极的架构雏形,可谓是Tomcat的开山鼻祖,目前该版本已经进入了历史仓库中封存。
Tomcat4.X 精巧的设计了一个新的Servlet容器,也就是后端的架构重新修改了一下,改名为CATALINA,升级了Servlet和JSP的规范,并且在功能上做了大量的改进:
基于JMX的管理体系和架构
使用JSP和Structs的进行管理web应用
Coyote连接器,含HTTP1.1,AJP1.3,JNI也支持
JSP预编译
性能提升和更小的内存占用
集成开发工具(eclipse)
集成ant,可以从build.xml从源码级一步构建tomcat
Tomcat4.X总结一下,从整体上对Tomcat3.X的架构进行了调整,特别是后端架构,这套架构沿用至今。Tomcat5.X除了JAVA EE规范版本提升之外,主要对性能和稳定性进行了提升,增加了部分功能,内容如下:
性能优化和垃圾收集策略
提出了独立的Deployer,可以通过这个Deployer对正在运行的Tomcat进行应用部署
对Tomcat4.x的JMX架构继续进行扩充,全部的监视和管理全部采用JMX
Taglibs库的支撑可谓是这一版本比较大的特色
更好和Windows和Unix进行平台集成
提升了安全管理器SercurityManager的支撑
session的集群分发(组播)
文档细化因为JDK5平台的性能问题,Tomcat6.X跟随JDK6在内存垃圾回收策略,高级IO,等方面继续进行优化,
这个是Tomcat6的主要改变Tomcat7.X在规范上一个重大的跃进就是加入了Websocket的支持,从而甩掉了原来集成一些commet的解决方案,而由Tomcat自己就可以集成,除此之外:
优化了web应用的内存泄露
提高了管理控制台的安全性
可以在应用中直接include一些外部资源,直接可以进行映射
对Connector,lifecycle等小部分代码做了一些重构,主要的目的是做了一些因为历史版本过多的和无用代码精简Tomcat8.X版本变化不大,规范的继续升级之外,例如跟随Servlet规范可以支持异步等,并且定义了单一通用的资源实现方式,用以替代早期的多Resource扩展的机制。
Tomcat9.X主要在协议和安全方面做了很多工作:
支持HTTP/2,但是需要APR的本地的native库
TLS的虚拟主机
扩展了JSSE的连接器,可以使用openssl支撑TLS
从整体跨度上,Tomcat4在架构上,Tomcat5在功能上,Tomcat6在性能上,Tomcat7在规范上,Tomcat9在安全上进行了比较大的跃进。




