Diferença entre o Apache HTTP Server e o Apache Tomcat? [fechadas]

637

Qual é a diferença em termos de funcionalidade entre o Apache HTTP Server e o Apache Tomcat?

Eu sei que o Tomcat está escrito em Java e o servidor HTTP está em C, mas, além disso, eu realmente não sei como eles se distinguem. Eles têm funcionalidades diferentes?

kaybenleroll
fonte
12
Eu adicionei um resumo no meu blog, talvez isso ajude alguém: tugay.biz/2014/11/what-is-tomcat-is-it-web-server-what.html
Koray Tugay
36
Fiquei me perguntando exatamente o que o OP estava perguntando e não vejo por que ele foi fechado. Felizmente, existem respostas.
Florian F
4
O servidor da web Apache e o Apache Tomcat são duas ferramentas diferentes ajustadas para propósitos diferentes. Se não pudermos mais distinguir seus casos de uso por fatos e conhecimentos, chegamos a um estado lastimável. Esse esforço para fechar perguntas "argumentativas" foi superado. Talvez os moderadores precisem ser mais informados e menos opinativos. Como @FlorianF diz, pelo menos existem respostas agora.
NeilG 8/11
2
Dado o número de votos positivos - isso não deveria ter sido fechado - mas deveria estar bloqueado -, pois na verdade é uma pergunta muito boa com respostas úteis.
simbro
O closedaviso nesta pergunta diz que exige que o Answers tenha um conteúdo objetivo, mas espera que, em vez disso, produza conteúdo subjetivo da resposta - a maioria das respostas parece conter conteúdo objetivo (principalmente as respostas mais votadas) em vez de subjetivas -, portanto, esta pergunta deve ser NÃO FECHADO. Os medos da subjetividade nunca realmente aconteceram, e eu não concordo que a Questão tenha arriscado ser subjetiva em primeiro lugar.
Cellepo # 6/19

Respostas:

475

O Apache Tomcat é usado para implementar seus Java Servlets e JSPs. Portanto, em seu projeto Java, você pode criar seu arquivo WAR (abreviação de Web ARchive) e simplesmente soltá-lo no diretório deploy no Tomcat.

Então, basicamente, o Apache é um servidor HTTP, servindo HTTP. O Tomcat é um Servlet e JSP Server que serve tecnologias Java.

O Tomcat inclui Catalina, que é um contêiner de servlet. Um servlet, no final, é uma classe Java. Os arquivos JSP (que são semelhantes ao PHP e os arquivos ASP mais antigos) são gerados no código Java (HttpServlet), que é compilado em arquivos .class pelo servidor e executado pela máquina virtual Java.

Bernie Perez
fonte
51
O que você pretende "Apache está servindo [...] HTTP"? O Tomcat também não serve HTTP (também conhecido como hipertexto)? Por que o Tomcat não pode simplesmente ser um módulo Apache "mod_java"? Você pode explicar?
Peterino 19/01/12
30
O Tomcat é um contêiner de servlet. Um servlet, no final, é uma classe Java. Os arquivos JSP (que são semelhantes aos arquivos PHP ou ASP) são gerados no código Java (HttpServlet), que é compilado em arquivos .class pelo servidor e executado pela máquina virtual Java. - Além disso, este fórum aqui explica muito bem a diferença entre o Apache HTTPD e o Tomcat: coderanch.com/t/85182/Tomcat/…
Peterino
17
O Tomcat realmente traz consigo um servidor web capaz. O Tomcat é um contêiner Servlet / JSP e também oferece um servidor da web. O servidor web do Tomcat é bastante bom, capaz de lidar com a maioria das necessidades de sites pequenos e médios. Com suporte para Java NIO e memória de 64 bits, até mesmo alguns sites em larga escala podem ser atendidos pelo módulo Catalina do Tomcat. Por várias razões, algumas pessoas optam por ignorar a Catalina e, em vez disso, usam os recursos de Servlet do Tomcat por trás do httpdproduto de servidor da web Apache .
Basil Bourque
21
Correção no meu comentário: O Coiote é o módulo no Tomcat responsável pela veiculação na web. Catalina é o módulo que faz Servlets. Jasper é o módulo que lida com JSPs.
Basil Bourque
17
@KorayTugay Sim. Tomcat = ( Web Server + Servlet container + JSP environment ). O servidor da Web está LIGADO por padrão quando você executa o startup.shscript do Tomcat , escutando na porta 8080 as conexões de entrada (chamadas HTTP). O Tomcat é Java puro, com sua própria implementação de servidor web (Coyote). O Apache HTTP Server (AHS), por outro lado, possui uma implementação completamente separada de um servidor da Web, usando o código C / C ++ nativo. O AHS é muito flexível e poderoso, mas geralmente é um exagero. O servidor web do Tomcat funciona muito bem. Use o AHS somente se for realmente necessário.
Basil Bourque
118

