Введение

В вычислительной технике Java Web Start (также известный как JavaWS, javaws или JAWS) — устаревший фреймворк, разработанный Sun Microsystems (ныне Oracle), который позволял пользователям запускать программное обеспечение для платформы Java непосредственно из Интернета с помощью веб-браузера. Эта технология обеспечивала автоматическое обновление версий для глобально распределённых приложений и более гибкое управление выделением памяти виртуальной машине Java. Java Web Start поставлялся в составе платформы Java до удаления в Java SE 11, после того как был объявлен устаревшим в Java SE 9. Oracle не включил код Java Web Start в OpenJDK, поэтому OpenJDK изначально не поддерживал его. IcedTea Web предоставляет независимую реализацию Java Web Start с открытым исходным кодом, которая в настоящее время разрабатывается сообществом AdoptOpenJDK, RedHat и Karakun AG и поставляется с некоторыми установщиками OpenJDK. Кроме того, OpenWebStart предоставляет реализацию с открытым исходным кодом, основанную на IcedTea Web, но предлагающую больше возможностей и варианты коммерческой поддержки.

Функциональность

В отличие от Java-апплетов, приложения Web Start не запускаются внутри браузера. По умолчанию они работают в той же "песочнице", что и апплеты, с несколькими незначительными расширениями, например, возможностью загружать и сохранять файл, явно выбранный пользователем через диалоговое окно выбора файла. Дополнительные разрешения могут быть настроены только для подписанных приложений. Web Start имеет преимущество перед апплетами, поскольку решает многие проблемы совместимости с Java-плагинами браузеров и различными версиями JVM. Программы Web Start больше не являются интегрированной частью веб-страницы, а представляют собой независимые приложения, работающие в отдельном окне. Web Start также может запускать немодифицированные апплеты, упакованные в JAR-файлы, путем создания соответствующего JNLP-файла. Этот файл также может передавать параметры апплету. Такие апплеты также запускаются в отдельном окне. Механизм запуска апплетов может не поддерживать некоторые специфические случаи, например, загрузку класса как ресурса. Как и апплеты, Java Web Start является кроссплатформенным.

Оскорбление

С JDK9 Oracle объявила устаревшими несколько технологий развертывания, включая апплеты и Java Web Start. В марте 2018 года Oracle сообщила, что Java Web Start не будет включен в Java SE 11 (18.9 LTS) и последующие версии. Разработчикам потребуется перейти на другие технологии развертывания. После этого появилось несколько автономных альтернатив.

Реализация

Разработчик подготавливает специальный XML-файл с расширением JNLP. Этот файл описывает требования к приложению, местоположение кода, параметры и дополнительные разрешения (при наличии). Браузер загружает этот файл как любой другой и (определяя его MIME-тип, application/x-java-jnlp-file) открывает его с помощью инструмента Web Start. Инструмент Web Start загружает все необходимые ресурсы и запускает приложение. Java Web Start предоставляет набор классов в пакете javax.jnlp, которые обеспечивают различные сервисы для приложения. Компания Sun разработала большинство этих сервисов с целью обеспечения строго контролируемого доступа к ресурсам (таким как файлы и системный буфер обмена), ограничивая при этом приложение авторизованными операциями. Sun представила версию 1.0 Web Start в марте 2001 года, а поддержка 64-битных Windows была добавлена только в Java 6 (после того, как 64-битная Java стала впервые доступна). Начиная с J2SE 1.4, Web Start поставляется в составе Java Runtime Environment (JRE) под названием javaws, поэтому администраторам компьютеров больше не требуется устанавливать его отдельно.

Протокол запуска сети Java (JNLP)

