Java EE vs Java SE

Exactamente, ¿en qué se diferencian?
Para comenzar, necesitamos hacer una distinción importante. Java EE está construido sobre Java SE. A diferencia de Java SE, la Edición Enterprise de Java es oficialmente «solo» una especificación, con implementaciones reales disponibles de Oracle y otros proveedores como RedHat e IBM.
Mientras que las API de SE proporcionan las capacidades básicas estándar del lenguaje Java, las API de EE proporcionan extensiones a Java que son súper útiles para desarrollar aplicaciones a gran escala. Dicho esto, puede haber excepciones que causen confusión adicional.
Entonces, ¿qué incluye realmente la especificación EE?
En la práctica, Java EE es una especificación general para extensiones Java empresariales. En esencia, incluye capacidades independientes como Enterprise Java Beans (EJB), Java Servlet, Rest API (JAX-RS), Contexts and Dependency Injection (CDI), y muchos más.
Cada nueva versión incluye actualizaciones a tecnologías individuales, junto con nuevas capacidades. Por ejemplo, se espera que Java EE 8 incluya la especificación Servlet 4.0 con soporte HTTP 2.0.
Como Java es compatible con versiones anteriores, también puede ejecutar versiones EE más antiguas además de las nuevas versiones SE y disfrutar de las nuevas funciones de lenguaje. Por ejemplo, una implementación compatible con Java EE 7 sobre Java SE 8 para lambdas y streams, por lo que no necesita esperar a que Java EE 8 lo use.
Una característica principal de Java EE es la especificación Servlet. Actualmente en v3.1, con v4.0 en desarrollo. Una de sus implementaciones más populares proviene de TomEE , que es una versión compatible con EE de Tomcat.