Différence entre Apache HTTP Server et Apache Tomcat? [fermé]

637

Quelle est la différence en termes de fonctionnalités entre Apache HTTP Server et Apache Tomcat?

Je sais que Tomcat est écrit en Java et le serveur HTTP est en C, mais à part ça, je ne sais pas vraiment comment ils se distinguent. Ont-ils des fonctionnalités différentes?

kaybenleroll
la source
12
J'ai ajouté un résumé dans mon blog, peut-être que cela aide quelqu'un: tugay.biz/2014/11/what-is-tomcat-is-it-web-server-what.html
Koray Tugay
36
Je me demandais exactement ce que le PO demandait, et je ne vois pas pourquoi il a été fermé. Heureusement, il y a des réponses.
Florian F
4
Le serveur Web Apache et Apache Tomcat sont deux outils différents réglés à des fins différentes. Si nous ne pouvons plus distinguer leurs cas d'utilisation par des faits et une expertise, nous sommes dans une situation désolante. Cette volonté de clore les questions "argumentatives" a dépassé la limite. Peut-être que les modérateurs doivent être plus informés et moins avisés. Comme le dit @FlorianF, au moins il y a des réponses maintenant.
NeilG
2
Étant donné le nombre de votes positifs - cela ne devrait pas être fermé - mais devrait être verrouillé - car c'est en fait une très bonne question avec des réponses utiles.
simbro
L' closedavis sur cette question indique qu'il faut que les réponses aient un contenu objectif, mais s'attend à ce que cette question produise à la place un contenu de réponse subjectif - la majorité des réponses semblent contenir un contenu objectif (en particulier les réponses les plus votées) plutôt que subjectif - donc cette question devrait être FERME. Les craintes de la subjectivité ne se sont jamais vraiment produites, et je ne suis pas d'accord que la question ait jamais risqué d'être subjective en premier lieu.
cellepo

Réponses:

475

Apache Tomcat est utilisé pour déployer vos servlets Java et JSP. Ainsi, dans votre projet Java, vous pouvez créer votre fichier WAR (abréviation de Web ARchive) et le déposer dans le répertoire de déploiement de Tomcat.

Donc, fondamentalement, Apache est un serveur HTTP, servant HTTP. Tomcat est un Servlet et un serveur JSP servant des technologies Java.

Tomcat inclut Catalina, qui est un conteneur de servlet. Un servlet, à la fin, est une classe Java. Les fichiers JSP (qui sont similaires à PHP et aux fichiers ASP plus anciens) sont générés en code Java (HttpServlet), qui est ensuite compilé en fichiers .class par le serveur et exécuté par la machine virtuelle Java.

Bernie Perez
la source
51
Qu'entendez-vous par "Apache [...] sert HTTP"? Tomcat ne sert-il pas également HTTP (hypertexte)? Pourquoi Tomcat ne peut-il pas simplement être un module Apache "mod_java"? Peux-tu expliquer?
Peterino
30
Tomcat est un conteneur de servlet. Un servlet, à la fin, est une classe Java. Les fichiers JSP (qui sont similaires aux fichiers PHP ou ASP) sont générés en code Java (HttpServlet), qui est ensuite compilé en fichiers .class par le serveur et exécuté par la machine virtuelle Java. - En dehors de cela, ce forum explique assez bien la différence entre Apache HTTPD et Tomcat: coderanch.com/t/85182/Tomcat/…
Peterino
17
Tomcat apporte en effet un serveur Web performant. Tomcat est un conteneur Servlet / JSP et propose également un serveur Web. Le serveur Web de Tomcat est assez bon, capable de gérer la plupart des besoins des sites Web de petite et moyenne taille. Avec la prise en charge de Java NIO et de la mémoire 64 bits, même certains sites Web à plus grande échelle peuvent être bien servis par le module Catalina de Tomcat. Pour diverses raisons, certaines personnes choisissent d'ignorer Catalina et utilisent à la place les capacités de servlet de Tomcat derrière le httpdproduit serveur Web Apache .
Basil Bourque
21
Correction de mon commentaire: Coyote est le module de Tomcat responsable du service web. Catalina est le module qui fait des servlets. Jasper est le module qui gère les JSP.
Basil Bourque
17
@KorayTugay Oui. Tomcat = ( Web Server + Servlet container + JSP environment ). Le serveur Web est activé par défaut lorsque vous exécutez le startup.shscript de Tomcat , en écoutant sur le port 8080 les connexions entrantes (appels HTTP). Tomcat est pur Java, avec sa propre implémentation de serveur Web (Coyote). Le serveur HTTP Apache (AHS), en revanche, a une implémentation complètement distincte d'un serveur Web, en utilisant du code C / C ++ natif. AHS est très flexible et puissant, mais est souvent exagéré. Le propre serveur Web de Tomcat fonctionne très bien. N'utilisez AHS que si vous en avez vraiment besoin.
Basil Bourque
118

