Apache HTTP Server 和 Apache Tomcat 之间的区别?[已结束]

Difference between the Apache HTTP Server and Apache Tomcat? [closed]

提问人:kaybenleroll 提问时间:8/28/2008 最后编辑:Mark Harrisonkaybenleroll 更新时间:6/21/2019 访问量:603579

问:

Apache HTTP Server 和 Apache Tomcat 在功能方面有什么区别?

我知道 Tomcat 是用 Java 编写的,HTTP 服务器是用 C 语言编写的,但除此之外,我真的不知道它们是如何区分的。它们有不同的功能吗?

Apache Tomcat Web 服务器

评论

12赞 Koray Tugay 1/16/2015
我在我的博客中添加了一个摘要,也许它对某人有所帮助:tugay.biz/2014/11/what-is-tomcat-is-it-web-server-what.html
49赞 Florian F 5/27/2016
我想知道 OP 到底在问什么,我不明白为什么它被关闭了。幸运的是,有答案。
7赞 NeilG 11/8/2018
Apache Web 服务器和 Apache Tomcat 是针对不同目的进行调整的两种不同工具。如果我们不能再通过事实和专业知识来区分他们的用例,那么我们就会陷入一个令人遗憾的状态。这种解决“争论性”问题的动力已经过分了。也许版主需要更了解情况,减少固执己见。正如@FlorianF所说,至少现在有答案了。
5赞 simbro 1/19/2019
考虑到赞成票的数量 - 这不应该被关闭 - 而是应该被锁定 - 因为它实际上是一个非常好的问题,有有用的答案。
3赞 cellepo 12/7/2019
关于这个问题的通知说它要求答案有客观内容,但预计这个问题将产生主观的答案内容——大多数答案似乎包含客观内容(尤其是投票较高的答案)而不是主观内容——所以这个问题应该是未结束的。对主观性的恐惧从未真正发生过,我不同意这个问题一开始就冒着主观性的风险。closed

答:

31赞 levand 8/28/2008 #1

Tomcat 主要是一个应用程序服务器,它为服务器上定制的 Java servlet 或 JSP 文件提供请求。它通常与Apache HTTP服务器结合使用(至少在我的经验中)。使用它来手动处理传入的请求。

HTTP服务器本身最适合提供静态内容...HTML 文件、图像等

评论

11赞 Rachel 3/29/2012
我怀疑这种说法。Tomcat is primarily an application server
7赞 Scalable 11/12/2013
Tomcat 主要用于成为应用程序服务器。尽管它也服务器静态内容。
5赞 Basil Bourque 5/21/2014
是的,Tomcat 确实主要是一个应用程序服务器,如果这个术语的意思是 Servlet 容器生成交付给 Web 浏览器的动态内容。作为最早的 Servlet 容器之一,这就是 Tomcat 存在的原因。
1赞 Prateek Mishra 5/20/2017
Tomcat 不是应用程序服务器,而是 Web 服务器。javajee.com/web-server-web-container-and-application-server
1赞 skomisa 4/14/2018
@PrateekMishra 根据您提供的链接,您关于 tomcat 是 Web 服务器的说法不正确;它(主要)是一个 Web 容器,也称为 servlet 容器
504赞 Bernie Perez 8/28/2008 #2

Apache Tomcat 用于部署 Java Servlet 和 JSP。因此,在您的 Java 项目中,您可以构建 WAR(Web ARchive 的缩写)文件,并将其放在 Tomcat 的 deploy 目录中。

所以基本上Apache是一个HTTP服务器,提供HTTP。Tomcat 是一个提供 Java 技术的 Servlet 和 JSP 服务器。

Tomcat 包括 Catalina,它是一个 servlet 容器。最后,servlet 是一个 Java 类.JSP文件(类似于 PHP 和较旧的 ASP 文件)被生成为 Java 代码 (HttpServlet),然后由服务器编译为.class文件并由 Java 虚拟机执行。

评论

