事情从这儿说起,项目里调试的时候,一个同事遇到了跨域的问题,我记得Tomcat有提供Filter来实现跨域(CORS Filter,之前写过��ʷ,����Tomcat与跨域问题),印象里是从Tomcat 7开始,就告诉人家直接部署到Tomcat7里,在应用的web.xml里配置CorsFilter就完事了。
结果没多久人家兴致勃勃的部署完发现不光没成功,而且应用都启动不成功了。
啥,谁在搞事情?
把catalina.jar从服务器上拉下来,果然没有对应的class存在。所以问题很明白,是服务器上使用的版本还没提供CorsFilter,那要升级到哪个版本才能用呢?
最简单的办法是直接下载Tomat 7.x的最新版本。那如果确实想了解下最低一个支持CorsFilter的版本,该怎么办呢?
还有一次,同事在线下服务器测试一个功能,本地功能验证正常,放到线下时功能不符合预期,后来各种debug分析,发现Jasper的一个特性实现在线下服务器还不支持,才发现是本地服务器和线下的小版本差了1个小版本。
所以,这里我们一起看两个问题:
服务器上使用的是什么版本
Tomcat在哪个版本提供的这一特性,以及各个小版本间的差异
版本确定
如何确定当前使用的Tomcat版本呢?
在Tomcat的安装目录下有这样一个文件:RELEASE-NOTES
打开看,在License信息的下方,第一屏的中心位置就显示了当前Tomcat的版本
Apache Tomcat Version 7.0.xx (这里就是版本号)
Release Notes
除了版本信息,还有一些特性的提供,变更等。
此外,在Tomcat的bin目录下,有一个version的脚本文件,运行下,可以了解当前的CATALINA_HOME,CATALINA_BASE,JRE_HOME, Tomcat版本、JDK版本等信息
当然,还有一种更常见的,甚至不需要登录到服务器,只要你没有对项目的错误页(error-page,错误页面error-page的原理)做特别的设置,那么在请求一个不存在的资源时,一定会显示下面这样一个错误页面,页面的下方会显示Tomcat的版本号。
版本间差异
确定了自己当前使用的版本,那怎样选择目标版本,或者说想了解某个特性是在具体的哪一版本提供时,就需要了解这个:
一般都称为changelog
每个Tomcat的版本,都会提供一个changelog汇总,可以在Docs的页面下方看到Apache Tomcat Developers这样的一节,是为开发者提供的,第二项就是我们感兴趣的Changelog
changelog页面会包含许多信息,例如
bug,可以直接链接到其对应的bug系统里,可以查看详细的一些修订记录
新添加的feature
做了哪些改进,改进说明
而且这些是按照模块来分块罗列的,例如下面这个图
分Coyote和Catalina两个模块,每个带有链接的bugId,可以直接跳转到bug系统,里面饮食详细的bug信息,环境描述,附件等,以及开发者之间的一些处理建议,修订记录。(这种报bug的方式,值得我们在遇到问题寻求帮助时学习,把环境,异常信息提供完整。如何寻求帮助-Tomcat官方建议这样做)
像我们前面提到的CorsFilter,就可以在这里找到,这样就可以确定具体增加该实现的版本了。
同样的,对于某个特性的实现,可以在changelog里找,在你当前版本之后的某个版本做了修订的,可以直接升级到对应版本即可,而且从中,也能了解一些处理的细节。
总结一下,可以通过version脚本,release-notes,异常请求来确定版本,然后呢,通过ChangeLog来了解一些特性的实现版本,一些异常的修订记录等。
希望能对一些人有帮助。