Apache HTTP Server和Apache Tomcat之间的区别?[关闭]


637

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

我知道Tomcat是用Java编写的,而HTTP Server是用C编写的,但是除此之外,我真的不知道它们的区别。它们有不同的功能吗?


12
我在博客中添加了摘要,也许对某人有所
Koray Tugay

36
我想知道OP到底在问什么,我不知道为什么要关闭它。幸运的是有答案。
Florian F

4
Apache Web服务器和Apache Tomcat是为不同目的而调整的两个不同工具。如果我们不能再通过事实和专业知识来区分它们的用例,那么我们将陷入遗憾的境地。解决“争论性”问题的努力已经超出了预期。主持人也许需要更多地了解情况并减少自以为是。正如@FlorianF所说,至少现在有答案。
NeilG '18年

2
给定投票数-不应该将其关闭-而是应将其锁定-因为这实际上是一个非常有用的问题,有用的答案。
simbro

closed关于此问题的通知说,它要求答案具有客观的内容,但是期望该问题会产生主观的答案内容-大多数答案似乎包含客观的内容(尤其是投票较高的答案),而不是主观的-因此,此问题应该是未关闭的。对主观性的恐惧从来没有真正发生过,我不同意这个问题首先冒主观性的风险。
cellepo

Answers:


475

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

因此,基本上Apache是​​服务HTTP的HTTP服务器。Tomcat是服务于Java技术的Servlet和JSP Server。

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


51
您对“ Apache正在提供HTTP服务”的打算是什么?Tomcat是否也不提供HTTP(超文本名)?为什么Tomcat不能简单地成为“ mod_java” Apache模块?你可以解释吗?
Peterino

30
Tomcat是一个Servlet容器。最后,Servlet是Java类。JSP文件(类似于PHP oder ASP文件)被生成为Java代码(HttpServlet),然后由服务器编译为.class文件,并由Java虚拟机执行。-除此之外,本次论坛在这里介绍的Apache httpd和Tomcat的之间的区别相当不错:coderanch.com/t/85182/Tomcat/...
Peterino

17
Tomcat确实带来了功能强大的Web服务器。Tomcat是Servlet / JSP容器还提供Web服务器。Tomcat的Web服务器非常出色,能够满足大多数中小型网站的需求。凭借对Java NIO和64位内存的支持,Tomcat的Catalina模块甚至可以很好地服务于某些大型网站。由于各种原因,有些人选择忽略Catalina,而在Apache httpdWeb服务器产品后面使用Tomcat的Servlet功能。
罗勒·布尔克

21
我的评论更正:Coyote是Tomcat中负责Web服务的模块。Catalina是执行Servlet的模块。Jasper是处理JSP的模块。
罗勒·布尔克

17
@KorayTugay是的。Tomcat = ( Web Server + Servlet container + JSP environment )。当您运行Tomcat的startup.sh脚本时,Web服务器默认为ON ,在端口8080上侦听传入连接(HTTP调用)。Tomcat是纯Java,具有自己的Web服务器实现(Coyote)。的Apache HTTP服务器(AHS),与此相反,具有一个完全独立的执行的web服务器的,使用本机C / C ++代码。AHS非常灵活且功能强大,但通常会显得过分杀伤力。Tomcat自己的Web服务器运行良好。仅在确实需要时才使用AHS。
罗勒·布尔克

118

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

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


3
真正。而且许多人仍然使用除Tomcat之外的其他Apache设置。在大多数情况下,这是不必要的。
Marco Schoolenberg '17

6
很少有其他服务器支持的Apache http最强大的功能是能够在应用程序必须看到请求之前重新路由和重写请求,即通过mod_rewrite引擎和条件环境注入。mod_proxy提供基本的负载平衡(并与mod_jk组合提供负载平衡的Tomcat实例之间的基本粘性会话/共享状态)。
考伯特

