какие сайты написаны на java
Язык программирования Java: чем он хорош и сколько зарабатывают Java-разработчики
Java — один из самых популярных языков программирования. Сейчас на нём работают примерно 9 миллионов человек, а сами Java-приложения работают на семи миллиардах устройств. В этой статье расскажем, зачем учить этот язык и с чего начать.
Java — популярный язык программирования
Этот язык универсален и используется повсюду : мобильные приложения и игры, научные разработки и мобильные телефоны, игровые консоли и серьёзные суперкомпьютеры. Java — это основа практически для всех типов сетевых приложений. Многие исследования называют его языком программирования №1 среди разработчиков.
Какие преимущества у Java
Кроссплатформенность. У Java есть специальная программа, исполняющая код, — виртуальная машина Java или Java Virtual Machine. Написали программный код один раз — работает с любой аппаратной платформой или операционной системой: от смарткарт до приложений для умных домов.
Комьюнити. Как мы уже сказали, Java — достаточно распространённый язык: им пользуется большое количество разработчиков, и решение практически любой проблемы, которая может возникнуть при работе с Java, уже кто-то придумал. Благодаря тысячам библиотек и форумов, можно найти готовое решение почти в любой ситуации. На GitHub, например, есть открытые проекты и документация, а на форуме Stack Overflow можно обратиться за помощью к комьюнити.
Надёжность. Язык Java строго типизирован. То есть любая переменная или выражение имеет определённый тип уже на момент компиляции, что упрощает выявление каких-либо проблем. Компилятор сам подсказывает программисту, где тот допускает ошибку, и не даёт её совершить.
Объектно-ориентированность. Все библиотеки, написанные когда-либо для Java, — это классы, которые отвечают за функциональность языка. Любое приложение на Java — набор классов, описывающих разные объекты. Это хорошо, потому что позволяет создавать сложные программы, но простые в поддержке. И в целом Java — мультипарадигменный язык, то есть поддерживает множество принципов программирования, что позволяет эффективно решать разные задачи.
Гибкость. На Java можно разработать программу любой сложности: интернет-магазин, банковские приложения, высоконагруженные системы и даже искусственный интеллект.
Всё это делает Java отличным языком для новичков в программировании.
Сайты на Java: плюсы и минусы
Слово Java знакомо всем, даже тем, кто не увлекается высокими технологиями. Действительно, Java считается одним из первых языков программирования, который начали использовать в 1995 году. Быстро став популярной, уже на протяжение 25 лет платформа не теряет свои лидирующие позиции, уступая только Python и Go.
Особенности языка программирования Java
Java ориентирован на объекты, характеризуется строгой типизацией. Это универсальная программная платформа, при помощи которой разрабатывают настольные и сетевые, а также мобильные приложения. Ее применяют для сайтов правительства, научных проектов, технологий Apache Storm, Hadoop. Приложения Android также работают на Java. Указывая, что пишут на Java, обязательно следует упомянуть компьютерные игры, десктопный софт, масштабные бизнес-проекты.
Несмотря на развитие вычислительных технологий и появление достойных конкурентов, программирование на Java продолжается. Такой спрос обусловлен тем, что платформу создали еще до момента массового появления смартфонов. Поэтому ее использовали при программировании первых мобильных устройств и запуске первых приложений в 2000-х гг.
Java разработали программисты Sun Microsystems, которые пытались придумать улучшенную версию С++. Должна была получиться независимая от определенной платформы система, с автоматическим управлением памятью, с которой было бы удобно работать новичкам. В результате был создан полностью обновленный язык программирования, получивший название Java, который сегодня перешел от Sun Microsystems к Oracle.
Создатели своей цели достигли: платформу используют всегда и везде. Программисты, создающие софт и сайты на Java, получают полезные инструменты:
Плюсы и минусы программирования на Java
Положительные стороны и недостатки присутствуют у всех языков программирования. С их учетом специалисты выбирают подходящий язык для реализации определенных задач. Java больше не является единственным выбором для Android и стандартным выбором для веб-программирования, но не утрачивает своих позиций.
Поговорим о плюсах и минусах испытанной годами платформы с оригинальным фирменным знаком, представляющим собой чашку с ароматным кофе. Кстати, название, как и сам логотип, происходит от известного сорта кофейного напитка.
Язык программирования Java популярен благодаря нескольким важным достоинствам:
При множестве плюсов язык программирования Java имеет некоторые минусы:
Примеры сайтов на Java
О преимуществах и недостатках сайтов на Java можно говорить очень долго, но согласно статистике по использованию фреймворков и языков на серверной части, платформа входит в первую пятерку. Чаще на платформе создаются порталы больших корпораций и высоконагруженные сайты. Пользуясь большинством из них, мы даже не подозреваем, что они созданы именно на Java.
Java выбирают благодаря высокой надежности, стабильности, жестким стандартам и спецификациям. Ниже представим самые известные сайты на Java:
Java долгие годы остается одной из самых используемых платформ и точно не утратит своих позиций в ближайшее время. Удобная платформа прекрасно подходит для начинающих. Ее использует более 9 млн человек на 3 млрд устройств. Даже несмотря на небольшие минусы, благодаря высокой надежности, гибкости, возможности управления памятью в автоматическом режиме и другим вышеперечисленным преимуществам еще не скоро будет разработан язык программирования, похожий на Java, который займет его место.
☕ Что пишут на Java: области применения
Преимущества Java, как языка программирования
В подготовке данного материала нас поддержал Факультета Java-разработки онлайн-университета GeekBrains. Подробно о плюсах работы с Java мы уже рассказали в статье «Преимущества языка программирования Java». В этот раз поговорим о том, как эти преиущества влияют на использование языка на практике.
Главная черта Java – адаптивность. Программное обеспечение, написанное на одной платформе, запустится и на других устройствах. Программы Java работают на Java Virtual Machine, предоставляющей оптимизацию кода и управление памятью. Java также обеспечивает масштабируемость – одновременную обработку нескольких запросов и многопоточное выполнение программы. Все эти возможности языка, конечно, учитываются разработчиками.
Сферы применения языка Java
Java используется во многих сферах начиная с e-commerce веб-сайтов и заканчивая приложениями для Android, в научных исследованиях и финансах, играх вроде Minecraft и настольных приложениях Eclipse, Netbeans и IntelliJ.
Мобильные приложения Android
Java Micro Edition – это популярная кроссплатформенная среда, применяемая для создания приложений смартфонов. Примеры мобильных приложений, написанных на Java: Netflix, Tinder, Google Earth, Uber и т. д.
Игры на Java
Сайт Java-Gaming.org полностью посвящен созданию игр на Java. Библиотека LWJGL значительно упрощает этот процесс. Примеры написанных на Java игр перечислены в статье 38 лучших приложений (англ.).
Серверные финансовые приложения
Глобальные инвестиционные банки Goldman Sachs, Citigroup, Barclays, Standard Charted используют Java для написания фронт и бэк-офисов систем электронной торговли, систем расчетов и подтверждения транзакций, обработки данных и т. д.
Веб-приложения на Java
Из представленной ниже таблицы следует, что Java – самый популярный серверный язык среди ведущих технологических компаний. В сравнении с другими языками программирования, Java обладает лучшей безопасностью, адаптируемостью и масштабируемостью приложений.
Таблица, иллюстрирующая использование языков программирования в крупных технологических компаниях (источник)
На Java создано множество opensource-инструментов для мониторинга и обновления данных. К примеру, Netflix использует Java одновременно для разработки инфраструктуры на Linux и кодирования видео на Windows-машинах. Веб-приложения электронной коммерции применяют Java на таких платформах, как Broadleaf.
Программы для сопровождение кода
Инструментальное программное обеспечение – это набор компьютерных программ, которые разработчики используют для программирования, анализа, обслуживания, отладки и поддержки других программ и приложений. Примеры: Eclipse, IntelliJ Idea и IDE NetBeans.
Встраиваемые системы на Java
Встроенные модули Java предоставляют различные способы взаимодействия с сервером, а архитектура модели безопасности песочницы обеспечивает высокий уровень защиты данных. Модули Cinterion Java успешно используются в среде межмашинного взаимодействия ( M2M- machine to machine), включая умные счетчики, системы управления автопарком, промышленной автоматизации и мобильного здравоохранения.
Технологии больших данных
Большие данные – одна из самых популярных тем в мире новейших технологий. Автоматическая сборка мусора и надежное управление памятью делают Java одним из приоритетных языком для реализации алгоритмов машинного обучения. Многие известные средства обработки больших данных (Hadoop, Spark, Mahout) являются Java-фреймворками.
Примеры использования Java в крупных корпорациях
Square
Компания Square помогает продавцам превращать мобильные устройства в платежные системы. Программное обеспечение Square построено с применением Ruby и C++, но стек обработки денежных транзакций основан на Java.
Hadoop
Для Twitter нет ничего важнее масштабируемости. Приложением пользуются более 500 млн человек. Проект начинался, как демонстрация того, на что способен фреймворк Ruby on Rails. К сожалению, со временем стало понятно, что RoR плохо справляется с обработкой большого числа запросов данных в реальном времени, поиском по определенной теме или хештегам. Одним из преимуществ Java является масштабируемость – это послужило одной из главных причин перехода с Ruby на Java.
Заключение
Учебная программа охватывает все необходимые темы: синтаксис Java, объектно-ориентированное программирование, базы данных и т. д. Вы подробно изучите основы Java, фреймворки Spring и LibGDX, интеграцию платежных систем. Для практики навыков вы разработаете пять проектов:
Все эти проекты послужат отличным дополнением к портфолио для подачи заявки на работу. Онлайн-университет также поможет с трудоустройством.
Эволюция создания веб-приложений на Java
История развития построения веб-приложений на языке программирования Java с примерами их использования на временном промежутке от появления спецификации сервлетов до сегодняшнего дня.
Статья не претендует на академическую полноту и точность. Интерпретация всех изложенных фактов и приведённые примеры отражают исключительно знания, точку зрения и заблуждения автора статьи. Целью написания является попытка получения целостной картины имеющегося текущего положения для веб-приложений на Java. Кроме того, изложенная информация может быть использована читателем в качестве отправной точки для дальнейших самостоятельных исследований.
Код примеров находится в репозиториях на GitHub: демонстрация каждой библиотеки и фреймворка и приложение из завершающей части статьи. На момент написания статьи в первом репозитории 37 примеров, со временем их список будет пополняться.
Хронология появления технологий, библиотек, фреймворков и их популярность
Для более лёгкого восприятия данные сведены в таблицу и дополнительно далее проиллюстрированы диаграммами. Элементы таблицы условно объединены в группы, если это возможно. Библиотеки и фреймворки упорядочены по популярности в порядке убывания.
Информация о популярности взята из двух источников. Первым источником является индекс популярности веб-фреймворков RebelLabs компании ZeroTurnaround. Последнее его обновление было в конце 2017 года и сопровождалось двумя блогпостами до этого: первый и второй. Автор второго блогпоста, Simon Maple, перешёл в компанию Snyk, продолжив заниматься сбором и анализом подобной полезной статистики. Вторым источником является его исследование, опубликованное в журнале Java Magazine, November/December 2018 (вопрос 17).
В начало таблицы добавлен набор спецификаций, в конец таблицы — невошедшие в индекс популярности фреймворки, но которые всё же хотелось упомянуть.
№ | Технология, библиотека, фреймворк | Дата первой версии | Дата последней стабильной версии | Популярность, % | ||
---|---|---|---|---|---|---|
Тип | Подтип | RebelLabs, 2017 | Java Magazine, 2018 | |||
1 | Спецификация | Servlet | 12.1996 | 10.09.2019 | ||
2 | JSP | 27.09.1999 | 10.09.2019 | |||
3 | J2EE, Java EE, Jakarta EE | 12.12.1999 | 10.09.2019 | |||
4 | JAX-WS | 28.10.2003 | 10.09.2019 | |||
5 | JSF | 11.03.2004 | 10.09.2019 | |||
6 | JAX-RS | 08.09.2008 | 10.09.2019 | |||
7 | Spring | Spring MVC | 12.2005 | 02.08.2019 | 28,82 | 36 |
8 | Spring Boot | 04.2014 | 02.08.2019 | 13,35 | 40 | |
9 | Spring WebFlux | 09.2017 | 02.08.2019 | |||
10 | JavaServer Faces | Eclipse Mojarra | 03.03.2004 | 30.11.2018 | 15,2 | 19 |
11 | Apache MyFaces | 11.2005 | 23.05.2019 | |||
12 | Google Web Toolkit | 16.05.2006 | 19.10.2017 | 7,74 | 6 | |
13 | Grails | 10.2005 | 11.07.2019 | 6,35 | 3 | |
14 | Struts | 05.2000 | 09.01.2019 | 5,4 | 9 | |
15 | Dropwizard | 21.12.2011 | 07.08.2019 | 4,9 | 3 | |
16 | Play | 05.2008 | 19.06.2019 | 3,26 | 3 | |
17 | JHipster | 21.10.2013 | 20.09.2019 | 2,49 | 3 | |
18 | JAX-RS | Apache CXF | 04.2008 | 13.08.2019 | 2,44 | |
19 | RESTEasy | 09.2008 | 30.08.2019 | |||
20 | Jersey | 05.2010 | 10.09.2019 | |||
21 | Restlet | 01.2013 | 01.2018 | |||
22 | Vaadin | 2006 | 16.09.2019 | 2,15 | 5 | |
23 | Seam | 2007 | 25.07.2013 | 1,94 | ||
24 | Wicket | 06.2005 | 09.09.2019 | 1,91 | 2 | |
25 | Tapestry | 2000 | 06.09.2019 | 1,9 | ||
26 | Spark Java | 2011 | 22.05.2019 | 0,77 | ||
27 | Vert.x | 2011 | 22.08.2019 | 0,76 | ||
28 | Rapidoid | 08.2014 | 27.05.2018 | 0,25 | ||
29 | Lagom | 03.2016 | 04.09.2019 | 0,24 | ||
30 | Ratpack | 2013 | 18.08.2019 | 0,13 | ||
31 | Javalin | 24.05.2017 | 11.08.2019 | |||
32 | Micronaut | 23.10.2018 | 13.09.2019 | |||
33 | MicroProfile | TomEE | 27.04.2012 | 21.06.2019 | ||
34 | Hammock | 27.02.2014 | 05.03.2018 | |||
35 | Thorntail | 01.2016 | 17.07.2019 | |||
36 | KumuluzEE | 04.04.2016 | 29.06.2019 | |||
37 | Payara Micro | 07.2017 | 28.08.2019 | |||
38 | Open Liberty | 19.09.2017 | 06.09.2019 | |||
39 | Helidon | 19.09.2018 | 13.09.2019 |
На первой временной шкале данные из таблицы приведены в том же порядке, что и в таблице. Имеющиеся группы расположены по степени популярности. В группах (спецификация, Spring, JSF, JAX-RS, MicroProfile) элементы упорядочены в хронологическом порядке их появления. На любую из картинок можно щёлкнуть для её увеличения.
На второй временной шкале та же самая информация упорядочена по дате появления первой версии всех элементов. Легко увидеть, что в 2001 году, например, для написании веб-приложения можно было выбрать только из двух существующих основных фреймворков — Tapestry и Struts. В начале 2014 года никак невозможно было использовать Spring Boot (его первая официальная версия вышла позже) и уже не имело смысла использовать Seam (он прекратил существование).
Круговая диаграмма показывает индекс популярности фреймворка по данным RebelLabs на конец 2017 года. Каждый из фреймворков в индексе участвует один раз, то есть общая сумма процентов составляет 100. На второй диаграмме демонстрируется результат исследования из Java Magazine, 2018. В исследовании задавался вопрос, какие веб-фреймворки используются, разрешалось выбрать более одного в ответе. По этой причине каждый процентный показатель независим от другого и их нельзя суммировать.
Спецификации
Краеугольный камень существования всех библиотек — стандарты и спецификации, на которых они базируются. Спецификации существуют в виде Java Specification Requests (JSR), разрабатываемых в ходе формальной процедуры, называемой Java Community Process (JCP).
Список JSR, относящихся к Java Enterprise Edition, находится здесь. Ниже в таблице представлены выбранные из них только две наиболее значимые спецификации — Servlet и Java EE (последняя является набором из других спецификаций). Первые версии спецификаций принимались не в рамках JCP, поэтому они не имеют номеров JSR.
С 12 сентября 2017 года Java EE передана под управление Eclipse Foundation и в настоящее время именуется Jakarta EE. На смену JCP в качестве процесса разработки и принятия спецификаций пришёл Jakarta EE Specification Process.
Номер JSR | Наименование | Кратко | Дата выпуска |
---|---|---|---|
— | Servlet 1.0 | 12.1996 | |
— | Servlet 2.0 | 12.1997 | |
— | Java Servlet API Specification 2.1a | Servlet 2.1 | 11.1998 |
— | Java Servlet API Specification 2.2 | Servlet 2.2 | 12.1999 |
— | J2EE 1.2 Documentation | J2EE 1.2 | 12.1999 |
902 | Java Servlet API Specification, Version 2.2, Errata Sheet, 4/1/2000 | Servlet 2.2 | 05.2000 |
903 | Java Servlet API Specification, Version 2.2, Errata Sheet, 4/27/2000 | Servlet 2.2 | 06.2000 |
53 | Java Servlet 2.3 and JavaServer Pages 1.2 Specifications | Servlet 2.3, JSP 1.2 | 06.2002 |
58 | Java 2 Platform, Enterprise Edition 1.3 Specification | J2EE 1.3 | 09.2001 |
151 | Java 2 Platform, Enterprise Edition 1.4 (J2EE 1.4) Specification | J2EE 1.4 | 04.2004 |
154 | Java Servlet 2.4 Specification | Servlet 2.4, 2.5 | 09.2007 |
244 | Java Platform, Enterprise Edition 5 (Java EE 5) Specification | Java EE 5 | 05.2006 |
315 | Java Servlet 3.0 Specification | Servlet 3.0 | 03.2011 |
316 | Java Platform, Enterprise Edition 6 (Java EE 6) Specification | Java EE 6 | 12.2009 |
340 | Java Servlet 3.1 Specification | Servlet 3.1 | 05.2013 |
342 | Java Platform, Enterprise Edition 7 (Java EE 7) Specification | Java EE 7 | 07.2015 |
366 | Java Platform, Enterprise Edition 8 (Java EE 8) Specification | Java EE 8 | 09.2017 |
369 | Java Servlet 4.0 Specification | Servlet 4.0 | 09.2017 |
— | Jakarta EE Platform 8 Specification | Jakarta EE 8 | 09.2019 |
— | Jakarta Servlet 4.0 Specification | Servlet 4.0 | 09.2019 |
Использование HTTP-сервлетов
Далее несколько примеров создания веб-приложения без каких-либо библиотек или фреймворков. Будут последовательно даваться ссылки на расположение кода с кратким комментарием. Подобных способов больше, продемонстрированы наиболее очевидные из них.
В первом примере (модуль helloworld-web-servlet-xml) в дескрипторе развёртывания (deployment descriptor) web.xml указан класс, унаследованный от абстрактного класса HttpServlet со своей реализацией метода doGet(). Впервые файл web.xml дескриптора развёртывания был упомянут в спецификации Servlet 2.2 (1999 год).
Во втором примере (модуль helloworld-web-servlet-annotation) файл дескриптора развёртывания web.xml отсутствует. Над тем же классом-наследником от абстрактного класса HttpServlet присутствует аннотация WebServlet, появившаяся в Servlet 3.0 (2011 год).
В Servlet 3.0 также появились асинхронные сервлеты, в Servlet 3.1 (2013 год) — неблокирующий ввод-вывод, в Servlet 4.0 (2017 год) — поддержка HTTP/2.
Эпоха до появления Spring
Apache Tapestry — настоящий долгожитель среди фреймворков для построения веб-приложений. Его первая версия была выпущена в 2000 году, новые версии продолжают выходить и сейчас. При проектировании Tapestry были позаимствованы идеи из WebObjects, веб-фреймворка, появившегося несколькими годами до этого. В приложениях с применением Tapestry (пример — в модуле helloworld-web-tapestry) используется модульная архитектура и связывание (binding) компонентов пользовательского интерфейса веб-страниц с соответствующими им Java-классами.
В марте 2004 года вышла спецификация JavaServer Faces и последовательно две её реализации: сейчас называющаяся Eclipse Mojarra (предыдущие названия — Sun JSF Reference Implementation, JSF RI, Mojarra, Oracle Mojarra) и Apache MyFaces. Основным подходом, подкреплённым спецификацией, является использование компонентов. Оба примера (модули helloworld-web-jsf-mojarra и helloworld-web-jsf-myfaces) абсолютно идентичны друг другу, за исключением библиотек-зависимостей. Приложения определяют и отображают на веб-страницах версию реализации спецификации JSF, наименование реализации (Mojarra или MyFaces) и версию реализации.
Июнь 2005 и выход первой версии фреймворка Wicket, идеологически похожего на Tapestry и JavaServer Faces. Компоненто-ориентированный подход и связывание HTML-шаблонов веб-страниц с Java-классами. С июня 2007 года фреймворк относится к Apache Software Foundation, сменив название на Apache Wicket. Пик популярности фреймворка пришёлся примерно на 2008-2009 годы, затем последовал постепенный спад интереса к нему. Новые версии продолжают выходить, пример приложения можно увидеть в модуле helloworld-web-wicket.
В октябре 2005 года вышла первая версия Grails, фреймворка для построения веб-приложений, написанного на JVM-языке Groovy. Как следует и из названия продукта, на его создание оказал сильное влияние Ruby on Rails — фреймворк, написанный на языке Ruby. Также основан на шаблоне MVC. Отличительной особенностью является использование в качестве шаблонов файлов представления GSP (Groovy Server Pages). Пример (модуль helloworld-web-grails) создан, собирается и может быть запущен с помощью Grails Maven Plugin, плагина для Maven.
Spring MVC, Spring Boot и Spring WebFlux
Первая версия Spring Framework, включающая Spring MVC, появилась в декабре 2005 года. Классом HTTP-сервлета в нём служит DispatcherServlet. Далее приводятся несколько примеров в хронологическом порядке появления возможностей (новых версий спецификации Servlet, выпуска сначала Spring Boot в апреле 2014 года, потом — Spring WebFlux в сентябре 2017 года), которые в них использованы.
В первом примере (модуль helloworld-web-spring-mvc-xml) в файле дескриптора развёртывания web.xml указан в качестве сервлета DispatcherServlet. В контроллере с единственным методом, обрабатывающим GET-запрос, присутствуют соответствующие аннотации (Controller и RequestMapping). Представлением (view) служит JSP-файл.
Во втором примере (модуль helloworld-web-spring-mvc-java) файл дескриптора развёртывания web.xml отсутствует и используется возможность, появившаяся в Servlet 3.0, выполнять конфигурирование программно. Совместно применяется класс, унаследованный от AbstractAnnotationConfigDispatcherServletInitializer (в конечном итоге задействуется реализация интерфейса ServletContainerInitializer с SPI), и JavaConfig (конфигурация с помощью программного кода с аннотацией Configuration).
В третьем примере (модуль helloworld-web-spring-boot-mvc) демонстрируется значительное упрощение проекта при сохранении той же функциональности благодаря появлению Spring Boot. Кроме класса контроллера дополнительно существует лишь один класс, унаследованный от SpringBootServletInitializer и аннотированный SpringBootApplication.
Четвёртый пример (модуль helloworld-web-spring-boot-webflux) показывает вместе со Spring Boot применение Spring WebFlux, добавленного в Spring Framework относительно недавно. Spring WebFlux использует реактивные принципы и Project Reactor. Из двух основных подходов (функциональный стиль и основанный на аннотациях) в примере участвует первый.
После появления Spring, 2000-е годы
Разработка Vaadin началась в 2002 году в виде дополнения к другому фреймворку, Millstone 3. В течение 2006 года созданное было оформлено в виде законченного коммерческого продукта. До мая 2009 года имел наименование IT Mill Toolkit, только после этого момента став Vaadin. В конце 2007 года его ранее самостоятельно реализованная клиентская часть была заменена на Google Web Toolkit (GWT). В примере (модуль helloworld-web-vaadin) видно, что имеется лишь один файл Java-класса, в котором программно создаются все компоненты пользовательского интерфейса, скрывая при этом низкоуровневые технические подробности.
Весьма интересный продукт, Google Web Toolkit (GWT), появился в мае 2006 года, последняя версия вышла два года назад. Для написания серверной и клиентской части предоставляется возможность использовать один и тот же язык Java. Специальный компилятор преобразует клиентский код на Java в JavaScript. Пример состоит из трёх модулей — helloworld-web-gwt-client (клиентская часть), helloworld-web-gwt-server (серверная часть) и helloworld-web-gwt-shared (код, общий для клиентской и серверной частей). При разработке можно с помощью удобного плагина для Maven запускать клиентскую часть в режиме Super Dev Mode, в котором так называемый Code Server позволяет легко перекомпилировать изменившийся Java-код.
Seam начал свою жизнь в мае 2007 года и прекратил существование в 2012 году. Был основан на Enterprise JavaBeans (EJB3) и JavaServer Faces (JSF). Разрабатывался компанией JBoss, бывшей тогда уже частью Red Hat. Предлагал различные любопытные концепции (например, bijection, для которой существовали соответствующие аннотации). Сайт фреймворка всё ещё существует, но в некоторых его разделах какие-то ссылки уже не являются актуальными. Пример приложения находится в модуле helloworld-web-seam.
Первый вариант спецификации Java API for RESTful Web Services (JAX-RS) вышел в 2008 году (JSR 311), позднее спецификация обновлялась (JSR 339, JSR 370). Наиболее популярные реализации JAX-RS — фреймворки Apache CXF (первая версия — апрель 2008 года), RESTEasy (сентябрь 2008 года), Jersey (май 2010 года) и Restlet (январь 2013 года). Примеры их использования находятся, соответственно, в модулях helloworld-web-jaxrs-apache-cxf, helloworld-web-jaxrs-resteasy, helloworld-web-jaxrs-jersey и helloworld-web-jaxrs-restlet.
Play Framework появился в мае 2008 года. Написан на JVM-языке программирования Scala. Позволяет создавать веб-приложения на его основе как на Scala, так и на Java. Своеобразной особенностью разработчиков Play является приверженность инструменту сборки sbt. По этой причине для написания примера (модуль helloworld-web-play) пришлось приложить некоторые усилия для сборки под Maven, применив для этого соответствующий плагин.
2010-е годы, новейшее время
В 2011 году была выпущена первая версия чудесного микрофреймворка Spark, появившегося под влиянием Sinatra, написанного на Ruby. Ему присущи лаконичность, легковесность и минимализм синтаксиса. Пример (модуль helloworld-web-sparkjava) демонстрирует, как буквально в пару строчек можно написать полноценное приложение. Возможностей фреймворка вполне может хватить, если не требуется чего-то слишком сложного в своём приложении.
В 2011 году появился Vert.x, событийно-ориентированный фреймворк, работающий на JVM. Написан под значительным влиянием Node.js, первоначально назывался Node.x. Имеет многоязычную природу, позволяя при применении фреймворка использовать Java, JavaScript, Groovy, Ruby, Ceylon, Scala или Kotlin. Основан на библиотеке Netty, обладает множеством отличительных особенностей и достоинств. Пример находится в модуле helloworld-web-vertx.
Декабрь 2011 года стал начальным временем для существования Dropwizard, авторы которого позиционируют свой продукт как нечто промежуточное между библиотекой и фреймворком. Три основные части, из которых он состоит — это библиотеки Jetty (HTTP), Jersey (JAX-RS) и Jackson (JSON). Продолжает развиваться и в настоящее время, имея даже некоторую популярность. Пример (модуль helloworld-web-dropwizard) показывает типичную структуру веб-приложения на основе Dropwizard.
Ratpack — ещё один фреймворк (кроме Spark), вдохновлённый библиотекой Sinatra и написанный, в значительной степени, на JVM-языке Groovy. В названии обыграна связь Фрэнка Синатры с т.н. крысиной стаей («rat pack»). Первая версия фреймворка была выпущена в 2013 году, новые версии продолжают выходить. Основан на библиотеке Netty, быстрый, минималистичный, простой в использовании, хорошо масштабируемый. Пример можно увидеть в модуле helloworld-web-ratpack.
Октябрь 2013, появление любопытного проекта JHipster, генератора каркаса веб-приложений. Для построения клиентской части поддерживается JavaScript-фреймворки Angular, React и Vue (последний поддерживается пока в экспериментальном режиме). Основой серверной части служит Spring Boot. Для сборки проекта может быть выбран Maven или Gradle. Пример сгенерированного с помощью JHipster приложения находится в модуле helloworld-web-jhipster.
В августе 2014 года вышла первая версия фреймворка Rapidoid, простого, быстрого и модульного. Рекомендуемый модуль, с которого использование фреймворка рекомендуется начать, включает взаимодействие по HTTP, библиотеки Hibernate, Hibernate Validator, MySQL Connector и Logback. При возрастании потребностей используемый набор модулей может быть расширен. Пример (модуль helloworld-web-rapidoid) позволяет оценить минимализм кода, требуемый для получения простого веб-приложения.
Март 2016, выход фреймворка Lagom. Авторы данного программного продукта позиционируют его применение для разбиения старых монолитных приложений на реактивные микросервисы, хорошо масштабирующиеся при их эксплуатации. Фреймворк основан на Akka и Play Framework. Для разработки своих приложений могут быть использованы языки программирования Java или Scala. Пример на основе Lagom находится в модулях helloworld-web-lagom-api и helloworld-web-lagom-impl.
Уже совсем недавнее время, в мае 2017 года выходит легковесная и простая библиотека Javalin. Её создатели сами указывают в благодарностях авторов уже упоминавшихся фреймворков Sinatra и Spark. Библиотека ориентирована на языки Java и Kotlin. Гарантирует отсутствие аннотаций и необходимости наследования каких-либо классов библиотеки, как можно более лаконичный код, поддержку WebSocket, HTTP/2 и асинхронных запросов. Пример на её основе можно увидеть в модуле helloworld-web-javalin.
Восходящая звезда среди веб-фреймворков, первая версия для которой появилась всего год назад, в октябре 2018 года, — Micronaut. Поддерживает JVM-языки программирования Java, Groovy и Kotlin. Существенное его преимущество — быстрый старт приложений на его основе и малое потребление памяти. Это обеспечивается внедрением зависимостей на этапе компиляции, а не во время исполнения. Ещё одна из особенностей — отличная поддержка реактивного программирования, возможно использование библиотек RxJava, Reactor и Akka. Пример (модуль helloworld-web-micronaut) демонстрирует построение простого приложения на основе Micronaut.
MicroProfile
Из-за существующей тяжеловесности Java EE у ряда компаний появилась потребность для реализации микросервисов разработать легковесный набор спецификаций, что и было сделано — в сентябре 2016 года увидел свет MicroProfile 1.0. Первоначально набор включал лишь три спецификации (CDI, JAX-RS и JSON-P). Постепенно потребности возрастали, к версии 3.0 список спецификаций значительно вырос.
№ | Спецификация | Версия MicroProfile | ||||||||
---|---|---|---|---|---|---|---|---|---|---|
1.0 | 1.1 | 1.2 | 1.3 | 1.4 | 2.0 | 2.1 | 2.2 | 3.0 | ||
1 | CDI | 1.2 | 1.2 | 1.2 | 1.2 | 1.2 | 2.0 | 2.0 | 2.0 | 2.0 |
2 | Config | 1.0 | 1.1 | 1.2 | 1.3 | 1.3 | 1.3 | 1.3 | 1.3 | |
3 | Fault Tolerance | 1.0 | 1.0 | 1.1 | 1.1 | 1.1 | 2.0 | 2.0 | ||
4 | Health | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 2.0 | ||
5 | JAX-RS | 2.0 | 2.0 | 2.0 | 2.0 | 2.0 | 2.1 | 2.1 | 2.1 | 2.1 |
6 | JSON-B | 1.0 | 1.0 | 1.0 | 1.0 | |||||
7 | JSON-P | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.1 | 1.1 | 1.1 | 1.1 |
8 | JWT Auth | 1.0 | 1.0 | 1.1 | 1.1 | 1.1 | 1.1 | 1.1 | ||
9 | Metrics | 1.0 | 1.1 | 1.1 | 1.1 | 1.1 | 1.1 | 2.0 | ||
10 | Open API | 1.0 | 1.0 | 1.0 | 1.0 | 1.1 | 1.1 | |||
11 | Open Tracing | 1.0 | 1.1 | 1.1 | 1.2 | 1.3 | 1.3 | |||
12 | Type Safe Rest Client | 1.0 | 1.1 | 1.1 | 1.1 | 1.2 | 1.3 |
№ | Фреймворк | Версия MicroProfile | ||||||||
---|---|---|---|---|---|---|---|---|---|---|
1.0 | 1.1 | 1.2 | 1.3 | 1.4 | 2.0 | 2.1 | 2.2 | 3.0 | ||
1 | TomEE | 7.1.0 | 8.0.0-M1 | 8.0.0-M2 | 8.0.0-M3 | |||||
2 | Hammock | 2.0 | ||||||||
3 | Thorntail | 2.1.0. Final | 2.3.0. Final | 2.4.0. Final | 2.5.0. Final | |||||
4 | KumuluzEE | 2.1.0 | 2.5.2 | 3.0.0 | 3.2.0 | 3.2.0 | 3.2.0 | 3.2.0 | 3.5.0 | |
5 | Payara Micro | 174 | 181 | 182 | 183 | 183 | 191 | 192 | ||
6 | Open Liberty | 17.0. 0.3 | 18.0. 0.1 | 18.0. 0.3 | 18.0. 0.3 | 18.0. 0.4 | 19.0. 0.3 | 19.0. 0.7 | ||
7 | Helidon | 0.9.4 | 1.0 | 1.2.0 | 1.2.0 | 1.2.0 | 1.2.0 | 1.2.0 |
К первой группе фреймворков относятся те, которые уже существовали на момент выхода MicroProfile 1.0: TomEE (время выпуска первой версии — апрель 2012), Hammock (февраль 2014), Thorntail (ранее называвшийся WildFly Swarm, январь 2016) и KumuluzEE (апрель 2016). Наиболее часто соответствие новому набору спецификаций достигалось для них исключением из существующего продукта всего лишнего. Примеры использования находятся в модулях helloworld-web-microprofile-tomee, helloworld-web-microprofile-hammock, helloworld-web-microprofile-thorntail и helloworld-web-microprofile-kumuluzee.
Во вторую группу фреймворков входят появившиеся позднее выхода первой версии MicroProfile: Payara Micro (июль 2017), Open Liberty (сентябрь 2017) и Helidon (сентябрь 2018). Для данных фреймворков становилось возможным обратное — с самого начала реализации, например, Helidon разрабатывался специально для соответствия MicroProfile, поэтому не имеет в своём составе ничего лишнего. Примеры построения приложений можно видеть в модулях helloworld-web-microprofile-payara, helloworld-web-microprofile-openliberty и helloworld-web-microprofile-helidon.
Сервлет-контейнеры и серверы приложений
№ | Сервлет-контейнер, серверы приложений | Дата первой версии | Дата последней стабильной версии | Популярность, % | |
---|---|---|---|---|---|
Семейство | Наименование | ||||
1 | Tomcat | Tomcat | 11.1998 | 17.08.2019 | 41 |
2 | TomEE | 04.2012 | 21.06.2019 | ||
3 | JBoss | JBoss EAP | 1999 | 22.01.2019 | 15 |
4 | WildFly | 1999 | 03.07.2019 | ||
5 | Jetty | 2000 | 14.08.2019 | 9 | |
6 | WebLogic Server | 11.1997 | 30.08.2017 | 6 | |
7 | WebSphere | WebSphere Application Server | 1998 | 02.04.2019 | 5 |
8 | Open Liberty | 09.2017 | 14.08.2019 | ||
9 | GlassFish | GlassFish Server | 06.06.2005 | 28.01.2019 | 5 |
10 | Payara Server | 31.10.2014 | 29.08.2019 |
Временная шкала показывает время жизни каждого из программных продуктов таблицы. Можно видеть последовательность их появления и время выпуска последних версий.
Всё чаще сейчас используется контейнеризация при развёртывании и публикации приложений, поэтому применение серверов приложений становится всё менее актуальным.
Использование в приложениях языков, отличных от Java
В последнее время наметилась тенденция создания гибридных приложений, в качестве одной из составных частей которых присутствует код на Java. В соответствии с тенденцией в журнале Java Magazine, основной темой которого был язык программирования Java, в колонке главного редактора в номере January/February 2017 было провозглашено «The Polyglot Future» и включение в зону интересов языка JavaScript.
В уже упомянутом выше исследовании в вопросе номер 16 интересовались, какие не JVM-языки используются в JVM-приложениях. Лидером (57%) стал JavaScript, применяемый во фронтенде. Учитывая тот факт, что часть веб-приложений не имеют GUI вовсе (сервисы, микросервисы, службы), можно с уверенностью сказать, что использование JavaScript-фреймворков для графического интерфейса в Java-приложениях носит массовый характер.
Пример типичного сегодняшнего Java-приложения
Для демонстрации типичного веб-приложения на Java с графическим интерфейсом была написана программа с эмуляцией базовых функциональных возможностей Twitter: аутентификация, управление учётными записями (создание, редактирование, удаление, поиск по подстроке), главная страница (свойства учётной записи, лента сообщений), создание твитов, подписаться/отписаться.
Бекенд написан с использованием Spring Boot, фронтенд — с помощью популярного JavaScript-фреймворка Angular. В Java-части приложения максимально представлены составные части семейства Spring: Spring MVC, Spring Boot, Spring Security, Spring Test, Spring Boot Admin. REST API бекенда визуализируется с помощью Swagger.
Для тестирования применяются совершенно обычные для подобного приложения JUnit, Spring Test, Mockito, TestContainers (unit- и интеграционное тестирование Java-части) и Jasmine с Protractor (unit- и end-to-end-тестирование для JavaScript и Angular).
Аналогичную архитектуру и набор использованных фреймворков (Spring Boot и Angular) имеет игра Угадай спикера, упоминавшаяся в недавнем обзоре конференции TechTrain 2019.
Выводы
Процессы развития как языка программирования Java, так и построения с его помощью веб-приложений, продолжаются. Можно и нужно внимательно наблюдать за ними, не забывая последовательности событий, спецификаций, библиотек и фреймворков, приведших к текущему положению вещей.
Код примеров и программ, упоминавшихся в статье, находится на GitHub: первый, второй и третий репозитории.
25-26 октября 2019 года в Санкт-Петербурге состоится конференция для Java-разработчиков Joker 2019, на которую до 1 октября можно дешевле купить билеты.
8-9 ноября 2019 года в Москве пройдёт конференция для JavaScript-разработчиков HolyJS 2019 Moscow, на которую до 1 октября тоже действуют скидки на покупку билетов.