Программисты часто используют термины "Протокол запуска Java по сети" (JNLP) и "Web Start" как взаимозаменяемые. Протокол JNLP, определенный с помощью XML-схемы, задает способ запуска приложений Java Web Start. JNLP представляет собой набор правил, определяющих реализацию механизма запуска. Файлы JNLP содержат информацию, такую как расположение файла пакета JAR и имя главного класса приложения, а также любые другие параметры программы. Правильно настроенный браузер передает файлы JNLP в среду выполнения Java (JRE), которая, в свою очередь, загружает приложение на компьютер пользователя и запускает его. Разработка JNLP велась в рамках Java Community Process как JSR 56. Важными возможностями Web Start являются автоматическая загрузка и установка JRE, если у пользователя не установлена Java, а также возможность для программистов указывать версию JRE, необходимую для выполнения программы. Пользователю не требуется постоянное подключение к Интернету для запуска загруженных программ, поскольку они выполняются из локального кэша. Обновления программного обеспечения загружаются из Интернета и становятся доступными при подключении пользователя к сети, что упрощает процесс развертывания. Любой пользователь компьютера может использовать JNLP, просто установив клиент JNLP (обычно Java Web Start). Установка может происходить автоматически: при первом запуске клиент загружает и устанавливает Java-приложение, что видно пользователю. JNLP работает аналогично HTTP/HTML для веб-сайтов. Для отображения HTML-страницы, после нажатия пользователем на веб-ссылку, браузер отправляет URL веб-серверу, который отвечает HTML-файлом. Затем браузер запрашивает ресурсы, на которые ссылается этот файл (изображения, CSS), и, наконец, отображает страницу после получения достаточного количества информации. Отображение страницы обычно начинается до полной загрузки всех ресурсов; некоторые ресурсы, некритичные для макета страницы (например, изображения), могут загружаться позже. JNLP повторяет этот процесс: так же, как веб-браузер отображает веб-страницу, клиент JNLP "отображает" Java-приложение. После нажатия пользователем на веб-ссылку браузер отправляет URL веб-серверу, который отвечает файлом JNLP (вместо HTML-файла) для приложения. Клиент JNLP анализирует этот файл, запрашивает указанные ресурсы (JAR-файлы), ожидает получения всех необходимых ресурсов и затем запускает приложение. Файл JNLP может указывать ресурсы как "ленивые", что сообщает клиенту JNLP, что приложение не нуждается в этих ресурсах для запуска, но может запросить их позже, при необходимости.

Комплект 200 компрессии

Для уменьшения размера приложений Java Web Start компания Sun Microsystems представила систему сжатия Pack200 в Java 1.5.0. Она способна сжать большой JAR-файл до одной девятой его первоначального размера, если он содержит только классы Java. Java Web Start поддерживает Pack200 с момента его появления, однако изначально для использования этой функции требовалось взаимодействие с сервером и определенные знания для настройки. С выходом Java SE 6u10 поддержка Pack200 стала доступна без необходимости специальной поддержки со стороны сервера. Разработчики приложений могут включать или отключать эту функцию в файлах JNLP. При использовании медленных соединений Pack200 обеспечивает повышение производительности при запуске приложения и сокращает время загрузки.

Подписанные приложения Web Start

По умолчанию, приложения Java Web Start запускаются в "ограниченном" режиме, что означает отсутствие доступа к некоторым системным ресурсам, например, к локальным файлам. Однако разработчики могут снять эти ограничения, подписав свои приложения Java Web Start с помощью утилиты jarsigner, входящей в состав JDK.

Альтернативы

Проект IcedTea с открытым исходным кодом предоставляет альтернативную реализацию JNLP в IcedTea Web. Начиная с версии 1.7.2, он также работает и на более новых версиях, даже без официальной поддержки JWS. Для запуска приложений, основанных на Java Web Start, после выпуска Java 11, компания Karakun AG выпустила инструмент OpenWebStart с открытым исходным кодом, основанный на IcedTea Web. Этот инструмент включает в себя всю функциональность IcedTea Web и добавляет расширенные возможности, такие как нативные установщики для Mac OS, Windows и Linux. IcedTea Web был создан при поддержке RedHat и AdoptOpenJDK.