2017-12-03 484 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