当Apache已经拥有JVM时,为什么要发明Tomcat

时间:2014-11-16 04:04:41

标签: java php apache tomcat jvm

我以前使用过Apache Web服务器,使用PHP,Ruby,并提供静态JavaScript / HTML页面。

我对Tomcat感到困惑的一件事基本上是 为什么首先存在Tomcat,而不是将Apache与已安装的JVM一起使用?为什么这些都是流行的语言Java是否需要它自己的专用容器,即Tomcat?

如果想要使用PHP来提供内容,只需在Apache服务器上安装PHP,当用户访问mysite.com/mypage.php时就会发生这种情况:

  1. Apache服务器获取相应的文件mypage.php
  2. 看PHP,使用PHP intepreter处理页面
  3. 返回结果
  4. 使用Java时,为什么它与此不一样?

    在我看来,它应该是这样的:只需在Apache服务器上安装Java和JVM,然后当用户访问mysite.com/mypage时就会发生这种情况:

    1. Apache服务器获取相应的文件
    2. 看Java,使用JVM编译/处理页面
    3. 返回结果
    4. 是否因为需要编译Java文件,并且在每次请求时重新编译它都没有意义?那么为什么不将请求映射到正确的.class文件?

      对于那些对Tomcat充满信心的人来说,这可能听起来很荒谬,但正如你所看到的,我很遗憾没有得到它。

2 个答案:

答案 0 :(得分:1)

Tomcat是一个apache项目。虽然理论上可以使用本机代码实现JSP和Servlet容器(如Tomcat),而不是最终选择的实现策略(我相信Websphere确实遵循该实现模型)。但是,tomcat确实有Connectors并引用

  

<强> AJP

     

使用单个服务器时,在Tomcat实例前使用本机Web服务器时的性能大多数时候比使用默认HTTP连接器的独立Tomcat差得多,即使Web应用程序的很大一部分是静态文件。如果出于任何原因需要与本机Web服务器集成,则AJP连接器将提供比代理HTTP更快的性能。从Tomcat的角度来看,AJP集群是最有效的。它在功能上等同于HTTP群集。

     

此Tomcat版本支持的本机连接器为:

JK 1.2.x with any of the supported servers
mod_proxy on Apache HTTP Server 2.x (included by default in Apache HTTP 
   Server 2.2), with AJP enabled

答案 1 :(得分:1)

Php和Java是可以独立于Apache运行的开发平台。为了运行PHP脚本/应用程序,您首先需要安装PHP解释器,对于Java,您需要安装一个JVM作为Java文件/应用程序的解释器。

为了使用Apache运行PHP文件,你必须启用mod_php扩展,这基本上是一个允许从Apache调用PHP解释器并执行php脚本的程序。 J2EE平台需要Web容器(https://docs.oracle.com/javaee/5/tutorial/doc/bnabo.html)来执行或运行Web应用程序。 Apache可以使用模块连接J2EE Web容器,通常使用AJP允许Apache与Tomcat通信并执行Java Servlets或JSP页面。

您不需要Apache来运行Java Web应用程序,但是您必须使用J2EE Web容器来运行它们,因此技术上Tomcat可以用作Web服务器但不建议用于生产,因为Apache会有更好的特别是在提供静态内容时的性能