Além das excelentes respostas acima, acho que se deve dizer que o Tomcat possui seu próprio servidor HTTP incorporado e também é totalmente funcional para servir conteúdo estático. Dependendo da configuração da sua máquina virtual java, ela pode superar o desempenho de conectores tradicionais no apache, como mod_proxy e mod_jk.

Dito isso, um servidor Tomcat totalmente otimizado deve servir arquivos estáticos rapidamente e, se você tiver servlets Java, JSPs e arquivos ColdFusion, além do conteúdo estático, poderá descobrir que o tomcat faz um excelente trabalho por si só.

etírea
fonte
3
Verdade. E muitas pessoas ainda usam uma configuração extra do Apache além do Tomcat .. que é desnecessário na maioria dos casos.
precisa saber é o seguinte
6
A parte mais poderosa do http apache que poucos outros servidores suportam é a capacidade de redirecionar e reescrever a solicitação antes que o aplicativo a veja, principalmente através da mod_rewriteinjeção de mecanismo e ambiente condicional. mod_proxyfornece balanceamento de carga rudimentar (e combinado com mod_jk fornece sessão / estado compartilhado rudimentar / compartilhado entre instâncias do tomcat com balanceamento de carga).
cowbert
81
  1. O Apache é um servidor http de uso geral, que suporta várias opções avançadas que o Tomcat não.
  2. Embora o Tomcat possa ser usado como um servidor http de uso geral, você também pode configurar o Apache e o Tomcat para trabalharem em conjunto com o Apache servindo conteúdo estático e encaminhando as solicitações de conteúdo dinâmico ao Tomcat.
Satish Dhiman
fonte
Toda a web não é estática no final? Pelo que entendi, o Tomcat gera "um" conteúdo estático (dinamicamente) e, em seguida, o Apache atende a isso. Portanto, o Tomcat nunca veiculará conteúdo dinâmico nem nada, apenas o gerará quando necessário.
precisa
11
@KorayTugay Você está confundindo seus termos. "Gere quando necessário" é exatamente o que "dinâmico" significa e é exatamente o oposto de "estático". O principal objetivo do servidor HTTP Apache é fornecer conteúdo estático, enquanto o principal objetivo da tecnologia Servlet é gerar conteúdo on-the-fly (conteúdo dinâmico).
Basil Bourque
1
@BasilBourque Fiquei confuso com o Tomcat realmente exibindo conteúdo aqui. Ele irá gerar apenas o conteúdo, não será exibido quando usado em conjunto com o Apache Http Server. Provavelmente você está certo e estou confuso, mas para mim ainda diria que, quando usados ​​juntos, o Apache serve, o Tomcat gera conteúdo estático quando necessário. Se o Apache não for usado, o Coyote no Tomcat fará a veiculação, enquanto Catalina e Jesper estão gerando o conteúdo dinâmico.
precisa saber é o seguinte
3
@KorayTugay Sim, seu último comentário está correto. Se você estiver usando o Apache HTTP Server + Tomcat, os navegadores da Web apenas "verão" a AWS sem nenhuma pista de que o Tomcat esteja trabalhando atrás das cortinas. A AWS é intermediária entre os clientes do navegador da Web e o Tomcat. Se você estiver usando o Tomcat sozinho, o módulo Coyote no Tomcat substituirá a AWS para atender a solicitações de clientes de navegadores da web. Eu recomendo o último (somente o Tomcat), a menos que você saiba que possui necessidades muito especiais que seriam melhor atendidas pela AWS.
Basil Bourque
29

