¿Diferencia entre el servidor HTTP Apache y Apache Tomcat? [cerrado]

637

¿Cuál es la diferencia en términos de funcionalidad entre el servidor HTTP Apache y Apache Tomcat?

Sé que Tomcat está escrito en Java y el servidor HTTP está en C, pero aparte de eso, realmente no sé cómo se distinguen. ¿Tienen una funcionalidad diferente?

kaybenleroll
fuente
12
He agregado un resumen en mi blog, tal vez ayude a alguien: tugay.biz/2014/11/what-is-tomcat-is-it-web-server-what.html
Koray Tugay
36
Me preguntaba exactamente qué estaba preguntando el OP, y no veo por qué estaba cerrado. Por suerte hay respuestas.
Florian F
44
El servidor web Apache y Apache Tomcat son dos herramientas diferentes ajustadas para diferentes propósitos. Si ya no podemos distinguir sus casos de uso por hechos y experiencia, entonces llegamos a un estado lamentable. Este impulso para cerrar preguntas "argumentativas" se ha excedido. Tal vez los moderadores necesitan estar más informados y menos obstinados. Como dice @FlorianF, al menos ahora hay respuestas.
NeilG
2
Dado el número de votos a favor, esto no debería haberse cerrado, sino que debería estar bloqueado, ya que en realidad es una muy buena pregunta con respuestas útiles.
simbro
El closedaviso en esta Pregunta dice que requiere que las Respuestas tengan un contenido objetivo, pero espera que esta Pregunta produzca contenido de Respuesta subjetiva, la mayoría de las Respuestas parecen contener contenido objetivo (particularmente las Respuestas con más votos) en lugar de subjetivo, por lo que esta Pregunta debe estar sin cerrar. Los miedos a la subjetividad nunca ocurrieron realmente, y no estoy de acuerdo con que la Pregunta haya corrido el riesgo de ser subjetiva en primer lugar.
cellepo

Respuestas:

475

Apache Tomcat se utiliza para implementar sus Java Servlets y JSP. Entonces, en su proyecto Java, puede compilar su archivo WAR (abreviatura de Web ARchive) y simplemente soltarlo en el directorio de implementación en Tomcat.

Básicamente, Apache es un servidor HTTP que sirve HTTP. Tomcat es un Servlet y Servidor JSP que sirve tecnologías Java.

Tomcat incluye Catalina, que es un contenedor de servlet. Un servlet, al final, es una clase Java. Los archivos JSP (que son similares a PHP y los archivos ASP más antiguos) se generan en código Java (HttpServlet), que luego es compilado en archivos .class por el servidor y ejecutado por la máquina virtual Java.

Bernie Pérez
fuente
51
¿Qué quiere decir con "Apache está [...] sirviendo HTTP"? ¿No está Tomcat también sirviendo (hipertexto aka) HTTP? ¿Por qué Tomcat no puede ser simplemente un módulo Apache "mod_java"? ¿Puedes explicar?
Peterino
30
Tomcat es un contenedor de servlet. Un servlet, al final, es una clase Java. Los archivos JSP (que son similares a los archivos PHP o ASP) se generan en código Java (HttpServlet), que luego es compilado en archivos .class por el servidor y ejecutado por la máquina virtual Java. - Aparte de eso, este foro aquí explica la diferencia entre Apache HTTPD y Tomcat bastante bien: coderanch.com/t/85182/Tomcat/…
Peterino
17
De hecho, Tomcat trae consigo un servidor web capaz. Tomcat es un contenedor Servlet / JSP y también ofrece un servidor web. El servidor web de Tomcat es bastante bueno, capaz de manejar la mayoría de las necesidades de sitios web pequeños y medianos. Con soporte para Java NIO y memoria de 64 bits, incluso algunos sitios web de mayor escala pueden funcionar bien con el módulo Catalina de Tomcat. Por varias razones, algunas personas optan por ignorar a Catalina y en su lugar usan las capacidades de Servlet de Tomcat detrás del httpdproducto del servidor web Apache .
Basil Bourque
21
Corrección a mi comentario: Coyote es el módulo en Tomcat responsable del servicio web. Catalina es el módulo que hace Servlets. Jasper es el módulo que maneja JSP.
Basil Bourque
17
@KorayTugay Sí. Tomcat = ( Web Server + Servlet container + JSP environment ). El servidor web está ENCENDIDO de manera predeterminada cuando ejecuta el startup.shscript de Tomcat , escuchando en el puerto 8080 las conexiones entrantes (llamadas HTTP). Tomcat es Java puro, con su propia implementación de servidor web (Coyote). El Servidor HTTP Apache (AHS), en contraste, tiene una implementación completamente separada de un servidor web, usando código nativo C / C ++. AHS es muy flexible y potente, pero a menudo es excesivo. El propio servidor web de Tomcat funciona muy bien. Use AHS solo si es realmente necesario.
Basil Bourque
118

