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


Why invent Tomcat when Apache can already have JVM

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

我对Tomcat

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

如果想使用 PHP 来提供内容,只需在 Apache 服务器上安装 PHP,瞧

,当用户 mysite.com/mypage.php 发生这种情况时:
  1. Apache 服务器获取相应的文件 mypage.php
  2. 看到PHP
  3. ,使用PHP智能处理页面
  4. 返回结果

为什么在使用 Java 时它与此不同?

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

  1. Apache 服务器获取相应的文件
  2. 看到Java,使用JVM编译/处理页面
  3. 返回结果

是因为 Java 文件需要编译,并且在每个请求时重新编译它没有意义吗?那为什么不将请求映射到正确的.class文件呢?

对于那些对Tomcat有信心的人来说,这听起来可能很荒谬,但正如你所看到的,不幸的是我不明白。

Php 和 Java 是可以独立于 Apache 运行的开发平台。为了运行PHP脚本/应用程序,您首先需要安装PHP解释器,Java也是如此,您必须安装一个JVM,该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在提供静态内容时会有更好的性能。

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

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