¿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 no sé realmente en qué se diferencian. ¿Tienen una funcionalidad diferente?
Apache Tomcat se utiliza para desplegar tus Java Servlets y JSPs. Así que en su proyecto Java puede construir su archivo WAR (abreviatura de Web ARchive), y simplemente dejarlo en el directorio de despliegue en Tomcat.
Así que, básicamente, Apache es un servidor HTTP, que sirve HTTP. Tomcat es un servidor de Servlets y JSPs que sirve a las tecnologías Java.
Tomcat incluye Catalina, que es un contenedor de servlets. Un servlet, al final, es una clase Java. Los archivos JSP (que son similares a los de PHP, y a los antiguos archivos 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.
Además de las buenas respuestas anteriores, creo que hay que decir que Tomcat tiene su propio servidor HTTP incorporado, y es totalmente funcional en el servicio de contenido estático también. Dependiendo de la configuración de tu máquina virtual java, puede superar a los conectores tradicionales de apache, como mod_proxy y mod_jk.
Dicho esto, un servidor Tomcat totalmente optimizado debería servir archivos estáticos rápidamente y si tienes servlets Java, JSPs y archivos ColdFusion además de contenido estático, puedes encontrar que tomcat hace un excelente trabajo por sí mismo.
Tomcat es principalmente un servidor de aplicaciones, que sirve peticiones a servlets Java o archivos JSP construidos a medida en su servidor. Normalmente se utiliza junto con el servidor HTTP Apache (al menos en mi experiencia). Se utiliza para procesar manualmente las solicitudes entrantes.
El servidor HTTP, por sí mismo, es mejor para servir contenido estático... archivos html, imágenes, etc.