¿Diferencia entre un servidor de aplicaciones y un contenedor de servlets?

115

Estoy tratando de entender la diferencia entre un servidor de aplicaciones completo (por ejemplo, Weblogic, JBoss, etc.) y un contenedor de servlets (Tomcat, Jetty, etc.).

¿En qué se diferencian y cuándo usar cuáles?

Gracias,

Pushkar
fuente
@Jigar: si conoce la pregunta precisa que esto duplica, entonces debería votar para cerrarla como un duplicado.
Joachim Sauer
1
@Joachim que no votación la clausura.
Jigar Joshi
2
porque no es un duplicado. :)
Bozho
1
Uy ... siéntete libre de ignorarme, parece que aún no he alcanzado mi nivel de cafeína necesario.
Joachim Sauer

Respuestas:

171

Un contenedor de servlet solo admite la API de servlet (incluidos JSP, JSTL).

Un servidor de aplicaciones admite todo JavaEE: EJB, JMS, CDI, JTA, la API de servlet (incluidas JSP, JSTL), etc.

Es posible ejecutar la mayoría de las tecnologías JavaEE en un contenedor de servlets, pero debe instalar una implementación independiente de la tecnología en particular.

Bozho
fuente
1
+1 de mi lado, buenas diferencias. Más diferencias @Bozho
Deepak
1
@Bozho: +1: Una cosa que he notado hasta ahora sobre ti son los términos simplistas que a menudo incorporas en tus increíbles respuestas.
Shirgill Farhan
1
es muy útil @Bozho
Xstian
@Bozho ¿Se pueden llamar a los contenedores de servlet como servidores con capacidades subconjunto de * servidor de aplicaciones ". Y en el fondo funcionan de manera idéntica (para los casos de uso comunes a ambos).
Kuldeep Yadav
15

En términos generales, un contenedor de servlets se limita más o menos a la implementación de la especificación de servlet J2EE. Además, se centra en el entorno de ejecución y no tanto en proporcionar herramientas adicionales.

Por el contrario, un servidor de aplicaciones completo implementa toda la pila J2EE; además, viene con todas las herramientas empresariales y posibilidades de integración. Un servidor de aplicaciones generalmente tiene interfaces de administración avanzadas, admite la agrupación en clústeres y otras funciones que se utilizan principalmente en el desarrollo de sistemas de alta gama.

Para un principiante, probablemente sea mejor quedarse con un contenedor de servlets simple, ya que la curva de aprendizaje es mucho menos empinada.


Editar

@Apache Fan: Depende de los detalles de su situación, como los sistemas existentes y los planes futuros, entre otras cosas. No creo que aquí sea aplicable un enfoque de diagrama de flujo genérico.

La selección de la plataforma generalmente se realiza sopesando los requisitos específicos con el conocimiento de primera mano de los sistemas en consideración.

Sin embargo, la pregunta no da pistas sobre cuáles son los criterios de evaluación. ¿Debería ser de código abierto? ¿Es necesario el soporte del proveedor las 24 horas del día? ¿Con qué tipo de entorno empresarial debería integrarse el sistema? ¿Son las tarifas de licencia un problema? ¿Alguna tecnología o herramienta imprescindible? Etc.

Sin saber lo anterior, prácticamente se dispara en la oscuridad.

Saul
fuente
Lo pregunto desde una perspectiva empresarial.
Pushkar
11

Básicamente, un servidor de aplicaciones en el contexto de Java EE es un software instalado en un servidor y que implementa una especificación de Java EE (Java EE 7, por ejemplo). Eso significa que dicho software (servidor de aplicaciones) debe poder ejecutar la aplicación Java EE.

Java EE define 4 dominios, los llamados contenedores :

  • Contenedor de applet,
  • Contenedor de cliente de aplicación,
  • Contenedor web y
  • Contenedor EJB.

Dos contenedores son parte del servidor de aplicaciones (EJB y contenedor web) y otros dos son parte del equipo cliente.

JBoss y Weblogic son servidores de aplicaciones, Tomcat y Jetty son contenedores web. Es por eso que JBoss y Weblogic pueden trabajar con más tecnologías que un contenedor web. El servidor de aplicaciones puede administrar EJB.

El contenedor de servlets no es la expresión adecuada para Tomcat y Jetty calificados porque es más restrictivo. Tomcat también puede ejecutar JSP y JSF, no solo Servlets.

nanachimi
fuente
2

afaik, websphere y jboss son un servidor j2ee totalmente compatible que puede ejecutarse más allá de los servlets, como EJB, mientras que Tomcat es solo un contenedor de servlets y no puede ejecutar EJB en él.

pregunta
fuente
entonces, ¿en qué categoría viene el servidor Apache?
Rolling Stone
Apache HTTP Server es un servidor web completo .
pregunta el
2

En términos simples: Un servidor web significa: Manejo de solicitudes HTTP (generalmente de navegadores).

Un contenedor de servlets (por ejemplo, Tomcat) significa: Puede manejar servlets y JSP.

Un servidor de aplicaciones (por ejemplo, GlassFish) significa: * Puede administrar aplicaciones Java EE (generalmente tanto servlet / JSP como EJB).

Para un principiante, probablemente sea mejor quedarse con un contenedor de servlet simple.

Crroods
fuente