Además de las buenas respuestas anteriores, creo que debería decirse que Tomcat tiene su propio servidor HTTP incorporado y también es completamente funcional para servir contenido estático. Dependiendo de la configuración de su máquina virtual java, en realidad puede superar a través de los conectores tradicionales en apache, como mod_proxy y mod_jk.

Dicho esto, un servidor Tomcat completamente optimizado debería servir archivos estáticos rápidamente y si tiene servlets Java, archivos JSP y ColdFusion además de contenido estático, puede encontrar que tomcat hace un excelente trabajo por sí mismo.

ethyreal
fuente
3
Cierto. Y muchas personas todavía usan una configuración de Apache adicional además de su Tomcat ... que es innecesario en la mayoría de los casos.
Marco Schoolenberg
66
La parte más poderosa de apache http que pocos servidores admiten es la capacidad de redirigir y reescribir la solicitud antes de que la aplicación tenga que verla, es decir, a través del mod_rewritemotor y la inyección de entorno condicional. mod_proxyproporciona un equilibrio de carga rudimentario (y combinado con mod_jk proporciona una sesión fija rudimentaria / estado compartido entre instancias de tomcat con equilibrio de carga).
cowbert
81
  1. Apache es un servidor http de uso general, que admite una serie de opciones avanzadas que Tomcat no admite.
  2. Aunque Tomcat se puede usar como un servidor http de propósito general, también puede configurar Apache y Tomcat para que trabajen junto con Apache que sirve contenido estático y reenvía las solicitudes de contenido dinámico a Tomcat.
Satish Dhiman
fuente
¿No es toda la web estática al final? Según tengo entendido, Tomcat genera "un" contenido estático (dinámicamente), luego Apache lo servirá. Por lo tanto, Tomcat nunca servirá contenido dinámico ni nada, solo lo generará cuando sea necesario.
Koray Tugay
11
@KorayTugay Estás confundiendo tus términos. "Generarlo cuando sea necesario" es exactamente lo que significa "dinámico", y es todo lo contrario de "estático". El propósito principal del servidor HTTP Apache es servir contenido estático, mientras que el propósito principal de la tecnología Servlet es generar contenido sobre la marcha (contenido dinámico).
Basil Bourque
1
@BasilBourque Estaba confundido con Tomcat en realidad sirviendo contenido aquí. Solo generará el contenido, no lo servirá cuando se use junto con Apache Http Server. Probablemente tengas razón y estoy confundido, pero para mí aún diría que, cuando se usan juntos, Apache sirve, Tomcat genera contenido estático cuando es necesario. Si no se usa Apache, Coyote en Tomcat servirá, mientras que Catalina y Jesper están generando el contenido dinámico.
Koray Tugay
3
@KorayTugay Sí, tu último comentario es correcto. Si usa Apache HTTP Server + Tomcat, los navegadores web solo "ven" AWS sin tener idea de que Tomcat está trabajando detrás de las cortinas. AWS es un intermediario entre los clientes del navegador web y Tomcat. Si usa Tomcat solo, el módulo Coyote en Tomcat reemplaza a AWS para atender las solicitudes de los clientes del navegador web. Recomiendo este último (solo Tomcat) a menos que sepa que tiene necesidades muy especiales que AWS resolvería mejor.
Basil Bourque
29

