Unterschied zwischen dem Apache HTTP Server und Apache Tomcat? [geschlossen]

637

Was ist der Unterschied in Bezug auf die Funktionalität zwischen dem Apache HTTP Server und Apache Tomcat?

Ich weiß, dass Tomcat in Java geschrieben ist und der HTTP-Server in C, aber ansonsten weiß ich nicht wirklich, wie sie unterschieden werden. Haben sie unterschiedliche Funktionen?

Kaybenleroll
quelle
12
Ich habe eine Zusammenfassung in meinem Blog hinzugefügt, vielleicht hilft es jemandem: tugay.biz/2014/11/what-is-tomcat-is-it-web-server-what.html
Koray Tugay
36
Ich habe mich genau gefragt, was das OP gefragt hat, und ich verstehe nicht, warum es geschlossen wurde. Zum Glück gibt es Antworten.
Florian F
4
Apache-Webserver und Apache Tomcat sind zwei verschiedene Tools, die für unterschiedliche Zwecke optimiert wurden. Wenn wir ihre Anwendungsfälle nicht mehr anhand von Fakten und Fachwissen unterscheiden können, sind wir in einem traurigen Zustand. Dieser Drang, "argumentative" Fragen zu schließen, hat zu viel erreicht. Vielleicht müssen Moderatoren besser informiert und weniger einfühlsam sein. Wie @FlorianF sagt, gibt es jetzt zumindest Antworten.
NeilG
2
Angesichts der Anzahl der Upvotes sollte dies nicht geschlossen sein, sondern gesperrt werden, da es sich tatsächlich um eine sehr gute Frage mit nützlichen Antworten handelt.
Simbro
Der closedHinweis zu dieser Frage besagt, dass Antworten objektiven Inhalt haben müssen, erwartet jedoch, dass diese Frage stattdessen subjektiven Antwortinhalt erzeugt - die Mehrheit der Antworten scheint eher objektiven Inhalt (insbesondere die höher bewerteten Antworten) als subjektiven zu enthalten - daher diese Frage sollte nicht geschlossen sein. Die Ängste vor Subjektivität sind nie wirklich aufgetreten, und ich stimme nicht zu, dass die Frage jemals riskiert wurde, überhaupt subjektiv zu sein.
Cellepo

Antworten:

474

Apache Tomcat wird zum Bereitstellen Ihrer Java-Servlets und JSPs verwendet. In Ihrem Java-Projekt können Sie also Ihre WAR-Datei (kurz für Web ARchive) erstellen und einfach im Bereitstellungsverzeichnis von Tomcat ablegen.

Apache ist also im Grunde ein HTTP-Server, der HTTP bereitstellt. Tomcat ist ein Servlet- und JSP-Server, der Java-Technologien bereitstellt.

Tomcat enthält Catalina, einen Servlet-Container. Ein Servlet ist am Ende eine Java-Klasse. JSP-Dateien (ähnlich wie PHP und ältere ASP-Dateien) werden in Java-Code (HttpServlet) generiert, der dann vom Server zu .class-Dateien kompiliert und von der Java Virtual Machine ausgeführt wird.

Bernie Perez
quelle
51
Was beabsichtigen Sie mit "Apache bedient [...] HTTP"? Dient Tomcat nicht auch (Hypertext aka) HTTP? Warum kann Tomcat nicht einfach ein "mod_java" Apache-Modul sein? Können Sie erklären?
Peterino
30
Tomcat ist ein Servlet-Container. Ein Servlet ist am Ende eine Java-Klasse. JSP-Dateien (die PHP- oder ASP-Dateien ähneln) werden in Java-Code (HttpServlet) generiert, der dann vom Server zu .class-Dateien kompiliert und von der virtuellen Java-Maschine ausgeführt wird. - Abgesehen davon erklärt dieses Forum hier den Unterschied zwischen Apache HTTPD und Tomcat ziemlich gut: coderanch.com/t/85182/Tomcat/…
Peterino
17
Tomcat bringt in der Tat einen leistungsfähigen Webserver mit. Tomcat ist ein Servlet / JSP-Container und bietet auch einen Webserver. Der Webserver von Tomcat ist recht gut und kann die meisten kleinen und mittleren Website-Anforderungen erfüllen. Mit der Unterstützung von Java NIO und 64-Bit-Speicher können auch einige größere Websites vom Catalina-Modul von Tomcat gut bedient werden. Aus verschiedenen Gründen ignorieren einige Leute Catalina und verwenden stattdessen die Servlet-Funktionen von Tomcat hinter dem Apache httpd-Webserverprodukt.
Basil Bourque
21
Korrektur meines Kommentars: Coyote ist das Modul in Tomcat, das für das Web-Serving verantwortlich ist. Catalina ist das Modul für Servlets. Jasper ist das Modul, das JSPs verarbeitet.
Basil Bourque
17
@KorayTugay Ja. Tomcat = ( Web Server + Servlet container + JSP environment ). Der Webserver ist standardmäßig eingeschaltet, wenn Sie das Tomcat- startup.shSkript ausführen und auf Port 8080 auf eingehende Verbindungen (HTTP-Aufrufe) warten. Tomcat ist reines Java mit einer eigenen Webserver-Implementierung (Coyote). Im Gegensatz dazu verfügt der Apache HTTP Server (AHS) über eine vollständig separate Implementierung eines Webservers mit nativem C / C ++ - Code. AHS ist sehr flexibel und leistungsstark, aber oft übertrieben. Tomcats eigener Webserver funktioniert sehr gut. Verwenden Sie AHS nur, wenn es wirklich benötigt wird.
Basil Bourque
118