56赞 Peterino 1/19/2012
“Apache 是 [...]服务 HTTP“?Tomcat 不是也提供(超文本又名)HTTP 吗?为什么 Tomcat 不能简单地成为一个“mod_java”的 Apache 模块?你能解释一下吗?
32赞 Peterino 1/19/2012
Tomcat 是一个 servlet 容器。最后,servlet 是一个 Java 类.JSP文件(类似于 PHP 或 ASP 文件)被生成为 Java 代码 (HttpServlet),然后由服务器编译为.class文件并由 Java 虚拟机执行。- 除此之外,这个论坛很好地解释了Apache HTTPD和Tomcat之间的区别:coderanch.com/t/85182/Tomcat/...
17赞 Basil Bourque 5/21/2014
Tomcat 确实带来了一个功能强大的 Web 服务器。Tomcat 是一个 Servlet/JSP 容器也提供了一个 Web 服务器。Tomcat 的 Web 服务器相当不错,能够处理大多数中小型网站的需求。由于支持 Java NIO 和 64 位内存,即使是一些更大规模的网站也可以通过 Tomcat 的 Catalina 模块很好地服务。出于各种原因,有些人选择忽略 Catalina,而是在 Apache Web 服务器产品后面使用 Tomcat 的 Servlet 功能。httpd
26赞 Basil Bourque 5/21/2014
更正我的评论:Coyote 是 Tomcat 中负责 Web 服务的模块。Catalina 是执行 Servlet 的模块。Jasper 是处理 JSP 的模块。
19赞 Basil Bourque 11/26/2014
@KorayTugay 是的。.默认情况下,当您运行 Tomcat 的脚本时,Web 服务器处于打开状态,在端口 8080 上侦听传入连接(HTTP 调用)。Tomcat 是纯 Java,有自己的 Web 服务器实现 (Coyote)。相比之下,Apache HTTP Server(AHS)具有完全独立的Web服务器实现,使用本机C / C++代码。AHS非常灵活和强大,但往往矫枉过正。Tomcat 自己的 Web 服务器运行良好。仅在真正需要时才使用 AHS。Tomcat = ( Web Server + Servlet container + JSP environment )startup.sh
125赞 ethyreal 9/21/2008 #3

除了上面的好答案之外,我认为应该说 Tomcat 内置了自己的 HTTP 服务器,并且在提供静态内容方面也具有完整的功能。根据您的 Java 虚拟机配置,它实际上可以胜过 Apache 中的传统连接器,例如 mod_proxy 和 mod_jk。

也就是说,一个完全优化的 Tomcat 服务器应该可以快速提供静态文件,如果除了静态内容之外,您还有 Java servlet、JSP 和 ColdFusion 文件,您可能会发现 tomcat 本身就做得很好。

评论

3赞 Marco Schoolenberg 1/5/2017
真。除了他们的 Tomcat 之外,许多人仍然使用额外的 Apache 设置。在大多数情况下,这是不必要的。
8赞 cowbert 1/25/2018
apache http 中最强大的部分是能够在应用程序必须看到请求之前重新路由和重写请求,即通过引擎和条件环境注入。 提供基本的负载均衡(并与 mod_jk 结合使用,在负载均衡的 Tomcat 实例之间提供基本的粘性会话/共享状态)。mod_rewritemod_proxy
15赞 vishal 3/22/2012 #4

如果您使用 java 技术(Servlet/JSP)来制作 Web 应用程序,您可能会使用 Apache Tomcat。 但是,如果您使用的是其他技术,如Perl,PHP或ruby,则使用Apache HTTP Server会更好(更容易)。

评论

11赞 Basil Bourque 1/16/2015
这个答案对我来说毫无意义。第一句话是错误的,因为除了 Tomcat 之外,还有许多其他的 Servlet/JSP 容器,其中一些非常流行,例如 Jetty、JBoss/Wildfly、Glassfish、WebSphere 等等。虽然很受欢迎,但 Tomcat 并不占主导地位,只有少数市场份额。至于第二句话,Tomcat 通常被用作 Apache HTTP Server 后面的 Servlet 容器。PHP 等通常与其他几个 Web 服务器一起使用,例如 Nginx、Lighttpd 等。
0赞 George c 4/14/2021
公平地说,我们专门使用 Tomcat 来为我们的服务器端软件提供服务(因为它都是基于 Java 的),但由于 Apache 的高级功能,我们在 Apache 下运行它
0赞 Prateek Gautam 1/31/2022
ServletsJsps 是否也用于动态内容?由于 tomcat 和 apache http 服务器能够提供静态内容而不是动态内容。我对这个@BasilBourque知之甚少
1赞 Basil Bourque 1/31/2022
@Matuagkeetarp 是的,Servlet 和 JSP 用于创建动态内容。阅读维基百科页面教程规格。Apache Tomcat 是用于运行您编写的 Servlet/JSP 的几个可用产品之一。Eclipse Jetty 是 Tomcat 的直接竞争对手,两者都很受欢迎且很成功。
-1赞 Karthikeyan 3/28/2012 #5

