Diferença entre um servidor de aplicativos e um contêiner de servlet?

115

Estou tentando entender a diferença entre um servidor de aplicativos completo (por exemplo, Weblogic, JBoss etc.) e um contêiner de servlet (Tomcat, Jetty etc.).

Como eles diferem e quando usá-los?

Obrigado,

Pushkar
fonte
@Jigar: se você conhece a pergunta exata que esta duplicata, então você deveria votar para fechá-la como uma duplicata.
Joachim Sauer
1
@Joachim eu não votei para fechar.
Jigar Joshi
2
porque não é uma duplicata. :)
Bozho
1
opa ... sinta-se à vontade para me ignorar, parece que ainda não cheguei ao nível de cafeína necessário.
Joachim Sauer

Respostas:

171

Um servlet-container suporta apenas a API de servlet (incluindo JSP, JSTL).

Um servidor de aplicativos suporta todo o JavaEE - EJB, JMS, CDI, JTA, a API de servlet (incluindo JSP, JSTL), etc.

É possível executar a maioria das tecnologias JavaEE em um contêiner de servlet, mas você deve instalar uma implementação independente da tecnologia específica.

Bozho
fonte
1
+1 do meu lado, Boas diferenças. Quaisquer mais diferenças @Bozho
Deepak
1
@Bozho: +1: Uma coisa que notei até agora sobre você são os termos simplistas que você costuma incluir em suas respostas incríveis.
Shirgill Farhan
1
é muito útil @Bozho
Xstian
@Bozho Os contêineres de servlet podem ser chamados de servidores com subconjunto de recursos de * servidor de aplicativos ". E no fundo eles funcionam de forma idêntica (para os casos de uso comuns a ambos).
Kuldeep Yadav
15

Em termos gerais, um contêiner de servlet se restringe mais ou menos à implementação da especificação J2EE Servlet. Além disso, seu foco está no ambiente de tempo de execução e não tanto no fornecimento de ferramentas adicionais.

Em contraste, um servidor de aplicativos completo implementa toda a pilha J2EE; além disso, vem com todas as ferramentas da empresa e possibilidades de integração. Um servidor de aplicativos geralmente possui interfaces de administração avançada, ele suporta clustering e outros recursos usados ​​principalmente no desenvolvimento de sistemas de alta tecnologia.

Para um iniciante, provavelmente é melhor ficar com um contêiner de servlet simples, já que a curva de aprendizado lá é muito menos íngreme.


Editar

@Apache Fan: Depende das especificidades da sua situação, como sistemas existentes e planos futuros, entre outras coisas. Não acho que uma abordagem de fluxograma genérico seja aplicável aqui.

A seleção da plataforma geralmente é feita comparando-se os requisitos específicos com o conhecimento de primeira mão dos sistemas em consideração.

No entanto, a pergunta não dá pistas sobre quais são os critérios de avaliação. Deve ser de código aberto? O suporte do fornecedor 24 horas é necessário? Com que tipo de ambiente corporativo o sistema deve se integrar? As taxas de licenciamento são um problema? Alguma tecnologia ou ferramenta indispensável? Etc.

Sem saber o que foi dito acima, é basicamente um tiro no escuro.

Saul
fonte
Estou perguntando de uma perspectiva empresarial.
Pushkar de
11

Basicamente, um servidor de aplicativos no contexto Java EE é um software instalado em um servidor e que implementa uma especificação Java EE (Java EE 7 por exemplo). Isso significa que esse software (servidor de aplicativos) deve ser capaz de executar aplicativos Java EE.

Java EE define 4 domínios, os chamados contêineres :

  • Recipiente de miniaplicativo,
  • Container do aplicativo cliente,
  • Contêiner da Web, e
  • Contêiner EJB.

Dois contêineres fazem parte do servidor de aplicativos (EJB e contêiner da Web) e dois outros fazem parte do computador cliente.

JBoss e Weblogic são servidores de aplicativos, Tomcat e Jetty são contêineres da web. É por isso que JBoss e Weblogic podem lidar com mais tecnologias do que um contêiner da Web. O servidor de aplicativos pode gerenciar EJB.

O contêiner de servlet não é a expressão apropriada para Tomcat e Jetty qualificados porque é mais restritiva. O Tomcat também pode executar JSP e JSF, não apenas Servlets.

nanachimi
fonte
2

afaik, websphere e jboss são totalmente compatíveis com j2ee-server que podem ser executados além de servlets, como EJB, enquanto Tomcat é apenas um contêiner de servlet e você não pode executar EJBs nele.

asgs
fonte
então em qual categoria de servidor Apache vem?
Rolling stone
O Apache HTTP Server é um servidor da Web totalmente desenvolvido .
ASG
2

Em termos de Layman: Um servidor web significa: Manipulação de solicitações HTTP (geralmente de navegadores).

Um recipiente de servlet (por exemplo, Tomcat) significa: Ele pode lidar com servlets e JSP.

Um servidor de aplicativos (por exemplo, GlassFish) significa: * Ele pode gerenciar aplicativos Java EE (geralmente servlet / JSP e EJBs).

Para um iniciante, provavelmente é melhor ficar com um contêiner de servlet simples.

Crroods
fonte