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

标签 java php apache tomcat jvm

<分区>

我之前使用过 Apache 网络服务器,使用 PHP、Ruby 并提供静态 JavaScript/HTML 页面。

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

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

  1. Apache服务器获取对应文件mypage.php
  2. 看到 PHP,使用 PHP 解释器来处理页面
  3. 返回结果

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

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

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

是不是因为Java文件需要编译,每次请求都重新编译没有意义?那么为什么不将请求映射到适当的 .class 文件呢?

对于那些对 Tomcat 充满信心的人来说,这可能听起来很荒谬,但如您所见,很遗憾我不明白。

最佳答案

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 网络应用程序,但是您必须使用 J2EE 网络容器来运行它们,因此从技术上讲,Tomcat 可以用作网络服务器,但不建议将其用于生产环境,因为 Apache 有更好的性能特别是在提供静态内容时的性能。

关于java - 当 Apache 已经可以拥有 JVM 时,为什么还要发明 Tomcat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26953634/

相关文章:

php - 为订单添加固定折扣值

python - 在 Web 服务器上运行时,Paramiko SSH 失败并显示 "Server ' .. .' not found in known_hosts"

c++ - 如何使用 Apache C 模块记录到文件

java - 如何让Alarm BootReceiver在特定时间发送通知?

java - 列表项排序问题

php - Godaddy 中的 Codeigniter .htaccess

php - Linux Apache/PHP 文件上传 : move_uploaded_file issues error

apache - 带有 Apache 服务器而不是 Nginx 的 GitLab 7.2.1

java - 使用scrollFlags时自定义工具栏不隐藏

n个字符串的最长公共(public)子串的Java实现