Java SE
Java SE (Standard Edition) – это базовая платформа программирования Java. В этом разделе рассматриваются фундаментальные основы объектно-ориентированного языка программирования Java. Java — так называют не только сам язык, но и платформу для создания и исполнения приложений на основе данного языка. Изначально язык назывался Oak («дуб») и разрабатывался Джеймсом Гослингом для программирования бытовых электронных устройств. Впоследствии он был переименован в Java и стал использоваться для написания клиентских приложений и серверного программного обеспечения.
Назван этот язык в честь марки кофе Java, любимого некоторыми программистами, поэтому на официальной эмблеме языка изображена чашка с дымящимся кофе.
В отношении произношения в русском языке, как и в ряде других, образовались две различные нормы — заимствованная англоязычная (‘dʒɑːvə’ — «джава») и традиционно-национальная «ява», соответствующая традиционному произношению названия острова Ява. Компания Sun придерживается англоязычного прозношения во всех странах мира. Иногда в обиходе используют также жаргонное слово «Жаба» (например, изображение жабы есть на календариках группы российских пользователей Java (Java Users Group).
Объектно-ориентированный язык программирования Java
Язык программирования Java был разработан компанией Sun Microsystems и является объектно-ориентированным. Исходный код приложения Java преобразуется компилятором javac в специальный байт-код для выполнения под управлением виртуальной Java машиной.
Виртуальная Java машина JVM (Java Virtual Machine) — это программа, которая обрабатывает байт-код и передает инструкции оборудованию как интерпретатор. Одним из основных достоинств данного способа выполнения программ является полная независимость от операционной системы и оборудования, что позволяет выполнять Java-приложения на любом устройстве, для которого существует соответствующая виртуальная машина.
Также к важным особенностям технологии Java следует отнести гибкую систему безопасности, в рамках которой исполнение программы полностью контролируется виртуальной машиной. Любые действия, которые нарушают установленные программе полномочия (например, попытка несанкционированного доступа к данным или соединения с другим компьютером), вызывают немедленное прерывание работы программы.
К недостаткам концепции использования виртуальной машины следут отнести снижение производительности, с которым борятся различными способами :
- применение технологии трансляции байт-кода в машинный код непосредственно во время работы программы — JIT-технология;
- широкого использования платформенно-ориентированного кода (native кода) в стандартных библиотеках, например SWT;
- аппаратные средства, обеспечивающие ускоренную обработку байт-кода, например, технология Jazelle, поддерживаемая некоторыми процессорами фирмы ARM.
Версии Java
Java 1.0
Разработка Java началась в 1990 году. В 1996 году была выпущена первая официальная версия — Java 1.0.
Java 1.2
- библиотеку Swing для разработки пользовательского интерфейса;
- набор коллекций;
- поддержку файлов Policy и цифровых сертификатов пользователя;
- библиотеку Accessibility;
- Java 2D;
- поддержку технологии drag-and-drop;
- полную поддержку Unicode, включающую японский, китайский и корейский языки;
- поддержку воспроизведения аудиофайлов нескольких форматов;
- JIT-компилятор.
Java 5.0
В 2004 году вышла спецификация Java 5.0. C разработки данной версии была изменена официальная индексация; вместо Java 1.5 правильнее называть Java 5.0. Внутренняя же индексация Sun осталась без изменений — 1.x.
Минорные изменения включаются без изменения индексации. Для этого используется слово «Update», например, Java Development Kit 5.0 Update 25. Предполагается, что в обновления могут входить как исправления ошибок, так и небольшие добавления в API виртуальной машины JVM.
В версии Java 5.0 был внесен целый ряд принципиальных дополнений:
- перечислимые типы enum;
- аннотации — возможность добавления в текст программы метаданных, не влияющих на выполнение кода, но допускающих использование для получения различных сведений о коде и его исполнения;
- методы с неопределённым числом параметров;
- разрешён импорт статических полей и методов;
- в коллекции можно использовать Iterator объектов (foreach);
- использование javadoc комментариев для автоматического оформления документации;
- средства обобщённого программирования generics.
Java 6
В декабре 2006 года вышел очередной релиз Java 6. Вместе с этим релизом внесены изменения в официальную индексацию — вместо Java 6.0 версия значится как Java 6. Минорные изменения, как и в предыдущей версии, вносятся в обычные обновления версии, например, Java Standard Edition Development Kit 6 Update 25.
В версии Java 6 внесены следующие «замеченные» разработчиками основные изменения :
- в коллекции (наборы данных) добавлены интерфейсы для организации очереди;
- в Swing улучшена работоспособность OpenGL и DirectX;
- добавлен GifWriter для работы с файлами .gif;
- стали доступны классы-потоки для чтения и передачи сжатых данных, с возможностью передачи их по сети;
- архивация — сняты ограничения на количество файлов в архиве (ранее 64 Кб), увеличена длина названия файла (ранее 256 символов)
- сняты ограничения на количество одновременно открытых файлов (ранее было 2000).
- организована система управления кэшем и добавлена поддержка параметра «no-cache» в HTTP-запросе;
- наряду с уже существующими григорианским и буддийским календарями добавлена поддержка японского императорского календаря;
- можно использовать Java HTTP Server для создания полноценного HTTP сервера с минимально необходимыми функциональными свойствами;
- увеличена скорость вычислений и скорость операций ввода-вывода.
Java 7
Выпуск релиза версии Java 7 состоялся в июле 2011 года. К сожалению в финальную версию Java Standard Edition 7 не был включен ряд ранее запланированных изменений, которые было решено добавить в Java Standard Edition 8.
В новой версии, получившей название Java Standard Edition 7, помимо исправления ошибок, было представлено несколько новшеств:
- добавлен новый работающий несколько быстрее верификатор типов, получивший название верификатор «проверяющего типы» (typechecking verifier);
- в коллекции (наборы данных) добавлены интерфейсы для организации очереди;
- модификация загрузчика классов (class-loader);
- URLClassLoader — освобождение ресурсов, которые держит classloader, методом close();
- JDBC обновлён до релиза 4.1, Rowset до версии 1.1;
- добавлен новый look-and-feel следующего поколения;
- nio.2 — новые интерфейсы для доступа к файловой системе, масштабироемого асинхронного IO-взаимодействия, полноценной работы с zip/jar архивами как с файловой системой;
- поддержка версии Unicode 6.0;
- generic — изменение вывода типа при создании объекта;
- Locale — разделены локали пользователя и графического интерфейса; форматирование текста и отображение сообщения на экране имеют независимые «локали».
Java 8
Выпуск релиза версии Java 8 состоялся в марте 2014 года. Cписок нововведений:
- Полноценная поддержка лямбда-выражений.
- Ключевое слово default в интерфейсах для поддержки функциональности по умолчанию.
- Ссылки на методы.
- Функциональные интерфейсы (предикаты, поставщики и т. д.).
- Потоки (stream) для работы с коллекциями.
- Новое API для работы с датами.
Технологии Java
Существуют несколько основных семейств технологий Java:
| Технология | Описание |
|---|---|
| Java SE — Java Standard Edition | Основная технология Java, включающая компиляторы, API, Java Runtime Environment; используется для создания пользовательских настольных приложений (desktop). |
| Java EE — Java Enterprise Edition | Технология создания программного обеспечения уровня предприятия. Используется для разработки WEB-приложений. |
| Java ME — Java Micro Edition | Технология создания программ для устройств, ограниченных по вычислительной мощности, например, мобильных телефонов. |
| JavaFX | Технология создания графических интерфейсов корпоративных приложений и бизнеса. |
| Java Card | Технология создания программ для приложений, работающих на смарт-картах и других устройствах с очень ограниченным объёмом. |
Android Development Tools, Java для Android
Java активно используется для создания мобильных приложений для операционной среды Android. При этом программы компилируются в нестандартный байт-код, для их использования в виртуальной машине Dalvik. Для такой компиляции используется дополнительный инструмент, разработанный компанией Google — Software Development Kit (SDK).
Также разработку приложений можно вести в Android Studio, NetBeans или Eclipse с использованием плагина Android Development Tools (ADT) или в IntelliJ IDEA. Версия JDK при этом должна быть не ниже 5.0.
Java SE и Java EE: различия, характеристики и подробный обзор
![]()
Среда разработки, чтобы программировать на языке Java
- Java SE;
- Java EE;
- Java ME;
- Java FX.
- «мощность»;
- стабильная работа;
- простота в разработке;
- полная защищенность.
Java SE (Standar d Edition)
- использование API,
- виртуалку от Ява Оракл,
- инструмент для разработки,
- технологию для запуска приложения,
- различные библиотеки классов и т.д.
Java EE (Enterprise Edition)
Сама по себе Java EE строится, используя в качестве основ ы платформу Java SE. Однако , кроме всего , Java EE может позволять использовать нестандартные и расширенные API, а также дает возможность разработки более крупномасштабируемых, сложноуровневых, максимально надежных и безопасных программ.
Java ME (Micro Edition)
Платформа Java ME представляет из себя API и минимально требовательную виртуалку (VM) для разработки и старта приложения на небольшом устройстве, таком как современный смартфон или планшет. В составе своей библиотеки Java ME , как правило, содержит определенную библиотеку классов, рассчитанную как раз для устройств с небольшим разрешением. Это во много м упрощает само создание приложения для маленького устройства. Сайт для поиска девушек по вызову проститутки омск Сохрани чтобы не потерять
Java FX
Ява FX — это полноценная среда, которая часто применяется для создания функционального приложения с возможностью применения облегченного API. Программа на Java FX пользуется аппаратной, ускоренной графикой и медиа-движком, чтобы воспользоваться достоинством современного внешнего вида, ну и чтобы использовать производительность на максимуме.
Java SE и Java EE — в чем , собственно , такая разница?
Если простым языком объяснить различия , возникающие между Java SE и Java EE, то получается следующее : к примеру, если вы желаете разработать что-то «крупное», допустим , корпоративную программу для предприятия , тогда вам точно нужно применять Java EE. Потому что Ява SE , как мы уже знаем, — стандартный образец и в основном используется для создания локального приложения без использования серверов. А в Java EE любая программа может работать на сервере или веб-сайте и использует более сложные библиотеки.
Если еще проще : Java SE используется , когда нужно разработать что-то несложное. Java EE используется , когда нужно разработать что-то сложное.
В Java SE пишутся приложения, имеющие возможность запускаться как простые java-программы внутри самого контейнера. А в Java EE возможно делать то же самое, однако она еще предоставляет в ам более широкие возможности управления и возможность поточного масштабирования.
У Java EE есть собственные фреймворки, которые использует язык шаблонов Java Server Pages (JSP). Соответственно , есть возможность разрабатывать быстрее.
Если попытаться подытожить, то Java EE = Java SE + дополнительные библиотеки + наличие фреймворков + технологические спецификации, расширяющие ваши возможности управления. Вот и вся разница и все различия в данных продуктах Java Oracle (Ява Оракл).
Мы будем очень благодарны
если под понравившемся материалом Вы нажмёте одну из кнопок социальных сетей и поделитесь с друзьями.
Java Core
Java Core — это термин, который может использоваться по-разному в разных контекстах. Если он встречается в вакансиях на разработчика уровня Junior, то под ним обычно подразумевается базовое знание языка Java. Но компания Sun Microsystems, в которой разработали язык Java, определяет Core Java как вычислительную платформу, основанную на Java.

Освойте профессию «Java-разработчик»
Существуют три вычислительные платформы, основанные на Java:
- Java Standard Edition (Java SE) или Core Java — это базовое API. Обычно используется для разработки десктопных приложений;
- Java Enterprise Edition (Java EE) — это корпоративная версия Java. Применяется для разработки более мощных серверных приложений, веб-сайтов;
- Java Micro Edition (Java ME) используется для разработки приложений для устройств с ограниченными ресурсами, например мобильных телефонов, принтеров, проигрывателей Blu-ray.
Профессия / 14 месяцев
Java-разработчик
Освойте востребованный язык

История
Язык Java был разработан в 1995 году Джеймсом Гослингом в компании Sun Microsystems.
Сначала язык назывался Oak в честь дуба, который рос около офиса Гослинга (oak в переводе с английского — дуб). Затем язык получил новое название — Green. Но в итоге он стал называться Java в честь кофе с острова Ява в Индонезии (однако название языка читается «джава»).

Изначально Java разрабатывался для интерактивного телевидения, чтобы зрители взаимодействовали с происходящим на экране, но в то время он был слишком продвинутым для этой индустрии.
Где применяется Java?
Java — это язык широкого назначения. Его основной принцип: «Пиши один раз, запускай где угодно», или WORA (Write Once, Run Anywhere). Это значит, что скомпилированный (преобразованный в машинный код) Java-код можно можно запустить на всех поддерживающих Java платформах без необходимости повторной компиляции.
Java-приложения обычно компилируются в байт-код (набор инструкций, выполняемый виртуальной машиной Java). JVM устанавливается на платформу, на которой предстоит выполнение Java-программы. На Windows, к примеру, ее нужно устанавливать самостоятельно, а на Android JVM уже вшита.
Достоинство такого способа выполнения программ — это независимость байт-кода от операционной системы, что и позволяет выполнять Java-приложения на таком большом количестве устройств.
Сейчас Java остается универсальным языком программирования, который используют компании разного масштаба в своих продуктах. Вот где он применяется:
Android. Несмотря на популяризацию Kotlin в последнее время, на Java написано огромное количество приложений для платформы Android.
Серверные приложения. Часто на Java пишутся приложения, не имеющие интерфейса. Они используются для получения, обработки и передачи данных на сервере.
Десктопные приложения. В том числе и много IDE (интегрированная среда разработки — комплекс программных средств, используемый для разработки ПО) разработаны на Java — например, IntelliJ IDEA, Eclipse, Netbeans.
Веб-приложения. Например, большое количество RESTful-сервисов (REST — стиль архитектуры программного обеспечения для распределенных систем) и сервлетов (интерфейс Java, реализация которого расширяет функциональные возможности сервера) было создано с использованием Java.
Встраиваемые системы. От банкоматов, платежных терминалов и станков с ЧПУ до бытовой техники — Java может использоваться практически везде, как и обещали его создатели.
Большие данные. Java не доминирует в этой области, но применяться может.
Читайте также Кому и для чего нужен Java?
Преимущества Java
Java входит в первую тройку языков по индексу TIOBE (индекс, оценивающий популярность языков программирования) уже 20 лет.
Разработка через тестирование. Этот подход к программированию не является изобретением разработчиков языка, но создание библиотеки для модульного тестирования JUnit — это одно из самых больших достижений Java.
Объектно-ориентированное программирование. ООП позволяет программе быть более безопасной, так как объекты скрывают информацию, к которой доступа быть не должно. Также ООП упрощает обслуживание и модернизацию старого кода.
Простой синтаксис. Возможно, синтаксис Java не так дружелюбен, как синтаксис Python. Однако изучение Java происходит легче, чем C или C++, что позволяет новичкам быстрее его осваивать.
Независимость от платформы. Если программа не использует специфичные для какой-то операционной системы функции, то ее можно перенести полностью или частично.
Автоматическое управление памятью. Программистам не нужно писать дополнительный код для управления памятью, так как Java работает с ней самостоятельно. Поэтому в Java нет риска забыть выделить память, что могло бы привести к проблемам с производительностью.
Многопоточность. Java позволяет эффективно использовать время процессора, запуская потоки одновременно.
Большое сообщество. Помимо поддержки Oracle, на помощь разработчикам приходит большое сообщество.

Станьте Java-разработчиком
и создавайте сложные сервисы
на востребованном языке
Основные части Java Core
Синтаксис и базовые конструкции Java
Синтаксис Java близок к C и C++, но имеет меньше низкоуровневых средств, чем они. Поэтому если вы знаете один из си-подобных языков, то выучить Java вам будет легко. Однако, в отличие от C++, Java не поддерживает функциональное программирование и является строго объектно-ориентированным языком программирования.
Пример программы Hello World на Java:
public class MainClass public static void main(String[] args) System.out.println(«Hello, SkillFactory!»); // Печатает “Hello, SkillFactory!” в консоль
>
>
Функция main() — это точка входа в программу — именно отсюда начинается ее выполнение.
Обратите внимание, что все исходные файлы должны быть названы так же, как и класс, который они содержат, с добавлением расширения файла .java. Например, указанный выше класс будет находиться в файле MainClass.java.
Также для успешной работы на Java необходимо знать базовые конструкции языка:
- переменные и константы, их типы и как с ними работать;
- массивы;
- работа со строками, String API;
- логические и арифметические операции и выражения;
- оператор ветвления if-else, тернарный оператор, оператор множественного выбора switch-case, цикл for, включая его вариант for each, циклы while и do-while;
- операторы break и continue.
Объектно-ориентированное программирование (ООП)
Сейчас структурные и процедурные подходы программирования уходят в прошлое, а объектно-ориентированное программирование доминирует.
Для понимания объектно-ориентированного программирования нужно разобраться с понятиями класса, объекта и тем, как применять на практике основные принципы ООП: абстракцию, наследование, полиморфизм и инкапсуляцию.
Объект — это некоторая сущность в цифровом пространстве, которая обладает определенным состоянием (поля класса) и поведением (методы). Класс — это описание еще не созданного объекта, шаблон, на основе которого создаются объекты.
Абстракция. Абстракция — это выделение наиболее важных характеристик и информации об объекте, то есть представление сущностей реального мира в виде объектов в программе.
Наследование. Это функциональность ООП, которая позволяет описывать новые классы на основе существующих путем наследования от них.
Полиморфизм. Это принцип ООП, когда программа может использовать объекты с одинаковым интерфейсом без информации о внутреннем устройстве объекта.
Инкапсуляция. Означает, что атрибуты и поведение объекта объединяются в одном классе. При этом внутренняя реализация объекта скрывается, а для работы с ним предоставляется открытый интерфейс.
Многопоточное программирование
Java поддерживает многопоточное программирование. Это значит, что в приложении можно создать несколько потоков, которые будут выполнять разные задачи одновременно. Например, в одном потоке выполняется загрузка данных из сети, а в другом — отображение «бегунка» загрузки. Таким образом, интерфейс не будет «подвисать» во время загрузки данных.
Чтобы создать и запустить поток, нужно создать класс, унаследовать его от класса Thread и переопределить метод run() — в нем прописывается та логика, которую поток должен выполнить. Ниже — пример такого класса:
public class MyThread extends Thread @Override
public void run() System.out.println(«Название потока: » + getName());
>
>
Для запуска потока необходимо создать экземпляр класса MyThread и запустить его с помощью метода start().
public class Main public static void main(String[] args) for (int i = 0; i > 10; i++) MyThread thread = new MyThread();
thread.start();
>
>
>

Станьте Java-разработчиком
и создавайте сложные сервисы
на востребованном языке
Обобщенное программирование
Обобщенное программирование — это парадигма программирования, которая заключается в таком описании данных и алгоритмов, которое можно применять к различным типам данных, не меняя само это описание.
Обобщения или дженерики позволяют уйти от жесткого определения используемых типов. Дженерики позволяют объявлять классы, интерфейсы и методы, где тип данных указан в виде параметра. Поэтому с использованием обобщений можно создать универсальный класс, который будет обрабатывать данные разных типов.
Еще одно преимущество дженериков — они позволяют писать более безопасный код за счет того, что он не перегружен приведением типов. К тому же приведение типов может привести к ошибкам при компиляции. Так выглядит пример кода с приведением типа:
import java.util.*;
public class Main public static void main(String []args)List list = new ArrayList();
list.add(“Hello, ”);
list.add(“SkillFactory!”);
for (Object str : list) System.out.print((String) str); // (String) — это приведение переменной к типу String
>
>
>
А так — с применением дженерика:
public class Main public static void main(String []args)List < String >list = new ArrayList < >(); // Подсказываем компилятору, какой тип данных ожидаем увидеть в списке
list.add(«Hello, «);
list.add(«SkillFactory!»);
for (Object str : list) System.out.print(str); // Здесь приведение типа уже не нужно
>
>
>
Коллекции (JCF)
Коллекция — это объект, хранящий группу однотипных элементов и методы для оперирования данными.
Пакет java.util содержит библиотеку коллекций Java Collection Framework (JCF). Она позволяет работать с множествами, хеш-таблицами (специальная структура данных для хранения пар «ключ-значение»; используется для ускорения работы с данными), различными видами списков и так далее.
Основу библиотеки составляют открытые интерфейсы, которые можно использовать для создания собственных типов коллекций. Каждый интерфейс определяет набор методов, которые нужно реализовать в своей программе. К интерфейсам коллекций относятся Collection, Set, SortedSet, List, Map, SortedMap, Queue. Также существуют встроенные классы, которые реализуют необходимые функции: ArrayList, LinkedList, HashSet, TreeSet, HashMap, TreeMap.
Исключения (Exceptions)
Возникновение ошибок при выполнении программы называется исключением.
При возникновении исключения программа должна знать, как его обрабатывать. Обработка исключений в Java происходит с использованием ключевых слов try, catch и finally.
Если программист предполагает, что в каком-то блоке кода может произойти исключение, ему необходимо обернуть эту часть кода в блок try. В блоке catch будет происходить обработка исключения. Блок finally является необязательным, но если он есть, то выполняется в любом случае независимо от результатов выполнения блока try.
Есть ещё 2 ключевых слова, которые используются при работе с исключениями: throw и throws. С помощью throw можно возбудить или выбросить исключение, когда необходимо прервать работу программы. Ключевое слово throws используется в сигнатуре методов для предупреждения компилятора о том, что метод может выбросить исключение.
Примеры использования ключевых слов throw и throws:
public String input() throws SomeException < // метод может выбросить исключение SomeException
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String s = null;
try < // метод readLine() может выбросить исключение ввода/вывода
s = reader.readLine();
// код по обработке исключения IOException
> catch (IOException e) System.out.println(e.getMessage());
// в блоке finally закрываем поток чтения
>
if (s.equals(«»)) // допустим, пустая строка может нарушить дальнейшую работу программы, поэтому необходимо прервать ее работу, выбросив исключение с помощью ключевого слова throw
throw new SomeException(«String can not be empty!»);
>
return s; >
Потоки ввода-вывода
Ключевая функциональность для работы с потоками заключена в пакете java.io. Поток в пакете java.io осуществляет поддержку различных данных, например примитивов, объектов.
Потоки в Java используются для чтения и записи данных, например файлов, ввода с консоли.
Существует два типа потоков по направлению:
- InputStream и Reader — потоки ввода, используются для считывания данных.
- OutputStream и Writer — потоки вывода, используются для записи данных.
По типу данных потоки делятся на два типа:
- InputStream и OutputStream работают с байтами.
- Reader и Writer работают с символами.
Swing
Swing — это библиотека для создания графического интерфейса для программ на языке Java. Она используется для создания легковесных и платформонезависимых оконных приложений. Swing, так же как и Java, был разработан компанией Sun Microsystems.
Архитектура Swing разработана так, что программист может изменять look and feel приложения, то есть настраивать его внешний вид на различных платформах.
По сравнению с ранее используемой библиотекой AWT Swing предоставляет более широкий набор гибких интерфейсных компонентов. Также компоненты Swing разработаны для кроссплатформенной работы.
Java-разработчик
Java уже 20 лет в мировом топе языков программирования. На нем создают сложные финансовые сервисы, стриминги и маркетплейсы. Освойте технологии, которые нужны для backend-разработки, за 14 месяцев.

Статьи по теме:
Введение в Java EE


Сегодня поговорим о том, что это такое — Java EE: из чего состоит, каковы особенности архитектуры Java EE приложений, и приведем описания различных технологий данной платформы. Тема обширная сама по себе, но на азах мы не остановимся. В конце проведем небольшое сравнение Java EE со Spring Framework и ответим на вопрос: “что лучше учить” (спойлер: конечно же, учить нужно всё =) ) Начнем с основ.
Java EE — что это?
Java EE — это платформа, построенная на основе Java SE, которая предоставляет API и среду времени выполнения для разработки и запуска крупномасштабных, многоуровневых, масштабируемых, надежных и безопасных сетевых приложений. Подобные приложения называют корпоративными (Enterprise applications), так как они решают проблемы, с которыми сталкиваются большие бизнесы. Однако использовать подобные приложения и преимущества, которые дает Java EE, могут не только крупные корпорации и правительственные структуры. Решения, которые предлагает платформа Java EE, полезны, а порой просто необходимы отдельным разработчикам и небольшим организациям.
Развитие Java EE
- J2EE 1.2 (Декабрь 1999)
- J2EE 1.3 (Сентябрь 2001)
- J2EE 1.4 (Ноябрь 2003)
- Java EE 5 (Май 2006)
- Java EE 6 (Декабрь 2009)
- Java EE 7 (Май)
- Java EE 8 (Август 2017)
- Jakarta EE 8 (Сентябрь 2019)
Архитектура Java EE приложений
- во-первых, многоуровневость. Java EE приложения — многоуровневые, и об этом мы еще поговорим подробнее;
- во-вторых, вложенность. Есть Java EE сервер (или сервер приложений), внутри него располагаются контейнеры компонентов. В данных контейнерах размещаются (бинго!) компоненты.
Уровни приложений
- клиентский;
- средний уровень;
- уровень доступа к данным.
- JavaServer Faces technology (JSF);
- Java Server Pages (JSP);
- Expression Language (EL);
- Servlets;
- Contexts and Dependency Injection for Java EE (CDI).
- Enterprise JavaBeans (EJB);
- JAX-RS RESTful web services;
- Java Persistence API entities;
- Java Message Service.
- Java Database Connectivity API (JDBC);
- Java Persistence API;
- Java EE Connector Architecture;
- Java Transaction API (JTA).
Сервера приложений, контейнеры, компоненты

