當我們在談論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運行報錯(Unsupported major.minor version 51.0):
(51.0是內部編號,JDK1.4--48.0,JDK1.5--49.0,JDK1.6--50.0,JDK1.7--51.0,JDK1.8--52.0)
參考:
http://java12345678.iteye.com/blog/2257533
http://blog.csdn.net/sum__mer/article/details/52452432