当我们在谈论Tomcat与JDK版本的对应关系的时候,我们实际上在讨论两个问题。
第一个是,我们想安装了某个版本的Tomcat(比如Tomcat7),需要安装哪个版本的JDK,才能把Tomcat运行起来。
第二个是,如果我们安装某个Tomcat+JDK组合(比如Tomcat7+JDK1.7),能否把我们某个版本JDK(比如JDK1.6)编写的网站给运行起来。
对于第一个问题,可以通过官网的这张图最后一列得到答案(下载的Tomcat的RUNNING.txt和RELEASE-NOTES也有当前版本所需JDK说明):
所以如果安装Tomcat7要安装JDK1.6及之后版本才能正常启动Tomcat(如果使用不匹配的jdk比如Tomcat7用jdk1.5执行startup.sh输出也提示启动成功,但其实进程没成功启动的,查看logs/catalina.out会看到报错:
Exception in thread "main" java.lang.UnsupportedClassVersionError: Bad version number in .class file)
对于第二个问题,其实到此我们要言明,第一个问题和第二个问题都有一个同样本质的答案:低版本JDK无法运行高版本JDK编译的代码。
所以如果你安装了Tomcat7+JDK1.7这个组合,那么JDK1.7及之前版本JDK编写的网站可以正常运行,JDK1.8编写的不可以。
(同理我们可以推测,Tomcat7是用JDK1.6编译的,Tomcat8是用JDK1.7编译的,Tomcat9是用JDK1.8编译的)
下图是中我用JDK1.7编译了一个HelloWorld程序,可以看到JDK1.7和1.8运行正常,而JDK1.6运行报错(Unsupportedmajor.minorversion 51.0):
(51.0是内部编号,JDK1.4--48.0,JDK1.5--49.0,JDK1.6--50.0,JDK1.7--51.0,JDK1.8--52.0)