O Tomcat é principalmente um servidor de aplicativos, que serve solicitações para servlets Java ou arquivos JSP customizados em seu servidor. Geralmente é usado em conjunto com o servidor HTTP Apache (pelo menos na minha experiência). Use-o para processar manualmente as solicitações recebidas.

O servidor HTTP, por si só, é melhor para exibir conteúdo estático ... arquivos html, imagens etc.

levand
fonte
9
Duvido de Tomcat is primarily an application serverafirmação.
28412 Rachel
6
O tomcat deve ser principalmente um servidor de aplicativos. embora ele também contenha conteúdo estático do servidor.
Escalável
4
Sim, o Tomcat é de fato principalmente um servidor de aplicativos, se o termo for utilizado no sentido de um contêiner de Servlet que gera conteúdo dinâmico entregue aos navegadores da web. Como um dos primeiros contêineres de Servlet, essa é a razão de ser do Tomcat.
Basil Bourque
1
O tomcat não é um servidor de aplicativos, é um servidor da web. javajee.com/web-server-web-container-and-application-server
Prateek Mishra
@PrateekMishra Com base no link que você forneceu, sua declaração de que o tomcat é um servidor da web está incorreta; é (principalmente) um contêiner da web , também conhecido como contêiner de servlet .
Skomisa
21

um servidor apache é um servidor http que pode atender a qualquer solicitação HTTP simples, em que o servidor tomcat é na verdade um contêiner de servlet que pode atender a solicitações de servlet java.

O servidor da Web [apache] processa solicitações do cliente da Web (navegadores da Web) e o encaminha para o contêiner de servlet [tomcat] e o contêiner processa as solicitações e envia uma resposta que é encaminhada pelo servidor da Web para o cliente da Web [navegador].

Além disso, você pode verificar este link para obter mais esclarecimentos: -

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

Verifique também esta resposta para pesquisas adicionais: -

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

à risca
fonte
sites.google.com/site/sureshdevang/servlet-architecture Como você explica isso, dê uma melhor visão
Akitha_MJ
13

Se você estiver usando a tecnologia java (Servlet / JSP) para criar aplicativos da web, provavelmente usará o Apache Tomcat. No entanto, se você estiver usando outras tecnologias como Perl, PHP ou ruby, é melhor (mais fácil) usar o Apache HTTP Server.

vishal
fonte
9
Esta resposta não faz sentido para mim. A primeira frase está errada, pois existem muitos outros contêineres Servlet / JSP além do Tomcat, alguns bastante populares como Jetty, JBoss / Wildfly, Glassfish, WebSphere e muitos mais. Embora popular, o Tomcat não domina, com apenas uma minoria de participação de mercado. Quanto à segunda frase, o Tomcat é frequentemente usado como um contêiner de Servlet por trás do Apache HTTP Server. E PHP etc. são frequentemente usados ​​com vários outros servidores da web , como Nginx, Lighttpd e outros.
Basil Bourque
3

Bem, o Apache é servidor de HTTP, enquanto o Tomcat também é servidor de Servlets e JSP. Além disso, o Apache é preferível ao Apache Tomcat em tempo real

yadul
fonte
19
Esta pergunta é bastante antiga e sua resposta parece duplicar as que foram postadas há muito tempo. As respostas são apreciadas, mas novas respostas devem ajudar a aumentar a conversa.
precisa saber é o seguinte
-2

O Apache é um servidor da Web HTTP que serve como HTTP.

O Apache Tomcat é um contêiner de servlet java. Ele possui o mesmo servidor da web, mas é personalizado para executar servlet java e páginas JSP.

Karthikeyan
fonte
1
sim, a resposta é um pouco confusa, como @ Basil Bourque disse acima "O coiote é o módulo no Tomcat responsável pela veiculação na web, a Catalina é o módulo que faz Servlets. e o Jasper é o módulo que lida com JSPs" agora fornece clareza sobre como "TOMCAT RECURSOS Mesmo como servidor web personalizado para executar servlet java e páginas JSP !!!! ""
Dev Dev