En plus des bonnes réponses ci-dessus, je pense qu'il faut dire que Tomcat a son propre serveur HTTP intégré et qu'il est également entièrement fonctionnel pour servir du contenu statique. En fonction de la configuration de votre machine virtuelle java, il peut en fait surpasser les connecteurs traditionnels dans apache tels que mod_proxy et mod_jk.

Cela dit, un serveur Tomcat entièrement optimisé devrait servir des fichiers statiques rapidement et si vous avez des servlets Java, des JSP et des fichiers ColdFusion en plus du contenu statique, vous pouvez trouver que tomcat fait un excellent travail en soi.

éthyréal
la source
3
Vrai. Et beaucoup de gens utilisent toujours une configuration Apache supplémentaire en plus de leur Tomcat .. ce qui n'est pas nécessaire dans la plupart des cas.
Marco Schoolenberg
6
La partie la plus puissante d'Apache http que peu d'autres serveurs prennent en charge est la possibilité de réacheminer et de réécrire la demande avant que l'application ne la voie, notamment via le mod_rewritemoteur et l'injection d'environnement conditionnel. mod_proxyfournit un équilibrage de charge rudimentaire (et combiné avec mod_jk fournit une session collante rudimentaire / un état partagé entre les instances de tomcat à charge équilibrée).
cowbert
81
  1. Apache est un serveur http à usage général, qui prend en charge un certain nombre d'options avancées que Tomcat ne prend pas en charge.
  2. Bien que Tomcat puisse être utilisé en tant que serveur http à usage général, vous pouvez également configurer Apache et Tomcat pour fonctionner ensemble avec Apache servant du contenu statique et transmettant les demandes de contenu dynamique à Tomcat.
Satish Dhiman
la source
Tout le Web n'est-il pas statique à la fin? D'après ce que je comprends, Tomcat génère "un" contenu statique (dynamiquement), puis Apache le servira. Ainsi, Tomcat ne servira jamais réellement de contenu dynamique ou quoi que ce soit, il ne le générera qu'en cas de besoin.
Koray Tugay
11
@KorayTugay Vous confondez vos termes. "Générez-le lorsque cela est nécessaire" est exactement ce que signifie "dynamique", et est tout le contraire de "statique". Le but principal du serveur HTTP Apache est de servir du contenu statique, tandis que le but principal de la technologie Servlet est de générer du contenu à la volée (contenu dynamique).
Basil Bourque
1
@BasilBourque J'ai été confondu avec Tomcat qui sert réellement du contenu ici. Il ne générera que le contenu, il ne le servira pas lorsqu'il est utilisé avec Apache Http Server. Vous avez probablement raison et je suis juste confus, mais pour moi, je dirais toujours que, lorsqu'il est utilisé ensemble, Apache sert, Tomcat génère du contenu statique en cas de besoin. Si ce n'est pas Apache qui est utilisé, Coyote dans Tomcat fera le service, tandis que Catalina et Jesper génèrent le contenu dynamique.
Koray Tugay
3
@KorayTugay Oui, votre dernier commentaire est correct. Si vous utilisez Apache HTTP Server + Tomcat, les navigateurs Web "voient" uniquement AWS sans aucun indice que Tomcat fonctionne derrière les rideaux. AWS est un intermédiaire entre les clients du navigateur Web et Tomcat. Si vous utilisez Tomcat seul, le module Coyote de Tomcat remplace AWS pour répondre aux demandes des clients de navigateur Web. Je recommande ce dernier (Tomcat seul), sauf si vous savez que vous avez des besoins très spéciaux qui seraient mieux pris en compte par AWS.
Basil Bourque
29

