2017-12-03 483 views
1

從現有的主題(What tomcat requires JDK or JRE?Why does Tomcat require JDK installed?)中,我瞭解到Tomcat 5.5以後不需要安裝JDK來編譯jsp文件,因爲它使用了自己的捆綁Eclipse Java編譯器。但是,當tomcat運行java字節碼時,它確實需要JRE。但是在安裝Tomcat時,我們只需要指定JVM的位置。爲了編譯和運行Java代碼,我們只需要將JDK文件夾下的bin文件夾添加到路徑環境中即可。但是JDK 9不再包含JRE文件夾。相反,在JDK文件夾之外有一個獨立的JRE文件夾。運行已編譯的jsp代碼時,Tomcat仍然如何捕獲JRE? Tomcat中的哪個配置文件捕獲了這個?謝謝!哪個配置文件告訴Tomcat已安裝的JRE的位置?

回答

1

但安裝Tomcat的過程中,我們只需要指定JVM的位置

指定JVM的位置隱含指定JRE的位置,因爲JVM是JRE目錄中找到結構體。

要編譯並運行Java代碼,我們只需要將JDK文件夾下的bin文件夾添加到路徑環境中即可。

添加JDK bin文件夾的路徑,意味着你可以運行javajavac命令。命令文件的位置隱式指定了要使用的JDK的位置,因此也指定了JVM。沒有配置文件。

在Windows 64位Java 5到Java 8中,JVM位於%JAVA_HOME%\jre\bin\server\jvm.dll

在Windows 64位Java 9中,JVM位於%JAVA_HOME%\bin\server\jvm.dll中。

但是JDK 9不再包含JRE文件夾。相反,在JDK文件夾之外有一個獨立的JRE文件夾。

除非您告訴它不要創建單獨的JRE文件夾,否則所有Java版本的JDK安裝程序都將創建一個JDK文件夾和一個JRE文件夾。在這方面,Java 9與舊版Java版本沒有區別。

當運行編譯後的jsp代碼時,Tomcat仍然如何捕獲JRE?

Tomcat本身是用Java編寫的,所以Tomcat沒有找到Java。運行Tomcat的是Java。

+0

我在問Tomcat如何知道JRE所在的位置,以便運行.class文件從.jsp編譯。我不是問Java如何運行.class(我知道javac和java參與Java的情況)。我們只告訴Tomcat JVM所在的位置,即%JAVA_HOME%\ bin \ server \ jvm.dll。但在Java 9中,JRE不在JDK文件夾內(即在%JAVA_HOME%之外)。另請注意,對於JDK 9,JDK文件夾不包含JRE文件夾。例如,C:\ Program Files \ Java \ jdk-9.0.1和C:\ Program Files \ Java \ jre-9.0.1,前者不包括後者。 – Peng

+1

你讀過我的答案了嗎? JVM和所有Java Runtime Library都是Java 9 JDK的一部分。當然,它們不在「JRE」子文件夾中,但JRE中的所有內容都位於JDK中。 ---但是,對於你的第一點,請再次閱讀答案的最後部分:Tomcat沒有找到Java。 ** Tomcat由Java **運行,並且Java已經知道它本身在哪裏。Tomcat的Java代碼只是使用反射調用JSP編譯的Java類。 Tomcat不需要找到Java來做到這一點,因爲** Java已經在運行它**。 – Andreas

+0

對不起,我一開始並沒有完全理解你的解釋。我試圖更好地理解它。所以這個過程是這樣的:1).jsp被轉換成.java,2).java被編譯爲.class,兩個步驟都在Tomcat中,3).class由JVM運行,這超出了Tomcat ,但完全用Java完成。你是這個意思嗎?謝謝。 – Peng