Есть несколько способов взглянуть на это.
Во-первых, единственной текущей версией Java является Java 6, которая в настоящее время находится в Обновлении 17 или около того. Java 5 и более ранние версии были отменены. Немного смущает то, что начиная с версии 1.2 Java приняла название «Java 2» (и упоминалась как J2SE или «Java 2 Standard Edition»), так что это была Java 2 версии 1.2. После Java 2 версии 1.4 (или более просто Java 1.4). Версия 1.5 стала Java 5 или J5SE, хотя J2SE все еще довольно распространен.
Другая релевантная версия Java - Java Enterprise Edition («Java EE»), ранее J2EE («Java 2 Enterprise Edition») с версией 6. Java EE определяет набор стандартов для серверных приложений. Наиболее важной частью является спецификация сервлетов, которая является основой для 99,9% веб-фреймворков Java. Он имеет версии и в настоящее время либо версии 2.5 или 2.6 (я забыл). Apache Tomcat является эталонной реализацией спецификации сервлетов.
Другой частью является EJB ("Enterprise Java Beans"), в настоящее время на EJB3 / 3.1. Это компонентная архитектура и действительно тяжелый. Он не используется так часто, как спецификация базовых сервлетов.
В то время как Tomcat является веб-контейнером, полная поддержка Java EE обеспечивается так называемым сервером приложений. Примеры включают Glassfish, JBoss, Weblogic и Websphere.
Java-классы часто упаковываются в JAR-файлы («Java ARchives»), которые представляют собой просто архивированный файл с заданной структурой каталогов.
Веб-приложения упакованы в виде войн («Веб-архив»), представляющих собой просто банку с другим расширением. WAR могут содержать библиотеки в форме JAR.
Полные приложения Java EE упакованы в EAR («Enterprise ARchives»), который также является просто другим расширением файла и может содержать war и другие файлы.
Теперь, чтобы усложнить это, существует около миллиарда веб-фреймворков Java, таких как Struts, Spring MVC, Tapestry, Wicket и многие, многие другие.
Кроме того, Java-приложения и корпоративные приложения довольно часто используют среду Spring. Spring (imho) является обязательным условием для разработки на стороне сервера Java, поскольку он упрощает многие различия между поставщиками и библиотеками и делает ваше приложение намного более подключаемым.
В замешательстве еще?