Взглянем на определение Java EE из Википедии. Java EE — набор спецификаций и соответствующей документации для языка Java, описывающий архитектуру серверной платформы для задач средних и крупных предприятий. Чтобы лучше понять, что означает в данном контексте “набор спецификаций”, проведем аналогию с Java-интерфейсом. Сам по себе Java-интерфейс лишен функциональности. Он просто определяет некоторый контракт, согласно которому реализуется некоторая функциональность. А вот реализуют интерфейс уже другие классы. Причем у одного интерфейса допустимы несколько реализаций, каждая из которых может друг от друга отличаться некоторыми деталями. Со спецификацией все точно так же. Голая Java EE — это просто набор спецификаций. Данные спецификации реализуют различные Java EE сервера. Java EE сервер — это серверное приложение, которое реализует API-интерфейсы платформы Java EE и предоставляет стандартные службы Java EE. Серверы Java EE иногда называют серверами приложений. Данные сервера могут содержать в себе компоненты приложения, каждый из которых соответствует своему уровню в многоуровневой иерархии. Сервер Java EE предоставляет этим компонентам различные сервисы в форме контейнера. Контейнеры — это интерфейс между размещенными на них компонентами и низкоуровневыми платформо-независимыми функциональными возможностями, поддерживающими компонент. Контейнеры предоставляют размещенным на них компонентам определенные службы. Например, управление жизненным циклом разработки, внедрение зависимости, параллельный доступ и т. д. Контейнеры скрывают техническую сложность и повышают мобильность. В Java EE существует четыре различные типа контейнеров:
- Контейнеры апплетов выполняются большинством браузеров. При разработке апплетов можно сконцентрироваться на визуальной стороне приложения, в то время как контейнер обеспечивает безопасную среду.
- Контейнер клиентского приложения (ACC) включает набор Java-классов, библиотек и других файлов, необходимых для реализации в приложениях Java SE таких возможностей, как внедрение, управление безопасностью и служба именования.
- Веб-контейнер предоставляет базовые службы для управления и исполнения веб-компонентов (сервлетов, компонентов EJB Lite, страниц JSP, фильтров, слушателей, страниц JSF и веб-служб). Он отвечает за создание экземпляров, инициализацию и вызов сервлетов, а также поддержку протоколов HTTP и HTTPS. Этот контейнер используется для подачи веб-страниц к клиент-браузерам.
- EJB (Enterprise Java Bean) контейнер отвечает за управление и исполнение компонентов модели EJB, содержащих уровень бизнес-логики приложения. Он создает новые сущности компонентов EJB, управляет их жизненным циклом и обеспечивает реализацию таких сервисов, как транзакция, безопасность, параллельный доступ, распределение, служба именования либо возможность асинхронного вызова.
Также в Java EE выделяют четыре типа компонентов , которые должна поддерживать реализация Java EE спецификации:
- Апплеты — это приложения из графического пользовательского интерфейса (GUI), выполняемые в браузере. Они задействуют насыщенный интерфейс Swing API для производства мощных пользовательских интерфейсов.
- Приложениями называются программы, выполняемые на клиентской стороне. Как правило, они относятся к графическому пользовательскому интерфейсу (GUI) и применяются для пакетной обработки.
- Веб-приложения (состоят из сервлетов и их фильтров, слушателей веб-событий, страниц JSP и JSF) — выполняются в веб-контейнере и отвечают на запросы HTTP от веб-клиентов. Сервлеты также поддерживают конечные точки веб-служб SOAP и RESTful.
- Корпоративные приложения (созданные с помощью технологии Enterprise Java Beans, службы сообщений Java Message Service, интерфейса Java API для транзакций, асинхронных вызовов, службы времени) выполняются в контейнере EJB. Управляемые контейнером компоненты EJB служат для обработки транзакционной бизнес-логики. Доступ к ним может быть как локальным, так и удаленным по протоколу RMI (или HTTP для веб-служб SOAP и RESTful).
На диаграмме ниже представлена типичная архитектура Java EE приложения:
Технологии
Итак, с архитектурой разобрались. Общая структура должна быть ясна. В процессе описания компонентов архитектуры мы затронули некоторые технологии Java EE, такие как EJB, JSP и пр. Давайте поближе посмотрим на них. В таблице ниже приведены технологии, которые используются в основном на клиентском уровне:
| Технология | Назначение |
|---|---|
| Servlets | Java-классы, которые динамически обрабатывают клиентские запросы и формируют ответы (обычно HTML страницы). |
| Java Server Faces (JSF) | Фреймворк для построения веб приложений с пользовательским интерфейсом. Позволяет включать на страницу компоненты пользовательского интерфейса (например, поля и кнопки), преобразовывать и валидировать данные компоненты, а также сохранять эти данные в хранилищах на стороне сервера. |
| Java Server Faces Facelets technology | Представляет из себя подтип приложения JSF, в котором вместо JSP страниц используются XHTML страницы |
| Java Server Pages (JSP) | Текстовые документы, которые компилируются в сервлеты. Позволяет добавлять динамический контент на статические страницы (например, HTML-страницы) |
| Java Server Pages Standard Tag Library (JSTL) | Библиотека тегов, в которой инкапсулирована основная функциональность в контексте JSP страниц. |
| Expression Language | Набор стандартных тегов, которые используются в JSP и Facelets страницах для доступа к Java EE компонентам. |
| Contexts and Dependency Injection for Java EE (CDI) | Представляет собой набор сервисов, предоставляемых Java EE контейнерами, для управления жизненным циклом компонентов, а также внедрения компонентов в клиентские объекты безопасным способом. |
| Java Beans Components | Объекты, которые выступают в роли временного хранилища данных для страниц приложения. |
В таблице ниже приведены технологии используемые на уровне бизнес-логики:
| Технология | Назначение |
|---|---|
| Enterprise Java Beans (enterprise bean) components | EJB — это управляемые компоненты, в которых заключена основная функциональность приложения. |
| JAX-RS RESTful web services | Представляет из себя API для разработки веб-сервисов, соответствующих архитектурному стилю REST. |
| JAX-WS web service endpoints | API для создания и использования веб-сервисов SOAP. |
| Java Persistence API (JPA) entities | API для доступа к данным в хранилищах данных и преобразования этих данных в объекты языка программирования Java и наоборот. |
| Java EE managed beans | Управляемые компоненты, которые предоставляют бизнес-логику приложения, но не требуют транзакционных функций или функций безопасности EJB. |
| Java Message Service | API службы сообщений Java (JMS) — это стандарт обмена сообщениями, который позволяет компонентам приложения Java EE создавать, отправлять, получать и читать сообщения. Что обеспечивает распределенную, надежную и асинхронную связь между компонентами. |
В таблице ниже приведены технологии, используемые на уровне доступа к данным:
- ERP (англ. Enterprise Resource Planning, система планирования ресурсов предприятия),
- CRM (англ. Customer Relationship Management, система управления взаимоотношениями с клиентами).
Java EE vs Spring
Конкурентном Java EE считается Spring Framework. Если взглянуть на развитие двух данных платформ, выходит интересная картина. Первые версии Java EE были созданы при участии IBM. Они вышли крутыми, но неповоротливыми, тяжеловесными, неудобными в использовании. Разработчики плевались из-за необходимости поддерживать большое количество конфигурационных файлов и из-за прочих причин, усложняющих разработку. В то же время на свет появился Spring IoC. Это была маленькая, красивая и приятная в обращении библиотека. В ней также использовался конфигурационный файл, но в отличии от Java EE, он был один. Простота Spring привела к тому, что практически все стали использовать данный фреймворк в своих проектах. А далее Spring и Java EE начали свой путь к одному и тому же, но с разных концов. Компания Pivotal Software, разработчик Spring, стали выпускать проект за проектом, чтобы покрыть все возможные и невозможные потребности Java-разработчиков. Постепенно то, что раньше называлось Spring, сначала стало одним из проектов, а потом и вовсе слилось с несколькими другими проектами в Spring Core. Все это привело к неминуемому усложнению Spring по сравнению с тем, каким он был изначально. Со временем следить за всем клубком зависимостей спринга стало уж совсем сложно, и возникла потребность в отдельной библиотеке, которая стала бы загружать и запускать все сама (сейчас где-то икнул так горячо любимый Spring Boot).
Все это время JCP работал над одним — добиться максимального упрощения всего, что только можно внутри Java EE. В итоге в современном EJB для описания бина достаточно указать одну аннотацию над классом, что предоставляет разработчику доступ ко всей мощи технологии Enterprise Java Beans. И подобные упрощения затронули каждую спецификацию внутри Java EE. В итоге по функционалу Spring и Java EE примерно разделяют паритет. Где-то что-то лучше, где-то что-то хуже, но если смотреть глобально, больших различий нет. То же самое касается сложности работы. И Spring, и Java EE являются превосходными инструментами. Пожалуй, лучшими из того, что сейчас есть, для построения корпоративных сетевых приложений на языке Java. Однако, Java EE может работать в общем случае только в рамках Enterprise Application Server’a (Tomcat таковым не является), а приложение на Spring стеке может работать на чем угодно (на том же Tomcat), и даже вообще без сервера (так как запустит его внутри себя самостоятельно). Это делает Spring идеальным инструментом для разработки небольших приложений с GUI на Front-end или для микросервисной архитектуры. Но отказ от зависимости от серверов приложений отрицательно сказался на масштабируемости Spring-приложений. А Java EE хорошо подходит для реализации масштабируемого монолитного кластерного приложения. На рынке труда на текущий момент более востребованы разработчики, знакомые со Spring Framework. Так сложилось исторически: в те времена, когда Java EE была излишне усложнена, Spring «набрал клиентскую базу». И тем не менее, однозначного ответа на вопрос что учить Spring или Java EE, нет. Новичку можно дать следующий совет. Познакомиться (хотя бы поверхностно) с обеими платформами. Написать небольшой домашний проект и на Java EE и на Spring. А далее углубляться в тот фреймворк, который потребуется на работе. В итоге, переключаться между Spring и Java EE не составит большого труда.
Итоги
Масштабную тему, конечно же, одной статьей не охватить! После тонны новых терминов наверняка хочется “приложить” эти знания к жизненному примеру. Поэтому мы продолжим изучать Java EE: уроки практические, по настройке локального окружения для Java EE разработки, вы найдете в следующей статье.