Tomcat在哪里调用Java?

Tomcat在哪里调用Java?,java,tomcat,Java,Tomcat,除了使用Java启动器之外,不可能启动任何Java程序 但当我启动Tomcat或任何其他应用服务器时,我并没有真正运行java程序。我选择启动服务器 当服务器启动时(在本例中为Tomcat),调用java的实际位置在哪里 服务器是普通程序。没有java启动器。当您启动tomcat时,您启动java并将其指向tomcat JAR,从而启动tomcat。如果您查看tomcat安装,您会发现一个名为catalina.bat或catalina.sh的文件。在这个文件中,您将找到启动Tomcat的所有命令

除了使用Java启动器之外,不可能启动任何Java程序

但当我启动Tomcat或任何其他应用服务器时,我并没有真正运行java程序。我选择
启动服务器


当服务器启动时(在本例中为Tomcat),调用java的实际位置在哪里

服务器是普通程序。没有java启动器。当您启动tomcat时,您启动java并将其指向tomcat JAR,从而启动tomcat。

如果您查看tomcat安装,您会发现一个名为catalina.bat或catalina.sh的文件。在这个文件中,您将找到启动Tomcat的所有命令。您将看到它实际上调用jvm并传递一些参数。startup.bat或startup.sh文件只是一个脚本,可以让您轻松地运行应用程序

开始的行:

   %_EXECJAVA% %JAVA_OPTS% %CATALINA_OPTS% %DEBUG_OPTS%
靠近末尾的是实际运行Java命令的行。%VARIABLE%语法是以前设置的所有变量。回溯文件,查看每个文件的设置,然后可以重新构造正在执行的命令

现在,当我启动Tomcat或任何其他应用程序服务器时,我不会真正地运行 java程序。我选择“启动服务器”

错。Tomcat是一个Java程序。当您通过启动脚本(catalina.sh/bat和/或startup.sh/bat)启动Tomcat时,您将看到该脚本执行各种检查,以查找Java的安装位置,并最终运行一些类似于

CLASSPATH="something;yadda-yadda.jar" java org.apache.catalina.Bootstrap
当您将其作为Windows服务启动时,上面的脚本就不那么明显了,它被隐藏在注册表项和可执行文件的组合中,但整个过程是相同的,它会找到Java的安装位置并执行它,指定Tomcat入口点类,该类具有
public static void main
方法


在Windows上作为服务运行它的默认模式是“jvm”,它实际上加载tomcat7.exe(我认为这是正确的文件名),该文件加载到
jvm.dll
中,以在进程中嵌入Java。您可以将服务更改为“java”模式,其工作方式与shell脚本类似,将“java.exe”作为一个进程执行。

hmm。。。但是,没有jvm,java程序怎么能运行呢?Tomcat是Servlet和Jsp的运行时环境。如果没有JVM,Tomcat的安装和启动都会失败。Hmm@StefanBeike,那么看来Tomcat本身就是一个JVM?@kishore不,它在JVM上运行,但不是JVM本身。shell脚本将启动java。你的第一句话不正确。任何合适的JNI包装器都可以通过调用API启动Java程序。Java启动器就是一个例子。我认为这是一个更有意义的例子。。。继续检查linkhmm,但是我没有看到java命令?我的意思是,我只是觉得某个地方叫java.exe..啊哈!所以你的意思是“EXECJAVA”变成了“java”,并用正确的参数传递。这可能有点让人困惑,因为它们提供了很多选项。我知道,我困惑的是,在启动catalina.sh on*nix系统和catalina.bat on Windows系统之前,tomcat是如何创建jre的。如果作为Windows服务运行,它会在tomcat7.exe文件的某个地方找到它。我已经修改了我的答案,包括服务细节。我给你点答案,但仍然很模糊。感谢Though1我已经告诉了您启动Java的确切文件以及它是如何实现的。我没有清楚回答什么?如何改进我的答案?