Tomcat est principalement un serveur d'applications, qui sert les requêtes aux servlets Java personnalisés ou aux fichiers JSP sur votre serveur. Il est généralement utilisé en conjonction avec le serveur HTTP Apache (du moins d'après mon expérience). Utilisez-le pour traiter manuellement les demandes entrantes.

Le serveur HTTP, en soi, est le meilleur pour servir du contenu statique ... fichiers html, images, etc.

levand
la source
9
Je doute de la Tomcat is primarily an application serverdéclaration.
Rachel
6
tomcat est principalement destiné à être un serveur d'applications. bien qu'il fasse également du contenu statique sur le serveur.
Extensible
4
Oui, Tomcat est en effet principalement un serveur d'applications, si le terme est entendu dans le sens d'un conteneur Servlet générant du contenu dynamique livré aux navigateurs Web. En tant que l'un des premiers conteneurs de servlets, c'est la raison de Tomcat.
Basil Bourque
1
tomcat n'est pas un serveur d'applications, c'est un serveur web. javajee.com/web-server-web-container-and-application-server
Prateek Mishra
@PrateekMishra Sur la base du lien que vous avez fourni, votre déclaration selon laquelle tomcat est un serveur Web est incorrecte; il s'agit (principalement) d'un conteneur Web , également appelé conteneur de servlet .
skomisa
21

un serveur apache est un serveur http qui peut servir toutes les requêtes http simples, où le serveur tomcat est en fait un conteneur de servlet qui peut servir les requêtes de servlet java.

Le serveur Web [apache] traite les demandes du client Web (navigateurs Web) et les transmet au conteneur de servlet [tomcat] et le conteneur traite les demandes et envoie une réponse qui est transmise par le serveur Web au client Web [navigateur].

Vous pouvez également consulter ce lien pour plus de précisions: -

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

Vérifiez également cette réponse pour de plus amples recherches: -

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

traînée
la source
sites.google.com/site/sureshdevang/servlet-architecture Comme vous l'expliquez, cela donne une meilleure vue
Akitha_MJ
13

Si vous utilisez la technologie Java (Servlet / JSP) pour créer une application Web, vous utiliserez probablement Apache Tomcat. Cependant, si vous utilisez d'autres technologies comme Perl, PHP ou ruby, il est préférable (plus facile) d'utiliser Apache HTTP Server.

vishal
la source
9
Cette réponse n'a aucun sens pour moi. La première phrase est erronée car il existe de nombreux autres conteneurs Servlet / JSP en plus de Tomcat, certains très populaires tels que Jetty, JBoss / Wildfly, Glassfish, WebSphere et bien d'autres. Bien que populaire, Tomcat ne domine pas, avec seulement une minorité de part de marché. Quant à la deuxième phrase, Tomcat est souvent utilisé comme conteneur Servlet derrière Apache HTTP Server. Et PHP, etc. sont souvent utilisés avec plusieurs autres serveurs Web tels que Nginx, Lighttpd et autres.
Basil Bourque
3

Eh bien, Apache est un serveur Web HTTP, tandis que Tomcat est également un serveur Web pour les servlets et JSP. De plus, Apache est préféré à Apache Tomcat en temps réel

yadul
la source
19
Cette question est assez ancienne et votre réponse semble reproduire celles qui ont été publiées il y a longtemps. Les réponses sont appréciées, mais de nouvelles réponses devraient contribuer à enrichir la conversation.
GargantuChet
-2

Apache est un serveur Web HTTP qui sert de HTTP.

Apache Tomcat est un conteneur de servlet java. Il présente les mêmes caractéristiques que le serveur Web mais est personnalisé pour exécuter le servlet java et les pages JSP.

Karthikeyan
la source
1
oui, la réponse est un peu déroutante, comme @ Basil Bourque l'a dit ci-dessus "Coyote est le module de Tomcat responsable du service Web, Catalina est le module qui fait des servlets. et Jasper est le module qui gère les JSP" maintenant, il explique clairement comment "TOMCAT FEATURES Same en tant que serveur Web personnalisé pour exécuter le servlet java et les pages JSP !!!! "
Dev