Zusätzlich zu den oben genannten guten Antworten sollte in Tomcat ein eigener HTTP-Server integriert sein, der auch statische Inhalte bereitstellt. Abhängig von der Konfiguration Ihrer Java Virtual Machine kann die Leistung herkömmlicher Konnektoren in Apache wie mod_proxy und mod_jk sogar übertroffen werden.

Ein vollständig optimierter Tomcat-Server sollte jedoch schnell statische Dateien bereitstellen. Wenn Sie neben statischen Inhalten auch Java-Servlets, JSPs und ColdFusion-Dateien haben, kann Tomcat selbst hervorragende Arbeit leisten.

ethyreal
quelle
3
Wahr. Und viele Leute verwenden neben ihrem Tomcat immer noch ein zusätzliches Apache-Setup. Dies ist in den meisten Fällen nicht erforderlich.
Marco Schoolenberg
6
Der leistungsstärkste Teil von Apache http, den nur wenige andere Server unterstützen, ist die Möglichkeit, die Anforderung umzuleiten und neu zu schreiben, bevor die Anwendung sie sehen muss, und zwar durch mod_rewriteInjection der Engine und der bedingten Umgebung. mod_proxyBietet einen rudimentären Lastausgleich (und in Kombination mit mod_jk einen rudimentären Sticky Session / Shared State zwischen Tomcat-Instanzen mit Lastenausgleich).
Cowbert
81
  1. Apache ist ein universeller http-Server, der eine Reihe erweiterter Optionen unterstützt, die Tomcat nicht unterstützt.
  2. Obwohl Tomcat als Allzweck-http-Server verwendet werden kann, können Sie Apache und Tomcat auch so einrichten, dass sie mit Apache zusammenarbeiten, um statischen Inhalt bereitzustellen und die Anforderungen für dynamischen Inhalt an Tomcat weiterzuleiten.
Satish Dhiman
quelle
Ist nicht alles Web am Ende statisch? Nach meinem Verständnis generiert Tomcat "einen" statischen Inhalt (dynamisch), den Apache dann bereitstellt. Tomcat wird also niemals dynamische Inhalte oder ähnliches bereitstellen, sondern nur bei Bedarf generieren.
Koray Tugay
11
@KorayTugay Sie verwirren Ihre Bedingungen. "Bei Bedarf generieren" ist genau das, was "dynamisch" bedeutet, und das Gegenteil von "statisch". Der Hauptzweck des Apache HTTP-Servers besteht darin, statische Inhalte bereitzustellen, während der Hauptzweck der Servlet-Technologie darin besteht, Inhalte im laufenden Betrieb (dynamische Inhalte) zu generieren.
Basil Bourque
1
@BasilBourque Ich war verwirrt mit Tomcat, der hier tatsächlich Inhalte bereitstellt. Der Inhalt wird nur generiert und nicht bereitgestellt, wenn er zusammen mit Apache Http Server verwendet wird. Wahrscheinlich haben Sie Recht und ich bin nur verwirrt, aber für mich würde ich immer noch sagen, wenn Tomache zusammen verwendet wird, dass Tomcat bei Bedarf statische Inhalte generiert. Wenn nicht Apache verwendet wird, übernimmt Coyote in Tomcat das Servieren, während Catalina und Jesper den dynamischen Inhalt generieren.
Koray Tugay
3
@KorayTugay Ja, dein letzter Kommentar ist korrekt. Wenn Sie Apache HTTP Server + Tomcat verwenden, "sehen" Webbrowser nur AWS ohne Anhaltspunkt dafür, dass Tomcat hinter den Kulissen arbeitet. AWS ist ein Vermittler zwischen den Webbrowser-Clients und Tomcat. Wenn Sie nur Tomcat verwenden, ersetzt das Coyote-Modul in Tomcat AWS, um Anforderungen von Webbrowser-Clients zu bearbeiten. Ich empfehle letzteres (nur Tomcat), es sei denn, Sie wissen, dass Sie ganz besondere Bedürfnisse haben, die von AWS besser berücksichtigt werden.
Basil Bourque
29