81
  1. Apache是​​通用的http服务器,它支持Tomcat不支持的许多高级选项。
  2. 尽管Tomcat可用作通用的http服务器,但是您也可以将Apache和Tomcat设置为与Apache一起工作,以提供静态内容并将动态内容的请求转发到Tomcat。

并非所有网络最终都是静态的吗?我的理解是,Tomcat(动态地)生成“ a”静态内容,然后Apache将为其提供服务。因此,Tomcat永远不会实际提供动态内容或任何内容,它只会在需要时生成它。
Koray Tugay 2014年

11
@KorayTugay您正在混淆您的条款。“在需要时生成”正是“动态”的含义,与“静态”正好相反。Apache HTTP Server的主要目的是提供静态内容,而Servlet技术的主要目的是动态生成内容(动态内容)。
罗勒·布尔克

1
@BasilBourque我对Tomcat实际上在这里提供内容感到困惑。与Apache Http Server一起使用时,它将仅生成内容,而不会提供内容。也许您是对的,我只是感到困惑,但是对我来说,我仍然会说,当Apache一起使用时,Tomcat会在需要时生成静态内容。如果未使用Apache,则Catarina和Jesper会生成动态内容,而Tomcat中的Coyote会提供服务。
Koray Tugay 2015年

3
@KorayTugay是的,您的最后评论是正确的。如果使用的是Apache HTTP Server + Tomcat,则Web浏览器只能“看到” AWS,而不知道Tomcat是否在幕后工作。AWS是Web浏览器客户端和Tomcat之间的中间人。如果仅使用Tomcat,则Tomcat中的Coyote模块将代替AWS来处理来自Web浏览器客户端的请求。我建议使用后者(仅使用Tomcat),除非您知道自己有非常特殊的需求,而AWS可以更好地解决。
罗勒·布尔克

29

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

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


9
我怀疑Tomcat is primarily an application server声明。
雷切尔

6
Tomcat是主要的意思是应用程序服务器。尽管它也可以处理服务器静态内容。
2013年

4
是的,如果该术语的意思是Servlet容器生成交付给Web浏览器的动态内容,则Tomcat实际上确实是一个应用服务器。作为第一个Servlet容器之一,这就是Tomcat出现的原因。
罗勒·布尔克

1
tomcat不是应用程序服务器,而是Web服务器。javajee.com/web-server-web-container-and-application-server
Prateek Mishra,

@PrateekMishra根据您提供的链接,您声明tomcat是Web服务器是不正确的;(主要是)Web容器,也称为Servlet容器
skomisa

21

apache服务器是可以服务任何简单http请求的http服务器,其中tomcat服务器实际上是可以服务java servlet请求的servlet容器。

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

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

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

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

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


sites.google.com/site/sureshdevang/servlet-architecture正如您所解释的,这提供了更好的视图
Akitha_MJ

13

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


9
这个答案对我来说毫无意义。第一句话是错误的,因为除了Tomcat之外,还有许多其他Servlet / JSP容器,其中一些非常流行,例如Jetty,JBoss / Wildfly,Glassfish,WebSphere等。尽管很流行,但Tomcat并没有独占,头,市场份额很小。至于第二句话,Tomcat通常用作Apache HTTP Server之后的Servlet容器。PHP等经常与其他几个Web服务器一起使用,例如Nginx,Lighttpd等。
罗勒·布尔克

3

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


19
这个问题已经很老了,您的答案似乎与很久以前发布的答案重复。答案是值得赞赏的,但新的答案应有助于增加对话。
GargantuChet 2012年

-2

Apache是​​用作HTTP的HTTP Web服务器。

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


1
是的,答案有点令人困惑,如@ Basil Bourque所说:“土狼是Tomcat中负责Web服务的模块,卡塔琳娜是执行Servlet的模块。贾斯珀是处理JSP的模块”,现在它使“ TOMCAT功能相同作为定制执行Java servlet和JSP页面的Web服务器!!!!“
开发
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.