目前tomcat已经升级到9.0.0.M26 (alpha)版本,如何选择安装合适版本的Tomcat?
一般从以下两个因素来分析:
- JDK版本
- 所需要支持的Servlet和JSP规范
比如如果想要安装最新版本的tomcat9.x,那么至少需要jdk1.8。
而对于Servlet规范可能有人会有点陌生,比如servlet3.0新增了@WebServlet、@WebFilter注解来替代web.xml的配置,新增了Servlet异步化方便将请求解析和业务处理线程分离等。具体在此处不展开描述。
tomcat9.0实现的servlet4.0版本目前还处于草案阶段,不推荐使用。
tomcat8.5取代了废弃的8.0版本,按照官方描述,tomcat8.5不仅仅实现了相同的Servlet规范,还额外实现了JASPIC 1.1规范,并且显著提升了性能、稳定性以及使用成本,具体可以参考Changelog。
tomcat6.0目前已经不再更新,以后下载和查看文档将会有点困难。具体的版本选择可以参照以下表格。
对于源码阅读来说,一般是从早一点的版本开始。《How tomcat works》中已经对tomcat4和5做了详细分析,是不错的入门方式。
我对http协议的解析部分比较感兴趣,参考了更新日志后,在tomcat6.0中看到这样一条:高级IO(Advanced IO capabilities)。这个高级IO对应的配置在server.xml中:
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
这个protocol有三个可选项:
-
org.apache.coyote.http11.Http11Protocol
- same as HTTP/1.1 -
org.apache.coyote.http11.Http11NioProtocol
- non blocking Java connector -
org.apache.coyote.http11.Http11AprProtocol
- the APR connector.
tomcat从6.x版本开始提供了bio、nio、以及apr三种连接器的实现,之后我们将会选择该版本并对这三种连接器进行源码分析。
参考文献:
http://tomcat.apache.org/whichversion.html
http://tomcat.apache.org/tomcat-6.0-doc/config/http.html
https://www.ibm.com/developerworks/cn/java/j-lo-servlet30/