Qual é a diferença em termos de funcionalidade entre o Servidor HTTP Apache e o Apache Tomcat?
Eu sei que Tomcat está escrito em Java e o servidor HTTP está em C, mas além disso eu não sei realmente como eles se distinguem. Será que eles têm funcionalidades diferentes?
O Apache Tomcat é utilizado para implementar os seus servlets Java e JSPs. Assim, no seu projeto Java você pode construir seu arquivo WAR (abreviação de Web ARchive), e simplesmente soltá-lo no diretório de deploy no Tomcat.
Então basicamente o Apache é um servidor HTTP, servindo HTTP. Tomcat é um Servidor Servlet e JSP que serve tecnologias Java.
Tomcat inclui Catalina, que é um recipiente de servlet. Um servlet, no final, é uma classe Java. Arquivos JSP (que são similares ao PHP, e arquivos ASP mais antigos) são gerados em código Java (HttpServlet), que é compilado em arquivos .class pelo servidor e executado pela máquina virtual Java.
Além das boas respostas acima, eu acho que deve ser dito que Tomcat tem o seu próprio servidor HTTP embutido nele, e é totalmente funcional para servir conteúdo estático também. Dependendo da configuração da sua máquina virtual java, ele pode realmente superar os conectores tradicionais no apache, tais como mod_proxy e mod_jk.
Isso dito um servidor Tomcat totalmente otimizado deve servir arquivos estáticos rapidamente e se você tiver servlets Java, JSPs e arquivos ColdFusion além de conteúdo estático você pode achar que o tomcat faz um excelente trabalho por si só.
Tomcat é principalmente um servidor de aplicações, que serve pedidos para servlets Java ou ficheiros JSP personalizados no seu servidor. Ele é normalmente usado em conjunto com o servidor HTTP Apache (pelo menos na minha experiência). Use-o para processar manualmente as requisições recebidas.
O servidor HTTP, por si só, é o melhor para servir conteúdo estático... arquivos html, imagens, etc.