Tomcat es principalmente un servidor de aplicaciones, que atiende solicitudes de servlets Java personalizados o archivos JSP en su servidor. Por lo general, se usa junto con el servidor HTTP Apache (al menos en mi experiencia). Úselo para procesar manualmente las solicitudes entrantes.

El servidor HTTP, por sí mismo, es el mejor para servir contenido estático ... archivos html, imágenes, etc.

levand
fuente
99
Dudo de la Tomcat is primarily an application serverdeclaración.
Rachel
66
tomcat está destinado principalmente a ser un servidor de aplicaciones. aunque también tiene contenido estático del servidor.
Escalable el
44
Sí, Tomcat es principalmente un servidor de aplicaciones, si el término se entiende en el sentido de un contenedor de Servlet que genera contenido dinámico entregado a los navegadores web. Como uno de los primeros contenedores de Servlet, esa es la razón de ser de Tomcat.
Basil Bourque
1
tomcat no es un servidor de aplicaciones, es un servidor web. javajee.com/web-server-web-container-and-application-server
Prateek Mishra
@PrateekMishra Según el enlace que proporcionó, su declaración de que Tomcat es un servidor web es incorrecta; es (principalmente) un contenedor web , también conocido como contenedor de servlets .
skomisa
21

un servidor apache es un servidor http que puede atender cualquier solicitud http simple, donde el servidor tomcat es en realidad un contenedor de servlet que puede atender solicitudes de servlet java.

El servidor web [apache] procesa las solicitudes del cliente web (navegadores web) y lo reenvía al contenedor servlet [tomcat] y el contenedor procesa las solicitudes y envía la respuesta que el servidor web reenvía al cliente web [navegador].

También puede consultar este enlace para obtener más aclaraciones: -

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

Consulte también esta respuesta para seguir investigando: -

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

racha
fuente
sites.google.com/site/sureshdevang/servlet-architecture Mientras explica esto, dé una mejor vista
Akitha_MJ
13

Si está utilizando la tecnología Java (Servlet / JSP) para hacer una aplicación web, probablemente utilizará Apache Tomcat. Sin embargo, si está utilizando otras tecnologías como Perl, PHP o ruby, es mejor (más fácil) usar Apache HTTP Server.

vishal
fuente
99
Esta respuesta no tiene sentido para mí. La primera oración es incorrecta porque hay muchos otros contenedores Servlet / JSP además de Tomcat, algunos bastante populares como Jetty, JBoss / Wildfly, Glassfish, WebSphere y muchos más. Si bien es popular, Tomcat no domina, con solo una minoría de participación en el mercado. En cuanto a la segunda oración, Tomcat se usa a menudo como un contenedor de Servlet detrás del Servidor HTTP Apache. Y PHP, etc., a menudo se usan con varios otros servidores web como Nginx, Lighttpd y otros.
Basil Bourque
3

Bueno, Apache es un servidor web HTTP, donde Tomcat también es un servidor web para Servlets y JSP. Además, Apache se prefiere sobre Apache Tomcat en tiempo real

yadul
fuente
19
Esta pregunta es bastante antigua, y su respuesta parece duplicar las que se publicaron hace mucho tiempo. Se agradecen las respuestas, pero las nuevas respuestas deberían ayudar a agregar a la conversación.
GargantuChet
-2

Apache es un servidor web HTTP que sirve como HTTP.

Apache Tomcat es un contenedor de servlets de Java. Tiene las mismas características que el servidor web, pero está personalizado para ejecutar servlet java y páginas JSP.

Karthikeyan
fuente
1
sí, la respuesta es un poco confusa, ya que @ Basil Bourque dijo anteriormente "Coyote es el módulo en Tomcat responsable del servicio web, Catalina es el módulo que hace Servlets. y Jasper es el módulo que maneja JSPs" ahora da claridad sobre cómo "TOMCAT CARACTERÍSTICAS como servidor web personalizado para ejecutar servlet java y páginas JSP !!!! "
Dev