Apache是一个用作HTTP的HTTP Web服务器。

Apache Tomcat 是一个 Java servlet 容器。它的功能与 Web 服务器相同,但被定制为执行 java servlet 和 JSP 页面。

评论

1赞 Dev 7/22/2014
是的,答案有点令人困惑,因为@Basil Bourque在上面说“ Coyote 是 Tomcat 中负责 Web 服务的模块,Catalina 是执行 Servlet 的模块。Jasper 是处理 JSP 的模块“,现在它清楚地说明了”TOMCAT 功能与自定义执行 java servlet 和 JSP 页面的 Web 服务器相同!!!
89赞 Satish Dhiman 7/6/2012 #6
  1. Apache 是一个通用的 http 服务器,它支持许多 Tomcat 所不支持的高级选项。
  2. 尽管 Tomcat 可以用作通用 http 服务器,但您也可以将 Apache 和 Tomcat 设置为与 Apache 一起工作,提供静态内容并将动态内容请求转发给 Tomcat。

评论

0赞 Koray Tugay 11/26/2014
不是所有的网络最终都是静态的吗?我的理解是,Tomcat 生成“一个”静态内容(动态),然后 Apache 将提供此服务。因此,Tomcat 永远不会真正提供动态内容或任何东西,它只会在需要时生成它。
14赞 Basil Bourque 1/16/2015
@KorayTugay 你混淆了你的术语。“在需要时生成它”正是“动态”的意思,与“静态”正好相反。Apache HTTP Server 的主要目的是提供静态内容,而 Servlet 技术的主要目的是动态生成内容(动态内容)。
1赞 Koray Tugay 1/16/2015
@BasilBourque 我对 Tomcat 实际上在这里提供内容感到困惑。它只会生成内容,当与 Apache Http Server 一起使用时,它不会提供它。也许你是对的,我只是感到困惑,但对我来说,我仍然会说,当一起使用时,Apache服务,Tomcat在需要时生成静态内容。如果不使用 Apache,Tomcat 中的 Coyote 将提供服务,而 Catalina 和 Jesper 正在生成动态内容。
3赞 Basil Bourque 1/16/2015
@KorayTugay 是的,您的最后评论是正确的。如果使用 Apache HTTP Server + Tomcat,则 Web 浏览器只能“看到”AWS,而不知道 Tomcat 正在幕后工作。AWS 是 Web 浏览器客户端和 Tomcat 之间的中间人。如果单独使用 Tomcat,则 Tomcat 中的 Coyote 模块将代替 AWS 来处理来自 Web 浏览器客户端的请求。我推荐后者(仅 Tomcat),除非您知道自己有非常特殊的需求,AWS 可以更好地解决这些需求。
0赞 chick3n0x07CC 12/21/2020
@BasilBourque是指AHS(Apache HTTP Server)而不是AWS?
4赞 yadul 9/24/2012 #7

好吧,Apache 是 HTTP Web 服务器,而 Tomcat 也是 Servlet 和 JSP 的 Web 服务器。 此外,Apache 在实时方面优于 Apache Tomcat

评论

21赞 GargantuChet 9/25/2012
这个问题很老了,你的答案似乎与很久以前发布的答案重复了。答案是值得赞赏的,但新的答案应该有助于增加对话。
22赞 streak 12/3/2012 #8

Apache 服务器是一个 HTTP 服务器,可以处理任何简单的 HTTP 请求,而 Tomcat 服务器实际上是一个 servlet 容器,可以处理 Java servlet 请求。

Web 服务器 [apache] 处理 Web 客户端(Web 浏览器)请求并将其转发到 servlet 容器 [tomcat],容器处理请求并发送响应,由 Web 服务器转发到 Web 客户端 [浏览器]。

您也可以查看此链接以获取更多说明:-

https://sites.google.com/site/sureshdevang/servlet-architecture

还要检查此答案以进行进一步研究:-

https://softwareengineering.stackexchange.com/a/221092

评论

0赞 Akitha_MJ 6/8/2020
sites.google.com/site/sureshdevang/servlet-architecture正如你所解释的,这提供了更好的视图