Tomcat ist in erster Linie ein Anwendungsserver, der Anforderungen an benutzerdefinierte Java-Servlets oder JSP-Dateien auf Ihrem Server bereitstellt. Es wird normalerweise in Verbindung mit dem Apache HTTP-Server verwendet (zumindest nach meiner Erfahrung). Verwenden Sie diese Option, um eingehende Anforderungen manuell zu verarbeiten.

Der HTTP-Server selbst eignet sich am besten zum Bereitstellen statischer Inhalte ... HTML-Dateien, Bilder usw.

Levand
quelle
9
Ich bezweifle die Tomcat is primarily an application serverAussage.
Rachel
6
tomcat ist in erster Linie als Anwendungsserver gedacht . obwohl es auch statische Serverinhalte tut .
Skalierbar
4
Ja, Tomcat ist in erster Linie ein Anwendungsserver, wenn der Begriff im Sinne eines Servlet-Containers gemeint ist, der dynamische Inhalte generiert, die an Webbrowser gesendet werden. Als einer der ersten Servlet-Container ist dies der Grund für Tomcat.
Basil Bourque
1
tomcat ist kein Anwendungsserver, sondern ein Webserver. javajee.com/web-server-web-container-and-application-server
Prateek Mishra
@PrateekMishra Aufgrund des von Ihnen angegebenen Links ist Ihre Aussage, dass Tomcat ein Webserver ist, falsch. Es ist (hauptsächlich) ein Webcontainer , der auch als Servlet-Container bezeichnet wird .
Skomisa
20

Ein Apache-Server ist ein http-Server, der alle einfachen http-Anforderungen bedienen kann, wobei der Tomcat-Server tatsächlich ein Servlet-Container ist, der Java-Servlet-Anforderungen bedienen kann.

Der Webserver [Apache] verarbeitet Anforderungen des Webclients (Webbrowser) und leitet sie an den Servlet-Container [Tomcat] weiter. Der Container verarbeitet die Anforderungen und sendet eine Antwort, die vom Webserver an den Webclient [Browser] weitergeleitet wird.

Sie können diesen Link auch überprüfen, um weitere Informationen zu erhalten: -

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

Überprüfen Sie auch diese Antwort für weitere Nachforschungen: -

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

Streifen
quelle
13

Wenn Sie Java-Technologie (Servlet / JSP) zum Erstellen von Webanwendungen verwenden, werden Sie wahrscheinlich Apache Tomcat verwenden. Wenn Sie jedoch andere Technologien wie Perl, PHP oder Ruby verwenden, ist es besser (einfacher), Apache HTTP Server zu verwenden.

vishal
quelle
9
Diese Antwort macht für mich keinen Sinn. Der erste Satz ist insofern falsch, als es neben Tomcat noch viele andere Servlet / JSP-Container gibt, von denen einige sehr beliebt sind, wie Jetty, JBoss / Wildfly, Glassfish, WebSphere und viele mehr. Obwohl Tomcat beliebt ist, dominiert es nicht mit nur einer Minderheit des Marktanteils. Im zweiten Satz wird Tomcat häufig als Servlet-Container hinter Apache HTTP Server verwendet. PHP usw. werden häufig mit mehreren anderen Webservern wie Nginx, Lighttpd und anderen verwendet.
Basil Bourque
3

Nun, Apache ist ein HTTP-Webserver, während Tomcat auch ein Webserver für Servlets und JSP ist. Darüber hinaus wird Apache in Echtzeit gegenüber Apache Tomcat bevorzugt

Yadul
quelle
19
Diese Frage ist ziemlich alt und Ihre Antwort scheint diejenigen zu duplizieren, die vor langer Zeit veröffentlicht wurden. Antworten werden geschätzt, aber neue Antworten sollten dazu beitragen, die Konversation zu verbessern.
GargantuChet
-2

Apache ist ein HTTP-Webserver, der als HTTP dient.

Apache Tomcat ist ein Java-Servlet-Container. Es funktioniert genauso wie der Webserver, ist jedoch für die Ausführung von Java-Servlet- und JSP-Seiten angepasst.

Karthikeyan
quelle
1
Ja, die Antwort ist etwas verwirrend, wie @ Basil Bourque oben sagte: "Coyote ist das Modul in Tomcat, das für das Web-Serving verantwortlich ist, Catalina ist das Modul für Servlets. und Jasper ist das Modul für JSPs." Jetzt gibt es Klarheit darüber, wie "TOMCAT FEATURES Same" als Webserver angepasst, um Java-Servlet- und JSP-Seiten auszuführen !!!! "
Dev